get_fan_out_extraction
get_fan_out_extraction MCP tool: read one fan-out extraction. Status, progress, summary (top domains, site and competitor presence, queries where the site is absent) and per prompt the ranked results of each search. JSON example.
Updated 2026-09-26
get_fan_out_extraction returns one fan-out extraction launched with create_fan_out_extraction or from the app. It gives the status, the progress prompt by prompt, a summary built for decisions, and, for each prompt, the searches ChatGPT's search engine ran in order, with their queries and ranked results.
Each result carries flags: cited (the page backs the answer), opened (the engine opened the page), isOwn (your site) and isCompetitor (a confirmed competitor). Site and competitor flags are computed when you read, so a competitor confirmed after the extraction shows up.
When to use
- Polling after
create_fan_out_extraction, untilstatusisCOMPLETED,PARTIALorFAILED. - Content planning:
summary.queriesWithoutOwnlists the queries of the prompts where your site never appears in the results. - Competitive reading:
summary.topDomainsranks the domains the engine keeps finding, with how often they are cited.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project that owns the extraction. |
extractionId |
string (CUID) | required | The extraction to read. |
include.items |
boolean | true |
Per-prompt searches and results. Set false for the summary only. |
include.citedText |
boolean | false |
The passage of the answer each cited page backs. Heavier, opt-in. |
Response
{
"success": true,
"extraction": {
"id": "clx_ext_42",
"status": "COMPLETED",
"llm": "CHATGPT",
"model": "gpt-5.4-mini",
"origin": "mcp",
"promptCount": 2,
"creditsCharged": 5,
"progress": { "pending": 0, "done": 1, "empty": 1, "failed": 0 },
"createdAt": "2026-09-26T10:00:00.000Z",
"completedAt": "2026-09-26T10:00:41.000Z"
},
"summary": {
"searchedPrompts": 1,
"ownPresence": 0,
"competitorPresence": 1,
"topDomains": [
{ "domain": "g2.com", "results": 2, "cited": 1, "prompts": 1, "isOwn": false, "isCompetitor": false }
],
"queriesWithoutOwn": [
{ "query": "best crm for startups 2026", "promptId": "clx_p_1", "promptText": "best CRM for startups" }
]
},
"items": [
{
"id": "clx_i_1",
"promptId": "clx_p_1",
"promptText": "best CRM for startups",
"status": "DONE",
"country": "US",
"searches": [
{
"position": 1,
"queries": ["best crm for startups 2026"],
"results": [
{ "url": "https://g2.com/categories/crm", "domain": "g2.com", "rank": 1, "cited": true },
{ "url": "https://hubspot.com/crm", "domain": "hubspot.com", "rank": 2, "isCompetitor": true }
]
}
]
}
]
}
Item status is PENDING, DONE (the engine searched, 5 credits charged), EMPTY (answered without searching, nothing charged) or FAILED (nothing charged). ownPresence and competitorPresence are shares between 0 and 1 of the prompts where the engine searched. Flags and optional fields only appear when set, to keep the payload small. Pages opened or cited without appearing in any search are listed under otherSources.
An unknown id, or an extraction of another project, returns { "success": false, "error": "extraction_not_found" }.
Tips and patterns
- Summary first. Start with
include.items: false; fetch items only for the prompts you dig into. - Poll gently. While
PENDINGorRUNNING, items fill in as prompts finish; the shape stays the same. - Read
rankper search. Ranks restart at 1 for each search; a page found by two searches keeps its first position. - The queries come from OpenAI's search engine, queried through its API, not from the tracked answer.
Related tools
- create_fan_out_extraction: launch an extraction.
- list_fan_out_extractions: find extraction ids.
- list_llm_sources: domains cited or searched across daily tracking.