Skip to documentation
Browse documentation

Changelog

Track public API and capability-contract changes.

View raw

This page records customer-visible API changes and deprecations, newest first.

Scope: entries begin at 2026-09-01. Earlier releases were not maintained in a customer-facing changelog.

2026-10-03 — Google Maps place details (v0.1.26)

googlemaps.place and googlemaps.enrich now return complete place details, including opening hours and the review count, for listings that publish them, instead of failing when the first response omitted those fields. googlemaps.nearby can add an exclusion summary — the count of results outside the requested radius — without claiming to list them all.

2026-10-03 — Google Maps search location inputs (v0.1.26)

googlemaps.search now refuses a request that supplies both a text location and lat/lng at the same time, returning invalid_input that names the conflict. Use one location mode: a text location, or a complete lat+lng pair (with optional zoom). A single coordinate, or zoom without coordinates, is still refused.

2026-10-03 — Facebook video detail from a page's Videos tab (v0.5.6)

facebook.page-videos.list returns each video's public URL. That exact URL now works when sent to facebook.video.get, so a page's video list chains straight into a video's details. No input or output fields changed.

2026-10-03 — Facebook API docs: backup routes removed

The Facebook OpenAPI document and LLM prompt no longer list the background-backup endpoints or the board/pin wording, which do not apply to Facebook. Pinterest's backup contract is unchanged.

Carrefour API input and price handling

  • Product links accept a scheme-less storefront URL and ignore a copied tracking query or fragment for identity; the product is resolved from the trusted path only, never by following the link.
  • carrefourksa.products.search requires an explicit query; an omitted query is refused instead of defaulting to milk.
  • A single explicit latitude or longitude is refused (invalid_input); provide both or neither.
  • Listing price is null when upstream gives no price; a genuine zero is kept.

2026-10-02: Blinkit missing values and merchant coverage; JioMart paging and inputs

Blinkit API missing values and sampled merchant coverage

  • price, mrp, the promotions product price and eta_in_minutes are now null when Blinkit shows no value, instead of 0. A real zero is unchanged. Check any sum, average or stock test that treated 0 as a real value.
  • New capability blinkit.merchant.coverage: sampled serving-merchant coverage for a bounded area, one row per observed merchant; physical store addresses, radius and opening state are not offered.

JioMart API pagination and input handling

  • Paging is repaired for numeric and cursor pages, including past-the-end pages, on search, products list, collection products and home.
  • Location validation and product-output contracts are corrected; invalid input is refused before any upstream request.

The Swiggy Instamart API supports search and category filters, product and category links as input, more ways to specify a delivery location, and whole-number prices in paise. Existing requests keep working unless a line below says otherwise.

Check these if you use them.

  • Location: categories, category listings, search and product details take a store_id, a six-digit pincode, or both lat and lng. Sending only one coordinate is refused with invalid_input. A PIN code now wins over coordinates (a store still wins over both).
  • swiggy-instamart.location.serviceability and swiggy-instamart.eta: an address Instamart does not serve now returns serviceable: false with no store or ETA, instead of an error. address is no longer required; give coordinates or a pincode.
  • Errors: an unknown place, an unknown store and an empty suggestion list now return not_found instead of an upstream error.
  • swiggy-instamart.products.search: each result has a result_type (match, promoted, sold_out_collection or other), and only match results get a rank position.
  • Paging: pass next_offset back unchanged with the same location, store, query, sort and filters; a changed context refuses the continuation. Search and home skip products already returned on earlier pages, and stop with pagination_status: "limited" and pagination_reason: "history_limit" when that history is full. Old page:items category offsets work only without sort or filters.

New.

  • swiggy-instamart.products.search and swiggy-instamart.category.products.list: sort, and filters brands, types and min_rating. Numeric sorts order the products within each page; they do not reorder across pages. Listings can add available_filters and result_count when Instamart provides them.
  • Product and category links as input: product_url on swiggy-instamart.product.get, category_url on swiggy-instamart.category.products.list. A category listing no longer needs category_name and taxonomy_type: a link, or a name alone, is enough.
  • pincode on swiggy-instamart.home.list, swiggy-instamart.search.suggestions, swiggy-instamart.location.serviceability and swiggy-instamart.eta; lat and lng on categories, category listings, search and product details. swiggy-instamart.home.list now works with coordinates alone.
  • Products add whole-number prices in paise (offer_price_paise and mrp_paise, where a zero price is kept and an unknown one is left out; discount_paise appears only when there is a discount), a numeric rating_value (0 to 5), and links product_url, image_url and, on variations, image_urls.

