# Method

## The base

`data/journalists.csv.gz` holds 173,133 classified editorial rows. The published base is
the 127,602 rows with `platform_domain == 0` and `media_typed == 1`: 12,540 rows are
dropped because the vendor stored a link-in-bio, social or freelance-marketplace URL as
the company website, and 32,991 because the outlet's own record does not type it as a
newspaper, broadcaster, online outlet, wire agency or magazine. Every figure here is
computed over all 127,602 rows, not a sample.

The UK cut is `country_code == 'GB'`: 12,094 of the 127,602 rows, 9.5% of the base. That
code is the person's own location as the vendor records it, not the outlet's country.
Four of the 19 UK rows whose title names the royals sit at outlets table A places in the
United States (Getty Images, NBC News, Newsweek, US Weekly); they are UK-located people
working for those outlets, and they are counted in the UK figure because the cut is by
person. The outlet's own country is in `top50_newsrooms_cyber.csv` and
`uk_top_outlets_royal_cyber_tech.csv` so the difference can be checked.

The person rows, the classifier, the roles, the outlet universe and the alias table are
documented in `data/METHOD.md` in the repo. The lexicons this dataset adds are in
`lexicon.txt` beside this file.

The person-level base is not published. The CSVs in this folder are the checkable grain:
a row is a job title at an outlet, or an outlet, never a named person.

The rows the CSVs publish — the 19 UK royal title matches, the 2 UK security title
matches and the 23 world cybersecurity title matches, 42 rows once the overlap is
removed — carry these `fetched_at` stamps: earliest 2026-07-23T20:46:16, median
2026-08-06T09:52:53, latest 2026-08-12T07:21:13. The base as a whole runs 2026-07-22 to
2026-09-15.

## Editorial definition

Copied from `data/METHOD.md`, section "Editorial (the include rule)", because it is the
rule that decides which rows exist to be counted at all.

A row is editorial when its **title** matches one of: bureau chief, news director,
managing editor, editor-in-chief, sub-editor, correspondent, columnist, anchor,
presenter, news host, newsreader, photojournalist, journalist, reporter, critic,
reviewer, news/newsroom/editorial producer, producer-reporter, staff writer, feature
writer, editor, editorial — **and** its title matches nothing on the stoplist.

The stoplist is applied first, so "marketing editor" and "product editor" are out. It
covers sales, marketing, brand, growth and advertising roles, media buyers and account
management, HR, recruiting, talent and payroll, engineering, developer, devops, QA,
software and data roles, IT support, product management and design, content strategy,
content marketing, SEO, copywriting, content, technical, grant, proposal, ghost and bid
writing, PR and communications, finance, accounting, legal, facilities, security guards,
drivers, customer success and support, subscriptions and circulation, and teaching roles.

Three exclusions matter for a title count. Bare `producer` is not editorial; only news,
newsroom and editorial producers and producer/reporter count. Writers count only as staff
writer and feature writer, which drops 10,767 rows whose title is bare writer or
senior/contributing/lead/freelance/news/sports/science/business/political writer. Video,
photo, copy and audio editors are kept and tagged in `editor_kind`.

## Dedupe

`data/METHOD.md` records the round-2 dedupe: `tools/reclassify.py` reads both raw pulls
and dedupes on (`full_name`, `title`, `company_domain`), 9,032,920 raw lines down to
8,971,314 distinct people rows.

That matters for one cell of this dataset: GB News carries two rows whose title is exactly
"Royal Correspondent". Counting distinct `full_name` over those two rows gives **2**, at
one `company_domain`, so they are two different people and not one profile counted twice.
The dedupe key makes that the only possible reading — two rows with the same name, the
same title and the same domain would have collapsed into one before classification. The
names are not printed here or anywhere in the dataset.

## Title, not headline

Each row carries two free-text fields: `title`, the job title, and `headline`, the
profile bio. The site's beat classifier reads both. Every count in this dataset reads
the title only, and the headline-inclusive count is printed beside it.

