Google News Scraper
Track Google News by keyword or topic. Get real publisher URLs, source, date and snippet. $3.00 per 1,000 articles.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
query,topic,freshness(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.003 per article = $3 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Article returned | Per article. | $0.003 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-11, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
query | Keywords to search Google News for (e.g. "electric vehicles", or advanced: "tesla OR rivian site:reuters.com"). Leave empty if using a Topic instead. | string |
topic | Use a Google News topic feed instead of a search query. | string |
freshness | Only return articles newer than this (applied to query searches). | string |
language | Interface/article language code, e.g. en-US, en-GB, fr, de, es-419. | string |
country | Edition country code, e.g. US, GB, CA, DE, FR, IN. | string |
maxItems | Maximum number of articles to return (Google News feeds cap around 100 per query). | integer |
resolveUrls | Decode Google's redirect links into the actual article URL (e.g. reuters.com/...). Best-effort; falls back to the Google link with urlResolved=false if a link can't be decoded. Check urlResolved per row to know whether url is the real publisher link or the Google redirect. | boolean |
fetchArticleText | Download each resolved article and extract its main body text. Slower; requires Resolve URLs. Some sites block scraping or have no extractable body, those rows come back with articleText=null and are flagged ok:false and NOT charged, so you only pay for articles whose text was actually fetched. | boolean |
aiSummary | Generate a 1-2 sentence summary and a sentiment label per article using OpenAI. Needs an OpenAI API key. Best-effort: if the OpenAI call fails for an article, the aiSummary and sentiment fields are simply omitted/null for that row (the article itself is still returned). | boolean |
notionConnector | Optional. Write each article as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
openaiApiKey | Only needed when AI summary is on. Kept private. | string |
What you get
A structured dataset — each result includes fields like:
articleTextgoogleUrlpublishedAtquerysnippetsourcesourceUrltitletopicurlurlResolvedExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
22 ready-to-run use cases
Stock News Sentiment for Apple and Microsoft Earnings
Yesterday's Apple and Microsoft earnings coverage as rows. The sentiment label is an OpenAI step, so bring your own key or the run returns nothing.
Mergers and Acquisitions News Feed for Deal Tracking
Acquisition, merger and takeover-bid stories from the last day. The AI field that pulls out acquirer and target needs your own OpenAI key.
Startup Funding News: Seed to Series B Rounds Daily
Yesterday's raise announcements as rows, ready to route to a CRM. The AI extract of amount and investors runs on your own OpenAI key.
CEO Changes News: Track Executive Moves Weekly
Finds appointment, resignation and CFO-named stories across a week of news. Add your own OpenAI key for the summary column, or the run returns nothing.
Adverse Media Screening for Supplier Due Diligence
Watches news for lawsuits, pollution findings and labour cases naming your suppliers. Headline, outlet, date, link. AI summaries need your own OpenAI key.
Crypto News API: Bitcoin, ETF and SEC Headlines
A day of Bitcoin, Ethereum, ETF and stablecoin regulation coverage as rows. The sentiment column is an OpenAI step and needs your own key.
FDA Recall List and Class Action News, Daily
Recalls, FDA warning letters, contamination and class-action stories from the last 24 hours. AI summaries need your own OpenAI key to run.
Google News RSS Feed to JSON for Headline Tracking
Turns a Google News query into clean rows: headline, outlet, publish time and the real article URL after the redirect. Runs with no key at all.
Real Time News API for AI Agents and RAG Grounding
Fresh headlines plus article text for grounding an agent's answers. The AI summary field runs on your own OpenAI key; leave it off and you still get rows.
Business News API: Daily Headlines Feed as JSON
Google News business section as 80 rows a day, each with headline, outlet, timestamp and the resolved article link. No API key, no quota to manage.
Country Risk Monitoring from Daily News Headlines
Sanctions, conflict, trade war and election coverage from the UK edition of Google News. The AI risk note is an OpenAI step and needs your own key.
Brand Monitoring for Negative Press and Crisis Alerts
Catches lawsuits, boycotts, outages and layoff stories about one company the day they run. AI severity notes need your own OpenAI key.
Layoff Tracker: Job Cuts and Restructuring News Feed
A week of layoff, job-cut and workforce-reduction stories as rows you can filter by company. The AI summary column needs your own OpenAI key.
Clinical Trial News and FDA Approval Headlines Feed
Phase 3 readouts, FDA approvals and breakthrough designations from the last day. The plain-English summary is an OpenAI step needing your own key.
Local Business News by City: Openings and Closings
Swap the city name and get a week of openings, expansions, relocations and closures for that market. The AI summary needs your own OpenAI key.
Partnership Announcements and Integration News Feed
Finds the week's partnership, alliance and integration press across every outlet Google indexes. The AI summary column needs your own OpenAI key.
Tesla News Today, Scraped from Google News as JSON
The last 24 hours of Tesla coverage, newest first, with the publisher URL resolved out of Google's redirect. Schedule it and you have a daily feed.
Top Technology News Today from Google News as JSON
The whole technology section, 50 stories, each row carrying headline, outlet, publish time and the article URL after Google's redirect is followed.
EV News: Rivian and Lucid Headlines Side by Side
A month of Rivian and Lucid coverage in one table, so you can see which one the press is actually writing about. Runs with no API key.
News API for AI Regulation Headlines, Updated Daily
AI policy and regulation stories from the last week as JSON rows. Sentiment labels only appear if you add your own OpenAI key; without one the run stops.
Company News Alerts: Watch One Brand on Google News
Type a company name, get its 50 newest stories with outlet, timestamp and the article URL Google hides behind a redirect. No key needed.
AI News Today from Google News, Newest First
Fifty artificial-intelligence stories from the past day: headline, outlet, timestamp and the real article link. No key, no quota, no signup.
Related tools in News & Finance Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GDELT Worldwide News Scraper
Search worldwide news via GDELT 2.0: headline, URL, domain, country, language and date. 250 articles per query. $2.00 per 1,000.
Yahoo Finance Scraper
Get Yahoo Finance quotes and OHLCV history with no API key. Ticker search, current quote with change % and the 52-week range. $1.00 per 1,000 rows.
CoinGecko Crypto Market Scraper
Scrape CoinGecko crypto market data with no API key. Get top coins, price, volume, 24h and 7d change, supply, ATH and ATL. $2.00 per 1,000 coins.
SEC EDGAR Filings Scraper
Search all SEC EDGAR filings by keyword, ticker or CIK. Get form, company, CIK, date and document link. $2.00 per 1,000.
Google Maps Scraper
Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.
Google Reviews Monitor — Multi-Location Alerts & Reports
Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.
Where this tool sits
- Categories
- News & Finance Data
- Platforms
Google News Scraper: articles by keyword or topic, with the publisher's real link
Give it a keyword or pick one of Google News's topic feeds, and get one row per article: headline, publisher, date, snippet and a link. Optionally the full body text, and a short summary with a sentiment label if you bring your own OpenAI key.
Here is the part that decides whether you need this. Every link in a Google News feed is a redirect blob, https://news.google.com/rss/articles/CBMi..., and the publisher's actual address has to be decoded out of it. That decoding is best effort. When a link will not decode, the row still arrives with the Google link in url and urlResolved: false, so you always know which one you are holding.
| Input | A keyword search, or one of eight Google News topic feeds |
| Output | One row per article |
| Ceiling | 100 articles per run, and Google's feeds hold about 100 anyway |
| Account needed | None. An OpenAI key only if you want the summaries |
| Price | $3.00 per 1,000 articles, flat on every plan |
📰 What Google News Scraper does
It reads a Google News feed and writes a row per article: title, source, sourceUrl, publishedAt, snippet, the decoded url, and the original googleUrl in case you want it.
Search or topic. A query takes Google operators, so tesla OR rivian, site:reuters.com and intitle:layoffs all work. A topic instead gives you the edition feed for World, Nation, Business, Technology, Entertainment, Sports, Science or Health.
Full text, if you ask. With fetchArticleText on, each resolved article is downloaded and its body pulled out, up to 20,000 characters. Plenty of publishers will not give that up to a plain request, and those rows come back with articleText: null and are not charged.
Summaries, on your key. aiSummary adds a one or two sentence summary and a sentiment label, using the OpenAI key you supply. OpenAI bills you for those calls directly. This actor adds nothing for them.
📥 What you give it
{
"query": "openai funding",
"freshness": "7d",
"language": "en-US",
"country": "US",
"maxItems": 30,
"resolveUrls": true
}
| Field | Default | What it is |
|---|---|---|
query | box starts at artificial intelligence | Keywords, with Google operators. Leave empty if you are using a topic. |
topic | none | A topic feed instead of a search: World, Nation, Business, Technology, Entertainment, Sports, Science, Health. |
freshness | any time | 1h, 1d, 7d, 30d or 1y. It narrows a query search. A topic feed returns whatever the feed holds. |
language | en-US | Google's hl. en-GB, fr, de, es-419 and the rest. |
country | US | Google's gl. GB, CA, DE, IN and so on. |
maxItems | 50 | Articles to return, up to 100. |
resolveUrls | on | Decode the Google redirect into the publisher's own link. |
fetchArticleText | off | Download each article and pull out the body. Needs resolveUrls on. |
aiSummary | off | Summary and sentiment per article. Needs your own key in openaiApiKey. |
openaiApiKey | none | Read only when aiSummary is on. Stored as a secret. |
notionConnector | none | Optional. Write each article into your Notion when the run finishes. |
notionParentId | none | Optional. The Notion data source to write into. |
proxyConfiguration | off | Optional, and a normal run does not want it. |
Send neither a query nor a topic and you get one uncharged BAD_INPUT row telling you which is missing. Same if aiSummary is on without a key.
📤 What you get back
A real row from a recent run, with the long Google link cut short:
{
"ok": true,
"title": "Kapolri Dorong Pekerja Tingkatkan Kompetensi dan Penguasaan Teknologi - Tribratanews Polda Metro Jaya",
"publishedAt": "2026-09-16T07:04:36.000Z",
"source": "Tribratanews Polda Metro Jaya",
"sourceUrl": "https://tribratanews.metro.polri.go.id",
"snippet": "Kapolri Dorong Pekerja Tingkatkan Kompetensi dan Penguasaan Teknologi Tribratanews Polda Metro Jaya",
"url": "https://tribratanews.metro.polri.go.id/kapolri-dorong-pekerja-tingkatkan-kompetensi-dan-penguasaan-teknologi/",
"urlResolved": true,
"articleText": null,
"googleUrl": "https://news.google.com/rss/articles/CBMirgFBVV95cUxNbUp3aDlPMFNNNG5Qa3A3QlV0WFVKVjJHLU5GWExSal9qdEcz..."
}
| Field | What it is |
|---|---|
url | The publisher's own link once decoded, or the Google link when it would not decode. |
urlResolved | true means url is the publisher's address. false means it is still the Google redirect. Check it per row. |
googleUrl | The original redirect link, always present. |
source, sourceUrl | Publisher name and homepage, as Google's feed gives them. null when the feed leaves them out. |
publishedAt | ISO timestamp from the feed. |
articleText | Only with fetchArticleText on, and only when the body could be pulled out. Capped at 20,000 characters. |
aiSummary, sentiment | Only with aiSummary on and the call came back. A failed call leaves them empty and the article row still ships. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A complete article | ok: true | yes |
| An article missing the text or summary you asked for | ok: false, with articleText null | no |
| A diagnostic | ok: false and an errorCode | no |
There is no sample row on this one. An empty input goes straight to BAD_INPUT.
| Code | What it means |
|---|---|
BAD_INPUT | No query and no topic, or aiSummary on with no key. |
NO_RESULTS | The feed came back empty. Widen freshness, or try the keyword without operators. |
NOT_FOUND | That feed address does not exist. Usually a bad language or country pairing. |
BLOCKED | Google would not serve the feed for that request. |
RATE_LIMITED | Too many requests in a short window. Wait and re-run. |
SERVER_ERROR | Google answered with an error of its own. |
NETWORK | Google was unreachable or the response never finished. |
The Overview table hides urlResolved, ok, articleText and aiSummary, which are exactly the fields you want to check. Switch the dataset to JSON to see them.
▶️ How to run it
1. Open Google News Scraper and click Try for free. 2. Put keywords into Search query, or leave it empty and pick a Topic instead. 3. Set Max articles, and Freshness if you only want recent pieces. 4. Tick Fetch full article text only if you need bodies, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$3.00 per 1,000 articles, which is $0.003 each. The same rate on every Apify plan, no volume tiers.
Resolving links, fetching article text and the AI summary all cost nothing extra here. The OpenAI calls behind aiSummary are billed to you by OpenAI, on your own key.
What is not charged: a row where you asked for the body and nothing could be extracted, every diagnostic row, and a search that finds nothing.
💡 What people use it for
- Watching a brand, a competitor's product name or a ticker across publishers, on a daily schedule.
- Building a reading list for one topic feed in one country, with real links you can open.
- Pulling headline, date and publisher into a sheet for a weekly roundup, skipping the body entirely.
- Feeding resolved article URLs into your own pipeline, since
googleUrlis useless to most tools.
🚧 What it does not do
- About 100 articles per feed. That is Google's cap, not ours. Split a bigger job by keyword, by
site:, or by freshness window.
- Full text is a gamble per article. Paywalls and pages that build themselves in the browser give
a plain request nothing. Those rows are flagged and not charged, so do not budget on getting the body for every article.
- Some links never decode. You get the Google link and
urlResolved: falserather than a
dropped row.
freshnessnarrows a search, not a topic feed. Pick a topic and you get what that feed holds.- No archive. Google News feeds carry what is current. There is no way to ask for last March.
- The Notion connector receives every row, including the incomplete ones. Filter on
okif you
only want complete articles in there.
- One query or one topic per run. Use a schedule or several runs for a list of keywords.
🧭 Which Google scraper do you need?
| If you want | Use |
|---|---|
| News articles by keyword or topic | This one |
| The ordinary web results page for a keyword | Google Search Results Scraper |
| Images and the pages hosting them | Google Images Scraper |
| Job postings from the jobs box | Google Jobs Scraper |
| Businesses, places and their reviews | Google Maps Scraper |
❓ Questions people ask
Do I need a Google API key? No. Nothing to apply for, nothing to log into.
Do I need an OpenAI key? Only for aiSummary. Leave that off and the actor never touches OpenAI.
Why is url sometimes still a news.google.com address? Because that particular link would not decode. urlResolved tells you, per row, and googleUrl always holds the original.
Can I search several keywords at once? Not in one run. Put your operators in a single query, or schedule a run per keyword.
Why did I get fewer than maxItems? The feed ran out. A narrow keyword with a tight freshness window often returns a handful.
Is scraping Google News legal? These are public news feeds, and the rows point back at the publishers. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the query or topic and the run ID. The errorCode on the diagnostic row usually names the problem on its own.