ChangelogImproved

See where your brand drops out of an AI answer

Citation Analysis
A Citation Analysis ranking Coway first, the target brand Blueair second and Levoit third, beside two actions: improve Blueair’s own page and its Target listing

Citation Analysis now shows which pages an AI answer drew on, where your brand stands and what to do, starting with your own site.

What changed

  • queries: the searches the engine ran, each tied to the pages it found.
  • sources: every page the engine retrieved, with cited for the pages it cited, its search position, the passages the engine reported citing, the brands the page names and a channel for who controls it: your site, another brand, a publisher, a retailer, a review platform, a community, video, social, a blog platform or a reference site.
  • brands: your brand, your competitors and every brand the answer names, in the order the answer names them, with the cited and retrieved pages that name each one.
  • visibility: the stage your brand reached, from named in the answer to found on no page we read.
  • actions: what to do, ordered by how much is in your hands: your own pages first, then platforms you can post on, then publishers to pitch. Each comes with concrete steps and the pages behind it.
  • insights: what the cited pages share, such as channel, format, freshness and criteria, and where your brand sits, each naming the pages and links it rests on.

The response of POST /v1/citation-analysis now carries version: 4 and these new fields. links keeps its shape, each insight now lists its pages in sourceIds beside linkIds, and results stored before this change keep the shape they were saved with. The product is now called Citation Analysis: /v1/source-influence and /v1/geo-audit, taskTypes SOURCE_INFLUENCE and GEO_AUDIT, and include.sourceInfluence and include.geoAudit keep working, and responses use /v1/citation-analysis, CITATION_ANALYSIS and citationAnalysis.

How it works

With a taskId, the searches and retrieved pages come from the answer task itself when the engine exposes them, as ChatGPT and Google AI Overview do. You can also send them yourself in queries and as citations with cited: false. Other engines list cited pages only.

Recommendations mostly come from third-party pages. In ChatGPT answers we studied, the engine retrieved a median of 20 pages and cited 3, and a recommended brand’s own site was retrieved for 16% of them and cited for 6.8%. Actions follow that path, starting with what is in your hands:

  • improve_page: your page that the engine retrieved and passed over, or cited while the answer leaves your brand out, with what to add so it answers the prompt like the cited pages.
  • publish_page: a brief for a new page on your site for a search where none of your pages was cited, modelled on the pages that were: page type, title pattern, sections, evidence and date.
  • post_on_platform: a retailer, review platform, community, video or social page that names your competitors, with steps such as completing your listing, inviting real customers to review or answering as an identified brand representative.
  • pitch_publisher: a cited editorial page that only its publisher can change, with what to send them.

Every match shows which page says what the answer says, and each action points at the exact pages it rests on. A stage of not_found means no page we read names your brand. Send brand to get visibility and actions, and add brandDomains and brandAliases so your own pages and other names count.

Where it helps

  • Start with your own site: rework the page the engine passed over, or brief a new page modelled on the cited ones.
  • Give your marketplace and community team the listings and threads where competitors appear.
  • Pitch publishers with the exact page and the passages the answer took from it.

Send a request

Send the request with your API key in the Authorization header.

curl -X POST https://api.querying.ai/v1/citation-analysis \
  -H "Authorization: Bearer $QUERYING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "taskId": "…",
    "brand": "Blueair",
    "competitors": ["Coway", "Levoit"],
    "brandDomains": ["blueair.com"]
  }'

Request fields

taskIdstringRequired
A completed answer task of yours. Its answer and cited pages become answer and citations.
brandstring
Your brand name. With it the result adds visibility and actions.
competitorsarray
Competitor names to follow through the answer and its pages.
brandDomainsarray
Up to 10 hostnames of your own sites, such as coway.com. Pages on them count as own.
brandAliasesarray
Up to 10 other names of your brand, such as product lines or local spellings.
citations[].citedboolean
Default true. Send false for a page the engine retrieved but did not cite, with its position and query if you have them.
countrystring
Country the cited pages are read from. Default US.
webhook.urlstring
An HTTPS address on your server. The finished task is posted there the moment it completes.
idempotencyKeystring
Your own ID for the request. Each key creates one task per account, so a retried send stays a single task.

Response

A finished task looks like this, trimmed for length.