The reason is in the data. Over the 12,094 UK rows, the royal regex matches 19 titles
and 43 title-or-headline blobs. Of the 24 rows the headline adds, 15 are not about the
monarchy at all: the Royal Air Force, the Royal Marines (2), the Royal Opera House, the
Royal Meteorological Society (2), the Royal Geographical Society, the Royal Society of
Arts, the Royal Television Society, the Royal Courts of Justice, Royal Caribbean, a
botanic garden, a ballet company, a conservatoire and a literary fund. The same happens on the other side: the UK security lexicon matches 2 titles and 8
title-or-headline blobs, and two of the six the headline adds are an ITV beauty
presenter and an ITV science presenter.

## The royal rule

The rule is `\broyal`, case-insensitive, word-start: it matches royal, royals and
royalty. It gives 19 of the 12,094 UK rows.

The scout pass that produced the candidate title used the narrower whole-word
`\broyal\b` and got 16. The three rows the word-start rule adds are all plural Royals,
and all three name the royals as a round:

| title | outlet |
|---|---|
| Editor, Culture, Society (Home Affairs) and Royals | BBC |
| Foreign Desk Editor and Royals Commentator Coordinator | NBC News |
| Emea Assignment Editor - Music & Royals | Getty Images |

Both counts are in `uk_royal_titles.csv`, in the `matches_whole_word_royal` column.

Nothing in the UK title set was removed by hand. The hand-removal list is applied all the
same, is shipped in full in `lexicon.txt`, and does remove rows elsewhere. Worldwide the
regex matches 27 titles and 4 are removed, leaving 23:

| title | outlet | why |
|---|---|---|
| Kansas City Royals Reporter | The Kansas City Star | a baseball team |
| Royals Live Host & In-game Reporter | FanDuel Sports Network | an in-game host at a regional sports broadcaster, not a monarchy round |
| Associate Editor, Royal Shakespeare Company's Complete Works | Palgrave Macmillan | a theatre company |
| Managing Editor, Mount Royal Soccer | Vox Media | a place name in Montreal |

The list is applied the same way to the title and to the headline-inclusive blob, so a
learned society is a removal wherever it appears: the Royal Society, the Royal Society of
Arts, the Royal Meteorological Society and the Royal Geographical Society are all removed
for the same reason. Applied consistently, **15 of the 24 rows the headline adds are not
about the monarchy**, not 14.

## The security rules

Narrow: `\bcyber ?security\b|\bcyber-security\b`. Widened: that plus bare `cyber`,
hacker, hacking, infosec, information security, ransomware, malware, data breach,
surveillance, privacy, data protection and GDPR, one regex per word so every match names
the word that matched.

`national security` is deliberately not in the lexicon. It names a defence and
intelligence round (Pentagon, Ministry of Defence, spy agencies, wars), not a
computer-security round, and 66 of the 127,602 titles carry it against 23 for
cybersecurity, so including it would replace the count with a different beat. One of the
66 is a UK row. The regex is in `lexicon.txt` under "NOT in the widened lexicon" so the
choice can be reversed.

Bare `cyber` is written with a lookahead, `\bcyber\b(?! ?security)`, so a title already
counted by the narrow cybersecurity rule is not counted twice. Over the job title the
lookahead matches **5** rows worldwide and plain `\bcyber\b` matches **6**. The one row
of difference is "International Multimedia Journalist Cyber Security Specialist" at Voice
of America, whose title spells the word with a space and is already one of the 23. Both
regexes and both counts are in `lexicon.txt`.

## Which lexicon is whose

This report's own regexes, written for it: royal word-start, royal whole word, the narrow
cybersecurity regex, the widened security lexicon, the privacy subset, the excluded
`national security` regex, the title-noun regexes and the royal hand-removal list.

The site classifier's own regexes, imported from `data/classify.py` and not retyped, so
they produce the same numbers as the site's `/beats/` and `/journalists/` pages: sports,
politics, health, technology, AI, crypto and cybersecurity.

