Google Yahoo Bing DuckDuckGo Brave

The Cheapest News API for Developers

One GET returns ranked headlines as JSON — publisher, publication date and summary line on every row, plus the article image when the result carries one.

Try for Free View Documentation
News from $0.01/1K calls Freshness down to the last hour 112 Countries Free to start

One endpoint, GET /api/news. Pick the search engine with engine=; the seven article fields come back in the same order, with the same names, whichever one you pick.

Run a live news search

One real call against the API — no signup, no key. Articles are drawn as a news page would, next to the raw JSON.

One News Endpoint, One Price on Every Engine

News is its own billing category, priced per call. Switching engine= never changes what a news call costs, so you can compare engines on coverage instead of on budget.

Default

Default

$0.20
per 1,000 calls
  • No deposit and no subscription
  • Covered by the free API calls
  • One charge per call on a $10+ balance
  • Below $10, a multi-page call bills per page
Per call$0.0002
Deposit neededNone
See pricing →
Scale

Scale

$0.01
per 1,000 calls
  • Unlocked by a one-time $500 deposit
  • 20× off the Default rate
  • Always one charge per call
  • Same rate on all five engines
Per call$0.00001
Deposit needed$500 once
See pricing →

A deposit is a top-up you spend, not a monthly fee, and the tier it unlocks is permanent. One more rule worth knowing before you budget: on engine=google a news call is always billed as a single page, whatever num or pages you send.

Five News Engines, One Article Shape

Different engines index different outlets and rank them differently — that is the reason to have five. What they never differ on is the response: same seven keys, same order, same types.

EngineParameterWhat one call returns
Google News engine=google The widest set on this endpoint and the fastest. Leave num off and it hands back its whole result list in a single call — around 100 articles. pages has no effect here, and the call is always billed as one page.
Yahoo News engine=yahoo Walks the result pages: roughly 10 articles a page, up to the 5-page ceiling, which lands at about 47–49 articles when you ask for num=50. Accepts sort and safe.
Bing News engine=bing Also paged, at roughly 10 articles a page up to 5 pages. Accepts sort and safe.
DuckDuckGo News engine=ddg About 29 articles on a bare ?q= call. Setting num is what asks it to go deeper, and it has been measured up to about 44 articles.
Brave News engine=brave About 29 articles once num is set. Worth pairing with a second engine when you are monitoring a story rather than sampling one.

num is a ceiling on this endpoint, not a promise: it is capped at 50, and no engine has been measured returning the full 50. Every figure above is a measured typical, not a guaranteed minimum — a quiet query has fewer articles to give. When a call comes back short of what you asked for, it says so in a delivery block rather than leaving you to count rows.

THE PARAMETER THAT MATTERS

Freshness is what makes a news call different from a web call

A web search wants the best page ever written on a subject. A news search wants the page written twenty minutes ago. freshness is the difference: h or 1h for the last hour, d/1d for the last 24 hours, 7d or w for the last week, m/1m for the last month, y/1y for the last year.

It is accepted on all five engines. Pair it with a 15-minute poll on freshness=h and you have a crisis monitor; pair it with freshness=7d and a weekly cron and you have a coverage report. Every article also carries its own publishedTime as a plain YYYY-MM-DD date, or null when the result carried no date — so you can filter again on your side without parsing “3 hours ago”.

GET /api/news
  ?q=acme+corp
  &engine=google
  &freshness=h
  &country=us

{
  "position": 1,
  "source": "Reuters",
  "publishedTime": "2026-09-07",
  "title": "Acme Corp names new CFO",
  "snippet": "The appointment follows...",
  "url": "https://example.com/acme-cfo",
  "image": null
}

Get News Articles in One Request

No SDK, no queue to poll, no job id to chase. A news call is a GET with an API key header, and the articles are in the response body when it returns.

