# Editors per reporter at the 40 largest newsrooms on file (rows collected 2026-07-22 to 2026-09-15)

Dataset behind the report "The NYT has two editors per reporter. The BBC has two
reporters per editor".

Counted from the JournalistLabs published base: 127,602 editorial rows, the rows of
`data/journalists.csv.gz` with `platform_domain == 0` and `media_typed == 1`, out of
173,133 classified editorial rows. The person rows carry a `fetched_at` stamp between
2026-07-22 and 2026-09-15; 45,211 of the base were fetched in July 2026, 82,383 in
August and 8 in September. Rebuild with
`python3 tools/report_editors_per_reporter.py` (no network call) and
`python3 tools/report_editors_per_reporter.py --sanity` for the two public figures.
Outlet names, countries, types and the set of 40 outlets come from `tools/export.py`,
imported rather than reimplemented, so they match the site's `/outlets/<slug>/` pages.

## Files

`outlets_top40_editors_per_reporter.csv`
: The 40 outlets that have pages on the site, ranked by editors per reporter.
  `editorial_rows` is the outlet's full editorial count and the denominator of its role
  columns. `editors_per_reporter` = `editors` / `reporters`; `reporters_per_editor` is
  its inverse. `editors_narrow` excludes the rows whose `editor_kind` is video, photo,
  copy or audio; `editors_narrow_per_reporter` = `editors_narrow` / `reporters`.
  `rank` is by the exact, unrounded `editors` / `reporters`, descending, ties broken by
  `editorial_rows`, descending; the printed ratio is that number rounded to two
  decimals, so two rows can print the same ratio and sit one apart. `rank_narrow`
  applies the same rule to `editors_narrow` / `reporters`.

`editors_per_reporter_by_type_and_country.csv`
: The same ratio by outlet type (the five buckets `export.py` assigns), by country of
  the person (countries with 200 rows or more, the cut a country page has to clear on
  the site), for the 40 page outlets against every other outlet in the base, and for the
  whole base. The type rows cover publishable outlets only — not a parent-company
  domain, and carrying a name, a country and a type — which is the same definition the
  40 are drawn from. `outlets` is the number of outlets in the cut, blank on the country
  rows, where rows are counted by the person's country and not by the outlet's.

`nyt_bbc_role_mix.csv`
: All eight roles, the five editor kinds, the ten commonest exact job titles and the
  senior-title share of editors, for The New York Times and the BBC. `denominator` is
  the outlet's editorial rows for role and title rows, the outlet's editor count for
  `editor_kind` and `editor_seniority` rows.

`nyt_bbc_by_domain.csv`
: The same two outlets split by the `company_domain` each row carries: nytco.com and
  nytimes.com for the Times, bbc.co.uk, bbc.com and bbcstudios.com for the BBC, with
  rows, reporters, editors and the ratio both ways, plus the BBC without
  bbcstudios.com and the Times on nytimes.com alone.

`wire_vs_newspaper_correspondents.csv`
: Correspondents, reporters and editors as counts and shares at the five largest wire
  agencies on file and at the newspapers among the 40, with group totals for the eight
  largest newspapers and for all ten.

`classifier_rules.txt`
: The classifier's stoplist, include list (which sets `role`), `editor_kind` patterns,
  seniority patterns and beat lexicon, copied from `data/classify.py` in the repo, so
  the role and editor-kind columns behind every figure here can be read without the
  repo.

`facts_console.txt`
: The full console output of the last run, kept so every published number has a line.

No person-level rows are in this dataset. Cells of 1 to 4 print "<5".

## Licence

CC BY 4.0. Cite as JournalistLabs, "Editors per reporter at the 40 largest newsrooms on
file", 2026-09-15, rows collected 2026-07-22 to 2026-09-15.
