hawkcrawl

A news API that shows its working

Every news API on this page's search results calls itself the best one and counts its sources. None of them publish a number you can check. Here are ours, including the parts that fail.

Where this is

The API is live, payment works, and a new account starts with 1,000 free credits. It is new, and it is a one-person operation — which is why the reference documentation is written to be read before you commit, and why questions reach a person rather than a queue.

What we measured

Measured on 18 September 2026 over 645 articles: thirteen unrelated topics, sampled in the last seven days and again in March 2010, June 2016 and September 2021. We publish the denominator, which is the part usually left out.

636/646articles resolved to the publisher's real URL
488/636returned clean full article text
1995oldest archive date verified by query
16/16languages tested, each verified live

Resolution failed ten times in 646. Full text is 77%, and it is worth being precise about how much that number moves:

SampledArticlesFull textRange across the thirteen topics
Last seven days25072%55% – 85%
March 201012674%40% – 100%
June 201613086%70% – 100%
September 202113080%60% – 90%

The archive is the strong half, not the weak one. A 2016 article gives up its text more readily than one from this week, because it is far less likely to sit behind a wall. And the subject matters more than the year: housing, sport and technology run near the top of those ranges, central-bank and climate coverage near the bottom.

This page has said three different numbers in a day: 48 of 60, then 242 of 500, now 488 of 636. The first was too small. The second was a wider sample that happened to draw three of the most paywalled subjects there are, and it understated the product badly. The third is thirteen fixed subjects across four periods, fetched exactly the way the API fetches them — and it is higher than the other two partly because we started routing refused requests through residential addresses, which is the only thing that moves this number at all.

The 148 that did not return text

Most are refusals: publishers that serve a browser and reject a server, whatever headers it sends. It is the address and not the request — the same 80 URLs fetched bare and with full Chrome headers produced identical rejection counts, 27 each time. So a refused article is now retried from a residential address, which opened cnbc.com and phys.org completely — both were zero of every attempt before.

Three do not open, and we would rather name them than average them away. reuters.com returns 401 — it wants a subscription, and no amount of routing changes that. nytimes.com returns 403 to almost everything. finance.yahoo.com refuses the connection outright. The rest of the gap is paywall teasers, video pages with no article body, and pages that have simply gone.

When we cannot get it you get content: null and a content_status saying why, and you are not charged for it. Write your integration to expect a null on roughly one article in four.

One endpoint

There is no SDK to learn and no second call to make. A query goes in, structured JSON comes out.

GET https://api.hawkcrawl.com/v1/news
curl "https://api.hawkcrawl.com/v1/news?q=tesla&from=2024-01-01&to=2024-03-31&limit=50" \
  -H "Authorization: Bearer YOUR_KEY"

Our index is Google News, so if that is what you were looking for, the Google News API page covers what happened to the official one and how this replaces it.

Add resolve=true for the publisher's own URL instead of a redirect, and content=true for the article body. Both are optional, both are billed only when they succeed. The documentation lists every parameter and every error code.

The same query returns this. Every field below is from a real feed response, not an illustration:

{
  "query": "tesla",
  "from": "2024-01-01",
  "to": "2024-03-31",
  "total": 50,
  "cached": false,
  "articles": [
    {
      "id": "CBMiuAFBVV95cUxQZENFRFNSV2VYUUxmMEJlb3NrOGpO...",
      "title": "Tesla pauses German production after Red Sea shipping attacks",
      "source": "The Guardian",
      "published_at": "2024-01-12T11:24:00Z",
      "url": "https://news.google.com/rss/articles/CBMiuAFBV...",
      "resolved_url": "https://www.theguardian.com/technology/2024/jan/12/...",
      "content": "Tesla has said it will suspend most production at its...",
      "content_status": "ok"
    }
  ]
}

id is stable, so you can de-duplicate across calls without storing titles.

Against the two you are probably also looking at

Each cell below is quoted from that provider's own pricing or documentation page, checked on 16 September 2026. We are comparing on the two things that decide whether a news API works in a retrieval pipeline.

Archive depthArticle text
NewsAPI.org"Search articles up to 5 years old" on paid plans; one month on the free plan, with a 24-hour delaycontent "is truncated to 200 chars"
GNews"Our historical news archive goes back to 2020"Full content on paid tiers; not on the free plan
hawkcrawlResults returned for queries at 2010, 2016, 2021 and 2026Full body, returned for 488 of 636 articles tested — and never billed for the others

We are not claiming to beat them on source counts, sentiment scoring or entity tagging — they will win those. We are claiming that if your use case is "what did the press say about this, and give me enough of it to feed a model," the two rows above are the ones that decide it.

The archive is the differentiator

Most news APIs start somewhere recent. We ran date-bounded queries at 2010, 2014, 2018 and 2022 and got results at every one of them, from nejm.org, pewresearch.org, brookings.edu and nature.com among others.

If you are building a model that needs to know what was being said about a subject before 2020, that gap is the whole problem. Date ranges are ordinary parameters here, not a separate historical product at a separate price.

Full text, not a preview

Two hundred characters — NewsAPI's limit, quoted above — is roughly this sentence and the one before it — enough to show a user, nowhere near enough to put in a retrieval pipeline.

With content=true we return the article body. In our test that was 8 articles in 10, and we read the output rather than measuring its length, because a page's navigation menu will happily pass a length check and ruin whatever you feed it to.

Languages and editions

Tested end to end in German, French, Spanish (Mexico), Japanese, Arabic (UAE) and Portuguese (Brazil) — 48 articles, 48 resolved, each to its own local publisher: n-tv.de, elpais.com, nikkeibp.co.jp, g1.globo.com. You choose the language and the country edition; they are separate parameters, because the French edition of a story is not the same thing as a French-language story.

What we do not return

No article summaries, no image URLs, no author names, no sentiment scores. The upstream index does not carry them and we will not invent fields we cannot fill. About one article in fifty carries related coverage of the same story; the rest do not.

If any of that is load-bearing for you, one of the other APIs on this page's search results is a better fit, and you will have found that out here rather than after a week of integration work.

Read the documentation first

It is the honest version of this page: every parameter, the real response shape, the caching rules, what each call costs in credits, and the same failure numbers repeated where they matter.

Read the docs Ask a question

Looking for something more specific?

Crypto news — the same endpoint with the crypto delivery rates and blocked publishers measured separately. Coming from the Bing News API? — it was retired on 11 August 2025, and there is a field-by-field migration table.

Doing it yourself first?

Sensible. Google News RSS: the missing reference is every endpoint, every query operator and all sixteen language codes, tested — plus the three walls you will hit, with the numbers.

hawkcrawlPricingDocumentationContactPrivacyTerms

Figures on this page come from our own test runs and are dated 16 September 2026. When they change, this page changes.