cURL — three news calls worth copying
# 1. Breaking coverage — everything published in the last hour
curl "https://apiserpent.com/api/news?q=acme+corp&engine=google&country=us&freshness=h" \
  -H "X-API-Key: YOUR_API_KEY"

# 2. Newest first, 25 articles — sort= is taken on the engines that offer it
curl "https://apiserpent.com/api/news?q=data+centre+outage&engine=bing&sort=date&num=25" \
  -H "X-API-Key: YOUR_API_KEY"

# 3. A local market, in its own language, over the past week
curl "https://apiserpent.com/api/news?q=energiepreise&engine=brave&country=de&language=de&freshness=7d" \
  -H "X-API-Key: YOUR_API_KEY"
JSON Response (format=full)
{
  "success": true,
  "query": "acme corp",
  "type": "news",
  "engine": "google",
  "country": "us",
  "pagesScraped": 1,
  "results": {
    "articles": [
      {
        "position": 1,
        "title": "Acme Corp names new chief financial officer",
        "url": "https://example.com/acme-cfo",
        "source": "Reuters",
        "publishedTime": "2026-09-07",
        "snippet": "The appointment follows a quarter in which...",
        "image": null
      }
    ],
    "totalResults": 42
  },
  "meta": {
    "totalArticles": 42,
    "elapsed": "882ms",
    "timestamp": "2026-09-07T10:47:33.000Z"
  }
}

Send format=simple instead and each article is trimmed to position, title, url and source — the four fields a mention-detection job actually reads, without the summary text or the image URL.

Bash — a brand-mention monitor in fifteen lines
# Poll every 15 minutes for coverage published in the last hour, and print
# only the articles this machine has not already seen. `url` is the key:
# one story is one row, so a repeat here is a genuinely new article.
SEEN="$HOME/.acme-seen"; touch "$SEEN"

while true; do
  curl -s -G "https://apiserpent.com/api/news" \
      --data-urlencode "q=\"Acme Corp\"" \
      -d "engine=google" -d "country=us" -d "freshness=h" \
      -H "X-API-Key: $SERPENT_KEY" \
    | jq -r '.results.articles[] | [.publishedTime, .source, .title, .url] | @tsv' \
    | while IFS=$'\t' read -r date src title url; do
        grep -qxF "$url" "$SEEN" && continue
        echo "$url" >> "$SEEN"
        echo "NEW  $date  $src  $title"
      done
  sleep 900
done

Every Field a News Call Returns

Seven named fields per article, not HTML you have to select against. Nothing here needs a parser of your own, and nothing changes shape between calls or between engines.

Article fields

  • articles[].position
  • articles[].title
  • articles[].url
  • articles[].source
  • articles[].publishedTime
  • articles[].snippet
  • articles[].image
  • totalResults · pagesScraped

That is the complete set. position is 1-based and never skips a number, so rank 7 in the array is rank 7 on the page.

Request parameters

  • q (the search query, required)
  • engine (google, yahoo, bing, ddg, brave)
  • freshness (h/1h, d/1d, 7d, w, m/1m, y/1y)
  • country (112 codes; uk and gb both work)
  • language (ISO 639-1, e.g. en, de, ja)
  • num (1–50 articles)
  • pages (1–5, used when num is unset)
  • sort (date, relevance) · safe · format

GET /api/countries returns the full country list and needs no API key.

What the shape guarantees

Every one of the seven keys is always present. A value the article did not carry arrives as null — never as a missing key — so one parser works against every engine and never throws on an absent field.

publishedTime is a date in YYYY-MM-DD form, not a relative phrase. source is the publisher name, falling back to the article's host when the page does not name one. image is a URL or null.

When a call comes back short

Ask for more articles than the query has, and the response adds a top-level delivery block: requested, returned, a short reason, a note, and an async_endpoint pointing at /api/bulk/jobs for a deeper run. The same counts also appear as meta.partialResults.

