Providers

Choose how Recall tracks each AI answer engine — scrapers, direct APIs, or both.

Recall tracks which AI answer engines mention your brand. Most AI search traffic comes from ChatGPT and Google AI Mode, and neither exposes a public API. You can approximate their responses by calling the underlying model APIs (OpenAI, Anthropic, Mistral, OpenRouter) with web search enabled, but that's not the real consumer UI — scraping the actual surface is usually closer to what your customers see.

These cover the ChatGPT + Google AI Mode experiences that drive the bulk of AI referral traffic.

ProviderWhyRough cost per prompt/month*Sign up
BrightDataCheapest solid option. Battle-tested dataset collectors for each major AI surface.~$0.72get.brightdata.com
OxylabsAsynchronous Push-Pull API. Good for ChatGPT, Perplexity, Google AI Mode.~$0.96oxylabs.io
OlostepPowers most large-scale AI visibility trackers today. Good reliability at scale.~$1.92olostep.com

Monthly estimates assume Recall's default cadence — RUNS_PER_PROMPT (8) probes per prompt per target on a 24-hour cycle, so 240 probes per surface per month — across 2 surfaces (ChatGPT + Google AI Mode). At BrightData's $0.0015 per record that is ≈ $0.72/mo per prompt; Oxylabs ($0.002) and Olostep ($0.003–0.005, the higher rate on ChatGPT) scale from the same count, putting Olostep at roughly 2.7× BrightData rather than the flat multiple it is often quoted at. Per-probe rates live in packages/lib/src/provider-costs.ts, which is also what the spend caps are enforced against.

Treat all of these as floors. Grounded surfaces bill per search query the model chooses to issue rather than per prompt, which can be several times the headline rate, so budget with headroom and reconcile against your first invoice. Actual cost also depends on volume tier and provider promos. The BrightData, Oxylabs, and Olostep sign-up links above are Recall's affiliate links — they give us a small kickback and cost you nothing extra.

BrightData

BRIGHTDATA_API_TOKEN=...

Supported scrape targets out of the box:

chatgpt:brightdata:online
google-ai-mode:brightdata:online
google-ai-overview:brightdata:online
perplexity:brightdata:online
copilot:brightdata:online
gemini:brightdata:online

You can also pass a custom dataset id as the version slug: chatgpt:brightdata:gd_abc123.

google-ai-overview is the one exception: it's the AI summary block on a normal Google results page, so it's fetched through BrightData's SERP API rather than a dataset collector — no dataset id needed. It runs through a serp zone (default sdk_serp, the zone the BrightData SDK auto-provisions; override with BRIGHTDATA_SERP_ZONE) billed to the same BRIGHTDATA_API_TOKEN.

Oxylabs

OXYLABS_USERNAME=...
OXYLABS_PASSWORD=...

Supported scrape targets:

chatgpt:oxylabs:online
chatgpt:oxylabs
perplexity:oxylabs:online
google-ai-mode:oxylabs:online
google-ai-overview:oxylabs:online

Oxylabs uses HTTP Basic auth (Web Scraper API username + password). Recall submits each request through the asynchronous Push-Pull API and polls until the result is ready, avoiding the Realtime API's connection timeout. :online toggles in-product web search for ChatGPT; Perplexity, Google AI Mode, and Google AI Overview always search.

Olostep

OLOSTEP_API_KEY=...

Supported scrape targets:

chatgpt:olostep:online
google-ai-mode:olostep:online
google-ai-overview:olostep:online
gemini:olostep:online
copilot:olostep:online
perplexity:olostep:online

Olostep models always use web search, so the :online suffix is required.

Direct model APIs

These hit the provider API directly — cheaper per token than scrapers, but they don't represent the actual ChatGPT / Google AI Mode experience. Use them alongside a scraper when you want extra Claude or OSS model coverage.

