Skip to content

Migrating from SerpApi Google News

Replace https://serpapi.com/search?engine=google_news with /v1/news/everything. The parameter list is short, so most of the work is unpacking the q string: on APITube site:, when: and the rest are not operators, they are separate parameters.

The bigger change is what comes back. SerpApi returns a link; APITube returns the article.

Why teams switch

SerpApi Google NewsAPITube
Article textNone — you follow the link and fetch it yourselfFull body and body_html in the response
PaginationNone — one request, one pagepage + per_page, up to 250
Total countNot reported/v1/news/count
FilteringGoogle's q operators60+ structured parameters that compose freely
EnrichmentNoneEntities, sentiment (title/body/overall/per-entity), IPTC categories, topics, industries, publisher bias and rank, readability
Result identityOpaque tokensStable integer ids

You are replacing a scraper with an index, and that explains every difference below.

Your first request

bash
# SerpApi
curl "https://serpapi.com/search?engine=google_news&q=tesla&gl=us&hl=en&api_key=YOUR_KEY"
bash
# APITube
curl "https://api.apitube.io/v1/news/everything?title=tesla&source.country.code=us&language.code=en" \
  -H "X-API-Key: YOUR_API_KEY"

Operators become parameters

In qAPITube
teslatitle=tesla
tesla musktitle=tesla,musk (comma is AND, as on Google)
"artificial intelligence"title="artificial intelligence"
tesla OR rivianquery=title:(tesla OR rivian)
tesla -musktitle=tesla + ignore.title=musk
site:bbc.co.uksource.domain=bbc.co.uk
-site:cnn.comignore.source.domain=cnn.com
when:7dpublished_at.start=NOW-7d
after: / before:published_at.start / .end
intitle: / allintitle:Nothing — APITube only searches headlines anyway
location:"New York City"location.name=New York City
source:BBCsource.domain=bbc.co.uksource.name does not exist

Inside query=, every bare term needs its title: prefix: query=tesla OR rivian does not search headlines at all.

The full operator reference is in the migration kit.

Parameter mapping

SerpApiAPITubeNote
qtitle, query, source.domain, published_at.*Splits — see above
glsource.country.codeGoogle's search country → the publisher's country. uk must become gb
hllanguage.codeInterface language → article language. Two letters only
so=1sort.by=published_at&sort.order=desc
so=0sort.by=relevance returns 500 with a search term
topic_token, section_tokencategory.id / topic.idOpaque Google tokens; re-express by hand
publication_tokensource.domain
story_tokenstory.id groups articles but is not a filter
kgmidorganization.name / person.name
no_cache, async, zero_trace, deviceThey describe how SerpApi scrapes Google
output=htmlJSON, plus eight export formats
page, per_pageNew: SerpApi has no pagination

What does not carry over

Relevance ordering. sort.by=relevance returns 500 ER0183 when a search term is present. Use sort.by=published_at, or sort.by=source.rank.opr to rank by publisher Open Page Rank — publishers, not articles, but usable.

Body-text search. APITube searches headlines. There is no content=, and unknown parameters are ignored silently — a forwarded one returns the whole index with a 200. The compensation is that the body is in the response, so filter locally.

Wildcards. title=immuni* is accepted and returns the entire index with a 200. Expand into query=title:(immunity OR immunization OR immunology).

when:30m. APITube reads m as months: NOW-30m returns 28 509 of 29 747 title=tesla articles. NOW-1h, NOW-7d and NOW-1y behave as expected; there is no minutes unit.

Google's clustering. highlight and stories[] have no counterpart. Articles covering the same story share a story.id, but there is no lead article and no cluster endpoint.

Russian and Ukrainian. language.code=ru and uk return 400 ER0237. Google's regional forms (en-US, pt-BR, zh-CN) return 400 ER0061 — two-letter codes only.

Two things to check before cutting over

Domain coverage varies. site: maps exactly to source.domain, but an indexed domain with no articles returns 0 with a 200. On 27 July 2026 theguardian.com, apnews.com, techcrunch.com and bbc.co.uk returned four-figure counts while reuters.com and cnn.com returned zero.

Do not add a country filter on top of a domain. Many publishers carry country_code: "un" in the source index, so source.domain=theguardian.com&source.country.code=gb returns nothing while the domain alone returns thousands.

What you gain

The fetch-and-extract stage disappears: body, body_html, an extractive summary, named entities with per-entity sentiment, sentiment for title and body separately, IPTC MediaTopics plus topic and industry axes, publisher political bias and Open Page Rank, readability scores, and export to eight formats. Plus 250 articles per request instead of one fixed page, and filters that compose — SerpApi's q cannot be used together with its advanced parameters at all.

Next steps