You are told, in the response, that you got fewer than you asked for. You never have to infer it by counting the array.

What news search data is, and why teams buy it

A news search result is an editorial judgement rendered as a list: which outlets covered a story, in what order, with what headline. That ordering is the product — and it is the part an article firehose cannot give you.

A ranked page, not a firehose

Most products sold as a “news API” are aggregated indexes: they hold a large pile of articles and hand you the ones that match your keyword. Useful, but it answers a different question. It cannot tell you what somebody searching your brand name today actually sees, or in what order.

This endpoint returns the news search result itself — ranked, sourced and dated the way the engine presents it. If your job is “what does the coverage look like right now”, ranking is the whole answer.

Publisher feeds do not rank, and stop at the publisher

The build-it-yourself route is one subscription per outlet. Each one gives you that outlet's own running order, which is chronological rather than editorial, and none of them knows the others exist. Fifty outlets means fifty integrations, fifty formats, fifty ways for a summary line or a date to go missing.

A news query crosses all of them at once and comes back in one shape — and it surfaces the outlets you did not think to subscribe to, which is usually where a story breaks.

The free plan you would prototype on is often development-only

Worth reading the terms before you build. NewsAPI.org's free Developer plan states it “may be used for development and testing in a development environment only, and cannot be used in a staging or production environment”, is limited to 100 requests a day, and serves articles on a 24-hour delay. Real-time commercial access starts at $449/month. Checked 7 September 2026.

Here, the free allowance is 10 real API calls against the live endpoint, with no delay and no development-only clause, and paid usage is per call rather than per month.

Seven keys, always present, on every engine

Adding a second news engine to a working integration is one query parameter. position, title, url, source, publishedTime, snippet and image arrive in that order on all five engines, with the same types.

No per-engine branch, no shape sniffing, and no field that is a string on one call and an object on the next.

The Details That Only Matter on a News Call

Six behaviours this endpoint has because news data is not web data.

Freshness to the hour

freshness=h narrows to the last sixty minutes, and every step up to y is a single parameter change. Accepted on all five engines.

Sort by date

sort=date puts newest first instead of most relevant first, and sort=relevance is the other way. Offered on engine=yahoo and engine=bing.

A date you can sort on

publishedTime is YYYY-MM-DD, so it sorts and compares as-is. No parsing “yesterday” or “3 hours ago” out of a display string.

The publisher, named

source is the outlet's name, e.g. Reuters, falling back to the article's host when the result does not name one. Attribution without a URL-parsing step.

An image field on every row

image is always present as a key — the article's picture when the result carried one, otherwise null. Where a picture is there, a card renders without a second request per story.

One article, one row

The same story linked as http://site/x/ and https://site/x?utm_source=… is one article, so it appears once and is counted once in totalResults.

What Teams Actually Pull News Results For

Four jobs that account for most news traffic on this endpoint, and the parameters each one needs.

Brand and executive mention monitoring

Poll a quoted brand name on freshness=h every fifteen minutes and key on url. Every new key is a new piece of coverage, with the outlet in source and the date already normalised.

format=simple keeps the payload to the four fields a matcher reads. At the Scale rate, a query polled every 15 minutes runs about 2,900 calls a month — roughly three cents.

Crisis detection and reputation watch

The value of a crisis alert collapses by the hour, which is exactly what the h freshness window is for. Run it against two or three engines rather than one: outlet mixes differ, and the first report of a story is often not on the engine you check by habit.

Log position alongside the headline. A negative story climbing from rank 9 to rank 2 is the signal, not its mere existence.

Competitor and category coverage

Run a weekly freshness=7d sweep over a list of competitor names, then group by source to see who is being written about, by whom, and how often. Share of voice from one endpoint and one loop.

country and language turn the same sweep into a per-market read — 112 country codes, so “how are we covered in Germany” is two parameters, not a second vendor.

Grounding a model or a briefing on today