The classifier has a cybersecurity beat regex of its own,
`\b(cyber ?security|cyber|infosec|information security|hacking|ransomware|data breach)\b`.
Run over the job title it reaches **28 rows worldwide and 2 UK rows**, where this report's
narrow rule reaches 23 and 2. All 23 are inside the 28. The five titles that make up the
difference, all of them bare `cyber`, are in `cybersecurity_reconciliation.csv`:

| title | outlet | country |
|---|---|---|
| Cyber Journalist | India TV | India |
| Cyber Journalist (Web Reporter) | 7 News, WHDH-TV | United States |
| Cyber and Intelligence Reporter | POLITICO Europe | Belgium |
| Cyber-tech Senior Editor | The Cipher Brief | United States |
| Reporter Covering Digital Privacy and Federal Cyber Policy | The Record | United States |

The page `/journalists/cybersecurity/` runs that regex over `title + " || " + headline`,
not the title alone, which reaches 72 rows worldwide and 8 UK rows. Both numbers are in
`facts_console.txt`, and `beat_title_counts.csv` carries the title-only 28 as
`cybersecurity (site classifier)` beside `cybersecurity (this report)` at 23, with a
`regex_source` column on every row.

In the titles, the widening barely moves: 30 rows worldwide against 23 for cybersecurity
alone. hacker, hacking, infosec, information security, ransomware, malware, data breach
and GDPR match zero titles in the whole base. The seven the widening adds are five bare
`cyber` titles, one surveillance title at Entertainment Weekly that is about television
research and not security, and one privacy title at Politico.

## The outlet tables

Outlet names, countries and types are produced by importing `tools/export.py` and
calling its `outlet_name`, `outlet_country_code`, `fallback_country_code` and
`outlet_type`, so they are the same strings the site's `/outlets/` pages publish. The 50
largest newsrooms are that module's ranking: canonical outlets by editorial rows, with
parent-company domains and outlets missing a name, a country or a type excluded.

That exclusion is why this table says 43 of the 50 have no cybersecurity title where the
scout file says 44 of 50. The scout ranked outlets without the publishable filter, so its
50 included parent-company domains (hearst.com, pearson.com, paramount.com,
iheartmedia.com); the two sets of 50 are not the same 50 outlets.

The UK outlet tables rank by UK-located rows at the canonical outlet, which is a
different ranking from the site's: the BBC has 3,935 editorial rows and 3,074 of them are
UK-located, Bloomberg has 1,785 and 258.

There are two of them, and they are kept apart because mixing them mislabels outlets.

**Table A**, `uk_top_outlets_royal_cyber_tech.csv`: the 25 largest outlets by
UK-located rows, whatever country the outlet itself is in, with an `outlet_country`
column. 5 of the 25 are outside the United Kingdom — Bloomberg (8th), The New York Times
(16th), The Wall Street Journal (19th), CNN (20th) and the Associated Press (25th) — and
they are in the table because they employ UK-located journalists, not because they are
British.

**Table B**, `uk_country_outlets_royal_cyber_tech.csv`: the 20 largest outlets whose own
country is the United Kingdom, ranked the same way. The Tab (99 UK rows), Reuters (92),
GB News (85) and The Standard (82) are 17th to 20th here.

GB News is **23rd of all outlets by UK rows and 19th of the UK-country outlets**. It is
walked through in the report because it carries more royal titles than any other outlet
in the world, not because of its size.

## Sanity check against public lists

The public pages below were fetched on 2026-09-16 through the Webshare rotating gateway.
No request was made from this machine's IP. Where a figure is quoted from one, the
revision id was read from the MediaWiki API
(`action=query&prop=revisions&rvprop=ids`) at the same time and the `oldid` permalink is
given, so the quote is checkable against the exact text read.

Permalinks:

- BBC News — <https://en.wikipedia.org/w/index.php?title=BBC_News&oldid=1373835035>
  (page id 1139893)
