Migrating from ScrapingBee
Use this guide to replace news searches and supported news-article requests from ScrapingBee. APITube does not replace general web scraping.
The mappings cover Google Search API requests with search_type=news and article requests for publishers covered by APITube.
Why use APITube for news collection?
| ScrapingBee | APITube | |
|---|---|---|
| Article text | One fetch per article, then your extraction rules | body and body_html in the same response |
| Per request | One page | Up to 250 articles (10 on Free, 50 on Starter, 200 on Basic) |
| Cost model | Credits per request: 1 without JS, 5 with, 10–25 premium proxy, 75 stealth, 15 for a Google search | No per-request credit |
| Discovery | RSS parsing, sitemap crawling, or SERP scraping | Search for articles with API filters |
| Extraction | Per-publisher selectors that break on redesigns | Structured fields |
| Article details | Yours to build | Entities, sentiment, IPTC categories, topics, industries, readability, publisher bias |
ScrapingBee credit costs depend on options such as render_js and premium_proxy. See ScrapingBee's knowledge base.
APITube returns article text with the search results, so you do not need a separate fetch request for every article.
Your first request
# ScrapingBee
curl "https://app.scrapingbee.com/api/v1/store/google?search=tesla&search_type=news&country_code=us" \
-H "Authorization: Bearer YOUR_KEY"# APITube
curl "https://api.apitube.io/v1/news/everything?title=tesla&source.country.code=us" \
-H "X-API-Key: YOUR_API_KEY"Parameter mapping
| ScrapingBee | APITube | Note |
|---|---|---|
search | title, query, source.domain, published_at.* | Google operators split into separate parameters |
search_type=news | — | Endpoint choice. The other seven values have no equivalent |
country_code | source.country.code | Proxy country → publisher country. uk must become gb |
extra_params[hl] | language.code | Two letters only; en-US returns 400 ER0061 |
extra_params[gl] | source.country.code | Same caveat as country_code |
extra_params[num] | per_page | Max 250; 10 on Free, 50 on Starter, 200 on Basic |
extra_params[start] | page | Offset → page number |
extra_params[tbs] | published_at.start / .end | Write the bound explicitly |
url | — | No URL lookup exists — see below |
extract_rules | title, body, published_at, author.name, image | The fields are already there |
render_js, premium_proxy, wait*, block_* | — | Not needed: the API returns article content directly |
js_scenario, screenshot*, cookies, session_id | — | Keep ScrapingBee |
Operators inside search: site: → source.domain, -site: → ignore.source.domain, when:7d → published_at.start=NOW-7d, -term → ignore.title, intitle: needs no equivalent because APITube already searches only headlines. inurl: has no equivalent.
URL lookup is not supported
There is no URL lookup, and the obvious parameter names fail silently.
curl "https://api.apitube.io/v1/news/count?api_key=YOUR_API_KEY&href=https%3A%2F%2Fwww.bbc.co.uk%2Fnews%2Farticles%2Fc8dng1v72lno"
# {"count":3050326333} ← the entire indexAPITube does not support URL lookup with href=, url=, article.href= or link=. These parameters may be ignored while the request returns 200. Search by topic, entity or publisher instead.
Tasks that still need ScrapingBee
- Sites that are not news publishers — competitor pages, government portals, forums, e-commerce
- Anything behind a login (
cookies,session_id) - Anything interactive (
js_scenario— consent walls, "load more", pagination) - Screenshots
- Extracting specific elements from a web page's HTML
- Fetching one specific URL
Keep ScrapingBee for these tasks. The migration kit lists them in reference/what-you-keep-scraping.md.
Check your domains first
curl "https://api.apitube.io/v1/news/count?api_key=YOUR_API_KEY&source.domain=example.com"A count request can return a positive count, {"count": 0} with HTTP 200, or 400 ER0214 for an unknown source. Check the count as well as the status to confirm coverage.
Other migration differences to check
Search is headlines-only. No body-text parameter. Filter on organization.name instead of a keyword, or filter the returned body locally.
NOW-30m means thirty months. APITube reads m as months. NOW-1h, NOW-7d and NOW-1y behave as expected; there is no minutes unit.
Wildcards return everything. title=immuni* gives 200 and the whole index. Expand into query=title:(immunity OR immunization OR immunology).
Unknown parameters are ignored. A forwarded search= or render_js= produces a successful-looking response with the query unfiltered.
What you gain
APITube returns article text, entities with per-entity sentiment, separate title and body sentiment, categories, topics, industries, publisher details and readability scores. Responses also include is_duplicate and story.id, and support eight export formats.
Next steps
- scrapingbee-apitube-migration-kit — news search and article request mappings, a list of tasks that still need scraping, and Node.js and Python compatibility libraries (73 tests, identical output). Includes an AI prompt that flags requests it cannot convert.
- Parameters reference
- Common migration issues