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.
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,timespan,sourceCountry(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.002 per article = $2 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Article returned | Charged per news article returned. | $0.002 |
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-13, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
query | Keywords to search worldwide news for. Wrap phrases in quotes (e.g. "climate change"). Combine with OR, or operators like domain:reuters.com. Very short or very common single words may be rejected by GDELT, add a second word or quote a phrase. | string |
timespan | Only return articles from the last N units of time, e.g. 1d, 3d, 1w, 1m, 3m. Leave empty for GDELT's default window. GDELT only covers roughly the last 3 months. | string |
sourceCountry | Limit to articles from a given source country, appended to the query as sourcecountry:{code}. Use GDELT country codes (e.g. US, UK, FR, DE, IN). Leave empty for all countries. | string |
sourceLang | Limit to articles in a given language, appended to the query as sourcelang:{code} (e.g. english, french, spanish, german). Leave empty for all languages. | string |
sort | How to order results: DateDesc (newest first), DateAsc (oldest first), or HybridRel (by relevance to the query). | string |
maxItems | Maximum number of articles to return. GDELT hard-caps a single request at 250, higher values are automatically capped at 250. | integer |
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 |
What you get
A structured dataset — each result includes fields like:
detailsquerysortsourceCountrysourceLangtimespantitledomainlanguagepublishedAturlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
2 ready-to-run use cases
World News API for AI Coverage, Newest First
AI stories from GDELT's worldwide index, not one country's edition. Each row has the headline, domain, language and source country. Links only, no text.
World Cup News Worldwide, in Every Source Language
A week of World Cup coverage from GDELT with the publishing country and language on every row. Headlines and links, not full article text.
Related tools in News & Finance Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
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 News Scraper
Track Google News by keyword or topic. Get real publisher URLs, source, date and snippet. $3.00 per 1,000 articles.
Where this tool sits
- Categories
- News & Finance Data
GDELT News Scraper: search world news in 65+ languages, no API key
Give it a query and you get news articles from most of the planet back as rows: headline, link, outlet domain, the country the outlet is in, the language it was written in, the publish time and the share image. Filter by country, by language, or to the last day, week or month.
Two limits come from GDELT itself and neither can be worked around here. Any one query returns at most 250 articles with no way to page past that, and the index only reaches back about three months. This is a tool for what is being published now, not an archive.
| Input | A search query, optionally narrowed by country, language and time window |
| Output | One row per article, headline level |
| Ceiling | 250 articles per run |
| Account needed | None, and no API key |
| Price | $2.00 per 1,000 articles, flat on every plan |
🌍 What GDELT News Scraper does
It searches GDELT's worldwide news index and hands back flat rows. GDELT watches online news in more than 65 languages, which is the reason to use it: a brand or a policy that has three mentions in English news might have forty in Spanish, Indonesian and Albanian, and this finds those.
Your query goes to GDELT as written, so quoted phrases work, OR works, and operators like domain:reuters.com work. The country and language boxes are added to the query for you.
Articles that come back twice under the same URL are dropped, and so is anything arriving with neither a link nor a headline, before either reaches your dataset.
GDELT asks callers to leave about five seconds between requests, and it can take ten to fifteen seconds to answer a wide query. The run paces itself accordingly. A run that takes a minute is normal here, not stuck.
📥 What you give it
{
"query": "\"electric vehicles\"",
"timespan": "3d",
"sourceCountry": "DE",
"sort": "DateDesc",
"maxItems": 250
}
| Field | Default | What it is |
|---|---|---|
query | none | Your keywords. The form starts with artificial intelligence in the box, but nothing is sent unless you set it, and an empty query is refused rather than run. Quote phrases: "climate change". |
timespan | none | 1d, 3d, 1w, 1m, 3m. Empty means GDELT's own default window. |
sourceCountry | none | A GDELT country code such as US, UK, FR, DE, IN. Empty means every country. |
sourceLang | none | A language name such as english, french, spanish, german. Empty means every language. |
sort | DateDesc | DateDesc newest first, DateAsc oldest first, HybridRel by relevance. Anything else falls back to DateDesc. |
maxItems | 100 | 1 to 250. Ask for more and it is cut to 250, because that is GDELT's ceiling. |
notionConnector | none | Optional. Write every article into Notion as a page when the run finishes. Authorize the connector once under Settings, API and Integrations, MCP connectors, then pick it here. |
notionParentId | none | Optional. The Notion data source to write into. Empty creates the pages privately in your workspace. |
proxyConfiguration | off | Optional and not needed for a normal run. |
📤 What you get back
A real row from a recent run, one of the Albanian results for a China supply-chain query:
{
"ok": true,
"title": "FOKUS – Kina u bën thirrje BRICS - it dhe vendeve partnere ti mbajnë zinxhirët e furnizimit të qëndrueshëm dhe të papenguar – 24 ore",
"url": "https://24-ore.com/fokus-kina-u-ben-thirrje-brics-it-dhe-vendeve-partnere-ti-mbajne-zinxhiret-e-furnizimit-te-qendrueshem-dhe-te-papenguar/",
"domain": "24-ore.com",
"sourceCountry": "Albania",
"language": "Albanian",
"publishedAt": "2026-09-13T09:15:00.000Z",
"socialImage": null
}
| Field | What it is |
|---|---|
title | The headline as GDELT indexed it, in its original language. |
url | The article on the outlet's own site. Nothing is rewritten. |
domain | The outlet's domain, which is the field to group by if you want a source ranking. |
sourceCountry | Where the outlet is, spelled out, not a code. |
language | The language of the article, spelled out. |
publishedAt | When GDELT first saw the article, in UTC. null on the rare row whose date does not parse. |
socialImage | The article's share image, and null often. Plenty of outlets do not set one. |
🧾 Reading the output
Articles carry ok: true. When a query is refused or something goes wrong you get a single row with ok: false and an errorCode instead of an empty dataset, and that row is not charged.
| Code | What it means |
|---|---|
BAD_INPUT | GDELT refused the query. Usually it was one very short or very common word. Add a second word or quote a phrase. |
NO_RESULTS | The query was fine and matched nothing. Widen the time window or drop the country filter. |
RATE_LIMITED | GDELT was busy. The run already waited and tried again before writing this row. Run it again in a minute. |
SERVER_ERROR | GDELT answered with an error of its own. |
NETWORK | GDELT was unreachable or answered badly. |
Worth knowing: the run still finishes green when it ends on one of those rows, and the Console's overview table has no column for ok or errorCode, so a refused query looks like one blank line there. Check ok in the JSON, or switch the view to all fields, before deciding a run failed.
▶️ How to run it
1. Open GDELT News Scraper and click Try for free. 2. Put your keywords in Search query. Quote anything that is a phrase. 3. Set Timespan to something like 3d if you only want recent coverage. 4. Set Max articles, then click Start. Give it up to a minute. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$2.00 per 1,000 articles. Flat on every Apify plan, no volume tiers.
You pay per article row delivered. Duplicates dropped inside the run, rows GDELT never returned, and diagnostic rows are not charged, so a query that GDELT refuses or that matches nothing costs you nothing.
💡 What people use it for
- Following a story outside your own language. Same query,
sourceLangleft empty, and the spread
of countries in the results is the story.
- Watching a brand or a person across regions, on a schedule, with
timespanset to1d. - Building a source list for a topic by counting
domainacross a few hundred rows. - Comparing how much coverage two countries give the same event, by running the query twice with
different sourceCountry values.
- Feeding headlines into a summariser or a Notion database and reading the digest instead of the
feed.
🚧 What it does not do
- Headlines and metadata only. No article body. Follow
urlyourself if you need the text. - 250 articles per query, and no paging past it. To go wider, split the job by country, by
language, or into narrower time windows and stitch the results.
- About three months of history. Older news is not in the index to find.
- No tone, sentiment or event scores. This reads GDELT's article search, not its other datasets.
- Very short or very common single-word queries get refused by GDELT, not by this actor.
- Deduplication is per run. Two scheduled runs over overlapping windows can both return the same
article, so dedupe on url your side.
- Coverage is GDELT's. If an outlet is not in its index, no query here will find it.
socialImageis missing more often than it is present, andpublishedAtis when GDELT saw
the article, which can be a little after the outlet published it.
🧭 Which news scraper do you need?
| If you want | Use |
|---|---|
| World news by keyword, across languages and countries | This one |
| Google News by keyword or topic, with the publisher's real link | Google News Scraper |
| Hacker News stories, comments and the front page | Hacker News Scraper |
| Every post from a Substack publication | Substack Publication Scraper |
❓ Questions people ask
Do I need a GDELT API key? No. Nothing to apply for, no quota to manage.
Why did I only get 250 articles? That is GDELT's cap on a single query and there is no way past it. Narrow the query and run it more than once.
Why was my query refused? Single words that are very short or very common get rejected by GDELT itself. Quote a phrase or add a second word, and the BAD_INPUT row carries GDELT's own wording.
Can I get the full text of the articles? Not from here. You get the link, and the article is on the outlet's site.
How far back does it go? Roughly three months.
Why did my run take a minute? GDELT wants a few seconds between requests and often takes ten to fifteen seconds to answer. The run waits rather than hammering it.
Is this legal? These are public news headlines and links from a public index. 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 and the run ID. The errorCode on the diagnostic row, and GDELT's own message beside it, usually name the problem.