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-cloudCLI:deploy,run,jobs,logs,items,download,stats,schedule-add,destination-addand more.SpiderCloudClientlibrary: projects, deploys, jobs, schedules and destinations, plusjob.items()to stream data by cursor andjob.download()for a full.jsonl.gzexport.- 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. Thedetailsparameter 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,reviewCountandimages.POST /goods/temu-search?keyword=...returns product URLs taken straight from Temu’s own search page (no third-party search in the loop). Withdetails=trueit also resolves the top results to full product objects.
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¤cy=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: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: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: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 upCredit limit exceeded- the unpaid balance has grown past the account’s credit limitPayment failed - update payment method- a card payment for an open invoice has been declined three times
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
415naming the content type. For images, usegetImage. - A Skyscanner flights / hotels / car-hire search URL now returns
400pointing at the plugin that serves it, with the endpoint in theX-Recommended-Endpointheader. Other Skyscanner pages are unaffected.
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
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
v1.0.0
Public documentation launched at
developers.scrapeunblocker.com.Three endpoints documented:POST /getPageSourcePOST /serpApiPOST /getImage

