Skip to main content
Spider Cloud SDK and su-cloud CLI
Spider Cloud has a Python client and a command line. Everything the dashboard does - deploy a project, run and watch jobs, schedule them, pull the scraped items - now works from a script.
  • su-cloud CLI: deploy, run, jobs, logs, items, download, stats, schedule-add, destination-add and more.
  • SpiderCloudClient library: projects, deploys, jobs, schedules and destinations, plus job.items() to stream data by cursor and job.download() for a full .jsonl.gz export.
  • Authenticates with a per-account API token, created in the dashboard under Spider Cloud → API tokens. Pure standard library, no runtime dependencies. See SDK & CLI.
Temu search returns ~40 product URLs, ~2s
Temu search is faster and wider. POST /goods/temu-search now returns about 40 product URLs per keyword in ~2s (up from ~14, and no third-party search in the loop). Search is discovery only
  • fetch each URL’s data through POST /goods/temu-product. The details parameter has been removed.
New Temu plugin - product data and keyword search
New plugin: Temu. Two endpoints for Temu, which never serves product data to a browser (the page hydrates through a call that refuses automation). The plugin reads the ld+json document Temu serves to search crawlers instead - the only view that carries the real fields.
  • POST /goods/temu-product?url=... returns a single product as JSON: name, description, brand, price, priceCurrency, availability, rating, reviewCount and images.
  • POST /goods/temu-search?keyword=... returns product URLs taken straight from Temu’s own search page (no third-party search in the loop). With details=true it also resolves the top results to full product objects.
Temu meters the crawler view, so the plugin is built for targeted use (price checks, monitoring, comparison), enforces its own fleet-wide rate limit, and answers 429 when the budget is spent. Price currency follows the exit region. See the Temu plugin page.
Claude Code plugin
ScrapeUnblocker installs into Claude Code with two commands.
You get the three MCP tools (fetch_html, fetch_parsed, google_search), a /scrape-url command, and reference skills Claude pulls in while writing scraping code for your project. Your API key is prompted for once when the plugin is enabled and stored in your operating system’s keychain - no environment variable to set, no config file to edit. See Claude Code Plugin.
TikTok and Instagram parsed data, Google Local contacts, Skyscanner markets
Five fixes, all from one round of outside testing.parsed_data=true now works on TikTok and Instagram. Both sites build their pages in the browser, so there was almost nothing in the markup to read and the response came back as little more than a page title - even though the HTML we handed you carried every number. Dedicated extractors now read the embedded payload, which also means exact integers instead of the rounded prose the page paints: a TikTok video returns plays, likes, comments, shares and saves; an Instagram post returns exact likes and comments, the real author.username and a real posted_at. See Parsed data.Google Local returns phone and website. The phone used to arrive glued to the end of hours; it is now its own field and hours is clean. website is new. Paid listings are flagged with sponsored and no longer report “Sponsored” as the business name. See Google Local.Skyscanner flights honour market, locale and currency. A request for market=TR&locale=tr-TR&currency=TRY came back priced in GBP with en-GB deep links; it now returns Turkish lira and Turkish place names./serpApi no longer fails a query that has an answer. A search whose results page did not finish rendering was returned as a successful but empty fetch, which surfaced as 502 No SERP results collected on a query that worked on the next call. That page is now discarded and retried. Separately, a search where Google genuinely reports no matches - normal for a narrow site: query - returns 200 with an empty result set instead of a 502.
New plugin - eBay Search
POST /marketplace/ebay-search turns any eBay search into structured JSON on 19 regional marketplaces, from ebay.com to ebay.com.au. Each listing comes back with title, numeric price and currency, condition (plus a normalised conditionCode), seller username and feedback, shipping cost, sold / watcher / bid counts, image and a clean item URL:
Filter with condition, listing_type, min_price/max_price, free_shipping, seller or category; sort with sort; page with page/page_size (60, 120 or 240 per page).When eBay finds no exact match it still serves a page of loosely-related suggestions. Those are never passed off as results: the response sets exactMatches: false and explains it in notice.The plugin is live in the dashboard, in all four SDKs on 0.1.8, and documented at eBay Search.
SERP: every ad, accurate organic counts, AI Overview
/serpApi now returns every paid unit on the page. Google had started serving part of its ad inventory from a wrapper inside the organic column rather than the two containers we read, so those units were missing: a German insurance query carried six ads and came back with four. Ads are now found wherever they sit and sorted into topAds / bottomAds by their position relative to the organic results.organicResultsCount was double the real number. Two of the paths used to collect organic results reached the same entries at different depths, so every result was returned twice - positions 1-9 followed by an identical 10-18. The list is now deduplicated, which means the count you get for an unchanged query will be about half of what it was, and correct. Paid blocks that Google places inside the organic column are excluded from organic as well.New field: aiOverview. Google’s AI-written summary above the results, with the hostnames it cites, or null when the search has none:
It is read from the page we already fetched, never waited for, so it adds no latency. See SERP scraping.Faster, too. The extraction step used to wait a flat 1.2 s for ads that measurement showed arrive within ~0.4 s, and Google’s “unusual traffic” challenge went undetected whenever it was served at the search URL instead of redirecting - so a burnt exit was retried instead of replaced. Both fixed.wait_after_load works again. The engine now serving SERP was ignoring it entirely. It is also no longer something you should need: extraction waits for the ads on its own, so use wait_after_load only when you deliberately want a longer settle.
Spider Cloud documented
Spider Cloud now has its own section: host your own Scrapy project with us, deploy it straight from a git repository, run and schedule spiders, and read the items back - with ScrapeUnblocker routing built in, so a spider that gets blocked elsewhere needs no proxy or fingerprint code here.Eight pages, starting with Getting started, which walks one repository from an empty dashboard to a finished run with data in it. The one to read before your first run is routing modes - the choice between off, marked and all decides what a job costs:
all sends every request through the API, so a spider walking a hundred thousand detail pages makes a hundred thousand paid calls. marked exists so a producer can be unblocked without dragging its consumer onto the paid path.Also covered: projects and settings (including why some projects cannot see environment variables at all), deploys and refs, jobs, schedules and delivery destinations.
All four SDKs on 0.1.6 - typed billing errors
The Node.js, Ruby and PHP SDKs now carry the same typed billing errors released for Python earlier today, and all four are on 0.1.6 so their version numbers line up from here on:
Each one gains PaymentRequired* for 402 (with the quota, credit-limit and failed-payment subclasses), the no-subscription flavour of 401, and typed errors for 404, 408, 415 and 422. Nothing was removed, so existing APIError / ApiException handlers keep working. See the Node.js, Ruby and PHP guides.
Python SDK 0.1.6 - typed billing errors
scrapeunblocker 0.1.6 for Python raises a typed exception for every documented status code. 402 previously arrived as a bare APIError; it now raises PaymentRequiredError, with a subclass per billing block - QuotaExceededError, CreditLimitExceededError and PaymentFailedError - so each can be handled separately:
Also new: NoSubscriptionError (the 401 that means the key is fine but the account has no plan), plus NotFoundError, BrowserTimeoutError, UnsupportedContentError and ValidationError. Nothing was removed and every new class derives from APIError, so existing handlers keep working. See the Python SDK guide.
402 and 401 responses documented
The Errors page now documents HTTP 402, which was missing from the status table entirely. A 402 has three distinct plain-text bodies, each with its own fix:
  • Quota exceeded - the plan’s requests for this billing period are used up
  • Credit limit exceeded - the unpaid balance has grown past the account’s credit limit
  • Payment failed - update payment method - a card payment for an open invoice has been declined three times