2026-10-02: Zepto search and category listings

Zepto (zepto-scraper v0.1.28) is live with filters, cursors and clearer location context. Existing requests keep working unless a line below says otherwise.

Check these if you use them.

  • Location: send either a pincode or both latitude and longitude, or neither for the default store. A PIN code together with coordinates, or only one coordinate, is now refused with invalid_input. Coordinates must be in range (−90 to 90, −180 to 180).
  • zepto.category.products: page now means a slice of matching products (page × limit rows in), not Zepto's own page. Deep pages can run out of pages to read before they return rows. To walk a category in order, pass the next_cursor from each response as cursor.
  • zepto.search and zepto.category.products: page and page_number no longer default to a value; leave both out for the first page. Search pages go up to 99999, category pages up to 100000.
  • Links must be HTTPS links on zepto.com or zeptonow.com (a link without a scheme is read as HTTPS); other hosts, explicit ports and credentials are refused. IDs must be well formed. Both fail with invalid_input.
  • A malformed cursor is refused before any upstream request. A cursor whose page has changed since you received it is refused with invalid_input; start the listing again. Catalog cursors issued before this version may also be refused.

New.

  • zepto.search and zepto.category.products: filter by brand_ids or brand_names, min_price_paise, max_price_paise, min_discount and in_stock, and continue with cursor. zepto.search also accepts a Zepto search url.
  • sort: price_asc or price_desc orders only the products returned in each response (sort_scope: bounded_sample), not the whole listing.
  • Listing responses add next_cursor, stop_reason (why the listing stopped), applied_filters, rows_scanned, sample_size and sort_scope.
  • context (store_id, source: the store that answered) is added to zepto.search, zepto.category.products, zepto.categories, zepto.catalog, zepto.product, zepto.ads and zepto.search.facets. zepto.eta adds eta_available.
  • A selling price, available quantity (including ads' items_left), discount percent or eta_minutes that Zepto reports as zero is now returned as zero instead of being dropped; unknown values are still left out.

2026-10-02: Platform updates released since 21 September

A catch-up of the scraper changes that reached the live API between 21 September and 2 October. Most are new optional inputs and new capabilities; existing requests keep working unless a line below says otherwise. Each capability's page in these docs has the full current inputs and outputs.

Check these if you use them.

  • Are.na arena.search: type no longer accepts blocks; use all, channels or users. arena.channel.blocks-list now returns one page per call, with new page and limit inputs.
  • Instagram instagram.highlights.list returns at most 10 highlights per call and no longer takes cursor.
  • Internshala internshala.internships.list and internshala.jobs.list accept only the stipend and salary values the site offers (for example min_stipend 0, 2000, 4000, 6000, 8000 or 10000); other values are refused with invalid_input.
  • Zomato zomato.restaurants.all no longer takes concurrency, max_cells or step_km. zomato.restaurant.reviews needs limit of at least 5.
  • YouTube list capabilities (channel-videos, channel-shorts, channel-live, channel-playlists, channel-community, comments.list, playlist.get, search.query) now default to limit 100 and max_pages 5 when you leave them out. Set them to get more.
  • Temporarily unavailable while we restore them: bluesky.feed.search_posts, builtwith.domain.profile, tiktok.shop.product.get and web.page.screenshot.

Renamed, with the old names still working. Requests that use the old name are served by the new one.

  • Meesho: catalog.search, catalog.categories, catalog.filters, catalog.popular_searches, catalog.search_suggestions and product.reviews are now meesho.catalog.search and so on, and meesho.product.reviews.
  • Swiggy Instamart: the instamart.* capabilities are now swiggy-instamart.* (for example swiggy-instamart.home.list).
  • Google Maps: enrich.google-maps is now googlemaps.enrich.

New capabilities.

  • Facebook: facebook.event.get, facebook.group.get, facebook.page-about.get, facebook.page-events.list, facebook.page-photos.list and facebook.video-transcript.get.
  • Flipkart: flipkart.category.products.
  • JioMart: jiomart.fulfillment.get and jiomart.product.availability.scan.
  • LinkedIn: linkedin.company.posts, linkedin.company.search and linkedin.post.transcript.get.
  • Swiggy Instamart: search, product, categories, category products, delivery time and serviceability (swiggy-instamart.products.search, .product.get, .categories.list, .category.products.list, .eta, .location.serviceability).
  • Zepto: zepto.catalog, zepto.catalog.multi_location, zepto.eta, zepto.search.facets and zepto.search.multi_location.
  • Zomato: zomato.restaurant.delivery, zomato.restaurant.menu_images and zomato.restaurant.offers.
  • Instagram: instagram.highlights.list, instagram.profile-posts.list and instagram.reels.list are available again.

New optional inputs.

  • Amazon: marketplace on product and search.
  • ASDA: include_raw, and active_only on search, category products and promotions.
  • Blinkit: every capability accepts a pincode or a location_query instead of coordinates (coordinates are checked to be valid latitude and longitude); product and category links as input (product_url, category_url); brand/brands filters on search and category products; include to add optional detail; category_id on categories; and promotion filters (deal_type, including any_promotion, min_discount_percent, max_price, query, subcategory_id, max_scan).
  • Facebook: active_status and country on facebook.ads-library.search; view on facebook.page-videos.list.
  • Flipkart: sort, filters, min_price and max_price on search listings; include_filters and max_filter_values on search categories.
  • Google Trends: category_id on google_trends.trending.list.
  • Greenhouse: location on job search; include_pay_transparency on job details.
  • Instahyre: max_pages and offset on company jobs; include_experience and max_detail_requests on job search; include_page_metadata on job details.
  • Instagram: recent_posts_limit on profiles; higher limits on comments (limit up to 2,000, max_pages up to 150) and trending reels (max_pages up to 25); topics report media_count and source.
  • Internshala: max_results on internships and jobs.
  • JioMart: product details by product_id or url.
  • LinkedIn: company jobs by company_name, company_url or keywords, with max_pages; max_pages on job search, and both report pages_fetched, pages_attempted, stop_reason and page_error; max_comments on posts; include_structured_data on jobs; articles report published_text and published_at_precision; newsletters report author_url.
  • Swiggy: menus by restaurant_url.
  • YouTube: comment sort, and replies with parent_comment_id and replies_continuation.
  • Zepto: pincode on every location-aware capability; page on search and category products.
  • Zomato: restaurant_id on restaurant capabilities; latitude and longitude on search and restaurant lists; cursor on search; sort, filter and page on reviews.

Several other platforms received reliability fixes with no change to their inputs or outputs.

Module versions now live: amazon v0.3.0, arena v0.6.3, asda v0.3.1, ashby v0.1.2, blinkit v0.7.8, bluesky v0.1.4, builtwith v0.1.6, chatgpt v0.2.12, ebay v0.5.3, facebook-ads v0.4.7, facebook v0.5.5, flipkart v0.3.0, gemini v0.3.16, google-ads v0.1.15, google-trends v0.1.8, googlemaps v0.1.21, greenhouse v0.3.0, ikea v0.1.10, instagram v1.5.7, instahyre v0.1.8, internshala v0.1.7, jiomart v0.2.4, lidl v0.2.7, linkedin v1.6.0, linktree v0.3.2, meesho v0.5.5, mmt v0.3.5, morrisons v0.2.2, nana v1.3.9, ninja v0.2.2, parkwhiz v0.2.2, pepperfry v0.3.6, producthunt v0.1.13, reddit v0.3.0, redfin v0.2.5, spothero v0.2.2, swiggy-instamart v0.2.4, swiggy v0.1.12, tata-1mg v0.2.6, tesco v0.2.1, threads v0.4.1, tiktok-ads v0.3.7, tiktok v1.2.4, trustpilot v0.2.2, tumblr v0.6.3, uniqlo v0.1.4, universal-web v0.9.21, x v0.1.13, youtube v1.1.6, zepto v0.1.23, zomato v0.4.3.

google_trends.trending.list now rejects an unknown or unassigned two-letter country code, such as XX, before contacting Google. It returns a terminal invalid_input that names the country field, so a bad code is not retried as a temporary upstream failure. Assigned ISO 3166-1 alpha-2 codes (and XK for Kosovo) remain accepted by validation; Google Trending Now data availability can still vary by country.

2026-10-01: Pinterest v1.4.25 and background backups

Nothing was removed or renamed, and responses only gained fields. Two changes are worth a look in an existing integration: some errors are now more specific, and links are checked before a job starts.

Clearer errors for missing and private accounts. When Pinterest confirms that a board's or profile's owner does not exist, or that the account is private, the job now says so instead of failing with upstream_error:

  • account not found: HTTP 404, error.code: "not_found";
  • private account: HTTP 403, error.code: "forbidden" with error.reason: "account_private";
  • Pinterest asks for sign-in: HTTP 403, error.code: "login_required".

Treat these as final for that link and stop retrying it. Retry upstream_error as before.

The board you ask for is the board you get. Board capabilities now confirm that the returned board matches the requested URL and fail rather than return another board found on the same page. pinterest.user.get reports a profile as private only when Pinterest says it is.

Links are checked up front. Every Pinterest url must be an http or https link on pinterest.com, including country subdomains such as uk.pinterest.com, or a pin.it short link. Other links, including other Pinterest domains such as pinterest.ph and links without https://, are refused with HTTP 422 invalid_input and no job is created. A pin.it link that redirects away from Pinterest is refused too.

New and optional.

  • pinterest.user.get accepts /_saved/ and /_created/ profile links and returns the same profile.
  • pinterest.user-boards.get accepts page_mode: true with cursor to list boards one page at a time, with pagination and outcome in the response. Without page_mode, it returns every board at once as before.
  • Example outputs are published for pinterest.board-full.get, pinterest.board-pins.list, pinterest.pin.get and pinterest.section.get.
  • Background backups: POST /backups with a profile, board or pin link and a credit budget collects every board in the background, resumes after interruptions, and exports results as CSV or JSON Lines.

2026-09-21 — Additive API changes: error envelope, credit ceiling, /v1

Every change here is additive. No field, status code or error code was removed or renamed, and existing integrations need no change.

  • Validation failures (HTTP 422) now also carry the standard envelope: error.code: "invalid_input", error.message and error.fields. The original top-level errors map is unchanged and stays.
  • POST /execute accepts an optional credit ceiling, max_credits in the body or an X-Max-Credits header. A job priced above it is refused with credit_limit_exceeded before acceptance.
  • Every REST path is also served under /v1 (for example POST /v1/execute). The unversioned paths remain supported.
  • A capability that cannot be served at admission now returns HTTP 503 temporarily_unavailable instead of 500 internal_error. MCP reports it with retryable: false.
  • MCP calls without an operation_key are deduplicated by request ID for about 15 minutes rather than indefinitely, so a later session that reuses a small request ID starts a new job. Calls with an operation_key are unchanged.

2026-09-01 — Durable results and fail-fast execution status

  • Results containing escaped NUL characters now save successfully.
  • A result that cannot be saved produces a terminal failure instead of leaving the job marked as running.
  • Polling and Prefer: wait=N return execution_lost promptly when a request ends without a result.
  • Automatic retry recovery prevents duplicate execution and unintended cancellation.

This platform-wide change applies to every scraper and requires no pagination or storage workaround in customer code.

2026-09-01 — Pinterest section backups (v1.4.11)

  • Added pinterest.section-pins.list for bounded, resumable section downloads.
  • pinterest.section.get now fails closed for sections above 1,000 pins instead of returning a potentially incomplete result as successful.
  • Section pages accept Pinterest's verified maximum of 50 raw records and expose pagination.next_cursor, pagination.has_more, pagination.retrieved_total, and an explicit completion outcome.
  • If Pinterest ends a large traversal at its observed ~2,000-item ceiling, the last page is marked outcome.status: incomplete instead of complete.

Existing integrations using pinterest.section.get for large sections must move to pinterest.section-pins.list and continue until has_more is false.

Credit prices and plans: Upscrape pricing