Reference

Changelog

Changes to the API's behaviour and contract, newest first. Additive fields are listed too, so a strict client knows what to expect.

2026-10-20#

  • Pricing may change during November–December 2026. What it costs us to serve some requests changes at the turn of the year, so we may adjust prices in those two months. Any change is announced in advance here and by email. Credits you have already bought keep working, and packs stay valid for 12 months from purchase.
  • Full SERP: rendered AI Overview costs 8 from 2026-11-01. GET /serp, GET /search/serp, POST /serp/batch and async serp tasks cost 3 credits per page as today, or 8 when the AI Overview had to be completed by rendering the page in a browser. The response says aioverview.rendered: true when that happened (live now, so you can see which of your calls it affects). A page whose overview arrives complete, or a request with aioverview=false, stays 3. GET /serp/features stays 3 and never renders; GET /serp/html stays 2 (8 with js=true).
  • Web data: a page that needed a browser costs 5 from 2026-11-01. On POST /scrape, GET|POST /search/webpage, POST /extract, POST /search-and-scrape, POST /crawl and POST /scrape/batch, a page that had to be rendered (render: true, actions, or automatic rendering when a plain fetch returns no usable content, such as a JavaScript-only page) costs 5 credits instead of 1. Pages fetched without a browser stay 1. Responses already say via: "browser" or via: "http". A cached copy costs the same as the page it copies, a failed fetch is never charged, and the live-fetch surcharge (maxAge or cache: false) still applies on top. A crawl's maxCredits ceiling allows for the browser price unless the job sets render: false. POST /map is unchanged.
  • Accounts that have never bought credits. Every endpoint works on the sign-up credits, but the automatic browser fallback is off (an explicit render: true or actions still renders) and a web search that comes back thin is not topped up with live results. Both switch on with the first purchase. In effect now.

2026-10-15#

  • Place details menus from Google Search. Google Maps now shows signed-out visitors a reduced place record without the menu, so menu came back null. For a place that serves food, GET /search/place-details reads the menu (url, sections of items with prices) from the place's Google Search panel. Adds place.menuStatus (found, none, pending, unavailable) and the parameter menu=false to skip the lookup. menu.photos is empty for now. Same price.