All three clear on their own once the underlying billing state changes - access returns within about a minute, with no key change needed. Note that subscribing to a new plan does not clear a failed payment: the old unpaid invoice has to be settled. See 402 payment required.HTTP 401 is now documented properly too, with its two bodies - Unauthorized (key not recognised) and No valid subscription (key is fine, account has no active plan) - plus the neighbouring cases: omitting the x-scrapeunblocker-key header entirely returns 400, not 401, and neither 401 nor 402 counts against your quota. See 401 unauthorized.
New oopbuy product-search plugin
A new plugin returns oopbuy.com product-search listings as structured JSON - title (English and Chinese), USD and CNY price, monthly sales count, image and a product-detail link, in about a second:
Pick the source marketplace with channel (1688, taobao, official), order with sort, and page with page / page_size. Note that oopbuy trademark-blocks brand-name keywords (nike, adidas) at its own backend - those come back as a successful 200 with keywordRejected: true and an empty results array (oopbuy’s own genuine response), not an error. Available in the dashboard, the API reference, and all four SDKs. See oopbuy Search plugin.
New Google Local (Maps) plugin
A new plugin returns Google Local (Maps) business listings as structured JSON - name, rating, review count, price level, category, address, opening hours and a top review snippet:
It runs on our warm, anti-bot-cleared Google sessions, so you get the local pack without a Google Places API key or billing project. Available in the dashboard, the API reference, and all four SDKs. See Google Local plugin.
Skyscanner plugins in the API reference
The three Skyscanner plugin endpoints are now part of the public OpenAPI spec, so they show up in the API Reference and in any OpenAPI-aware client (Postman, Insomnia, code generators):
Nothing changed about how they work - they were already documented and available in all four SDKs. See Skyscanner plugins.
Clearer errors for non-HTML URLs and Skyscanner searches
getPageSource no longer reports two cases as 403 Blocked by bot protection when no block was involved:
  • A URL that serves an image or other non-HTML resource now returns 415 naming the content type. For images, use getImage.
  • A Skyscanner flights / hotels / car-hire search URL now returns 400 pointing at the plugin that serves it, with the endpoint in the X-Recommended-Endpoint header. Other Skyscanner pages are unaffected.
Also fixed: getImage returned 404 No image found for every URL. It now returns the PNG.
Hosted MCP connector
Added a hosted MCP connector so you can use ScrapeUnblocker in claude.ai (web and mobile) with no local install - just add a custom connector with your key:
See the MCP server guide.
MCP server for Claude
Released the official MCP server so Claude (Desktop, Code, and the web app) and any other Model Context Protocol client can fetch any web page through ScrapeUnblocker, using your own API key:
Three tools: fetch_html, fetch_parsed, and google_search. See the MCP server guide.
Official SDKs
Released official client libraries for four languages, each wrapping getPageSource (HTML / parsed JSON / cookies), serpApi, getImage, and the Skyscanner plugins - with typed errors and automatic retries:
See the Python, Node.js, PHP and Ruby guides.
Plugins
Introduced Plugins - ready-made scrapers for specific sites that return clean, structured JSON. Available in the dashboard (no code) and via the API for volume.First release covers three Skyscanner plugins:
  • Flights - POST /flights/skyscanner-quotes
  • Hotels - POST /hotels/skyscanner-quotes
  • Car Hire - POST /carhire/skyscanner-quotes
All three share your existing API key and plan quota. See the Plugins overview.
v1.0.0
Public documentation launched at developers.scrapeunblocker.com.Three endpoints documented:
  • POST /getPageSource
  • POST /serpApi
  • POST /getImage
All other paths remain internal and are not part of the public API contract.