Gemini scraper API
Gemini's grounded answer with its sources, inline citations and comparison tables as shopping cards.
Price
$1.50 per 1,000 requests at Starter, down to $1.00 at Max, deducted from your prepaid USD balance.
Endpoint
POST /v1/monitor/gemini
Countries
213 countries, plus US states.
Request
curl -X POST "https://api.answerline.dev/v1/monitor/gemini" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"iPhone 17 or Galaxy S26?","country":"US"}'
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY! });
const answer = await client.monitor.gemini({
"prompt": "iPhone 17 or Galaxy S26?",
"country": "US"
});
import os
from answerline import Client
with Client(os.environ["API_KEY"]) as client:
answer = client.monitor.gemini(
prompt="iPhone 17 or Galaxy S26?",
country="US",
)
What you get back
Field in result | Type | Description |
|---|---|---|
text | string | Text of Gemini's reply |
markdown | string | Gemini's reply as Markdown |
links | object[] | The links in the answer's text, in the order a reader meets them: one entry per web (http or https) link the answer shows, images and code aside, with the words it shows (text), where it goes (url), its domain and its 1-based position. Sources cited by pills are in citationPills; links to the same page appear in both when the answer does both. Empty when the text links nowhere. |
sources | object[] | Sources that Gemini cited |
citationPills | object[] | Citation pills that appear inline in the Gemini answer. Every element pairs one chip with one source: a chip backed by N sources (Gemini's equivalent of +N, or a section-summary chip) yields N elements with the same citationPillId, each holding that source's own label, url and domain. Grouping by citationPillId rebuilds the pills. label is always sent; it may be an empty string if the rail gives that source no title. Empty when the answer has no pills. |
shoppingCards | object[] | Product cards Gemini shows beside a shopping-related answer, in display order. Absent when the answer has none. |
places | object[] | Place cards included in lodging and local answers |
entities | object[] | The brands and products Gemini's answer shows as entity cards, in answer order. Absent when the answer has none. |
videos | object[] | Video cards Gemini shows in its answer, in answer order |
searchQueries | string[] | Searches Gemini ran for the answer, when it shows them |
model | string | The model Gemini names as the one that answered; null when the answer does not name it. |
The Gemini app answer versus grounding in the Gemini API
This endpoint returns the answer the Gemini app gives a user for a prompt and market, as text, markdown, links, sources, citationPills and shoppingCards.
Google’s developer API offers grounding with Google Search for your own prompts. Its guide (checked 2026-09-17, ai.google.dev) says a grounded response contains the search queries the model executed, url_citation annotations that tie text segments to source URLs, and a search-suggestions HTML snippet whose use is governed by the Gemini API terms. The same page says Gemini 3 models are billed per search query the model decides to run, and Gemini 2.5 and older per prompt.
Grounding is a tool for building your own product. For measuring what Gemini tells the public it has a flaw: model choice, system instructions and tool settings are yours, so you measure your configuration. The app answer reflects Google’s choices, which are what users see.
The app also shows product cards beside shopping answers, with prices, stores and ratings, which come back here as shoppingCards. For e-commerce brands that card is the recommendation. Place cards (places) are not returned today. And citationPills records which sources sit behind each inline chip in the app, including section-summary chips that cite several sources at once.
An annotated response
The excerpt follows the result schema for POST /v1/monitor/gemini. Values are illustrative; the request set include.markdown to true.
{
"success": true,
"result": {
"text": "Both phones are strong choices. The iPhone 17 favours...",
"markdown": "Both phones are strong choices.\n\n## Camera\nThe iPhone 17 favours...",
// Sources in order. position is an integer here.
"sources": [
{
"position": 1,
"label": "iPhone 17 vs Galaxy S26: camera test",
"url": "https://www.example-tech.de/vergleich/iphone-17-galaxy-s26",
"description": "Side-by-side photos in low light..."
},
{
"position": 2,
"label": "Galaxy S26 review",
"url": "https://www.example-mobile.com/reviews/galaxy-s26",
"description": "Battery life and display..."
}
],
// One entry per (chip, source). citationPillId is 1-based and shared by every
// source in the same chip; position points into result.sources.
// label is always present but may be "" -- fall back to domain.
"citationPills": [
{ "label": "iPhone 17 vs Galaxy S26: camera test", "citationPillId": 1, "url": "https://www.example-tech.de/vergleich/iphone-17-galaxy-s26", "domain": "example-tech.de", "position": 1 },
{ "label": "", "citationPillId": 1, "url": "https://www.example-mobile.com/reviews/galaxy-s26", "domain": "example-mobile.com", "position": 2 }
]
// "shoppingCards" appears when Gemini shows products, e.g.:
// "shoppingCards": [{ "position": 1, "title": "Example Phone 17", "productId": "1234567890",
// "productLink": "https://www.google.com/search?q=...&prds=productid%3A1234567890",
// "price": { "raw": "€949.00", "value": 949, "currency": "EUR" }, "store": "Example Shop",
// "storeCount": 4, "rating": 4.6, "reviews": 812, "brand": "Example" }]
}
}
Every answer is the one gemini.google.com shows for the prompt. result.provenance reads searchMode engine-default and interface web-app, or desktop-web on some requests for include.html or include.screenshot (all fields).
Notes for this engine
shoppingCards[]always hasposition,title,productLinkandproductId.price(raw,value,currency),oldPrice,store,storeCount,brand,description,rating,reviews,thumbnail,images,catalogIdandgpcIdappear when Gemini shows them.storeLink,shippinganddeliveryTimeare not filled.placesis not returned today.citationPillsis empty andshoppingCardsabsent when there are none.html(withinclude.html) links a copy of the Gemini page as it was when the answer was captured.
Shopping cards appear only on answers where Gemini shows products. Read shoppingCards with a default, and report the share of answers that carried them.
citationPills[].label can be "". Identify sources by domain or url.
Gemini answers vary between runs, so sample each prompt several times per period and report rates with sample sizes; see sampling vs census.
This endpoint has no hl or city option, so the prompt text is your only language control. It accepts a US state, which implies country US, and answers from inside that state (states). For multilingual studies write each prompt in the market’s language and keep the translations fixed across runs; multilingual AI answers covers the design.
Related: the best Gemini scrapers compared, monitoring Gemini, AI visibility tracking, competitor analysis, every request field.
Questions
How much does a Gemini request cost?
A request costs $0.0015 at the Starter tier ($1.00–$1.50 per 1,000 across tiers). The include flags for Gemini (markdown, rawResponse and rawWire) add nothing, and neither does include.html.
How is this different from grounding with Google Search in the Gemini API?
The Gemini API lets you ground your own prompts and model settings on Google Search. This endpoint returns the answer the Gemini app shows its users, with its sources, inline citation pills and shopping cards as fields.
Does the Gemini endpoint return place or shopping cards?
Shopping cards, yes: result.shoppingCards carries each product Gemini shows beside the answer, with its price, store, rating and Google Shopping link. Place cards (result.places) are not returned today.
Can I get the full HTML of a Gemini answer?
Yes. Set include.html and result.html links the answer in Gemini's own page, stored on files.answerline.dev: its headings, tables, citation chips and follow-up suggestions as Gemini lays them out. The copy opens with scripts off.
Can I target a US state with Gemini?
Yes. Gemini answers from inside the US state you send, in all 50 states and DC; a US request without a state is answered as a person in California sees it. See /docs/coverage#states.
Are failed Gemini requests charged?
No. A failed request is charged nothing and its reservation is released.
From the blog
Best Gemini scraper APIs for 2027: app answers vs the API
Track brand mentions in Gemini answers
AI grounding by engine: which index each assistant uses
Docs
- Quickstart
- API reference
- Engine features
- Async tasks and batches
- Webhooks
- Coverage
- Pricing and failures
- Rate limits