Free News API

Search headlines from curated public news sources. No key needed. The index refreshes about every 15 minutes on a fixed schedule, and every request is served from cache, so it stays free and fast.

Try it

curl "https://alterlab.io/api/v1/news?q=chips&category=technology&limit=5"
import requests

r = requests.get(
    "https://alterlab.io/api/v1/news",
    params={"q": "climate", "since": "2026-11-01T00:00:00Z"},
    headers={"X-API-Key": "YOUR_FREE_KEY"},  # optional: higher limits
)
for item in r.json()["items"]:
    print(item["headline"], item["url"])

Filters

  • q: Text to match in the headline or snippet
  • category: world, technology, business, science, sports, general
  • source: Source id, for example bbc, npr, guardian-world, aljazeera
  • language: Language code, for example en or de
  • since: ISO 8601 time; only items published after it
  • limit: 1 to 100 items, default 20

What you get

Headline, URL, source, published time, author, image URL, a snippet of at most 300 characters and a category. There is no article text: every item links to the publisher. To read an article, scrape its URL with the AlterLab scrape API; that is one normal scrape on your balance. Each response includes an attribution credit (“News via AlterLab”) and a next_action hint.

Limits

Without a key: 60 requests per hour per IP. With a free API key: 1,000 requests per hour. Both are read from the cached index and cost nothing.

For agents (MCP)

The hosted MCP server exposes alterlab_news. It is public: no credentials and no credits. See the MCP server page to connect.

Your first scrape.
Sixty seconds.

Up to 5,000 free requests — about 5,000 direct fetch, 500 managed sessions or 250 full browser rendering requests. No credit card.Just a POST request.

terminal
curl -X POST https://api.alterlab.io/v1/scrape \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "formats": ["markdown"]}'

No credit card required · Up to 5,000 free requests (about 5,000 direct fetch, 500 managed sessions or 250 full browser rendering requests) · Balance never expires