2026-10-04 to 2026-10-05#

  • Credit balance. GET /credits/balance returns { success, credits: { available, reserved?, expiresAt?, expiringCredits? } } for an API key or a dashboard login. Free. available is the balance GET /user/profile shows (Account & Utilities).
  • API keys. A key is for the data API and read-only views of its account. Creating or deleting keys, data export, account deletion and payments need a dashboard login (403 API_KEY_SCOPE_FORBIDDEN); GET /user/profile stays open to keys. Keys are stored hashed, and lists show a masked preview.
  • Errors. One table of every status and code (Error Handling). New: 400 PAGE_OUT_OF_RANGE, DATE_FILTER_UNAVAILABLE and INVALID_IDEMPOTENCY_KEY, 422 TARGET_UNREACHABLE, 429 4203 (CONCURRENCY_LIMIT), 503 CREDIT_SYSTEM_UNAVAILABLE and REVIEWS_WITHHELD. A switched-off endpoint answers 403 FEATURE_NOT_AVAILABLE (was 503); a site that refuses the fetch answers 422 TARGET_REFUSED (was 503). No 502 or 504 leaves the API: both are answered as 503 JSON. None of these is charged.
  • Idempotency keys are bound to the request they came with: the same key and request replays the stored response (Idempotent-Replayed: true, no charge), the same key with a different request is 422 IDEMPOTENCY_KEY_REUSED.
  • SafeSearch on the SERP. safe=active or off (and true or false) is accepted on GET /serp and GET /search/serp. POST /serp/batch and GET /serp/features honour safe, which they ignored before.
  • Date filter. dateRestrict (d7, w2, m1, y1) works on GET /search/web together with gl and hl, on GET /search/news and on GET /search/advanced. Combined with search operators it returns 400 DATE_FILTER_UNAVAILABLE, not charged.
  • Fresh answers. cache=false forces a fresh answer on web, image, news, maps and places search. Same credits.
  • Web search pages. A page that starts past result 101 returns 400 PAGE_OUT_OF_RANGE with maxPage at once, instead of a slow failure.
  • Image search. Results carry width, height, thumbnailUrl with its size, link and sourceUrl (the page the image is on), source, domain, format and imageId. size (also imgSize), imgType, imgColorType and imgDominantColor now take effect.
  • Maps, places and place details. New businessStatus (OPERATIONAL, CLOSED_TEMPORARILY, CLOSED_PERMANENTLY or null) and openNow. openState comes back in the language of hl. With no ll, gl sets where the search looks (51 countries). A lite answer is never cached.
  • Reviews. The first page of reviews (about eight) comes back in any language, with hasMore. New timestamp (Unix seconds); an owner's reply carries date and language. A place Google sent without its reviews answers 503 REVIEWS_WITHHELD, not charged.
  • Extract. URLs are fetched in parallel inside one time budget. A failed row carries errorCode and retryable; partial says the budget ran out before every URL was fetched; llmSkipped says the model was not asked. One credit per page fetched; failed rows are free.
  • Web data. scrape, map, crawl, scrape/batch and extract accept internationalised domain names (https://www.löschwagen.com). A malformed URL, or one with a control character, is a 400.
  • Searches in flight. An account can have a limited number of web, image, site, advanced and batch searches running at once; past it, 429 4203 (Rate Limiting).
  • No charge for nothing. An answer with no results is free on every endpoint, SERP pages are billed per page delivered, and a failed row inside a 200 POST /serp/batch costs nothing.

2026-10-02#

  • Place details. GET /search/place-details returns one place's full record by placeId (ChIJ…), featureId, cid or q: every maps field plus all of Google's attributes and the menu (url, sections of items with prices, photos). 1 credit.
  • Attributes on maps and places. GET /search/maps and GET /search/places add attributes, Google's "About" list keyed by Google's own ids (attributes.payments.requires_cash_only).
  • Reviews by Place ID. GET /search/reviews accepts placeId.
  • Opening date on maps and places. GET /search/maps and GET /search/places add openingDate (2026-11-01) and openingDateText (Opens 1 Nov, in your hl) to a place listed before it opens; null otherwise. Same price.
  • SERP HTML price. GET /serp/html costs 2 credits per page (was 1), and 8 per page with js=true (was 4). Failed calls are still refunded.
  • Full SERP AI Overview from the served page. GET /serp reads the AI Overview in full from the page as Google served it, so most overviews no longer wait for a rendered page: about 2 s instead of 8-10 s. An overview Google loads after the page comes back as pending: true and is still read from the rendered page. Overview sources come back resolved (url the cited page, redirectUrl the /goto, resolved: true). Same price.

2026-09-30#

  • Credits are valid for one year per grant (was 90 days) on accounts created after the policy launch; existing credits were moved to one year from when they were granted. GET /credit/balance reports expiry.durationDays: 365. Legacy accounts keep unlimited credits.
  • Google News results page from the live page. GET /search/news/serp (and the news/serp async task and the Cloro-compatible news monitor) is fetched live and parsed like Full SERP: about a second per page, cards with title, source, date, snippet, thumbnail and resolved article links.
  • Location. location takes a country by name or two-letter code on every Google endpoint and applies it as gl; a country's uule is applied the same way. City- and state-level location, and any other uule, return 400 CITY_LOCATION_UNAVAILABLE and are not charged: Google no longer localizes results by uule (Location). GET /serp/html accepts a country location. GET /search/states adds targeting: false.
  • Error codes. Error bodies carry a stable code on search, SERP, SERP HTML, AI answer, rank check and validation errors (Error Handling). Failed batch rows carry the same code.
  • Async tasks. Errors in the request itself (a location, a domain, a query shape) fail at once and are refunded, instead of being retried.
  • Full SERP. Each page is fetched live and parsed; the AI Overview is read in full from the rendered page, and aioverview.complete says whether it was. aiModeAvailable reports the page's AI Mode tab. A multi-page request with a failed page is no longer cached.
  • SERP HTML. aio.showAll (pressed, absent, complete, failed) and show-all in X-Searlo-Aio.
  • Web data. POST /search/webpage accepts excludeSelectors; a page whose plain fetch returns no usable content is rendered.

2026-09-29#

  • SERP HTML (GET /serp/html): Google's results page as served (1 credit at launch; 2 since 2026-10-02) or rendered with the AI Overview opened out (js=true, 4 credits at launch; 8 since 2026-10-02), desktop or iOS, as JSON or format=raw.
  • AI answer snapshots: html=true on GET /search/ai/{engine} adds the answer page's HTML (html, pageUrl) at no extra charge.
  • Full SERP: rawHtml=true returns the page alongside the JSON (+1 credit).
  • Account & Utilities: GET /credit/balance, GET /search/capabilities, GET /search/countries, GET /search/states documented.
  • MCP: all 16 tools documented.

Stuck? Write to [email protected], or check live status.