"Best analytics tool I've used in 14 years"

Get funnel analytics

GET https://datafa.st/api/v1/analytics/funnels/{funnelId}

Return step-by-step analytics for one active funnel.

Request

Authentication

  • df_ website API key for one website.
  • dft_ account token with analytics:read. Pass websiteId as a query parameter.

Path parameters

ParameterTypeDescription
funnelIdstringFunnel ObjectId. The funnel must belong to the website and be active.

Query parameters

ParameterTypeRequiredDescription
startAtstringNoSets the beginning of the reporting window. Use it when you want a specific date range instead of the endpoint default. Must be provided with endAt. Example: startAt=2026-05-01.
endAtstringNoSets the end of the reporting window. Must be provided with startAt. Example: endAt=2026-05-21.
timezonestringNoControls how dates are interpreted and how time buckets are grouped. Defaults to the website timezone. Example: timezone=America/New_York.
filter_countrystringNoLimits results to visitors from one or more countries. Operators: is, is_not. Use country names or codes. Example: filter_country=US,Canada.
filter_regionstringNoLimits results to visitors from a region or state. Example: filter_region=California.
filter_citystringNoLimits results to visitors from a city. Example: filter_city=San Francisco.
filter_devicestringNoLimits results by device type. Useful for mobile vs desktop analysis. Example: filter_device=mobile.
filter_browserstringNoLimits results by browser. Use this to compare browser-specific traffic or revenue. Example: filter_browser=Chrome,Safari.
filter_osstringNoLimits results by operating system. Example: filter_os=iOS,Android.
filter_referrerstringNoLimits results by referrer domain or normalized source. Example: filter_referrer=Google.
filter_pagestringNoLimits results to visitors who viewed a page. Operators: is, is_not, contains, does_not_contain. Example: filter_page=contains:/docs.
filter_entry_pagestringNoLimits results by first page in the session. Operators: is, is_not, contains, does_not_contain. Example: filter_entry_page=/pricing.
filter_hostnamestringNoLimits results by tracked hostname. Useful when one website tracks multiple hostnames. Example: filter_hostname=app.example.com.
filter_goalstringNoLimits results to visitors who completed a specific goal. Example: filter_goal=signup.
filter_utm_sourcestringNoLimits results by UTM source. Example: filter_utm_source=google.
filter_utm_mediumstringNoLimits results by UTM medium. Example: filter_utm_medium=cpc.
filter_utm_campaignstringNoLimits results by UTM campaign. Example: filter_utm_campaign=launch.
filter_utm_termstringNoLimits results by UTM term. Example: filter_utm_term=brand-keyword.
filter_utm_contentstringNoLimits results by UTM content. Example: filter_utm_content=hero-cta.
filter_refstringNoLimits results by the ref URL parameter. Example: filter_ref=twitter.
filter_sourcestringNoLimits results by the source URL parameter. Example: filter_source=newsletter.
filter_viastringNoLimits results by the via URL parameter. Example: filter_via=partner.

Response

Returns a JSON object with status and endpoint-specific fields.

Response fields

FieldTypeDescription
data[].funnel.idstringFunnel ObjectId.
data[].funnel.namestringHuman-readable name for the resource or event. The exact meaning depends on the endpoint.
data[].funnel.slugstringFunnel slug.
data[].funnel.stepsobject[]Configured funnel steps used for matching.
data[].data[].idstringStep ID.
data[].data[].labelstringStep label shown in reports.
data[].data[].valuenumberVisitors who reached this step.
data[].data[].revenuenumberRevenue attributed to this row or time bucket, in the website currency. Use it to see which time periods or dimensions influenced paid conversions. Revenue attributed to visitors who reached this step.
data[].data[].conversionRatenumberPercent of first-step visitors who reached this step.
data[].data[].dropoffFromPreviousnumberVisitors lost compared with the previous step.
data[].metrics.totalVisitorsnumberVisitors who reached the first funnel step.
data[].metrics.completionsnumberNumber of times this goal was completed. This counts events, so one visitor can contribute more than one completion.
data[].metrics.overallConversionRatenumberPercent of first-step visitors who completed the funnel.
data[].metrics.overallRevenuePerVisitornumberRevenue divided by first-step visitors.
data[].metrics.timezonestringTimezone used to interpret dates and group analytics buckets. Defaults to the website timezone.
data[].metrics.startAtstringnull
data[].metrics.endAtstringnull
data[].metrics.lastUpdatedstringResponse generation timestamp.

Errors

Common errors include 400 for invalid input, 401 for missing or invalid tokens, 403 for missing permission or suspended tracking, 404 for missing resources, and 500 for server errors.

✍️ Something missing? Suggest features.

🤖 AI agent or LLM? Read this page as markdown

Example request
curl -X GET "https://datafa.st/api/v1/analytics/funnels/{funnelId}" \
  -H "Authorization: Bearer df_xxx"
Success response
{
  "status": "success",
  "data": [{
    "funnel": {
      "id": "665f0b3c4d2e1a0012345678",
      "name": "Signup funnel",
      "slug": "signup-funnel",
      "steps": []
    },
    "data": [{
      "id": "landing",
      "label": "Landing",
      "value": 1000,
      "revenue": 2400,
      "stepIndex": 0,
      "stepType": "pageview",
      "conversionRate": 100,
      "dropoffFromPrevious": 0
    }],
    "metrics": {
      "totalVisitors": 1000,
      "completions": 214,
      "overallConversionRate": 21.4,
      "overallRevenuePerVisitor": 2.4,
      "timezone": "UTC",
      "startAt": null,
      "endAt": null,
      "lastUpdated": "2026-05-21T00:00:00.000Z"
    }
  }]
}