hawkcrawl

Changelog

What changed, when, and the numbers behind it. Corrections to our own published figures are in here too — those are the entries worth reading.

19 September 2026

New: an MCP server. Claude, Cursor and anything else speaking Model Context Protocol can now search news and read the article text directly. Hosted at https://api.hawkcrawl.com/mcp — paste the URL and your key, nothing to install — or run it locally with npx hawkcrawl-mcp. Two tools: search_news and read_article. Setup at /mcp.

The reason it matters for an agent: a news feed hands it a headline and a link, and an agent cannot reason about a link. This hands it the body — and where a publisher refuses, it says paywalled or blocked rather than returning nothing, so the agent can say "Reuters wants a subscription" instead of inventing a summary of an article it never read.

New, free and open source: pip install gnews-decoder — the Google News link decoder we run in production, MIT licensed, no account. It resolves a whole list in one call to Google rather than one per article, which is what gets you rate-limited, and it carries the consent-cookie fix. Source. It gives you the publisher URL and stops there; the text extraction is the half we sell, and you do not need us for the decoding.

Resolution got faster. Every Google News article fetch was being bounced through consent.google.com and back — three extra round trips each. Sending a recorded consent choice, to Google only, cuts 25 articles from 15.9s to 10.8s. Same 25 of 25 resolved either way: this buys latency, not delivery.

Corrected — a citation we published from a title we had not read

The decoder's README said the encoded-link problem was what an old, much-discussed issue titled "base 64 deprecation" was about. It is not. That issue is from 2020 and concerns base64.decodestring being removed from the Python standard library. We read the title, inferred the rest, and shipped the inference as a fact.

The measurements it was attached to were our own and all stand. Only the citation was wrong — and a wrong citation in a document that sells itself on measurement is worse than no citation. Corrected in 0.1.1, with the two issues that genuinely are the consent wall.

Corrected — our own market figure was inflated about fortyfold

Our plan was sized against 437,000 searches a month, taken from twelve competitors' ranked keywords. Re-derived from three of them: of 1,813,040/mo pooled, only 10,080 are about news. The rest is reddit.com, home depot store finder and walmart store finder — terms a SERP API ranks for because it publishes demo pages. Nobody searching for Walmart locations is buying a news API.

No keyword list had been saved, so the original could not be checked. This one's rows are committed alongside it. The practical effect is that "write forty more pages" is withdrawn.

18 September 2026

Corrected — twice in one day

The site said full article text came back for 8 of 10 articles. A 500-article sample put it at 48% and we published that. A wider sample said 77%, and the middle figure was the worst of the three: it drew three of the most paywalled subjects there are, so being bigger than the sample it replaced did not make it less biased.

Final: 488 of 636 across thirteen subjects and four periods. The method is now a committed script rather than a fresh ad-hoc run, and it prints the spread beside the mean so a skewed sample shows up as a wide range instead of a confident wrong number.

Corrected — the archive is fifteen years deeper than we said

Every page said the archive reached 2010. Measured properly it reaches 1995 — the oldest article returned was dated 23 August 1995, and link resolution held at 16 of 16 at every depth tested. Understating is still being wrong, so every page, meta description and structured-data block was corrected.

Full article text: 69% → 77%. Requests a publisher refuses are now retried from a residential address. That opened cnbc.com and phys.org completely, both previously zero of every attempt. Three still do not open and we name them: reuters.com answers 401 because it wants a subscription, nytimes.com answers 403, finance.yahoo.com refuses the connection.

New: dedupe=true. About 18% of a result set is a story already in it, almost all syndication — one Tesla article came back from three outlets character for character. Copies are collapsed before anything is resolved or extracted, so they are never billed.

New: relevance=true. Each article scored 0 to 1 against your query, with a short reason. It scores and never filters: an earlier version removed low scorers and threw away a story about a Japanese builder buying a UK housebuilder, from a query about the UK housing market. You get the number and choose your own threshold.

Pricing rebuilt. Search 1 credit, a resolved article 4, an article with full text 20 — and nothing for what we could not deliver. That is $20 per 1,000 delivered articles, falling to $8 as you top up more at once. The old flat rate charged the same for a headline search, which anyone can get free from Google News, as for the extraction that is the actual product.

Free tier: 1,000 → 5,000 credits, and it now actually renews monthly. The setting had been called FREE_MONTHLY_CREDITS since the beginning and was granted once at signup. The allowance is a floor rather than an addition: an account that spent nothing is topped back up to it, not handed a second one.

New: the playground. Run a real query in the browser before writing any code, and see the receipt — what was found, what resolved, what returned text, and what it cost, split by line.

Usage now shows why a call cost what it cost. It stored only a total, so the page could say "81 credits" and never explain it. It now shows search, resolve and text separately, and a monthly line for how many credits you were not charged.

Fixed: the 402 lied. Running short returned "You have 0 credits remaining" whatever your balance was. It now carries the real balance and the real cost, as fields and in the message.

Fixed: the billing page did not move. Someone who had just sent crypto watched a static page and had to guess when to refresh. It now watches for the confirmation itself.

New: email, and everything that needed it. Change your password at /account, reset a forgotten one at /reset — one link, one hour, one use — and a receipt when a crypto payment confirms, which is the moment silence costs the most. Mail comes from hello@hawkcrawl.com, signed with our own DKIM key. API keys survive a password reset; they never depended on it.

An earlier version of this entry said reset did not work and would not for a while. It was true when written and stopped being true the same evening.

New: /openapi.json — OpenAPI 3.1, checked against the route definition so the two cannot drift. And Python and JavaScript examples in the reference, which had only curl.

New pages: Google News RSS: the missing reference, crypto news API with its delivery rates measured separately, and the Bing News API migration after Microsoft retired it on 11 August 2025.

17 September 2026

Contact form and inbound email. Every message on day one was an SEO agency, so messages are now scored and set aside rather than deleted — a false positive on a real customer costs far more than a spam row.

Google sign-in. Off-site backups, restore-tested.

16 September 2026

The API went live at api.hawkcrawl.com: link resolution, article extraction, credits, and OxaPay payments.

Why corrections are the point of this page

We publish measured numbers instead of adjectives, and the risk in that is obvious: a number can be wrong, and wrong in our favour. Two were, today, and both are above with what replaced them. A changelog that only ever lists improvements is marketing wearing a changelog's clothes.

Something here not matching what you see? Tell us — we will re-measure and correct it.

hawkcrawl · News API · Google News RSS · Crypto news API · Bing News API · Pricing · Docs