# AI in newsroom job titles (2026-09-15 pull)

Dataset behind the report "Journalism has 63 AI job titles on file. The biggest desk is the
BBC's five".

Counted from 127,602 editorial people rows at media-typed outlets, off-platform domains only,
the published base of the JournalistLabs pull of 2026-09-15. 63 of those rows carry an AI word
in the job title; 325 carry one in the title or the LinkedIn headline. Rebuild every file with
`python3 tools/report_ai_desks.py`, and the outside check with
`python3 tools/report_ai_desks.py --sanity`. The script that wrote these files is copied in
beside them as `report_ai_desks.py`. See METHOD.md for the lexicon, the two match rules, the
deploy-and-cover rule and the limitations.

No person name is in any file here. A row carries the job title, the outlet, the outlet
domain, the person's country, the role, the two class assignments, two flags and the fetch
date, and nothing else. The person-level base (`data/journalists.csv.gz`) is not published;
these CSVs are the checkable grain.

## Files

`ai_titles.csv`
: All 63 rows whose job title matches the AI lexicon, one row per person, sorted by outlet.
  `row_id` is 1 to 63 in that order and is what the facts file cites. `outlet_domain` is the
  person row's own company domain. `country` is the person's country as the vendor records it,
  not the outlet's, so a BBC row can read United States. `class` is the deploying / covering /
  unclear assignment from the rule in METHOD.md; `class_alt` is the same row under the broader
  rank-word rule (35 / 25 / 3), kept so the two can be compared row by row.
  `title_names_a_desk` is yes for the 9 rows that are an editor title whose only qualifier is
  the AI subject ("AI Editor", "Editor, AI", "Senior Editor for AI"). `borderline` is yes for
  the 5 rows where the title carries the word but the job is a data-products or production job
  rather than a news desk; none is removed, so the count is 63 with them and 58 without.
  `fetched_at` is the day the profile was scraped.

`ai_desk_ranking.csv`
: The 48 outlets with at least one AI job title, largest first. `ai_titles` is the title-only
  count, `ai_headline_inclusive` the count that also reads headlines, `editorial_rows` the
  outlet's own rows in the base, and `ai_titles_per_1000_rows` the first divided by the third.
  `outlet_domain` is the domain most of the outlet's rows carry and `outlet_domains_on_file`
  how many domains the outlet key holds. `parent_domain` marks the group domains that cover
  several newsrooms and are excluded from the site's outlet pages.

`top50_newsrooms_ai.csv`
: The 50 largest publishable outlets by editorial rows: media-typed, not a parent domain,
  named, typed, with a country. This is the same ranking that feeds the site's `/outlets/`
  table; the site gives its own `/outlets/` page to the first 40 of that ranking, so this set
  is 10 longer than the list of published outlet pages. AI titles and AI headline mentions per
  outlet, so the zeros are countable.

`ai_by_country.csv`
: The 43 countries with 200 or more rows in the base, the cut a country page has to clear on
  the site. AI titles and AI headline mentions, absolute and per 1,000 rows of that country.
  Country is the person's country. The 63 AI-titled rows sit in 13 of the 43; one row carries
  no country at all.

`beat_title_counts.csv`
: AI against crypto, cybersecurity, technology, sports, climate, health and science, under
  both match rules, with the regex each figure used.

`newsquest_domains.csv`
: The 74 Newsquest masthead domains built for the outside check, each with the Wikipedia title
  it came from, its editorial rows in the base and its AI-titled rows. 6 of the 74 have any
  rows at all, 42 rows between them, 0 with an AI word in the title.

`lexicon.txt`
: Every regex in the report, copied out of the script.

`report_ai_desks.py`
: The script that wrote every file in this folder, copied as it ran.

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

`sanity_console.txt`
: The outside check: what was fetched, the HTTP status, the Newsquest masthead match and the
  passages that carry a number.

## Licence

CC BY 4.0. Cite as JournalistLabs, "AI in newsroom job titles", 2026-09-15.
