/v1/batches and compact peeks of the JSON you get back.
Engines
Each engine needs its own parser ID and URL template. Pass the parser once at batch level. Encode the query in the URL.
All six support geo-targeting via the batch
country parameter (ISO 3166-1 alpha-2). Country coverage differs by parser — fetch the live list rather than hardcoding it:
what is mitochondria) when you care about citations. Use a commercial prompt (best wireless headphones under $200) when you need ads, shopping cards, or product modules — those surfaces are intent-detected and omitted when the engine does not render them.
1. Create the batch
custom_id must be unique within the batch. country is applied to every item.
items shape and swap parser.id plus the host in each URL. One batch = one parser.
Processing time is roughly constant regardless of batch size (typically 5–8 minutes). Pass
webhook on create to get batch.completed instead of polling. New accounts are limited to 100 items per batch — contact info@olostep.com to raise it.2. Wait for completion
Poll GET /v1/batches/{batch_id} untilstatus is completed, or handle the webhook.
batch.items() / for await (const item of batch.items()) and they block until the batch finishes.
3. Retrieve json_content
List items, then retrieve JSON for each retrieve_id. The GEO payload is the parsed object inside json_content (a JSON string — parse it).
status=failed on GET /v1/batches/{batch_id}/items. Hosted JSON is also available at json_hosted_url on the retrieve payload for about 7 days.
What you get back
Every parser returnsanswer_markdown. Most also return prompt. The rest is engine-specific. Compact peeks below are from live country=US batches.
The engines listed here are the public GEO parsers. We also support additional parsers and connectors internally, plus custom parsers for specific sites — we share those on request. Email info@olostep.com or reach out on Slack.
- Google AI Mode
- ChatGPT
- Perplexity
- Google AI Overview
- Gemini
- Microsoft Copilot
Citations are in
sources (cited: true when referenced inline). Structured sections are in text_blocks (text, heading, list, table). Sponsored cards are in ads when Google shows them — a live headphones query returned sources and a comparison table but omitted ads. Empty fields are stripped, not returned as [].