GDELT 2.0 (Global news events and tone)
GDELT 2.0 (Global news events and tone)
Open global news-event database from the GDELT Project: events, article mentions and a knowledge graph of people, organizations, places, themes and tone, extracted from news worldwide and published as free raw files every 15 minutes. No key or signup; free for commercial use with a citation and link to gdeltproject.org.
The GDELT Project monitors news media worldwide and turns it into open data. GDELT 2.0 publishes three tables every 15 minutes as zipped, tab-delimited files: Events (who did what to whom and where, coded with CAMEO event codes, with a Goldstein impact score and the average tone of the articles), Mentions (every article that mentions each event, with its publication time) and the Global Knowledge Graph (GKG: people, organizations, locations, themes and emotional tone extracted from each article). There are two parallel streams: English-language news, and Translingual (news machine-translated from 65 languages). The raw-file archive starts on Feb 18, 2015.
Everything is free, with no key or account. GDELT's terms allow "unlimited and unrestricted use for any academic, commercial, or governmental use of any kind without fee", and you may redistribute or mirror the data, but any use or redistribution must include a citation to the GDELT Project and a link to https://www.gdeltproject.org/.
The DOC 2.0 full-text search API (api.gdeltproject.org/api/v2/doc/doc) is an optional extra: article lists and volume/tone timelines over a rolling 3-month window, limited to one request every 5 seconds. On Oct 20, 2026 it answered our calls with only that rate-limit message, so build on the raw files. The older GDELT 1.0 event files (different format, daily updates) go back to 1979.
Required Attribution:
Required: "any use or redistribution of the data must include a citation to the GDELT Project and a link to this website (https://www.gdeltproject.org/)." (GDELT gives no set citation wording.)
Coverage
Worldwide online news monitored by GDELT, in two file streams: English-language news, and Translingual (news machine-translated from 65 languages). Each 15-minute batch has three tab-delimited files: Events (CAMEO-coded actions with actors, locations, Goldstein scale and average tone), Mentions (every article mentioning an event, with its publication time) and the Global Knowledge Graph (people, organizations, locations, themes and tone per article). Raw-file history from Feb 18, 2015 (checked Oct 20, 2026). Optional DOC 2.0 search API: rolling 3 months, one request every 5 seconds. No market prices.
Good for
- Building 15-minute or daily news-tone and event-count features for a country, company or theme, time-stamped by DATEADDED (when GDELT saw the event) to avoid look-ahead bias
- Event-driven backtests: flagging protests, conflict, sanctions or other CAMEO event types in the countries behind an FX, commodity or index position
- Attention signals: counting how often a company, person or theme appears in the Mentions or Knowledge Graph files and testing whether spikes lead price moves
Verdict
Free, commercially usable news and event data for building sentiment and attention features, with new Events, Mentions and Knowledge Graph files every 15 minutes and an archive back to Feb 18, 2015. It's a signal source, not market data: there are no prices, and you map countries, companies or themes to the assets you trade yourself. Time-stamp features with DATEADDED (when GDELT first saw the event, in UTC), not the event-date column, or a backtest will see news before it was published. Tone scores are machine-generated, and the files are big (GDELT says 2015's Knowledge Graph alone is over 2.5TB), so start with the Events files. Any use or redistribution must cite the GDELT Project and link to https://www.gdeltproject.org/. The DOC 2.0 search API is limited to one request every 5 seconds and refused our calls with that message on Oct 20, 2026; use the raw files for anything regular.
Endpoints
| Endpoint | Returns |
|---|---|
https://data.gdeltproject.org/gdeltv2/lastupdate.txt | Newest 15-minute batch, English stream (Events, Mentions, GKG file URLs) |
https://data.gdeltproject.org/gdeltv2/lastupdate-translation.txt | Newest 15-minute batch, Translingual stream (65 languages, machine-translated) |
https://data.gdeltproject.org/gdeltv2/masterfilelist.txt | Every English-stream file since Feb 18, 2015 (Translingual: masterfilelist-translation.txt) |
https://api.gdeltproject.org/api/v2/doc/doc | DOC 2.0 search API, rolling 3 months; one request every 5 seconds |
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Load GDELT 2.0 event files into pandas and Parquet. Checked against the provider's documentation on Oct 29, 2026.
Access
- No account or key. Raw files are plain downloads.
Request
curl https://data.gdeltproject.org/gdeltv2/lastupdate.txtFormat
Every 15 minutes: zipped export (events), mentions and gkg files. Despite the .CSV name they are tab-delimited, with no header row; the events file has 61 columns in codebook order.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""GDELT 2.0 Events: the latest 15-minute export file -> pandas -> Parquet. No key."""
import io
import zipfile
import requests
import pandas as pd
# lastupdate.txt lists the newest export, mentions and gkg files as "size md5 url".
lines = requests.get("https://data.gdeltproject.org/gdeltv2/lastupdate.txt", timeout=30).text.split("\n")
url = next(l.split()[2] for l in lines if l.endswith(".export.CSV.zip"))
url = url.replace("http://", "https://") # the list gives http:// links; https:// also serves them
stamp = pd.Timestamp(url.rsplit("/", 1)[1][:14])
for _ in range(5): # the newest file can 404 for a while; step back one 15-minute slot at a time
r = requests.get(url, timeout=60)
if r.status_code != 404:
break
stamp -= pd.Timedelta(minutes=15)
url = f"https://data.gdeltproject.org/gdeltv2/{stamp:%Y%m%d%H%M%S}.export.CSV.zip"
r.raise_for_status()
with zipfile.ZipFile(io.BytesIO(r.content)) as z:
raw = z.read(z.namelist()[0])
# Tab-delimited despite the .CSV name, no header row, 61 columns (GDELT 2.0 Event codebook).
df = pd.read_csv(io.BytesIO(raw), sep="\t", header=None, dtype=str)
cols = {0: "GlobalEventID", 1: "Day", 6: "Actor1Name", 16: "Actor2Name", 26: "EventCode",
28: "EventRootCode", 29: "QuadClass", 30: "GoldsteinScale", 31: "NumMentions",
34: "AvgTone", 53: "ActionGeo_CountryCode", 59: "DATEADDED", 60: "SOURCEURL"}
df = df[list(cols)].rename(columns=cols) # keep EventCode as a string (leading zeros matter)
for c in ("GoldsteinScale", "AvgTone", "NumMentions", "QuadClass"):
df[c] = pd.to_numeric(df[c])
df["Day"] = pd.to_datetime(df["Day"], format="%Y%m%d")
df["DATEADDED"] = pd.to_datetime(df["DATEADDED"], format="%Y%m%d%H%M%S")
df.to_parquet("gdelt_events_latest.parquet", index=False)
print(url.rsplit("/", 1)[1], len(df), "events; oldest event Day", df["Day"].min().date())Run by us on 2026-10-29 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 841 events from the 2026-10-29 23:30 UTC export file.
Limits
- Raw files: no published rate limit.
- DOC 2.0 search API: one request every 5 seconds (GDELT's own limit message).
Quirks
- Store EventCode (and the base and root codes) as strings: CAMEO codes can have leading zeros.
- Day is the date the event took place; DATEADDED is when GDELT added it. Use DATEADDED for "what was new" (rows in the file we checked had Day values up to a year earlier).
- Observed 2026-10-29: lastupdate.txt lists http:// links, which returned HTTP 500 from our test environment while the same paths over https:// worked, and the newest listed file returned 404 for some minutes after it was listed. The snippet switches to https and steps back one 15-minute slot.
Terms and attribution
- Free for any use, including commercial; any use or redistribution must cite the GDELT Project and link to https://www.gdeltproject.org/.
Sources
- https://data.gdeltproject.org/documentation/GDELT-Event_Codebook-V2.0.pdf: “are tab-delimited (note that files have a “.csv” extension, but are actually tab-delimited)”
- https://data.gdeltproject.org/documentation/GDELT-Event_Codebook-V2.0.pdf: “it is strongly recommended that this field be stored as a string instead of an integer”
- https://www.gdeltproject.org/about.html: “any use or redistribution of the data must include a citation to the GDELT Project and a link to this website”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer