Google News public API

Check recent Google News RSS activity for one publisher domain or a batch, including result counts, feed URLs and recent publication details.

Public Google News endpoints check whether Google News RSS returns recent publications for a publisher domain. The checker uses a site: RSS query and treats a non-empty feed as a positive Google News signal.

#Check one domain

GET/public/google-newsPublic
Query parameters
domainstringrequired
Domain or full URL. The API normalizes protocol, path and www. before building the RSS query.
curl
curl "https://d2tr.com/api/public/google-news?domain=osome.com"
Response
{
  "ok": true,
  "domain": "osome.com",
  "rssUrl": "https://news.google.com/rss/search?q=site%3Aosome.com",
  "googleNewsUrl": "https://news.google.com/search?q=site%3Aosome.com",
  "exists": true,
  "publicationCount": 100,
  "latestItems": [
    {
      "title": "Example headline",
      "url": "https://news.google.com/rss/articles/...",
      "publishedAt": "Tue, 07 Jul 2026 09:45:00 GMT",
      "sourceLabel": "Osome",
      "sourceUrl": "https://osome.com"
    }
  ]
}

#Check a domain list

POST/public/google-news/bulkPublic
JSON body
domainsstring[]required
Up to 100 domains or URLs.
curl
curl "https://d2tr.com/api/public/google-news/bulk" \
  -H "Content-Type: application/json" \
  -d '{"domains":["osome.com","bbc.com","example.invalid"]}'

#Explore feeds, topics and stories

The Google News Checker also retrieves feeds by search query, Knowledge Graph entity ID, topic or story. These checks run through Scrapering on the server. The provider key is never sent to the browser.

The tool requests the maximum feed size for the past 7 days. Its searchable selectors cover the 72 countries and regions in Google News’s web edition catalog, with the available languages for each country.

POST/public/google-news/explorePublic
JSON body
modestringrequired
search, entity, topic or story.
inputstringrequired
A search query, an /m/ or /g/ entity ID, a topic name, or a Google News topic/story token or URL.
titlestringoptional
Optional display label for a topic or story. The token identifies the requested feed.
country / languagestringrequired
Supported country and language codes, for example US and en.
timeframestringrequired
1d, 7d or 30d.
limitnumberrequired
10, 20, 50 or 100 items.

The examples below use the same request bodies as the tool. Submit them toPOST /api/public/google-news/explore; /api/google-news-explore is an equivalent route used by the interactive examples. All four request the maximum 100 items for the past 7 days.

#Search by query

Find news about a phrase or subject. The query is sent in input; search operators such as site:bbc.com are supported.

Query request
{
  "mode": "search",
  "input": "artificial intelligence",
  "country": "US",
  "language": "en",
  "timeframe": "7d",
  "limit": 100
}

#Search by entity ID

Use the entity’s Knowledge Graph ID to distinguish namesakes. Both /m/ and /g/ IDs are supported; an optional kg: prefix is removed.

Entity request
{
  "mode": "entity",
  "input": "/m/045c7b",
  "country": "US",
  "language": "en",
  "timeframe": "7d",
  "limit": 100
}

#Find Topic IDs

Read the available categories for a country before creating a topic feed. This GET does not consume a daily feed check. Copy a returned topics[].token into the topic request’s input.

GET/public/google-news/explore?topics=USPublic
Topic catalog response (shortened)
{
  "ok": true,
  "topics": [
    {
      "title": "Business",
      "token": "CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB",
      "url": null
    }
  ]
}

#Get a feed by Topic ID

Paste the full token or a https://news.google.com/topics/… URL. Completed feeds may also provide Topic IDs in result.relatedTopics[].token.

Topic request
{
  "mode": "topic",
  "input": "CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB",
  "title": "Business",
  "country": "US",
  "language": "en",
  "timeframe": "7d",
  "limit": 100
}

#Get coverage by Story ID

Copy result.stories[].token from a completed feed, or paste a https://news.google.com/stories/… URL. This identifies one story cluster and returns its publisher coverage. The example below comes from the provider documentation; use a current story token for live research.

Story request
{
  "mode": "story",
  "input": "CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2k1c2J2MUVSRWN0X3l1dFpkS3dpZ0FQAQ",
  "title": "Wall Street stocks",
  "country": "US",
  "language": "en",
  "timeframe": "7d",
  "limit": 100
}

#Read the result of any feed request

Each successful POST returns the same processing response. Keep its jobToken; it is a private access token for this check, not a Topic ID or Story ID.

202 · Feed accepted
{
  "ok": true,
  "status": "processing",
  "jobToken": "YOUR_JOB_TOKEN",
  "pollAfterMs": 2500,
  "quota": {
    "limit": 10,
    "remaining": 9,
    "resetAt": "2026-09-15T00:00:00Z"
  }
}
Read the existing job
{
  "method": "GET",
  "path": "/api/public/google-news/explore",
  "headers": {
    "Authorization": "Bearer YOUR_JOB_TOKEN"
  }
}

Repeat this GET after pollAfterMs while status is processing, using the original browser cookie. Stop when status is ready or an error is returned. Do not repeat the POST to wait for a result.

200 · Ready response (illustrative, shortened)
{
  "ok": true,
  "status": "ready",
  "result": {
    "request": {
      "mode": "topic",
      "input": "CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB",
      "title": "Business",
      "country": "US",
      "language": "en",
      "timeframe": "7d",
      "limit": 100
    },
    "title": "Business",
    "googleNewsUrl": "https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB?hl=en-US&gl=US&ceid=US:en",
    "entityId": null,
    "fetchedAt": "2026-09-14T12:00:00Z",
    "articles": [
      {
        "title": "Example market headline",
        "url": "https://example.com/markets",
        "googleNewsUrl": null,
        "publisher": "Example News",
        "domain": "example.com",
        "author": "Example author",
        "publishedAt": "2026-09-14T10:00:00Z",
        "relativeTime": "2 hours ago",
        "imageUrl": null
      }
    ],
    "stories": [
      {
        "title": "Wall Street stocks",
        "token": "CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2k1c2J2MUVSRWN0X3l1dFpkS3dpZ0FQAQ",
        "url": "https://news.google.com/stories/CAAqNggKIjBDQklTSGpvSmMzUnZjbmt0TXpZd1NoRUtEd2k1c2J2MUVSRWN0X3l1dFpkS3dpZ0FQAQ",
        "articles": [
          {
            "title": "Example market headline",
            "url": "https://example.com/markets",
            "googleNewsUrl": null,
            "publisher": "Example News",
            "domain": "example.com",
            "author": "Example author",
            "publishedAt": "2026-09-14T10:00:00Z",
            "relativeTime": "2 hours ago",
            "imageUrl": null
          }
        ]
      }
    ],
    "relatedTopics": [
      {
        "title": "Business",
        "token": "CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB",
        "url": "https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB"
      }
    ]
  }
}

Feed creation is limited to 10 checks per IP and browser per UTC day, including local development. Reading an existing result does not use another check. Opening a different topic or story creates a new check. Results include articles, publishers, available story clusters and related topics; absent sections are returned as empty lists.