ProviderTracksCost per prompt/month*
Anthropic API (ANTHROPIC_API_KEY)Claude Sonnet / Opus / Haiku~$4–5 per tracked model
OpenAI API (OPENAI_API_KEY)gpt-5-mini with web search (ChatGPT-like, but not the real UI)~$2–3 per tracked model
Mistral API (MISTRAL_API_KEY)Mistral Small / Medium / Large, optional web search via the beta Conversations APIpass-through
OpenRouter (OPENROUTER_API_KEY)Any OpenRouter-hosted model (Claude, Llama, Mistral, etc.)pass-through

*Direct-API estimates also assume ~5 runs/day × 30 days = 150 calls/mo per tracked model, with typical prompt/response lengths. Prompt length drives real cost.

Example scrape targets:

claude:anthropic-api:claude-sonnet-4-6
chatgpt:openai-api:gpt-5-mini:online
mistral:mistral-api:mistral-medium-latest:online
claude:openrouter:anthropic/claude-sonnet-4.6
grok:openrouter:x-ai/grok-4.5:online
kimi:openrouter:moonshotai/kimi-k3

OpenAI/Anthropic/Mistral/OpenRouter entries all require a version slug as the third segment. For Mistral, append :online to route through the beta Conversations API with the web_search tool; without it the request goes to the standard chat completions endpoint and no citations are returned.

DataForSEO (optional)

DATAFORSEO_LOGIN + DATAFORSEO_PASSWORD enable several surfaces as an alternative to BrightData/Olostep:

google-ai-mode:dataforseo:online
google-ai-overview:dataforseo:online
chatgpt:dataforseo:online
perplexity:dataforseo:online
gemini:dataforseo:online
  • google-ai-mode uses DataForSEO's SERP Google AI Mode endpoint (unchanged).
  • google-ai-overview uses DataForSEO's Google Organic SERP endpoint with load_async_ai_overview on, returning the AI Overview block and its cited sources.
  • chatgpt, perplexity, and gemini use DataForSEO's AI Optimization "LLM Responses" API with web search enabled, returning the answer text and cited source URLs.

Each LLM surface defaults to a sensible model (gpt-5.5, sonar, gemini-2.5-flash). Override the underlying DataForSEO model_name via the version slug, e.g. chatgpt:dataforseo:gpt-5-mini:online. All require :online.

DataForSEO prompt text is limited to 500 characters. Country localization is intentionally not exposed in SCRAPE_TARGETS yet because support differs by DataForSEO surface and underlying model.

Starter (scrape the two that matter). Pick one scraper and you're done:

BRIGHTDATA_API_TOKEN=...
SCRAPE_TARGETS=chatgpt:brightdata:online,google-ai-mode:brightdata:online

or

OLOSTEP_API_KEY=...
SCRAPE_TARGETS=chatgpt:olostep:online,google-ai-mode:olostep:online

Starter + Claude. Add Anthropic direct for cheap Claude coverage:

BRIGHTDATA_API_TOKEN=...
ANTHROPIC_API_KEY=...
SCRAPE_TARGETS=chatgpt:brightdata:online,google-ai-mode:brightdata:online,claude:anthropic-api:claude-sonnet-4-6

No scraper (APIs only). Cheapest option, but you're tracking model APIs instead of the real consumer surfaces:

OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
SCRAPE_TARGETS=chatgpt:openai-api:gpt-5-mini:online,claude:anthropic-api:claude-sonnet-4-6

SCRAPE_TARGETS format

model:provider[:version][:online]
  • model — the AI surface being tracked (chatgpt, claude, google-ai-mode, google-ai-overview, gemini, perplexity, copilot, grok, kimi).
  • provider — how to reach it (brightdata, oxylabs, olostep, openai-api, anthropic-api, mistral-api, openrouter, dataforseo).
  • version — required for openai-api, anthropic-api, mistral-api, openrouter. Optional for scrapers (pass a BrightData dataset id here).
  • :online — append to enable web search. Required for most scraped models since the live UIs always search.

Entries are comma-separated.

Was this page helpful?