visibility,
share_of_voice and sentiment — at both brand and prompt/region level. They
share one response shape.
The metric envelope
The units trap
Two consequences worth internalising:
- Don’t re-aggregate
sentimentclient-side. It’s already an average, not a count. Averaging the daily averages is not the window average — readaggregate_metricsfor that. 0andnullmean different things. For visibility and share of voice,0means “we ran the prompts and the brand never showed up”. For sentiment,nullmeans “nothing was scored”, which is not the same as neutral.
Metrics on list endpoints
List endpoints embed the same numbers as flat fields — same units, same_diff convention against the previous equal-length period:
- Prompts (
list_brand_prompts):visibility,visibility_diff,sentiment,sentiment_diff,citation_share,citation_share_diff,mentioned,top_competitors,last_run, plus search-volume fields. - Topics (
list_brand_topics):visibility,share_of_voice,sentiment,citation_shareand their diffs, plusprompt_countandtop_brands. - Brands (
list_brands):visibilityis the 30-day figure,nullon brands where it hasn’t been computed.
Search volume
Prompt rows carry both a rawvolume and a bucketed volume_range
(<10, 10-50, … 1m+). The bucket is derived from the raw number — use
volume_range for display and grouping, volume for sorting, and expect both
to be null for prompts where volume hasn’t been estimated yet.
Citation metrics
Citations are counted per AI answer, so they follow their own vocabulary:
The
citation_share and mention_share endpoints return a time series where
each point carries count, total, share_percent, plus rolling
average_count / average_percentage.
Dates on the citation share series come back as
"YYYY-MM-DDT00:00:00" with
no timezone offset — they’re period starts in the workspace’s local time, not
UTC instants. Parse them as local dates.
