POST /api/v1/projects/{project}/reports/sources
One row per cited domain, hostname, URL, category or page type, or per platform, country, topic, tag, prompt or time bucket. No dimensions gives one row of totals. Read the Reports API page first for the request shape, filter roles and the compare window.
Dimensions
page_sentiment and brand_on_page come from Surfacd’s page analysis of the cited URLs. They describe the page against one brand, the lens brand: the page_brand filter, or your primary brand when there is none.
Measures
Filters
- Population fields as on the main page. The population is the same set of answers the Sources page uses.
- Entity fields
domain,hostname,url,category,page_type,page_sentimentandbrand_on_pagetakein,not_inandcontainson the label when their dimension is on the row. They select rows after ranking. - Page filters narrow which cited pages count before grouping and ranking, without changing the population.
competitors_on_page(the number of other tracked brands named on the page) takesinor a comparison.page_type,category,brand_on_pageandpage_sentimentact as page filters when they are not on the row:page_type in ["listicle", "comparison"]keeps one row per domain that counts only those pages, which is what the page’s multi-select shows, andbrand_on_page in ["gap"]is the Sources page’s gaps toggle. analysed_pages,mentioning_pagesand thebrands_on_pageblock describe all of a row’s analysed pages: abrand_on_page,page_sentimentorcompetitors_on_pagepage filter does not narrow them, as on the Sources page. So with such a filter they cannot be used inorder_by, a filter ortop, nor with a compare window and a time dimension.- Lens:
page_brandtakesinwith one brand UUID and removes no rows. It names the brand thatpage_sentiment,brand_on_page,competitors_on_page,mentioning_pagesand thebrands_on_pageblock describe.
Related block
"related": ["brands_on_page"] adds, per row, the tracked brands named on its analysed pages with the number of pages each appears on. The lens brand comes first, then most pages first. This is what draws the brand logos in the Sources table.
Dashboard
Citations KPI card
Source categories donut
Top sources
Sources overview
KPIs
Citations, answers citing, pages, domains and citations per answer, with trends.Domain share over time
The top five domains by week.rank is per week, so the filter keeps each week’s top five.
Domain movers
Page type donut
Gap ratio KPI
How many cited pages name your brand, name only competitors, or name nobody you track.Sources tables
Domains table with “Mentioned?” and brand logos
The Source Analysis domains table.mentioning_pages / analysed_pages is the “Mentioned?” column; brands_on_page draws the logos.
{ "field": "page_brand", "op": "in", "values": ["COMPETITOR_UUID"] } to see the same table through a competitor’s eyes. Add a compare window for the previous-period deltas. Use offset for the next page.
Hostnames and URLs tables
Replacedomain with hostname or url:
Page type and category filters
The multi-select above the table. Keepdomain as the only dimension and filter page_type: one row per domain counting only its listicle and comparison pages.
Gaps only
Domains ranked by their pages that name at least one competitor and not you. Off the row,brand_on_page is a page filter, so the domains are ranked by their gap pages alone; competitors_on_page is the “minimum competitors” control.
Negative pages
The sentiment filter: domains ranked by their analysed pages that speak negatively about the lens brand.Search
Prompts citing a page
Open a URL and see which prompts cite it.More examples
Domain share by platform
What the platforms read when they are negative about you
mentions_brand plus mention_sentiment make “answers negative about us” the population. answers prints how many that is.