Skip to main content
Use /batches plus a GEO/AEO (Generative Engine Optimization / Answer Engine Optimization) parser to query an AI search engine at scale and get structured JSON back: the answer, citations, and commercial surfaces such as ads, shopping cards, and product modules. This page covers how to call /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:
Use an informational prompt (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.
To target a different engine, keep the same 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} until status is completed, or handle the webhook.
The Python and Node SDKs can wait for you: iterate 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).
Failed items are listed separately — pass 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 returns answer_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.
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 [].