A language model's training data has a cutoff; a news query does not. Fetch the top articles for a topic, hand the model title, source, publishedTime and snippet, and every claim in the output has a dated, attributable link behind it.

The same shape drives a morning briefing email or a newsroom dashboard — where the result carried a picture, image is already in the row, so those cards render without a second fetch.

News API Questions

A ranked list of news articles for your query, as JSON. Each article carries seven fields in a fixed order: position, title, url, source, publishedTime, snippet and image. Alongside them the response carries totalResults, pagesScraped, the query, engine and country you asked for, and a meta block with the article count and elapsed time. Every one of the seven keys is always present — a value the article did not carry comes back as null rather than disappearing — so one parser works against all five engines.
News is its own billing category and every engine is priced the same within it: $0.20 per 1,000 calls on the Default tier, $0.02 per 1,000 on Growth after a one-time $100 deposit (10× off), and $0.01 per 1,000 on Scale after a one-time $500 deposit (20× off). A deposit is credit you spend, not a subscription. Growth and Scale accounts are charged once per call whatever depth they request; on the Default tier the same is true above a $10 balance, and below $10 a multi-page call is billed per page. On engine=google a news call is always billed as a single page. News is covered by the free API calls every new account gets.
It depends on the engine and on how much has been written. engine=google returns the widest set — leave num off and it hands back its whole result list in one call, around 100 articles, and it always bills as a single page. engine=ddg returns about 29 on a bare call and has been measured up to about 44 once num asks for more. engine=brave returns about 29 with num set. engine=yahoo and engine=bing page through results at roughly 10 articles a page, up to the 5-page ceiling, landing near 47–49 at num=50. num is capped at 50 on this endpoint and is a ceiling rather than a promise: no engine has been measured returning the full 50, and a short answer always carries a delivery block and meta.partialResults saying what arrived.
Yes, and it is the parameter most news integrations are built around. freshness takes h or 1h for the last hour, d or 1d for the last 24 hours, 7d or w for the last week, m or 1m for the last month, and y or 1y for the last year. It is accepted on all five engines. Separately, every article carries its own publishedTime as a plain YYYY-MM-DD date, or null when the result carries no date, so you can filter or sort again on your side without parsing a phrase like “3 hours ago”. On engine=yahoo and engine=bing you can also pass sort=date to order newest first, or sort=relevance for the default ordering.
Five engines: engine=google, engine=yahoo, engine=bing, engine=ddg and engine=brave. They index different outlets and order them differently, which is the reason to have a choice. Start with engine=google for the widest and fastest set on a single call. Add a second engine when coverage matters more than volume — monitoring is the case where one engine's blind spot becomes your missed story. Price is identical across all five, so there is no budget reason to prefer one.
Yes. country takes any of 112 codes — us, uk, in, de, fr, jp, br, ca, au and more, with both uk and gb accepted — and GET /api/countries returns the full list without an API key. language takes a 2-letter ISO 639-1 code such as en, de or ja and is accepted on every engine, though coverage is broader on some than others. Together they are how one query becomes a per-market coverage report: same keyword, different country, one response shape.
Yes. The panel at the top of this page runs a real call against the live endpoint with no signup and no key, and shows you both the rendered articles and the JSON. When you want to build against it, a new account comes with free API calls, shared across every free-eligible endpoint, and news is one of them. There is no card and no subscription: after the free calls, you add credit and pay per call.

Start using the News API

free API calls, no card and no subscription. News from $0.01 per 1,000 queries at Scale, the same rate on every engine.

Try for Free

Related guides

Tutorials and comparisons for news and media monitoring.

News API for DevelopersAggregate news from search engines with one endpoint. Best Google News APINewsAPI vs SerpApi vs DataForSEO vs Serpent, for media monitoring. PR & Media MonitoringBuild a press and brand-mention monitor with the news API. Scrape Google News FreeThe free-tier route to Google News data in 2026.