Skip to main content
Returns a single JSON document with report-style analytics for every domain on your account — both domains you own and domains shared with you. Unlike the dashboard charts and PDF report, which group smaller crawlers into “Other” and “Other social”, this endpoint breaks traffic out into each individual bot.
Always call this endpoint from a server-side environment (backend API, serverless function, build script, etc.). Never include your API key in client-side code — it will be visible to anyone inspecting your frontend.
Programmatic (API key) access requires the Pro plan and above — requests from Starter accounts return 403 plan_upgrade_required. The Export all (JSON) button in the Analytics dashboard is available on all plans.

Request

Headers

Body Parameters

Choose the reporting window in one of two ways — a rolling period, or an explicit startDate/endDate range. The two are mutually exclusive. The window applies to every domain in the response. By default the export covers every domain your account can access; pass domainId to scope it to one.
Exporting one domain at a time with domainId (optionally with a narrower date range) is the way to handle large or old domains: a single heavy domain can otherwise time out the whole account-wide export. Use List Domains to enumerate IDs, then export each.
Fetching non-overlapping reports. Use startDate/endDate to page through history in adjacent, gap-free chunks (e.g. one month at a time) without double-counting. The response echoes back the resolved startDate and endDate, so your next request can start the day after the previous endDate. Both bounds are inclusive, so advance by one day to avoid overlap.
Range rules — a request that breaks any of these returns 400 invalid_request:
  • period and startDate/endDate cannot be combined.
  • endDate cannot be sent on its own — it requires a startDate.
  • Dates must be real calendar dates in YYYY-MM-DD form (e.g. 2026-02-30 is rejected).
  • startDate must not be after endDate, and neither may be in the future.
  • The range may span at most 365 days (inclusive), the same cap as the 365d period.

Example Request

Rolling period:
Explicit date range:
Single domain:

Response

Success (200)

Each botSeries entry contains a count for every bot listed in botTotals. The example above is trimmed to a few bots for brevity; the actual response includes all of them, with 0 where there was no traffic.

Fields

Granular bot breakdown

Every bot is reported as its own field. The bots that the dashboard and PDF report fold into “Other” and “Other social” each appear individually here: The named bots already shown in reports are also present individually: googlebot, googleextendedbot, bingbot, openaibot, anthropicbot, perplexitybot, twitterbot, facebookbot, and linkedinbot.
social_other is a catch-all for social crawlers that can’t be identified individually. It’s reported as its own field rather than merged into another bot.

Error Responses

When you receive a 429, the usage and limit fields tell you where you stand against your monthly quota. Per-minute limits (60 req/min) reset automatically after 60 seconds. See Authentication for plan limits.

Examples

JavaScript / Node.js

Paging through history without overlap

Because both bounds are inclusive, start each window the day after the previous endDate to fetch adjacent, gap-free chunks:
Prefer a one-off download? The Analytics dashboard has an Export all (JSON) button that produces the same document for the selected period without needing an API key — and it’s available on every plan.