Skip to content

Migrating from the Guardian Open Platform

Replace content.guardianapis.com/search with /v1/news/everything. But read the next section first: for a large class of queries the right answer is to keep the Guardian client, and knowing which is the whole point of this guide.

These are not the same product

The Guardian API is one publisher's complete archive. APITube is many publishers' recent coverage.

Guardian Open PlatformAPITube
Publishers1500 000+
Guardian articles2 682 071~3 700–4 800
Archive depthBack to 1999Guardian content back to 2001, thin before this year
Search scopeFull body textHeadlines only
Per request200250
Rate limit720/minute, 50 000/day on the free key50/minute paid, 10/minute free

APITube holds roughly 0.14–0.18% of the Guardian's own archive. That is not a coverage bug — it is two different products.

Keep the Guardian client for: the archive, body-text search, the curated tag graph, editorial structure (sectionId, type=liveblog, star-rating, production-office), lastModified-driven refresh, and any stored Guardian article ids.

Move to APITube for: publishers other than the Guardian, entity extraction, sentiment, cross-publisher deduplication, and commercial licensing.

Most teams end up running both, routed by question. The shim in the migration kit is built to sit next to your existing client.

Your first request

bash
# Guardian — the public test key works
curl "https://content.guardianapis.com/search?api-key=test&q=tesla&page-size=200&show-fields=headline,bodyText,byline"
bash
# APITube
curl "https://api.apitube.io/v1/news/everything?title=tesla&per_page=200" \
  -H "X-API-Key: YOUR_API_KEY"

The counts are not comparable

QueryResults
Guardian, q=tesla (default scope)4 466
Guardian, query-fields=headline507
Guardian, query-fields=body5 018
APITube, title=tesla29 811

Two effects at once: APITube searches 500 000+ publishers' headlines, the Guardian searches one publisher's full text. Note also that the Guardian's default matches none of the explicit query-fields combinations — set query-fields=headline before comparing anything.

NOT and - do not exclude on the Guardian

This is the conversion most likely to surprise you, and it is measurable:

Guardian queryResults
tesla4 466
musk9 138
tesla NOT musk2 675 529 — 99.75% of the archive
tesla -musk11 007 — more than tesla alone

Neither form narrows anything. APITube's ignore.title genuinely excludes — title=tesla returns 29 811 and title=tesla&ignore.title=musk returns 27 147.

So the conversion changes your result set, almost certainly towards what the query author intended. Expect it rather than treating it as a regression.

Parameter mapping

GuardianAPITubeNote
qtitle or queryHeadlines only
query-fields=headlinetitleThe honest comparison point
query-fields=bodyNo body-text search
sectioncategory.idDesks, not subjects — see below
tagNo counterpart to the curated tag graph
from-date / to-datepublished_at.start / .endto-date means the end of that day
use-dateThe Guardian has four dates; APITube has one
order-by=newest / oldestsort.by=published_at + sort.order
order-by=relevanceReturns 500 ER0183 with a search term
page / page-sizepage / per_page200 → 250
show-fieldsAPITube always returns every field
langlanguage.codeTwo letters only
production-office, star-rating, type, ids, rightsGuardian-specific

The full table is in the migration kit.

Sections are desks, not subjects

Guardian sections say who filed the story; IPTC MediaTopics say what it is about. section=technology returns 1 182 articles from the Guardian's tech desk; category.id=medtop:13000000 returns 4.7 million across all publishers, classified by subject.

Specific losses in that conversion:

  • science and technology share medtop:13000000 — the distinction disappears.
  • culture, film, music, books, artanddesign, stage and games all collapse into medtop:01000000.
  • world, uk, us and australia are newsrooms with no subject code at all. If you wanted publishers from a country, that is source.country.code.

Other things that will bite

to-date covers the whole day. 2026-07-27 on the Guardian includes that day; converting it to 2026-07-27T00:00:00Z silently drops it. Use T23:59:59Z.

No lastModified. The Guardian tracks updates; APITube exposes only publication time. Pipelines that re-fetch changed articles have no trigger.

Article ids do not translate. Guardian ids are paths (technology/2026/jun/24/…), APITube's are integers, and there is no URL lookuphref=, url= and link= are ignored silently and return the whole index with a 200.

page=0. The Guardian rejects it; APITube treats it as page 1, so a loop starting at zero returns the first page twice.

total costs a request. The Guardian reports it in every response; APITube needs /v1/news/count with the same filters. Call it once per filter set.

What you gain

500 000+ publishers instead of one, named entities with Wikidata links and sentiment towards each entity, sentiment on headline and body separately, IPTC MediaTopics alongside topic and industry axes, publisher political bias and Open Page Rank, readability scores, cross-publisher deduplication via is_duplicate and story.id, and export to eight formats.

The last two only mean anything once you have more than one publisher — which is the reason to be reading this page.

Next steps