google-news-scraper-api
A news scraper API for Python, built on ScrapingBee's Google News scraper. It turns a query into structured articles with title, source, domain, snippet and timestamp, so you never touch Google's markup.
Verified live on 2026-08-25 against GET /api/v1/google with search_type=news. Calls in testing
charged 10 credits.
Install
pip install google-news-scraper-api
Scrape Google News results
from google_news_scraper_api import GoogleNewsScraper
scraper = GoogleNewsScraper("YOUR-API-KEY")
for article in scraper.search("openai", country_code="us"):
print(article.date, article.source, article.title)
Get a key at app.scrapingbee.com; new accounts include 1,000 free credits.
Article fields
Every result carries the nine keys the API actually returns:
| Field | Example |
|---|---|
title |
"OpenAI Claims Its New Chips Can Outperform Nvidia" |
source |
"Bloomberg" |
domain |
the publisher domain, useful for allow-lists |
link |
the article URL |
snippet |
the summary line under the headline |
date |
ISO 8601 timestamp |
relative_date |
"3 hours ago" style string |
position |
rank within the page |
page |
which result page it came from |
article.as_dict() gives you all nine at once, which is what you want before writing to a
database or a dataframe.
Paging without waste
paginate walks result pages and stops the moment one comes back empty, so an optimistic page
count does not spend credits on nothing:
articles = list(scraper.paginate("climate policy", pages=5, country_code="us"))
print(len(articles))
Deduplicating a monitor
Syndicated stories repeat across pages and across queries. Counting them twice makes a media monitor useless, so dedupe by link before you store anything:
raw = []
for query in ["openai", "anthropic", "mistral ai"]:
raw.extend(scraper.paginate(query, pages=2, country_code="us"))
unique = GoogleNewsScraper.deduplicate(raw)
print(len(raw), "->", len(unique))
Query controls worth knowing
scraper.search("acme corp", country_code="gb", date_range="d") # recent window
scraper.search("scrapingbee", nfpr=True) # no spelling "correction"
nfpr=True matters more than it looks. Google rewrites unfamiliar brand names to something it
considers correct, which quietly turns a brand monitor into a monitor for a different word.
One documented limit: search_type=news is not available with device="mobile".
Raw payload
When you want meta_data as well as the articles:
payload = scraper.search_raw("openai", country_code="us")
print(payload["meta_data"])
# {'url': 'https://www.google.com/search?q=openai&hl=en&gl=us&tbm=nws', 'number_of_page': 10, ...}
Cost
| Call | Credits |
|---|---|
| One news query | 10 in testing, 15 documented standard, 10 with light_request=true |
usage() |
0 |
| HTTP 500 | 0 |
Retrying a 500 is free. Check the balance with scraper.usage() before a scheduled sweep. Tiers
on the pricing page.
Other Google surfaces
The same endpoint switches surface with search_type, so the same key also reaches
Google search,
Shopping,
Images,
Lens,
AI Mode and
Ads. For a lighter alternative there is
Fast Search, and for an RSS-shaped feed see
the Google News RSS API.
Scope
Public, pre-login content only. Scraping behind login credentials is prohibited by the ScrapingBee terms. Keep API keys out of AI coding assistants.
MIT licensed. Repository . API reference
Release files for google-news-scraper-api 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| google_news_scraper_api-0.1.0.tar.gz | 6.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| google_news_scraper_api-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:13.5 kB
Release files / google_news_scraper_api-0.1.0.tar.gz
| Download URL | google_news_scraper_api-0.1.0.tar.gz |
|---|---|
| Size | 6.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c2fbf2f42526bacd5a2f11cf5cae7b3cf050e0c7e4cb4360a8e5f9dd41db2420
|
|
BLAKE2b-256 checksum How to use checksums |
34f30566d1357cc8df42a6a37ca2b19f301ee51e965d46a82e1318a56e277e81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / google_news_scraper_api-0.1.0-py3-none-any.whl
| Download URL | google_news_scraper_api-0.1.0-py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4fcefc8872e2f60f31328cee3fefdc10e6de5ea66e46e9a5b965715932341fd9
|
|
BLAKE2b-256 checksum How to use checksums |
791fb5e2e11f6599fbed995fc3d9fa7e726b2d9f0e888bce39b19f0e15670450
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|