# Query Funnel Report — Mixpanel (Service Account)

> Get conversion numbers for a funnel that has already been saved in the Mixpanel UI: step counts, conversion rates, and average time between steps. Note that Mixpanel has placed the Funnels Query API in maintenance mode and recommends…

- Key: `mixpanel_service_account-query-funnel-report`
- Type: Action (Read-only)
- Version: 0.0.1
- App: Mixpanel (Service Account) (`mixpanel_service_account`) — https://pipedream.com/apps/mixpanel-service-account.md
- This page (HTML): https://pipedream.com/apps/mixpanel-service-account/actions/query-funnel-report
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/mixpanel_service_account/actions/query-funnel-report/query-funnel-report.mjs

## Description

Get conversion numbers for a funnel that has already been saved in the Mixpanel UI: step counts, conversion rates, and average time between steps. Note that Mixpanel has placed the Funnels Query API in maintenance mode and recommends against new use of it - to build a new integration, save a Funnels report in the Mixpanel UI and read it with **Query Insights Report** instead. [See the documentation](https://docs.mixpanel.com/reference/funnels-query)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `funnelId` | `integer` | Yes | The numeric ID of the saved funnel to query, for example 7509. Use List Saved Funnels to find it. |
| `fromDate` | `string` | Yes | Start of the query window in YYYY-MM-DD format (for example, 2026-07-01). Inclusive, and interpreted in the project's timezone. |
| `toDate` | `string` | Yes | End of the query window in YYYY-MM-DD format (for example, 2026-07-29). Inclusive, and interpreted in the project's timezone. |
| `conversionWindowLength` | `integer` | No | How long a user has to finish the funnel after triggering its first step, counted in Conversion Window Unit. May not exceed 90 days. Defaults to whatever was saved with the funnel in the Mixpanel UI. |
| `conversionWindowUnit` | `string` | No | The unit that Conversion Window Length is counted in: second, minute, hour, or day. For example, day with a Conversion Window Length of 7 gives users a week to convert. Defaults to whatever was saved with the funnel in the Mixpanel UI. |
| `unit` | `string` | No | The unit that Interval is counted in: day, week, or month. For example, Unit week with an Interval of 4 gives four-week buckets. |
| `interval` | `integer` | No | How many Unit values each bucket in the returned series covers, for example 7. Defaults to 1. |
| `on` | `string` | No | A segmentation expression to break the results down by. Example: properties["$city"]. Use List Event Properties to discover property names. See the expression syntax |
| `where` | `string` | No | A segmentation expression that filters which events are counted. Example: properties["$browser"] == "Chrome". Use List Event Properties to discover property names and List Event Property Values to discover the values they take. See the expression syntax |
| `limit` | `integer` | No | The maximum number of segment values to return. Defaults to 255. Has no effect unless Segment On is set. |
| `workspaceId` | `integer` | No | The ID of the Data View to query. Only needed for projects that use Data Views; leave it empty otherwise. It is the segment after /view/ in a project URL such as https://mixpanel.com/project/1234/view/5678/app/boards. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "mixpanel_service_account",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "mixpanel_service_account-query-funnel-report",
  arguments: {
    funnelId: 10,
    fromDate: "From Date",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "mixpanel_service_account-query-funnel-report",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    mixpanel_service_account: { authProvisionId: "apn_xxxxxxx" },
    funnelId: 10,
    fromDate: "From Date",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "mixpanel_service_account-query-funnel-report",
    "configured_props": {
      "mixpanel_service_account": { "authProvisionId": "apn_xxxxxxx" },
      "funnelId": 10,
      "fromDate": "From Date"
    }
  }'
```

---

- App: https://pipedream.com/apps/mixpanel-service-account.md · All apps: https://pipedream.com/apps
