How to scrape Google News with Python

One request returns every article as clean JSON with images.

Free to try, no card Pure Python, requests only ~1 second responses
THREE STEPS

How do you get started?

From zero to live Google News data in about two minutes:

  1. 1

    Create a free account. Try it free, no card needed.

  2. 2

    Copy your API key from the dashboard.

  3. 3

    Run the script below. Clean JSON comes back, and the same rows export as CSV.

STEP 1 - MAKE THE REQUEST

One request, real response

Install the requests library with pip install requests, grab a free API key from the dashboard, then call the news endpoint. There is no browser to drive and no HTML to parse on your side. Here is the whole script:

# pip install requests import requests resp = requests.get( "https://crustapi.com/v1/search", params={"type": "news", "q": "openai"}, headers={"x-api-key": "YOUR_KEY"}, ) articles = resp.json()["news"] for a in articles: print(a["position"], a["source"], a["title"])

Prefer the command line to check it first? The same call as curl:

# the applicable price per successful search, however many articles come back; empty searches cost nothing curl "https://crustapi.com/v1/search?type=news&q=openai" -H "x-api-key: YOUR_KEY"

The articles come back as clean JSON, and the same rows are available as CSV. Here are the first two, so they drop straight into Sheets or a CRM:

titlesourcedatelink
China delivers a one-two punch to America's AI dominanceThe Verge8 hours agohttps://www.theverge.com/ai-artificial-intelligence/967781/...
An OpenAI exec's comments on China's Kimi K3 kicked off a big US tech debateBusiness Insider14 hours agohttps://www.businessinsider.com/open-source-ai-china-kimi...

And the same response as JSON, which is what resp.json() hands your script:

{ "searchParameters": { "q": "openai", "gl": "us", "hl": "en", "type": "news" }, "news": [ { "title": "China delivers a one-two punch to America's AI dominance", "source": "The Verge", "date": "8 hours ago", "position": 1 }, { "title": "An OpenAI exec's comments on China's Kimi K3 kicked off a big US tech debate", "source": "Business Insider", "date": "14 hours ago", "position": 2 } ] }

Add gl and hl for country and language, and page with num for more results.

STEP 2 - READ EACH ARTICLE

What data do you get?

Each item in data["news"] is a plain dictionary, so you read the fields directly, no HTML parsing and nothing that breaks when Google changes its page. Here is the top article, shown as CSV, ready for Sheets or a database:

titlesourcelinkdateimageUrlposition
China delivers a one-two punch to America's AI dominanceThe Vergehttps://www.theverge.com/ai-artificial-intelligence/967781/...8 hours agohttps://platform.theverge.com/.../gettyimages-2286280034.jpg1

Or the same record as JSON, exactly the shape your Python code loops over:

// the top article in full { "title": "China delivers a one-two punch to America's AI dominance", "link": "https://www.theverge.com/ai-artificial-intelligence/967781/chinese-ai-models-open-source-moonshot-kimi-k3-alibaba-qwen", "snippet": "", "date": "8 hours ago", "source": "The Verge", "imageUrl": "https://platform.theverge.com/wp-content/uploads/sites/2/2026/07/gettyimages-2286280034.jpg?...", "position": 1 }

To move it into pandas for analysis, one line does it: pandas.DataFrame(data["news"]) gives you a table with a column for every field above.

HOW IT COMPARES

vs serper and serpapi

All three return Google News as JSON you can call from Python. The difference is what each result carries and how you pay for it.

Other News APIsCrustAPI News
Billing unitOne credit per search, even when it returns nothingPay per successful search; empty or failed searches cost nothing
What it returnsJSONClean JSON from the API, or the same rows as CSV
Article imageSmall gstatic thumbnailThe real publisher hero image (og:image)
Python setuprequests, or a vendor SDKrequests and one header, no SDK
Free tierTrial credits that expireFree to try, no card
Paid funds / quota expiryExpire monthly or in 6 monthsNever expire
Storing the dataVaries by providerNo storage limits. Keep it, export it, build on it
PRICING

How much does scraping Google News cost?

You pay the applicable price per successful search, however many articles come back. A search that returns none costs nothing. Funds are prepaid and never expire.

DepositGoogle Search / 1,000 requestsMaps / 1,000 businessesLinkedIn reads / 1,000 requestsPeople, Jobs, Refresh / 1,000 units
$10+$1.00$1.96$6.00$1.96
$149+$0.76$1.49$4.50$1.49
$549+$0.56$1.10$3.30$1.10
$1,999+$0.41$0.80$2.45$0.80
$6,500+$0.33$0.65$1.95$0.65
$27,500+$0.28$0.55$1.65$0.55
$50,000+$0.26$0.50$1.50$0.50
$100,000+$0.20$0.40$1.50$0.40

Every eligible account gets $6 of free usage monthly. Each deposit keeps its prices until spent; paid funds never expire. People and Jobs bill per successful search, Refresh per accessible profile. Full profiles in People use the read rate per full profile. See all billing details.

Larger deposits unlock lower endpoint prices. Each deposit keeps its prices until spent. See the full deposit table on the pricing page. Prices in USD, ex-tax.

WHO IT'S FOR

Who scrapes Google News?

Run your first script free
Try it free. No card, no contract.
Try for free

Related: Google News API · Google Search API · Google Maps Scraper API · Docs

FAIR PLAY

When a licensed news feed is the better pick: you need full article bodies with a publisher license, guaranteed historical archives going back years, or a contract that indemnifies redistribution. Google News gives you the headline, source, snippet, and link, which is what most monitoring and research scripts need, but it is not a licensed full-text archive.

BEFORE YOU ASK

Common questions

Python 3, the requests library, and a free CrustAPI key. Install requests with pip install requests, sign up for the key, then call the news endpoint. No browser to drive and no HTML parsing on your side.

No. The endpoint returns clean JSON, so you read data['news'] and each article already has the title, source, link, date, snippet, image, and position. There is no HTML to parse and nothing breaks when Google changes its page layout.

Add the num parameter for more results per call, and gl and hl to set the country and language. You pay the applicable price per successful search, however many articles come back, so a call that finds 12 still costs one request charge and a call that returns none costs nothing.

Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims. Google's Terms prohibit automated access that violates instructions like robots.txt. We handle the collection; what you get is the same public news listing anyone sees on the results page.

Yes. The JSON maps straight to a list of dicts, so pandas.DataFrame(data['news']) gives you a table in one line, and the CSV view drops into Sheets or a database with no transformation. There is no storage limit, so you keep what you pull.

Google Search costs $1.00 per 1,000 successful requests at standard prices, down to $0.20 for the largest deposit. Empty and failed searches are free. Every eligible account gets $6 of free usage monthly. Paid funds never expire.

WORKS WITH YOUR STACK

Try it on a topic you track

The free plan covers a real news feed. Paste the script above, swap in your key, and look at the JSON that comes back.

Try for free
No credit card required