A1234...) can be missing real works (the byline used a name variant the resolver didn’t link), and can also include works that belong to someone else (a different person with a similar byline got attached). This recipe finds both kinds of candidate so you can correct the profile.
The technique uses raw_author_name.search, which matches the byline string on each work directly (rather than the resolved author.id). That lets you find works the resolver missed, and inspect the byline on each work currently attached to the profile.
Step 1: Get the profile’s display name
Fetch the author and pulldisplay_name. That string is your query seed.
display_name_alternatives can also be used as extra seeds, but vet them first — the field is collected from upstream byline metadata and sometimes includes unrelated names (cross-author confusion the resolver hasn’t sorted out yet). Surname + given-token compatibility with the primary display_name is a reasonable filter.
Step 2: Generate byline variants
Normalize the seed (lowercase, strip diacritics, drop punctuation, split on whitespace) into tokens, then generate quoted phrase variants:
For an author with middle tokens (e.g.
Jane M Smith), also drop the middle tokens to generate "jane smith" / "smith jane" — otherwise the slop=0 form misses the no-middle-initial papers entirely.
Step 3: Find candidate additions (missing works)
Fire the variants as one OR’draw_author_name.search value. Combine OR’d phrases with OR, not multiple filter clauses (those AND together).
The OpenAlex web UI uses a 5-step “ladder” — start narrow, widen one step at a time, and stop as soon as meta.count clears a threshold (the dialog uses 100). Each rung trades precision for recall, so don’t widen further than you need to.
include_xpac=true— without this, the API silently drops XPAC works, about 22% of byline-match candidates.type:!paratext— excludes issue covers, errata, and similar where bylines are conflated.
author.id is the target). Doing this client-side rather than via an authorships.author.id:!A1234 filter clause lets you surface duplicate attributions too — the same paper attached to a different J. Priem entity, which a curator usually wants to see.
Then apply a byline-match gate: a work qualifies as an addition candidate only if at least one of its authorships’ raw_author_name matches the seed on surname AND (full first-given OR first-initial). Wider ladder steps ("j priem") match works whose byline reads “Richard J. Priem” — a different person sharing surname + first initial; the gate is what filters those out.
Step 4: Find candidate removals (wrongly-attributed works)
Fetch the works currently attached to the profile and run each one’s target authorship through the same gate. Misses are candidates for removal — the resolver attributed the paper to this profile but the byline doesn’t fit the seed.author.id equals the target. If its raw_author_name doesn’t pass the surname + given-compat check, flag the work:
Scoring candidates: what’s actually informative
The gate above keeps recall high in both directions; ranking the survivors by confidence is where the recipe earns its keep. The same signals apply to addition candidates (where the seed should match) and removal candidates (where it shouldn’t). A few perform very differently than they look — the notes below come from an internal 1,400-author gold-standard evaluation of OpenAlex’s resolver:authorships[].author.orcidmatching the target’s ORCID is essentially ground truth — but only ~30% of works in recent years carry araw_orcidfrom the publisher, so this gates fewer candidates than expected. When present, take it.- Name rarity dominates everything else. The same surname-plus-given-initial match means very different things for “J. Smith” and for a rare name. If you have access to a name-frequency estimate, weight by it — a rare-name candidate with no other signals is far more likely to be correct than a common-name candidate with two weak signals.
- First-initial-only matches are noisier than they look. In our overmerge analysis, ~17% of false-merges were “D. Sutcliffe” wrongly attributed to “David L. Sutcliffe” (or similar) — different people who share surname + first initial. Treat initial-only candidates as the weakest tier; require corroboration.
- 3+ shared co-authors within the same name block is a high-confidence merge signal even without ORCID. Pairwise co-author overlap (1–2 shared) is much weaker.
- CJK names are harder. Expect a higher false-positive rate on East Asian names — same-script collisions are common, and the byline-match gate above is a romanization match, which loses information. Lean harder on ORCID / institution / co-author signals for these.
- Most legitimately-missing works live on tiny “splinter” entities (1–2 works each), not on other large profiles. Candidates currently attributed to an
author.idwith very few works are usually safe merges; candidates currently attributed to a large other profile deserve scrutiny.
Full Python script
additions are candidates to attach via the curation API; removals are candidates to detach. Both lists are candidates — score them with the signals above and route low-confidence cases through human review.