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

Get device analytics

GET https://datafa.st/api/v1/analytics/devices

Return analytics broken down by device.

Request

Authentication

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

Query parameters

ParameterTypeRequiredDescription
fieldsstringNoControls which columns are returned for each breakdown row. Use it to include the dimension plus only the metrics you need. Valid fields: device, visitors, revenue, payments. Example: fields=visitors,revenue,payments.
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.
limitnumberNoControls how many rows are returned. Use it with offset to paginate through long lists. Defaults to 100. Example: limit=50.
offsetnumberNoSkips rows before returning results. Use it to fetch the next page after a previous request. Defaults to 0. Example: offset=50.
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[].devicestringDevice type, such as desktop, mobile, or tablet.
data[].visitorsnumberNumber of unique visitors represented by this row or time bucket. Use it to compare traffic volume across dates, pages, sources, countries, devices, or campaigns.
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.
data[].paymentsnumberNumber of payment events attributed to this row or time bucket. Use it when you need transaction count instead of revenue amount.
pagination.limitnumberMaximum number of rows returned in one response. Use with offset to paginate through long result sets.
pagination.offsetnumberNumber of rows to skip before returning results. Use it with limit for pagination.
pagination.totalnumberTotal rows.

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/devices?limit=20&startAt=2026-05-01&endAt=2026-05-19" \
  -H "Authorization: Bearer df_xxx"
Success response
{
  "status": "success",
  "data": [
    {
      "device": "desktop",
      "visitors": 980,
      "revenue": 3200,
      "payments": 41
    }
  ],
  "pagination": {
    "limit": 20,
    "offset": 0,
    "total": 1
  }
}