create_fan_out_extraction
create_fan_out_extraction MCP tool: launch a paid fan-out extraction on chosen prompts. 5 credits per prompt, charged only when ChatGPT's search engine actually searched. Dry run, inputs, response shape, JSON example.
Updated 2026-09-26
create_fan_out_extraction launches a fan-out extraction on prompts you choose. For each prompt, the ChatGPT search engine is queried through the OpenAI API, and Mentionable stores what it did: the search queries it ran, the ranked results each search returned, the pages it opened and the pages it cited in its answer. The tool returns an extractionId right away; the extraction runs in the background.
ChatGPT no longer shows its search queries to logged-out visitors, which is how daily tracking reads it. An extraction asks OpenAI's search engine directly, so the queries you get come from a separate call, not from the tracked answer itself. That separate call is why extractions are billed.
Requires
memberrole minimum.customerrole is rejected.
When to use
- Before writing content: see which queries ChatGPT's search runs for a topic, and which pages rank for them.
- When a prompt never mentions the brand: find the queries where the site is absent from the results (
summary.queriesWithoutOwninget_fan_out_extraction). - In an agent workflow:
list_promptsto pick prompts,create_fan_out_extractionwithdryRun: trueto show the cost, then the real call once the user agrees.
Billing
Every plan is credit-based. An extraction costs 5 credits per prompt, charged prompt by prompt and only when the engine searched. A prompt answered without any web search costs nothing, and neither does a prompt that fails.
Before anything is queued, the worst case (every prompt searched) must fit the credits the workspace can spend, with the same rule as daily tracking: overage headroom only for workspaces billed through Stripe, capped by the monthly overage cap, and work already in flight counted. Otherwise the tool returns insufficient_credits and nothing starts.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project scope. |
promptIds |
string[] (CUID) | required | 1 to 200 prompts of this project. Duplicates and deleted prompts are ignored. |
dryRun |
boolean | false |
Return the cost and the spendable credits without launching anything. |
Response
Dry run
{
"success": true,
"dryRun": true,
"promptCount": 24,
"creditCostPerPrompt": 5,
"maxCredits": 120,
"remainingCredits": 2380,
"allowed": true
}
remainingCredits is null when the workspace has uncapped pay-as-you-go overage. maxCredits is the worst case; the real charge is lower when some prompts are answered without a search.
Extraction queued
{
"success": true,
"extractionId": "clx_ext_42",
"status": "PENDING",
"promptCount": 24,
"maxCredits": 120,
"message": "Extraction queued. Poll get_fan_out_extraction with this extractionId until status is COMPLETED, PARTIAL or FAILED (usually under a minute per 10 prompts)."
}
Errors
{ "success": false, "error": "insufficient_credits", "cost": 120, "remaining": 40, "message": "..." }
{ "success": false, "error": "no_prompts", "message": "..." }
no_prompts means none of the ids belongs to the project, or they are all deleted.
Tips and patterns
- Dry run first when an end user is paying: show
maxCreditsandremainingCredits, then launch. - Poll, don't block. Call
get_fan_out_extractionevery 10 to 20 seconds whilestatusisPENDINGorRUNNING. - Batch by topic. One extraction per cluster of related prompts keeps
summary.topDomainsreadable. - Don't present the queries as the tracked answer's. They come from a separate call to OpenAI's search engine.
Related tools
- get_fan_out_extraction: read the result.
- list_fan_out_extractions: past extractions of a project.
- list_prompts: get the prompt ids.
- list_fan_outs: fan-out queries captured by daily tracking, free.