Simple, free data on how the news spreads. Look, compare, download.
Open data · Free, CC BY 4.0
How a story spreads
A sourced record of what was reported, when, and by whom. Every dot is a real article, and every dot links to it.
Spain's second deadly train crash raises concerns about rail safety
- Filled dot: outlet allows text mining, headline kept in the data.
- Hollow dot: outlet has opted out of text mining. We keep only the outlet, the time and the link.
- Dots sit at the publisher’s own feed time.
| Outlet | Country | Published (publisher time) | First seen by our check | Headline | Link |
|---|---|---|---|---|---|
| SBSSBS News | AU | Headline withheld: the outlet opted out of text mining. | Open article (SBS) | ||
| PBS NewsHourPBS NewsHour | US | Shock, anger and mourning in Spain after 2nd major train crash this year | Open article (PBS NewsHour) | ||
| RTÉRTÉ World | IE | At least 68 dead after two trains crash in Spain | Open article (RTÉ) | ||
| AfricanewsAfricanews | FR | Spain: Madrid mourns train crash victims as rescuers work through the night | Open article (Africanews) | ||
| CBSCBS World | US | High-speed train crash in Spain kills at least 68, dozens injured | Open article (CBS) | ||
| CNACNA World | SG | Spain mourns after latest train tragedy kills 68 | Open article (CNA) | ||
| NPRNPR World | US | Spain reckons with 2nd deadly train crash of the year ahead of national election | Open article (NPR) | ||
| NBCNBC News | US | Protests erupt in Spain after train crash kills dozens | Open article (NBC) | ||
| ABC InternationalABC International | US | Spain reckons with second deadly train crash of the year ahead of national election | Open article (ABC International) | ||
| Politico EuropePolitico Europe | BE | Former Spanish employment minister died in train crash | Open article (Politico Europe) | ||
| IndependentIndependent World | GB | Former minister dead after 69 killed in Spain’s high-speed train crash | Open article (Independent) | ||
| GuardianGuardian World | GB | Headline withheld: the outlet opted out of text mining. | Open article (Guardian) | ||
| France 24France 24 | FR | Headline withheld: the outlet opted out of text mining. | Open article (France 24) | ||
| UPIUPI World | US | Spain investigates train crash that killed 69, focuses on controllers | Open article (UPI) | ||
| ABC AustraliaABC Australia | AU | Spain begins three days of mourning as train crash death toll reaches 74 | Open article (ABC Australia) | ||
| CTVCTV World | CA | Spain’s second deadly train crash this year leaves 69 people dead | Open article (CTV) |
Biggest stories
Each story has its own page: who covered it, when, and a link to every article.
- Spain mourns after second deadly train crash of the year 18 outlets · 29 Oct 2026
- Israel holds first election since 2023 attacks, with Netanyahu's fate uncertain 18 outlets · 28 Oct 2026
- Brazil's Lula secures historic fourth term in presidential election 18 outlets · 27 Oct 2026
- Israel's inconclusive election leaves no clear winner after record turnout 17 outlets · 29 Oct 2026
- Flavio Bolsonaro claims leadership after fleeing Brazil to the US 17 outlets · 29 Oct 2026
- Flávio Bolsonaro and family granted US visas after fleeing Brazil 17 outlets · 28 Oct 2026
- US-brokered ceasefire takes effect in Russian-occupied Ukrainian city 15 outlets · 27 Oct 2026
- Venezuelan opposition leader María Corina Machado returns from exile 15 outlets · 26 Oct 2026
- Serbia's long-serving leader ousted in landslide election victory for student movement 14 outlets · 26 Oct 2026
- Elon Musk restricts Starlink access in Ukraine over drone strikes 14 outlets · 25 Oct 2026
- Anthropic's AI risks include blackmail, sentience, and existential threat 13 outlets · 28 Oct 2026
- Lula wins Brazil's presidential election, Bolsonaro contests the result 13 outlets · 27 Oct 2026
62 days of news
Each square is one day of the Tokos front page since 29 August 2026. Darker means more outlet links on that day’s cards. Pick a day to see its stories.
What is in the dataset
Live from the archive’s own check of what is stored.
- 3,960
- article sightings in the latest builds
- 116
- news feeds tracked
- 108
- story cards in the latest builds
- 1,844
- sightings kept as link, outlet and time only
- 0
- opted-out headlines stored (must be 0)
Counts as of
Download the data
One file per table per UTC day, and a bundle per week (Monday to Sunday). CSV opens in Excel; Parquet is for R, Python and the like. Today’s files grow until the day is over.
| Table | What it holds | Day | Week |
|---|---|---|---|
sightings |
Every article seen: outlet, feed, link, publish time, first and last seen | CSV · Parquet 5182 rows | CSV · Parquet 45146 rows |
headline_versions |
Each headline and every later change, with its time (open outlets only) | CSV · Parquet 1071 rows | CSV · Parquet 14458 rows |
card_membership |
Which articles grouped into which Tokos story, with its title | CSV · Parquet 782 rows | CSV · Parquet 19912 rows |
outlet_profiles |
Country, owner, funding type and feeds of each outlet | CSV · Parquet 127 rows | CSV · Parquet 889 rows |
outlet_daily_totals |
Articles and feed checks per outlet per day | CSV · Parquet 196 rows | CSV · Parquet 1372 rows |
feed_health |
Feed checks and failures per feed per day | CSV · Parquet 269 rows | CSV · Parquet 1883 rows |
daily_cards |
Each day’s stories since 29 Aug 2026 and their source links | CSV · Parquet 358 rows | CSV · Parquet 2211 rows |
who_spoke_first |
News or government first on each story with an official link, and the gap | CSV · Parquet 12 rows | CSV · Parquet 91 rows |
silent_big_stories |
Big stories (5+ outlets) with no official statement linked | CSV · Parquet 20 rows | CSV · Parquet 208 rows |
silent_officials |
Official items per government body, linked or not to a story | CSV · Parquet 130 rows | CSV · Parquet 778 rows |
coverage_gaps |
Which active outlets did not carry each story, by country, owner and funding | CSV · Parquet 220 rows | CSV · Parquet 2252 rows |
attention |
A simple daily attention score per story: outlets, feed position, time on Tokos | CSV · Parquet 220 rows | CSV · Parquet 2252 rows |
outlet_scorecards |
Per outlet per day: headline edits, removals, corrections, first or late | CSV · Parquet 60 rows | CSV · Parquet 360 rows |
cross_lag |
Stories in both editions: the gap between first EN and FR appearances | CSV · Parquet 2 rows | CSV · Parquet 13 rows |
cross_lag_country |
Per outlet country: lag from a story's first appearance anywhere | CSV · Parquet 10 rows | CSV · Parquet 66 rows |
framing |
Names and figures in a government's own briefing vs the Tokos title on the same story | CSV · Parquet 1 rows | CSV · Parquet 36 rows |
ownership_concentration |
Each owner group's share of a day's story sightings, with HHI | CSV · Parquet 45 rows | CSV · Parquet 280 rows |
What is in it, and what is not
- Open outlets: every field, headline included.
- Outlets that opted out of text mining: outlet, time and link only, never the headline.
- A few outlets whose terms don’t allow reuse (BBC, Al Jazeera, DW and New Scientist) are not in the data at all. You can still read them in the Tokos news feed.
- Not included: bylines, article text, and anything we have not seen in a public feed.
Data dictionary
What each file is for, and what every column means. Open a preview to see the first rows of the latest file without downloading it.
sightings 18 columns
Start here: one row per article an outlet listed in its feed that day, with when it was published and when we first saw it.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
article_idstr- Stable article id (sha256 of the canonical URL, 16 hex)
urlstr- Article link
outletstr- Newsroom id
feedstr- Feed the article was listed in
source_typestr- news or official
languagestr- Language of the feed
sectionstr- Tokos section of its card, if any
card_idstr- Tokos card it joined, if any
published_atstr- Publisher’s own feed time (UTC)
first_seenstr- First seen by our check, any day (UTC)
last_seenstr- Last seen that day (UTC)
builds_seenint- Number of 2-hourly checks that saw it that day
best_positionint- Highest position in the feed that day (1 = top)
kept_by_filtersbool- Passed the site’s news filters
rightsstr- open (headline kept) or reserved (outlet opted out of text mining: outlet, time and link only)
commercial_okbool- May appear in future paid files
headline_versions 13 columns
Use it to follow how headlines change: one row per version of a headline, for outlets that allow text mining only.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
article_idstr- Stable article id
outletstr- Newsroom id
feedstr- Feed
source_typestr- news or official
headlinestr- Headline as published (open outlets only; property of the publisher)
headline_hashstr- Fingerprint of the headline
previous_headline_hashstr- Fingerprint of the version it replaced
first_versionbool- First headline we saw for it
observed_atstr- When our check saw this version (UTC)
rightsstr- open (headline kept) or reserved (outlet opted out of text mining: outlet, time and link only)
commercial_okbool- May appear in future paid files
card_membership 19 columns
Use it to see which articles Tokos grouped into the same story: one row per article in a story card.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
card_idstr- Tokos card (one story grouped across outlets)
titlestr- Tokos title, empty when it copies an opted-out outlet’s headline
title_withheldbool- Title withheld for that reason
sectionstr- Tokos section
member_typestr- news or official_link
article_idstr- Stable article id
urlstr- Article link
outletstr- Newsroom id
feedstr- Feed
first_buildstr- First check with it in the card (UTC, YYYYMMDDHHMMSS)
last_buildstr- Last check with it in the card that day
buildsint- Checks with it in the card that day
best_rankint- Best rank of the card in its deck (1 = top)
max_source_countint- Most sources the card had that day
code_commitstr- Version of the grouping code
rightsstr- open (headline kept) or reserved (outlet opted out of text mining: outlet, time and link only)
commercial_okbool- May appear in future paid files
outlet_profiles 12 columns
Use it to describe the outlets: one row per outlet, with its country, owner and funding.
daydate- UTC day of the file
outletstr- Newsroom or official body id
source_typestr- news or official
publisherstr- Publisher
countrystr- Country (ISO code)
owner_parentstr- Owner or parent company
funding_typestr- Funding type (public, private, state…)
eu_basedstr- Based in the EU (true, false or unknown)
editionsstr- Tokos editions carrying it, separated by ;
feedsstr- Feeds, separated by ;
profile_versionstr- Version of the profile data
excluded_commercialbool- Never in paid data
outlet_daily_totals 9 columns
Use it to compare how much each outlet publishes: one row per outlet per day.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
outletstr- Newsroom id
new_articlesint- Articles seen for the first time that day
sightingsint- Article sightings that day
fetchesint- Feed fetches that day
failed_fetchesint- Failed feed fetches that day
completebool- Whole day counted (false for today’s running total)
excluded_commercialbool- Never in paid data
feed_health 13 columns
Use it to spot gaps in the data: one row per feed per day, with how often reading it failed.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
feedstr- Feed
outletstr- Newsroom id
source_typestr- news or official
feed_urlstr- Feed address
fetchesint- Fetches that day
failuresint- Failed fetches that day
items_maxint- Most items the feed listed
last_http_statusint- Last HTTP status
last_errorstr- Last error message, if any
newest_item_atstr- Newest item date the feed listed that day (UTC), if known
stale_feedbool- The feed's newest item was more than 7 days old (such items are not used)
daily_cards 11 columns
Use it for the longer history since 29 August 2026: one row per source link of each day’s front-page stories.
daydate- UTC day of the file
editionstr- Tokos edition that saw it: en or fr
card_idstr- Tokos card
titlestr- Tokos title, empty when it copies an opted-out outlet’s headline
sectionstr- Tokos section
source_countint- Sources on the card
outletstr- Newsroom id of this source
feedstr- Feed name of this source
urlstr- Source link
rightsstr- open (headline kept) or reserved (outlet opted out of text mining: outlet, time and link only)
commercial_okbool- May appear in future paid files
who_spoke_first 13 columns
Use it to compare when the press and governments first spoke on a story. Leads of 2 hours or less count as a tie; an official item over 24 hours earlier is background, not government-first.
daydate- UTC day
editionstr- Tokos edition: en or fr
story_idstr- Stable Tokos story (card) id
titlestr- Tokos’ own title (blank when withheld)
outletsint- News outlets on the story
first_news_atstr- First news sighting (UTC)
first_news_outletstr- Outlet seen first
first_official_atstr- First official time (UTC): published_at, or first_seen when published_at is later, date-only or a placeholder
official_time_sourcestr- published_at or first_seen
first_official_bodystr- Government body seen first
official_itemsint- Official items linked to the story
gap_minutesint- first_official_at minus first_news_at (negative: government first)
firststr- news, government, same (within 2 h: news times are when a 2-hourly build first saw the article) or background (official item over 24 h earlier; leave it out of a government-first share)
silent_big_stories 6 columns
Use it to find big stories no government addressed in our sources.
daydate- UTC day
editionstr- Tokos edition: en or fr
story_idstr- Stable Tokos story (card) id
titlestr- Tokos’ own title (blank when withheld)
outletsint- News outlets on the story (5 or more)
first_news_atstr- First news sighting (UTC)
silent_officials 6 columns
Use it to see which official statements no story picked up.
daydate- UTC day
editionstr- Tokos edition: en or fr
bodystr- Government body (official outlet id)
official_itemsint- Official items seen
linkedint- Linked to a Tokos story
unlinkedint- Linked to no story
coverage_gaps 11 columns
Use it to see who skipped a story. An outlet can appear because Tokos did not group its article with the story, not only by editorial choice.
daydate- UTC day
editionstr- Tokos edition: en or fr
story_idstr- Stable Tokos story (card) id
titlestr- Tokos’ own title (blank when withheld)
outletsint- Outlets that carried it
active_outletsint- General-news outlets of the edition with a healthy feed that day (specialist desks and NASA left out)
missing_countint- Active outlets that did not carry it
missing_outletsstr- Their ids, ;-separated. Limitation: an outlet can appear because Tokos did not group its article with the story, not only by editorial choice
missing_by_countrystr- Missing count per outlet country (CC:n;...)
missing_by_ownerstr- Missing count per owner_parent
missing_by_fundingstr- Missing count per funding_type
attention 8 columns
Use it to see which stories rose or faded. Formula in the dictionary.
daydate- UTC day
editionstr- Tokos edition: en or fr
story_idstr- Stable Tokos story (card) id
titlestr- Tokos’ own title (blank when withheld)
outletsint- Outlets on the story that day
position_pointsfloat- Sum over outlets of (11 − best feed position)/10, floored at 0: a top-of-feed slot adds 1
hours_on_sitefloat- 2 × checks the story was on Tokos that day
attentionfloat- outlets + position_points + hours_on_site / 2
outlet_scorecards 12 columns
Use it to compare outlet behaviour. Removals include normal feed rollover.
daydate- UTC day
editionstr- Tokos edition: en or fr
outletstr- Newsroom id
articlesint- Articles seen that day
headline_editsint- Headline changes seen (open outlets only)
edit_ratefloat- headline_edits / articles
removalsint- Proxy: articles seen in one check only and gone >2 h before the day's last check while the feed was healthy. Limitation: includes normal feed rollover, not only deletions
correctionsint- Headline changes marking a correction
median_minutes_to_correctionfloat- Median minutes from first sighting to the correction
storiesint- Tokos stories it was on
firstint- Stories where it was seen first (within 10 min)
lateint- Stories it joined 6 h or more after they began
cross_lag 9 columns
Use it to see how stories cross languages. Thin: few stories share a link across editions.
daydate- UTC day
en_story_idstr- EN story id
fr_story_idstr- FR story id
en_titlestr- Tokos EN title
fr_titlestr- Tokos FR title
shared_linksint- Links (news or official) both carry
en_first_atstr- First appearance in EN (UTC)
fr_first_atstr- First appearance in FR (UTC)
lag_minutesint- fr_first_at minus en_first_at. Limitation: thin, few stories share a link across editions
cross_lag_country 4 columns
Use it to see which countries' outlets break or follow stories.
countrystr- Outlet country
storiesint- Stories its outlets carried
median_lag_minutesfloat- Median minutes from the story's first appearance anywhere to the country's first outlet
first_sharefloat- Share of those stories where the country was first
framing 14 columns
Use it to spot what a story leaves out or adds; a mismatch is not proof of spin.
daydate- UTC day
editionstr- Tokos edition: en or fr
story_idstr- Stable Tokos story (card) id
titlestr- Tokos’ own title (blank when withheld)
bodystr- Government body
official_article_idstr- Official item id
official_titlestr- Official title (only where its reuse licence allows)
cross_languagebool- Official text and Tokos title are in different languages: names may differ only by translation
names_sharedstr- Names in both, ;-separated
names_official_onlystr- Names the government uses that the Tokos title does not. Limitation: small sample (about 46 pairs a week), only briefing text whose licence allows reuse, names right about 8 times in 10 on a hand check, no AI; a mismatch is not proof of spin
names_story_onlystr- Names in the Tokos title the government does not use
figures_officialstr- Figures (numbers, amounts, %) in the official title
figures_storystr- Figures in the Tokos title
figures_differbool- Both state figures and they differ (years left out)
ownership_concentration 6 columns
Use it to measure media concentration per edition and day.
daydate- UTC day
editionstr- Tokos edition: en or fr
owner_parentstr- Owner group
sightingsint- Story sightings by its outlets
sharefloat- Share of the edition's story sightings that day
hhifloat- Herfindahl-Hirschman index of the day (0-10000, sum of squared % shares)
Cite this data
Tokos-made data is free under CC BY 4.0: reuse it, credit Tokos. Headlines belong to their publishers and appear only for outlets that allow text mining. CC BY 4.0
Cite as: Tokos News (2026). Tokos open news data, v1. https://tokos.news/data. Accessed [date].
A permanent DOI (citation number) is coming: we will add it here once the monthly copy is on Zenodo.
In a sentence: “Data: Tokos News, CC BY 4.0.” is enough for a chart or a post.
Guides and more
Read this honestly
- Capture started on 18 October 2026, so the full record is only days old.
- “First seen” means first seen by our check. We check about every two hours, so it can trail publication by up to that much.
- Days before 18 October come from the daily archive, which keeps each day’s last edition: its cards and links, not every article seen.
- We only see what outlets put in their public feeds, not everything they publish.