- List of BBC newsreaders and reporters —
  <https://en.wikipedia.org/w/index.php?title=List_of_BBC_newsreaders_and_reporters&oldid=1184433269>
  (page id 69639010)
- Category:Royal correspondents —
  <https://en.wikipedia.org/w/index.php?title=Category:Royal_correspondents&oldid=1278331052>
  (page id 71851597). Category membership is generated live and is not carried by an
  `oldid`, so the 14 member article titles as fetched on 2026-09-16 are saved beside this
  file as `wikipedia_royal_correspondents_members.txt`.

- <https://en.wikipedia.org/wiki/BBC_News> (HTTP 200) is the source for the BBC's
  newsroom size. Infobox field "Number of employees": "7,000 (5,500 journalists)"; the
  body says "over 5,500 journalists working across its output". That is where the 5,500
  comes from wherever this dataset's write-up uses it. It is Wikipedia's figure, sourced
  there to the BBC, and not a measurement of ours. The file holds 3,935 BBC editorial
  rows, 3,074 of them UK-located.
- <https://en.wikipedia.org/wiki/List_of_BBC_newsreaders_and_reporters> (HTTP 200). Its
  "Royal" section names five BBC correspondents, and its technology section names one
  BBC cyber correspondent. On file, the BBC has 1 royal title and 0 cybersecurity titles
  across 3,935 editorial rows. None of those six people is in the base at all.
- <https://en.wikipedia.org/wiki/Category:Royal_correspondents> (HTTP 200). 14 members.
  None of the 14 appears among the 19 UK royal-titled rows, and exactly one of the 14 is
  anywhere in the 127,602-row base, under a different job title. The Wikipedia category
  is a notability list that runs back to a BBC correspondent who died in 2000; the file
  is a current-employment list. They overlap almost not at all, in both directions.
- <https://en.wikipedia.org/wiki/Royal_correspondent> (HTTP 200) is a stub with no list.
- <https://pressgazette.co.uk/?s=royal+correspondent> (HTTP 200) returned a search shell
  with no results in the HTML. Press Gazette renders its search results client-side, so
  the empty HTML is evidence that the page needs JavaScript, not evidence that the search
  found nothing. Nothing is concluded from it.
- <https://en.wikipedia.org/wiki/Category:Cybersecurity_journalists> and
  <https://en.wikipedia.org/wiki/Category:Computer_security_writers> both return HTTP
  404. No public roster of cybersecurity reporters was found to check the 23 against.
- <https://www.bbc.co.uk/news/correspondents> returns HTTP 404, so the BBC's own
  correspondent index could not be used.

What the check establishes: the title counts are a floor, and a low one. The BBC's public
list alone names five royal correspondents where the file holds one royal title at the
BBC. What it does not establish: that the ratio between the two rounds is wrong, because
the undercount applies to both sides of it, and no public list of cybersecurity reporters
exists to measure the other side.

## Limitations

1. Titles are self-reported on profiles, not taken from an HR file. A person who does the
   royal round without the word in their title is not counted, and a person who left the
   round last year still is.
2. Coverage is profile findability, not employment. None of the six BBC correspondents
   named on the public list is in the base, so the BBC's royal count of 1 is a coverage
   figure as much as a title figure.
3. The base is small on both sides. 19 and 2 are counts a single missing profile moves.
4. `country_code` is the person's country, so a UK-located Newsweek correspondent counts
   under the UK and a US-located BBC staffer does not.
5. A cybersecurity reporter may be titled "technology reporter" and counted under
   technology instead; 56 of the 12,094 UK rows carry a technology title. The two
   lexicons are not exclusive and a title can match both.
6. Aliases cover 395 domains. Outside them a per-outlet count is a per-domain count, and
   a newsroom whose rows sit under a parent-company domain is undercounted.
7. The base was collected between 2026-07-22 and 2026-09-15, not at one instant.

## Licence

CC BY 4.0. Cite as JournalistLabs, "Royal and cybersecurity job titles in newsroom staff
records", 2026-09-16, rows collected 2026-07-22 to 2026-09-15.
