GDELT News Scraper - Worldwide Coverage, No API Key
Pricing
from $1.94 / 1,000 articles
GDELT News Scraper - Worldwide Coverage, No API Key
Search world news in 65+ languages with GDELT, no API key. Each row holds the headline, link, outlet domain, outlet country, language, publish time and share image. Filter by country, language or time window. 250 articles per query, about three months back. $2.00 per 1,000 articles.
Pricing
from $1.94 / 1,000 articles
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
Search world news in more than 65 languages and get one row per article: 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, link, outlet domain, outlet country, language, publish time, share image |
| Ceiling | 250 articles per run |
| Account needed | None, and no API key |
| Price | $2.00 per 1,000 articles, flat on every plan. The free plan's $5 a month covers about 2,500 |
🔍 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 or two is normal here, not stuck.
📋 What data you get from each news article
| What you get | Field |
|---|---|
| The headline, in its original language | title |
| The article on the outlet's own site | url |
| The outlet's domain | domain |
| The country the outlet is in | sourceCountry |
| The language of the article | language |
| When GDELT first saw it, in UTC | publishedAt |
| The article's share image | socialImage |
▶️ How to scrape GDELT news
- Open GDELT News Scraper and click Try for free.
- Put your keywords in Search query. Quote anything that is a phrase.
- Set Timespan to something like
3dif you only want recent coverage. - Set Max articles, then click Start. Give it a minute or two.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost to scrape GDELT news?
$2.00 per 1,000 articles. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 2,500 articles.
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 you give it
{"query": "\"electric vehicles\"","timespan": "3d","sourceCountry": "DE","sort": "DateDesc","maxItems": 250}
| Field | Default | What it is |
|---|---|---|
query | none, the form starts with artificial intelligence | Your keywords. 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. Writes every article into Notion as a page when the run finishes. |
notionParentId | none | Optional. The Notion data source to write into. Empty creates the pages privately in your workspace. |
proxyConfiguration | none | Optional and not needed for a normal run. |
📤 What you get back
A real row from a run on 2 October 2026, one of the German-language results for
artificial intelligence{"ok": true,"title": "Deutsche Telekom Aktie : KI - Lösung für Kassen mit caery","url": "https://www.boerse-express.com/news/articles/deutsche-telekom-aktie-ki-loesung-fuer-kassen-mit-caery-950149","domain": "boerse-express.com","sourceCountry": "Austria","language": "German","publishedAt": "2026-10-02T10:45:00.000Z","socialImage": "https://www.boerse-express.com/assets/fae58d3e42/deutsche-telekom-aktie-ki-loesung-fuer-kassen-mit-caery-950149__..."}
| Field | How to read it |
|---|---|
title | The headline as GDELT indexed it, in its original language, sometimes with odd spacing around punctuation as above. |
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, which can be a little after the outlet published it. 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.
| Row | How to spot it | Billed |
|---|---|---|
| An article | ok: true | yes |
| A diagnostic | ok: false and an errorCode | no |
| 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 for the whole run. 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.
💡 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
sourceCountryvalues.
🚧 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
urlyour side. - Coverage is GDELT's. If an outlet is not in its index, no query here will find it.
- It is not an official GDELT tool. Dami's Studio is independent and is not affiliated with or endorsed by GDELT, or by any other company named on this page.
🧭 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.
Why did my run take a minute or two?
GDELT wants a few seconds between requests and often takes ten to fifteen seconds to answer. The run waits rather than hammering it.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/gdelt-news-scraper. Either way the run
happens on your Apify account at the same price.
Is scraping GDELT news legal?
These are public news headlines and links from a public index. Apify's write-up on the legality of web scraping 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.