JSON
{
  "success": true,
  "task": {
    "id": "…",
    "taskType": "CITATION_ANALYSIS",
    "status": "COMPLETED",
    "createdAt": "…"
  },
  "credits": { "creditsToCharge": "…", "creditsCharged": "…" },
  "response": {
    "version": 4,
    "answer": "The best-reviewed air purifiers depend on whether you …",
    "queries": [
      {
        "id": "q0",
        "text": "best air purifiers 2026 reviews independent testing …",
        "sourceIds": ["s0", "s1", "s2", "…", "s20"]
      }
    ],
    "sources": [
      {
        "id": "s13",
        "url": "https://www.blueair.com/products/blue-pure-211i-max",
        "domain": "blueair.com",
        "channel": "own",
        "cited": false,
        "position": 14,
        "queryIds": ["q0"],
        "publishedAt": null,
        "citedText": [],
        "brandIds": ["b0"],
        "own": true,
        "paragraphs": []
      },
      {
        "id": "s14",
        "url": "https://www.target.com/p/levoit-core-300-air-…",
        "domain": "target.com",
        "channel": "retailer",
        "cited": true,
        "position": 15,
        "queryIds": ["q0"],
        "publishedAt": null,
        "citedText": [
          "A compact, straightforward option with a 4.6/5 rating …"
        ],
        "brandIds": ["b2"],
        "own": false,
        "paragraphs": [
          {
            "id": "s14p1",
            "text": "Levoit Core 300 Air Purifier White … $99.99 …"
          }
        ]
      },
      "…"
    ],
    "brands": [
      {
        "id": "b0",
        "name": "Blueair",
        "role": "target",
        "rank": 2,
        "answerRanges": ["…"],
        "citedSourceIds": ["s1", "s3", "s11"],
        "retrievedSourceIds": ["s5", "s6", "s8", "s9", "s13"],
        "ownSourceIds": ["s11", "s13"]
      },
      {
        "id": "b1",
        "name": "Coway",
        "role": "competitor",
        "rank": 1,
        "answerRanges": ["…"],
        "citedSourceIds": ["s1", "s3", "s4", "s7"],
        "retrievedSourceIds": ["s0", "s5", "s6", "s9", "s10", "s18"],
        "ownSourceIds": []
      },
      {
        "id": "b2",
        "name": "Levoit",
        "role": "competitor",
        "rank": 3,
        "answerRanges": ["…"],
        "citedSourceIds": ["s3", "s7", "s14"],
        "retrievedSourceIds": ["s6", "s15", "s16"],
        "ownSourceIds": []
      },
      "…"
    ],
    "links": [
      {
        "id": "l40",
        "paragraphId": "s14p1",
        "answerRanges": ["…"],
        "explanation": "Lists the Levoit Core 300 at $99.99, …"
      },
      "…"
    ],
    "visibility": {
      "brandId": "b0",
      "stage": "mentioned",
      "rank": 2,
      "answerBrands": 5
    },
    "actions": [
      {
        "id": "a0",
        "type": "improve_page",
        "control": "owned",
        "priority": 1,
        "summary": "Update Blueair’s site with a current, …",
        "steps": [
          "Add a page on best air purifiers in 2026 that covers …",
          "Include Blueair models in direct comparisons using published …",
          "…"
        ],
        "sourceIds": ["s13"],
        "brandIds": ["b0"],
        "queryIds": ["q0"],
        "linkIds": []
      },
      {
        "id": "a1",
        "type": "post_on_platform",
        "control": "platform",
        "priority": 2,
        "summary": "Improve Blueair’s Target product listing with …",
        "steps": [
          "Ensure the Blueair listing clearly states the model, current …",
          "…",
          "Keep product details current and invite genuine purchasers to …"
        ],
        "sourceIds": ["s14"],
        "brandIds": ["b2"],
        "queryIds": ["q0"],
        "linkIds": ["l40"]
      },
      "…"
    ],
    "insights": [
      {
        "summary": "Blueair’s second-place position is reflected in …",
        "sourceIds": ["s1", "s3", "s11"],
        "linkIds": ["l1", "l12", "l36"]
      },
      "…"
    ]
  }
}
task.statusstring
QUEUED, PROCESSING, then COMPLETED with the answer or FAILED with error.
credits.creditsChargedinteger
Credits charged for the finished task. A failed task charges 0.
response.versionnumber
The result shape. 4 for analyses that list queries, retrieved pages, brands and actions.
response.answerstring
The answer you sent, unchanged. Ranges are UTF-16 offsets into this exact text.
response.queriesarray
The searches the engine ran, each with an id, its text and the sourceIds it found.
response.sourcesarray
Every page the engine retrieved. cited tells cited pages from the rest, and channel says who controls the page (own, brand, editorial, retailer, review_platform, community, video, social, blog_platform or reference). Each also has position, queryIds, citedText, brandIds and own. Cited pages carry paragraphs.
response.brandsarray
Your brand, your competitors and the brands the answer names, each with role, rank in the answer, answerRanges and the cited and retrieved pages that name it.
response.linksarray
Each link pairs one paragraph with the answerRanges it matches and a one-sentence explanation.
response.visibilityobject
How far your brand got: stage is mentioned, on_cited_page, on_retrieved_page or not_found, with its rank and answerBrands. null without brand.
response.actionsarray
What to do, by priority: first owned work on your site (improve_page, publish_page), then platform posts (post_on_platform), then outreach (pitch_publisher). Each has its control, a summary, 1 to 5 steps and the sources, brands, queries and links behind it. Empty without brand.
response.insightsarray
Up to 4 short readings of what the cited pages share and where your brand sits, each naming the pages it rests on in sourceIds and the links in linkIds.

Receive the result

The request returns the task right away with status QUEUED. Poll GET /v1/async/task/{id} until status is COMPLETED or FAILED, or add webhook.url and the finished task arrives at your server with the same task, credits and response. Results stay available for 24 hours after a task finishes.

curl https://api.querying.ai/v1/async/task/$TASK_ID \
  -H "Authorization: Bearer $QUERYING_API_KEY"

Pricing

Pricing stays the same: credits are held when the analysis starts and settled when it finishes.

More updates

Stay in the loop

Get new product updates in your inbox.

RSS feed