
Open Editors Plus is a comprehensive, openly licensed dataset of editorial board positions across 15,216 academic journals from 48 publishers. It contains 922,857 records covering 619,972 unique editors in 189 countries.
Each record is enriched with:
- Institutional affiliation canonicalized via ROR (Research Organization Registry)
- Geographic coordinates (latitude/longitude)
- Gender inference (gender-guesser library, with confidence scores)
- Bibliometric indicators (h-index, publications, citations, academic age) from OpenAlex
- Journal classification (domain, field, subfield, topic) from OpenAlex
- Journal indexing status (PubMed, Scopus, Web of Science, DOAJ, COPE)
- Norwegian Publishing Indicator (NPI) level
- Board-level diversity metrics (gender balance, geographic concentration, institutional diversity)
The dataset extends the original Open Editors project (Nishikawa-Pacher et al., 2022) with 2x the journal coverage and 55+ additional enrichment columns.
Files included:
- openeditors_plus_2026.csv — Full dataset (UTF-8, 65 columns)
- openeditors_plus_2026.parquet — Same data in compressed columnar format
- codebook.json — a machine-readable codebook documenting all 66 columns with names, types, descriptions and provenance to ensure FAIT interoperability
License: CC0 1.0 (public domain)
Website: openeditors-plus.org
Code: github.com
## v2.0.0 — 2026-04-15
### Data corrections
Fixes 3,480 false-positive ROR institution matches (0.38% of the dataset)
that were caused by the enrichment pipeline trusting ROR's fuzzy-matcher
`chosen=True` flag without a score or token-overlap sanity check.
Seven clusters were affected:
- 2,932 rows matched to "California Coast University" — all were
legitimate University of California campus editors. 2,487 have been
remapped to the correct UC campus ROR (UCLA, UCSD, UCD, UCB, UCI,
UCSF, UCSB, UCR, UCSC, UCM); 445 with only a generic "University of
California" affiliation have had their ROR cleared.
- 161 "Dordt University" (generic "Washington, DC" addresses) — cleared
- 161 "Measurement Incorporated" (generic Michigan geography) — cleared
- 115 "Wilderness Inquiry" (generic Wisconsin geography) — cleared
- 40 "Hudson Simulation Service" ("HSS" acronym collision) — cleared
- 36 "Kamehameha Schools" (generic Kansas geography) — cleared
- 35 "Bikur Cholim Hospital" (Shaare Zedek mismatches) — cleared
Row count, editor count, journal count, and publisher count are unchanged
from v1. Only the `ror_id`, `ror_name`, `ror_country`, `ror_city`,
`ror_state`, `org_type`, `latitude`, and `longitude` columns were modified,
and only on the 3,480 affected rows.
### Pipeline hardening
The enrichment script (`scripts/enrich_editors_2026.py`) now applies
three guards before accepting a ROR match:
1. `ROR_MIN_SCORE = 0.9` — reject matches below this score even when
ROR flags them as `chosen`.
2. A hard blacklist of the 7 known false-positive ROR short IDs.
3. Below `ROR_TRUST_SCORE = 0.95`, require at least one distinctive
shared token between the `ror_name` and the input affiliation.
Above 0.95, ROR is trusted unconditionally so name translations
(e.g. CONICET <-> Consejo Nacional..., ESSEC <-> École Supérieure...)
still pass.
### Users of v1 should
Re-run any institution-level analyses, especially anything grouped by
`ror_id`, `ror_name`, or `institution_canonical`. Country-level,
field-level, and journal-level aggregates are substantially unchanged.
## v2.1.0 — 2026-04-15
Bug fix release. No schema changes, no new rows, no new columns.
### Fixed: boards_count / publishers_count / is_multi_board identity collision
v2.0.0 inherited a bug from the enrichment pipeline's Stage 12 cross-board
network statistics. The code grouped editors by name only:
editor_stats = df.groupby("editor").agg(
boards_count=("journal", "nunique"),
publishers_count=("publisher", "nunique"),
)
meaning every row sharing a lowercased editor name got credited with the
union of that name's journals and publishers across every institution in
the dataset. For globally ambiguous names like "Wei Wang" (57 distinct
(ror_id, ORCID) tuples, i.e. 57 different real people in the 2026 data),
every row reported the same pooled boards_count=131 and publishers_count=21.
v2.1.0 recomputes those three columns against a composite editor identity
key that mirrors the new Stage 12 implementation:
1. ORCID when present (globally unique by definition)
2. ror_id + lowercased name (when ORCID missing but a ROR is resolved)
3. affiliation string + lowercased name (last-resort fallback)
### Impact
- Row count unchanged: 922,466
- Column count unchanged: 67
- Distinct editors under the composite key: 726,735 (vs. the v2.0.0
name-only count of 619,700 — the old figure undercounted because
homonyms collapsed)
- Editors on ≥2 boards: 119,110 (16.4%), down from the inflated 49.6%
of rows that had is_multi_board=True in v2.0.0
- Max boards for any one individual: 92 (was 131 in v2.0.0, inflated by
homonym pooling)
- Only `boards_count`, `publishers_count`, and `is_multi_board` changed.
All other columns are identical to v2.0.0.
### Users of v2.0.0 should
Re-run any analyses that grouped by the `editor` column alone, or that
treated `boards_count` / `publishers_count` / `is_multi_board` as
per-individual metrics. Aggregates over other columns are unaffected.
### File hashes (SHA-256)
- openeditors_plus_2026.csv a0220ec48ea8906035656dd99d078cea5009c21d7ba58b6e7e0766c46c888eb1
- openeditors_plus_2026.parquet 7fc3c43957c64c579cd0321f53ce915a5316f97a91a79f48a45e981d8250c331
## v2.3.0 — 2026-04-21 (IEEE section update)
Minor release. The IEEE portion of the dataset was fully re-scraped and re-enriched. All other publishers are unchanged from v2.1.0.
**Changed**
- IEEE row count: 9,647 (v2.1.0) → 9,278 (this release)
- IEEE journals covered: 199 → 192 (a few Xplore-only phantom entries removed; the remaining 192 all verified against their society editorial-board pages)
- 17 new DOM parsers (Strategies 0A–0N) covering the full range of IEEE society layouts:
– Elementor text-editor / icon-list (PELS, Vehicular Technology, Magnetics)
– Drupal simple--contact + field--node--field-affiliation (Catalyze theme, AESS, Biometrics, Photonics)
– NPSS prose (Transactions on Nuclear Science)
– cb-profile cards (MTT)
– h4-name / p-affiliation (OJEMB)
– legacy indvlistaffil (Transactions on Electron Devices)
– topic-area tables (Transactions on Computers)
- URL overrides for 23 IEEE journals whose editorial boards live on external society sites (ieee-pels.org, ieee-npss.org, ieee-aess.org, ieeephotonics.org, ieee-ims.org, ieee-itss.org, ias.ieee.org, grss-ieee.org, ieeemagnetics.org, ieee-biometrics.org, ieeesmc.org, and others) — bypassing stale Xplore cache.
- Three local-LLM post-processing passes (Ollama gemma3:27b for split + single-cleanup; qwen2.5:14b for name validation):
– Pass 1 — extract additional editors from multi-editor blob affiliations (e.g. "University of Luxembourg, Luxembourg W. K. Chan, City University of Hong Kong, Hong Kong T. Y. Chen, Swinburne University, Australia" → 3 separate editor rows).
– Pass 2 — widen the net: clean every row with len(affiliation) > 80.
– Pass 3 — overnight name validator: every editor name classified as real-person-or-not; 5,382 non-name rows dropped, 808 names trimmed (e.g. "Jane Smith PhD Professor of Medicine" → "Jane Smith").
- 186 regression tests added to lock in every parser fix.
**IEEE section field coverage (v2.2.0)**
- affiliation: 81.1%
- orcid: 40.4% (up from 0.0% in v2.1.0)
- ror_id: 59.9%
- scientific_field: 94.9%
- openalex_source_id: 94.9%
- h_index: 51.5%
**Added**
- New editor-seat rows from 2 journals previously missed entirely: Transactions on Power Electronics and Transactions on Nuclear Science.
- 2,026 new editor-seat rows across the IEEE section, recovered from multi-editor aff-blob LLM splits.
**Removed**
- Per-editor rows whose "name" field was in fact a title / credential chain / research-keyword list / journal-policy text / bio-paragraph (all caught by the overnight name validator).
**Totals (this release)**
- 922,097 rows × 67 columns
- 48 publishers, 15,210 journals
**Files**
- openeditors_plus_2026.csv (735 MB)
- openeditors_plus_2026.parquet (57 MB)
Version 2.4.0 — 2026-04-21
ISSN coverage fix: 15.0 % → 1.17 % missing
Backfills 2,094 journal ISSN-Ls that were blank in v2.3.0. The v2.3.0 enrichment pipeline resolved journal names to ISSNs via a single case-insensitive exact-match lookup against a local OpenAlex sources index, which silently missed:
• Abbreviated titles (e.g. "JACC" vs "Journal of the American College of Cardiology")
• Mojibake-corrupted titles (e.g. "The Lancet Regional Health � Europe")
• Non-canonical publisher conventions (e.g. Inderscience "Int. J. of X")
An empty issn_l cascaded into all six indexed_* flags (Scopus / WoS / PubMed / DOAJ / COPE / NPI) silently defaulting to False.
BEFORE: 2,272 of 15,168 journals (15.0 %) had an empty issn_l.
AFTER: 178 of 15,168 journals (1.17 %) still unresolved — almost entirely truncated scraper artifacts, predatory-publisher titles not registered with the ISSN International Centre, and unlaunched 2026 journals.
Row-level indexing True counts that flipped False → True:
indexed_scopus 752,453 → 826,021 (+73,568)
indexed_wos 457,071 → 491,322 (+34,251)
indexed_npi 677,528 → 744,410 (+66,882)
indexed_doaj 309,202 → 324,546 (+15,344)
indexed_pubmed 687,574 → 687,574 (unchanged — not gated on issn_l the same way)
How the 2,094 ISSNs were recovered
• 1,898 from an automated resolver cascade: curated alias map → Scopus / WoS / NPI reference-list lookups (with Unicode dash-variant and trademark-symbol normalization) → local OpenAlex snapshot retried on multiple normalized forms (mojibake-repaired; ": " → " & "; parenthetical strip; trailing "Online" strip; "Int. J. of X" → "International Journal of X") → Crossref /works fuzzy with print-ISSN preferred over electronic-ISSN → NLM Catalog esearch → Brave Search / DuckDuckGo last-resort web search with Crossref title verification.
• 196 from hand curation: the long-tail (mostly 2025-2026 launches not yet in any metadata registry, plus Inderscience / OMICS / MDPI variants) was verified one-by-one through publisher pages and the ISSN.org portal and added to scripts/data/journal_aliases.json. Of 198 entered, 10 were swapped from electronic to print ISSN-L via Crossref issn-type so they align with the ISSN-L used by Scopus / WoS / NPI.
Similarity is now acronym-aware so short all-caps queries match their expansions (e.g. "JACC" ≡ "Journal of the American College of Cardiology" via first-letter-of-each-content-word).
Pipeline hardening
• scripts/journal_resolver.py — new shared resolver module (used by both enrich_editors_2026.py and fix_missing_issns.py).
• scripts/indexing_flags.py — compute_indexing() extracted so Stage-8 logic is shared.
• scripts/publisher_issn_catalogs.py — scrapers for OMICS / MDPI / Pleiades publisher catalogs.
• scripts/search_issn_from_web.py — multi-engine ISSN search with Crossref title verification.
• scripts/data/journal_aliases.json — 243 curated entries (45 flagship abbreviations + 198 hand-verified long-tail titles).
Tests
• 63 new regression tests in scripts/tests/ covering mojibake repair, Unicode dash unification, JACC / NEJM / Lancet alias resolution, Crossref similarity gate, cache-retry semantics, trademark/Online/parenthetical strips, and indexing-flag truthiness.
• Dataset-level health test asserts missing_issn_share < 5 %.
Scope
• Schema unchanged: 67 columns, identical names, order, and types.
• Row count unchanged: 922,097 editorial positions across 15,168 journals from 48 publishers, 189 countries.
• Only issn_l and the six indexed_* columns have new values on the affected rows.
File hashes (SHA-256)
openeditors_plus_2026.csv 715.2 MB 296bbf5ca7f8592a212db20e8e3f95349135ae2f217d597c364060417e2c23c5
openeditors_plus_2026.parquet 54.5 MB 30358787cad97530d12461f0d6ecbd3621f09586d1af487c231531e65e83b119
License: CC0 (public domain).
Version 2.5.0 — 2026-04-21
PubMed + DOAJ flags recomputed against authoritative lists.
Fixes a regression in v2.4.0: when the resolver cascade backfilled an ISSN via the alias map, the rest of fix_missing_issns.py recomputed indexed_scopus / indexed_wos / indexed_npi / indexed_cope against their local reference-list sets — but indexed_pubmed and indexed_doaj were NOT recomputed. Those two flags kept their stale values from the input master CSV (almost always False for newly-backfilled journals, since they previously had no ISSN to match against). Result: well-known PubMed journals like JACC (0735-1097) shipped with indexed_pubmed=False even though NCBI's nlmcatalog lists them.
Change summary
Row-level indexing flag flips in this release (vs v2.4.0):
indexed_pubmed 687,574 → 744,772 (+57,198 rows)
indexed_doaj 324,546 → 324,553 (+7 rows)
The PubMed delta is large because the 2,094 journals whose ISSNs were backfilled in v2.4.0 include several high-traffic ones: every JACC sibling (Heart Failure, Cardiovascular Interventions, Cardiovascular Imaging, Clinical Electrophysiology, Case Reports, CardioOncology, Asia, Advances, Basic to Translational Science), the Nature Reviews family, Annales Médico-Psychologiques, Journal Français d'Ophtalmologie, Dialogue: Canadian Philosophical Review, and many more. Each newly-True journal adds ~1–1,000 editorial rows.
Mechanism
scripts/indexing_flags.IndexingSets now accepts two optional ISSN frozensets — `pubmed` (from NLM's J_Medline.txt) and `doaj` (from DOAJ's public journals CSV). When populated, compute_indexing() treats those sets as authoritative and overrides the pubmed_indexed / is_in_doaj args the caller passed in. This makes backfill-driven flag updates automatic: any run of fix_missing_issns.py that resolves a new ISSN will immediately recheck PubMed and DOAJ against the local sets on disk — no network call needed.
Local index files
Two supplementary files (not shipped with the dataset, user-supplied) are now consulted when present:
• data/J_Medline.txt
NLM's own journal list in block format with "ISSN (Print):" / "ISSN (Online):" fields. 45,313 ISSNs currently parsed.
• data/doaj_journalcsv__utf8.csv
DOAJ's journals export, with "Journal ISSN (print version)" and "Journal EISSN (online version)" columns. 34,740 ISSNs currently parsed.
When either file is missing the pipeline falls back to the legacy path (NCBI esearch per-ISSN for PubMed, OpenAlex's is_in_doaj snapshot field for DOAJ), so nothing breaks — you just don't get the authoritative recheck on backfilled journals.
Tests
Three new unit tests in scripts/tests/test_journal_resolver.py lock in the override semantics:
• test_pubmed_set_overrides_passed_value — the exact JACC bug. With sets.pubmed={0735-1097} and pubmed_indexed=False passed through, the result must be indexed_pubmed=True.
• test_doaj_set_overrides_is_in_doaj_arg — same contract for DOAJ.
• test_empty_pubmed_doaj_sets_fall_back_to_args — back-compat: when the sets are empty (files missing), caller-supplied args are honoured.
A dataset-level regression guard in scripts/tests/test_journals_json_health.py checks a small set of flagship journals (JACC family, Nature Reviews family) and asserts indexed_pubmed=True in the published journals.json. 73 tests pass, 2 skipped, 0 failures.
Scope
• Schema unchanged. Only indexed_pubmed, indexed_doaj, and indexing_count rows changed, on the 57,205 rows whose flag flipped.
• Row count unchanged: 922,097 editorial positions across 15,168 journals from 48 publishers, 189 countries.
• No other columns touched.
File hashes (SHA-256)
openeditors_plus_2026.csv 715.1 MB 3ecdd2f03ecf539d…
openeditors_plus_2026.parquet 54.5 MB cec12b8a2f1af083…
License: CC0 (public domain).
## [2.6.0] — 2026-04-28
### ISSN resolution: publisher-aware lookup eliminates title-collision errors
Fixes **71 wrong-ISSN journals** that were silently mis-resolving to a more
famous similarly-named journal. The Stage-4 lookup at
`scripts/enrich_editors_2026.py::get_journal_metadata` was relevance-ranked
name search with no publisher filter — `OpenAlex /sources?search=`
returned the most-cited matching source, so ambiguous bare titles like
"Chemotherapy", "Clinical Trials", or "Rheumatology" collapsed onto the
wrong journal. The dormant `scripts/data/journal_aliases.json` override
file was never loaded by the enricher.
User-confirmed mis-resolutions corrected in this release:
| Journal | Publisher | v2.5.0 (wrong) | v2.6.0 (correct) | What v2.5.0's wrong ISSN actually pointed to |
| :--- | :--- | :--- | :--- | :--- |
| ACS Pharmacology & Translational Science | ACS | NULL | **2575-9108** | (resolution failed; scraper had a typo "Translation") |
| Current Psychopharmacology | Bentham | 0097-8361 | **2211-5560** | Psychopharmacology Bulletin |
| Chemotherapy | Karger | 0066-4804 | **0009-3157** | Antimicrobial Agents and Chemotherapy (ASM) |
| Cardiovascular & Hematological Disorders – Drug Targets | Bentham | 1568-0061 | **1871-529X** | (older Bentham journal, superseded ISSN) |
| Clinical Trials | SAGE | 0197-2456 | **1740-7745** | Controlled Clinical Trials (Elsevier predecessor) |
| Rheumatology | OUP | 1607-2669 | **1462-0324** | (unrelated journal) |
Plus 65 additional journals identified via the new NPI-cross-check audit,
predominantly under SAGE, SCIRP, Taylor & Francis, MDPI, OUP, Wiley,
Bentham, Elsevier, Karger, BMJ Group, IEEE, and APA.
### Mechanism
The Stage-4 lookup is now publisher-aware end-to-end:
1. **Publisher-token map** — every OEP `PUBLISHER_NAME` constant maps to a
set of substring tokens expected in OpenAlex's `host_organization_name`
(`Karger → ["karger"]`, `OxfordUniversityPress → ["oxford university press"]`,
etc.). 50+ publishers covered.
2. **`scripts/data/journal_aliases.json` is now loaded** by
`enrich_editors_2026.py` (it had been dead code, referenced only by
CHANGELOG). Three override layers:
- `name_to_canonical` — remaps misspellings/abbreviations to the
canonical title before lookup (e.g. "ACS Pharmacology & Translation
Science" → "ACS Pharmacology & Translational Science").
- `name_to_issn` — direct ISSN override for unambiguous titles.
- `name_publisher_to_issn` — **new**, publisher-scoped overrides for
ambiguous bare titles (`"Chemotherapy|||Karger" → "0009-3157"`).
3. **Publisher-aware snapshot + API search** — `get_journal_metadata_local`
rejects local snapshot hits whose `host_organization_name` doesn't match
the expected publisher token. `get_journal_metadata_api` scans up to 25
results from `/sources?search=` (instead of taking `results[0]`)
and accepts the first result whose host matches.
4. **Direct-ISSN resolver** — new `get_journal_metadata_by_issn` calls
`/sources/issn:NNNN-NNNN` for override-routed and NPI-disagreement
cases, bypassing relevance ranking entirely.
5. **NPI cross-check** — `scripts/data/npi_journals.csv` is now consulted
not just for level/discipline tagging but also as an authoritative
title→ISSN map (publisher-aware): if the resolver's ISSN disagrees with
NPI's ISSN for the same title under a publisher whose name matches
NPI's, the resolver re-resolves via the ISSN endpoint.
6. **Stale-snapshot API fallback** — when the local OpenAlex snapshot has
`openalex_source_id` but lacks `field`/`topic` (taxonomy added to
OpenAlex after the snapshot was built), the resolver now falls back to
the API for full classification rather than caching half data.
7. **Scraper hygiene** — fixed the typo
`"ACS Pharmacology & Translation Science"` →
`"ACS Pharmacology & Translational Science"` at
`scripts/scrape_editorial_boards_2026.py:25683`.
### Cache migration
The Stage-4 cache key migrated from `` to
`|||` so that the same title under different
publishers can no longer collide on the wrong ISSN. Legacy bare-name keys
are auto-discarded on read; users running the enricher locally will see
the cache rebuild on the next run (~4-15 minutes for ~15k journals via
the local OpenAlex snapshot, or ~30-90 minutes if the snapshot needs API
fallback for taxonomy enrichment).
### New tool: `scripts/audit_issn.py`
Cross-checks every `(journal, publisher)` row's `issn_l` against NPI's
`Print ISSN` and `Online ISSN` columns, filtered by publisher token match.
Exits with status 1 if any rows are flagged, so it can gate CI. The audit
on the regenerated 922,097-row master dropped flagged rows from **116** to
**45**; the remaining 45 are predominantly NPI Print-vs-Online catalog
drift (e.g. The BMJ: pipeline 0959-8138 print, NPI 1756-1833 online — both
correct for the same journal), not pipeline bugs.
### Scope
- Schema unchanged. Row count unchanged: 922,097 editorial positions
across 15,168 journals.
- `issn_l`, `openalex_source_id`, `scientific_domain/field/subfield/topic`,
and `oa_*` columns refreshed for affected journals; downstream `indexed_*`
flags recomputed live in Stage 8 from the new ISSNs.
- `indexed_pubmed` cache (Stage 8) was preserved — for the ~71 corrected
journals, the `indexed_pubmed` flag may temporarily reflect the old
ISSN's PubMed lookup until the next full Stage-8 rerun. All other
indexing flags (Scopus / WoS / DOAJ / COPE / NPI) are correct.
- `editors.parquet` regenerated (28 MB, 16-col subset).
- `journals.json` and 8 other site aggregates regenerated.
Open Editors Plus v2.7.0 — country-aware gender inference (WGND 2.0) with confidence floor
Released: 2026-04-30 (threshold added 2026-05-01). License: CC0 1.0 Universal. Schema: 922,097 rows × 71 columns (public release).
This release replaces the country-blind gender-guesser library (Joerg Michael's ~48,000-name list with hard-coded confidence buckets) with the World Gender Name Dictionary 2.0 (WGND 2.0; Raffo & Lax-Martinez, WIPO 2021; Harvard Dataverse DOI 10.7910/DVN/MSEGSJ; CC0). WGND 2.0 covers ~3.5 million unique first names with frequency-weighted gender labels across 195 countries, sourced primarily from WIPO patent applicant administrative records.
Why this matters
Many first names have different modal genders across countries. Andrea, for example, resolves in v2.7 to male with probability 1.000 for editors at Italian institutions and to female with probability 0.986 for editors at U.S. institutions. The previous v2.6 pipeline could not distinguish these cases and mis-coded all 1,077 Italian "Andreas". The enrichment pipeline now runs ROR institutional matching as Stage 2 before gender inference (Stage 3), so the editor's country of affiliation (ror_country) is available at gender lookup time.
Confidence floor (gender_prob >= 0.75)
A 100-row manual validation drawn from v2.7 (50 rows each from gender_source = wgnd_country, wgnd_global, and unknown) found that every gender-misclassification in the resolved subset (wgnd_country + wgnd_global) had gender_prob below 0.75. The worst cases were weights of 0.50 and 0.52 — literal 50/50 ties on the WGND global aggregate. Three mis-classifications in 100 resolved rows ⇒ ~97% precision pre-floor.
v2.7 therefore applies a confidence floor of gender_prob >= 0.75 at WGND lookup time. Matches with weights below the floor are demoted to gender = 'unknown' / gender_source = 'unknown', while the raw gender_prob and gender_nobs stay populated for transparency. The floor lifts precision on the resolved subset from ~97% to near 100% at a coverage cost of ~5 percentage points. To recover the raw v2.7 inferences (no floor), filter the master parquet on the unmodified gender_prob column or call wgnd.annotate(..., min_prob=0.0).
Coverage gain (v2.6 → v2.7, post-threshold)
Per-country classification rate (representative sample, v2.6 → v2.7 post-threshold):
Romanised CJK-script given names from Taiwan and Hong Kong remain the principal residual gap.
Layered lookup (per editor)
Schema changes (additive — backwards-compatible columns kept)
All other columns and downstream enrichment (ROR, OpenAlex bibliometrics, PubMed / Scopus / Web of Science / DOAJ / COPE indexing, NPI level, board diversity metrics, multi-board indicators) are unchanged from v2.6.
Migrating from v2.6
Known limitations carried over from v2.6
Reproducibility