A row is one brand, domain or URL for one combination of the dimensions you ask for: one brand on one engine on one day, say. These are not the same as an agency’s monthly reports (the frozen months a client sees), which have their own routes in the API reference.
What a report counts
A report counts your unbranded prompts: the questions that name neither your brand nor a competitor you track, the same set behind Overview’s headline figures. By default it covers the segments you have claimed and the engines your project samples. Every response opens with ascope object that says exactly what it counted.
The brands report uses the same calculation as the Brands screen’s league table: a row with no dimensions is the brand’s league row for the window. The domains and URLs reports use the Sources screen’s calculation.
Parameters
string
required
First day, inclusive, as
YYYY-MM-DD. Days are the project’s market days.string
required
Last day, inclusive. Must not be before
from.string
Comma-separated, any of
date, engine, segment and prompt, each at most once. The URLs report has no prompt dimension. Leave it out for one row per brand, domain or URL over the whole window.string
default:"day"
day, week or month: how much time one row covers. Only with date among the dimensions. A row’s date is its bucket’s first day: weeks start on Monday and months on the 1st. The first and last buckets hold only the days inside your window, so start from on a Monday (or the 1st) for whole buckets.string[]
Engine keys to keep. Repeat the parameter (
engine=a&engine=b) or separate values with commas. Defaults to the project’s engines.string[]
Segment ids to keep. Only segments the project has claimed; any other is a
400.string[]
Prompt ids to keep.
string[]
Brands report only: brand ids to keep. Rows are filtered after the arithmetic, so share of voice still counts every brand in the answers, not only the ones you asked for.
string[]
Domains and URLs reports only: domains to keep. This narrows the rows you get back, not the work a request does, so it does not let a request cover more days.
integer
Rows per page, up to the maximum in the table below.
string
The previous page’s
next_cursor.string
default:"json"
json or csv. See CSV output.The response
object
What the rows count:
from, to, engines, segments, dimensions, interval (null without date), and prompt_scope, which is always the unbranded set and reads "category". With segment as a dimension, note says that a prompt in two segments counts in both segment rows, so segment rows can add up to more than the whole.array
The rows. Each carries only the dimensions you asked for:
date, engine, segment and prompt_id.string | null
The next page, or
null at the end.boolean
true while there is more to read.A brands row
object
id, name, and own, which is true for your brand. The id is what tracking a competitor takes.The four headline figures for this brand over this row’s slice, each a metric object. With
prompt as a dimension, every band is null: one question cannot say how much a figure would move across questions.integer
How many of the row’s answers named the brand.
A domains or URLs row
string
The domain.
string | null
URLs report only.
null for an address that is not http or https.string, boolean
The kind of source, as the Sources screen labels it, and whether it is your own site.
integer
How many answers retrieved the source (read it while answering) and how many cited it (named it as a source).
integer
The answers in the row, and how many of those came from an engine that reports what it read.
Figure
retrieved over reported_answers, and cited over answers. Two rates with two different denominators: retrieval can only be counted where the engine says what it read. Both carry band: null, as on the Sources screen.Budgets: how much one request may read
What a report costs is the number of days, times the prompts in scope, times the engines. So that is the budget, counted in prompt-engine-days rather than in days: a fixed day limit would allow a month on one project and three days on a much larger one.- Without
dateas a dimension, one request reads the whole window, so the window has to fit the budget. Over it, the request is400with a message startingreport_budget:that gives the most days this project allows. Withsegmentas a dimension the budget is smaller, as the table shows. The domains and URLs reports read answer by answer, so their budget is smaller than the brands report’s. - With
dateas a dimension, the window may be as long as the longest window in the table, because each page reads only its own days. Longer than that is a400startingwindow_too_large:. - A
weekormonthinterval is refused withreport_budget:when one bucket of your project is more than one page may read. Useinterval=day. - The budget follows your project. Add prompts or engines and the same window covers more prompt-engine-days. A window that worked last month can be refused today; with
dateas a dimension, pages simply hold fewer days.
Paging
Withdate as a dimension, rows come date first, then engine, segment and prompt, then the brand, domain or URL. Each page reads whole buckets from where the last one stopped, until it holds limit rows or has read as much as one page may. So:
- a page can hold fewer rows than
limit, and on the brands report a page holds at most 20,000 ÷ (prompts in scope) rows, and never more thanlimitor 200, so a large project gets shorter pages; - a page can be empty with
has_morestilltrue, when the days it read held no rows; - follow
next_cursoruntilhas_moreisfalse, and never stop on a short page.
limit included. See Pagination.
Weight, and one at a time
A report page counts as several requests against your rate limit: the table above gives the weight. Run report requests one after another: while one of your workspace’s reports is running, a second gets503 busy at once, with Retry-After. See Rate limits.
Examples
Brands by day and engine for a window, every page:Related
Pulling data nightly
One day at a time, the pattern that fits every plan.
Metric objects
Value, band,
n, low sample and within noise.CSV output
The same rows as a spreadsheet.
Errors
report_budget, busy and query_timeout.