# Rank words in newsroom job titles, 194 outlets with 100+ editorial rows (rows collected 2026-07-22 to 2026-09-15)

Dataset behind the report "Business Insider: 47% of newsroom titles carry a rank word".

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 come from `data.blitz_people`, a
read-only Mongo collection; the person-level base is not published, and no file here
names a person or carries a profile headline. Rebuild with
`python3 tools/report_rank_words.py` (no network call), `--sanity` for the public
comparison figures and `--coverage` for the published newsroom sizes. Outlet names,
countries and types come from `tools/export.py`, imported rather than reimplemented, so
they match the site's `/outlets/<slug>/` pages. The script is shipped here as
`report_rank_words.py`.

**One lexicon runs through the whole dataset: the narrow set** — senior, head of,
director, chief, deputy, executive, lead, vp (vice president), principal. `rank_count`
and `rank_share_pct` are always that set, and every ranking and every cut is ordered on
it. A wider set, the narrow set plus bare `head` and `managing`, appears only in the
`wide_rank_count` and `wide_rank_share_pct` columns, as a second reading. Junior words
(assistant, associate, junior, trainee) have their own columns and are part of neither.
Rank words are matched over the job title only. The lexicon is in `lexicon.txt` and in
`METHOD.md`.

## Files

`outlets_ranked_194.csv` — 194 rows
: **The ranking.** The outlets with 100 or more editorial rows, with the eight
  parent-company domains removed, ranked 1 to 194 by narrow-set share, ties broken by
  `editorial_rows` descending. `editorial_rows` is the outlet's full editorial count and
  the denominator of every share on the row.
: Columns: `rank`, `outlet`, `outlet_key`, `outlet_domain`, `country`, `outlet_type`,
  `editorial_rows`, `rank_count`, `rank_share_pct`, `wide_rank_count`,
  `wide_rank_share_pct`, `junior_rank_count`, `junior_rank_share_pct`, `any_rank_count`,
  `any_rank_share_pct`.

`outlets_100plus_rank_share.csv` — 202 rows
: The same table with the eight parent-company domains kept and flagged, ranked 1 to 202
  over that larger set. The two files carry different rank numbers for the same outlet;
  the 194-row file is the one the report quotes.
: Columns: `rank`, `outlet`, `outlet_key`, `outlet_domain`, `country`, `outlet_type`,
  `parent_company_domain`, `editorial_rows`, `rank_count`, `rank_share_pct`,
  `wide_rank_count`, `wide_rank_share_pct`, `junior_rank_count`,
  `junior_rank_share_pct`, `any_rank_count`, `any_rank_share_pct`.

`rank_word_breakdown_top_bottom.csv` — 20 rows
: For the top ten and bottom ten of the 194, how many titles carry each word, one column
  per word. A title with two rank words is counted in both word columns and once in
  `rank_count`, so the word columns sum to more than that count.
: Columns: `end`, `rank`, `outlet`, `outlet_key`, `outlet_domain`, `country`,
  `outlet_type`, `editorial_rows`, `rank_count`, `rank_share_pct`, `wide_rank_count`,
  `wide_rank_share_pct`, then `w_senior`, `w_head_of`, `w_director`, `w_chief`,
  `w_deputy`, `w_executive`, `w_lead`, `w_vp`, `w_principal` (narrow set),
  `w_head_bare`, `w_managing` (the wide set's two extra words), `w_assistant`,
  `w_associate`, `w_junior`, `w_trainee` (junior words).

`rank_share_by_country.csv` — 43 rows
: Rank share by the country of the person, for the countries with 200 rows or more, the
  cut a country page has to clear on the site. Ranked by narrow-set share.
: Columns: `rank`, `country_code`, `country`, `editorial_rows`, `rank_count`,
  `rank_share_pct`, `wide_rank_count`, `wide_rank_share_pct`, `junior_rank_count`,
  `junior_rank_share_pct`, `any_rank_share_pct`.

`rank_share_by_type_and_role.csv` — 15 rows
: Six outlet-type rows (the five buckets `export.py` assigns plus `(untyped)`, 459
  rows), eight role rows (`data/classify.py`), and the whole base on the last row.
: Columns: `cut`, `segment`, `editorial_rows`, `rank_count`, `rank_share_pct`,
  `wide_rank_count`, `wide_rank_share_pct`, `junior_rank_count`,
  `junior_rank_share_pct`, `any_rank_share_pct`.

`common_titles_four_outlets.csv` — 40 rows
: The ten commonest exact job titles at Sveriges Radio, SVT, Business Insider and the
  Daily Mail. Title strings only; no person rows.
: Columns: `outlet`, `outlet_key`, `outlet_domain`, `country`, `editorial_rows`, `rank`,
  `title`, `rows_with_this_title`, `share_of_outlet_rows_pct`, `narrow_rank_word`,
  `wide_rank_word`.

`bottom20_language_check.csv` — 20 rows
: The bottom 20 of the 194. The rule: a title counts when it carries no narrow-set rank
  word and none of the English job nouns editor, reporter, journalist. Every row at
  those outlets is tested, 4,663 in all.
: Columns: `rank`, `outlet`, `outlet_key`, `outlet_domain`, `country`, `country_code`,
  `outlet_type`, `editorial_rows`, `rank_count`, `rank_share_pct`,
  `titles_with_editor_reporter_or_journalist`, `english_job_noun_share_pct`,
  `titles_with_no_rank_word_and_no_english_job_noun`,
  `no_rank_word_no_job_noun_share_pct`.

`title_frequency.csv` — 1,450 rows
: Every distinct job-title string that occurs 5 or more times in the base, so the
  regexes can be checked without the person-level base. The 1,450 strings cover 90,062
  of the 127,602 rows, 70.6%.
: Columns: `title`, `count`, `narrow_rank_word`, `wide_rank_word`.

`lexicon.txt`
: The narrow set, the wide set's two extra words, the junior words, the English job-noun
  test and the language-check rule, as regular expressions.

`report_rank_words.py`
: The script that wrote every file here, copied in so the dataset can be rebuilt from
  itself.

`facts_console.txt`, `sanity_console.txt`, `coverage_console.txt`
: The full console output of the last run of the script, of its `--sanity` pass and of
  its `--coverage` pass, kept so every published number has a line to point at.

`METHOD.md`
: The base, the editorial definition, the lexicon, the outlet rules, the cuts, the
  language check, the coverage figures and the sanity check.

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

Indeed Hiring Lab put 14% of US job postings at senior level in July 2026, under its own
seniority classification. Our narrow-set figure is 15.1% of newsroom job titles carrying
one of ten rank words. Different populations, different measures: a scale check, not a
comparison. `METHOD.md` says what each one counts.

## Licence

CC BY 4.0. Cite as JournalistLabs, "Rank words in newsroom job titles", 2026-09-16, rows
collected 2026-07-22 to 2026-09-15.
