Changelog
Every visible change to the API, the SDKs, and the dashboard. Newest first. Breaking changes are flagged; we give 14 days of notice.
Changelog
Breaking API changes are announced 14 days in advance via email + this page. In-flight requests are always settled under the old contract.
2026-06-11
Docs
- Restructured the docs around the one-request-shape model. New pages: Core concepts (how the API works, dedicated endpoints vs the Universal scraper, the credit model) and Endpoint reference (how 453 endpoints share one shape and how to find any of them).
- New Universal Web Scraper API page: scrape any URL to JSON, HTML, or text via
/api/v1/universal/get. - Getting started rewritten to lead with the generic
{site}/{resource}pattern and a non-marketplace-specific path. Error codes and billing generalized across all verticals (not just commerce). - The full browsable catalogue of all endpoints now lives at /scraper-api.
2026-05-19
API
- New error code:
404 product_not_found. When a target site returns a 404 for the requested item (delisted, ID malformed, or never existed in the chosen region), the API now returns a clean404with{"error":"product_not_found","retryable":false}instead of the misleading502 target_unreachableit returned before. SDK consumers should treat 404 as a terminal failure; the item won’t come back. - Skip the redundant retry strategy on confirmed 404s. Saves 1 paid-residential rotation per delisted item.
- See updated error codes table and billing policy (404s remain free).
- Bot-manager interstitial detection (rolled out on the Amazon search target first): the extractor now recognizes the Akamai bot-manager interstitial (a 2-3 KB JS shell carrying a
bm-verifytoken and atriggerInterstitialChallengescript). Previously these silent challenges slipped past the captcha detector, the extractor saw zero results, and the request returned502 extraction_failed. They now trigger the standard residential-IP rotation; you weren’t charged before and still aren’t, but the failure is now both rarer (rotation almost always recovers) and more honest when it does happen. - Search endpoints add an optional
no_results: trueflag (withtotal_results: 0) for the rare case where a site returns a real search page with zero matches. Pre-patch this surfaced as502 extraction_failed; it now correctly returns HTTP 200 with an emptyproductsarray. - Marketplace search field-extraction fixes (5 fields on every result card; shipped on the Amazon target):
reviews_count: now populated. Pre-fix this was alwaysnull; the extractor was looking at a markup class the site hadn’t shipped in months. Source of truth is now thearia-labelof the rating wrapper (“5,054 ratings”), which gives the precise integer rather than the rounded “(5K)” display value. Coverage on a typical search page: ~95-100%;nullonly when the site hides reviews on brand-new listings.price_strikethrough: no longer captures per-unit prices. The historic bug surfaced as0.23on a cologne card (which is the$0.23/milliliterper-unit price, not a list price). The fix requires a strikethrough marker and rejects any candidate whose surrounding text contains/fluid ounce,/milliliter,/Fl Oz,/Count,/Pound,/Ounce,/Each,/Pack, etc. Strikethrough is nownullwhen the product isn’t on sale, and strictly greater than the current price when it is.highest_price: mirrors the fixed strikethrough on search cards (real multi-tier ranges only surface on product pages).sales_volume: now populated. Returns the verbatim site string ("5K+ bought in past month","200+ bought in past week"). Coverage on popular categories: ~80-100%;nullwhen the site doesn’t surface a velocity badge (low-traffic categories).organic_position: guaranteed 1-indexed across non-sponsored cards. Sponsored cards getsponsored_positioninstead. The first organic card after any run of sponsored cards still gets position 1.
2026-04-21
Dashboard
/app/settings/billing: PAYG top-up calculator now updates the “Credits you’ll get” and “Basic scrapes” fields live as you type.- Loading skeletons added to dashboard home, billing, usage, and API keys routes - no more blank flash on first navigation.
- Sidebar “Documentation” link now points at the new
/docssite.
Docs
- Launched
/docson the marketing site: Getting started, endpoint pages (product / search / batch), guides (auth, errors, rate limits, SDKs, billing, country & language), and this changelog. - Added
/docs/llms.txt,/docs/llms-full.txt, and an.mdvariant for every doc URL so LLMs / coding agents can ingest the full corpus cheaply.
SDKs
chocodata(Node) v0.1.4 - README updated with 5-credit pricing, removed claims about “no credit system”.chocodata(Python) v0.1.4 - same.chocodata-gov0.1.4 - same.
2026-04-16
API
- Credit rebase: 1 basic scrape is now priced at 5 credits (was 1). Plan allowances and PAYG packages scaled x5 accordingly - your dollar-cost-per-scrape is unchanged. The “1 credit = 1 scrape” pre-launch shorthand only applied to internal testing.
- Headers prefix changed from
Spb-*toAsa-*. Old prefix will keep returning values for 90 days, then be removed.
Dashboard
- Live credit balance now read from authoritative ledger on every page load - no more stale numbers from cached mirrors.
- Monthly usage graph restyled with visible bars even on zero-credit days.
2026-04-10
API
- Shipped production success-rate improvements for the Amazon target’s latest A/B layout. Measured SR jumped from ~87% to ~97% on a 30-query mixed international set.
- Parser hardening: gift-card and subscription-plan product templates now extract correctly instead of hitting
extraction_failed.
2026-04-01
API
render_jsandscreenshotquery params reserved. Passing either returns501 not_implementedtoday; the real implementation is on the roadmap for Q3.- New response header
Asa-Attemptsreports how many internal retries we used to fetch your page.
Billing
- Non-2xx responses are now guaranteed free - no edge case where a partial 502 is charged. See Billing policy.
Earlier
Older entries predate the public launch and aren’t preserved here. If you need historical info (old behaviour of a specific endpoint), email hello@chocodata.com and we’ll pull it from internal records.