Bibliographic Services

What each citation and retraction service is good for, and where each will mislead you

Bibliographic services: what each is good for, and where each will mislead you

Operating characteristics of the services the census, retraction, and acquisition steps depend on. Measured across a 12-paper batch, 2026-09-12. Re-measure and update the date when these change — the failure modes below are behavioural, not documented guarantees.

The point of this table is not the happy path. It is that one of these services returns plausible, well-formed, badly wrong data with no error, and an agent discovering the ecosystem from scratch has no way to know which.

Service table

ServiceUse forDo not use forAuthObserved failure
Semantic Scholarcitation counts, influential counts, venue corroboration—key strongly recommendedHTTP 429 even at 25 s spacing
OpenAlex`is_retracted`citation counts — splits preprint/published records; 18× undercount observednonenone; returns wrong data silently
OpenReviewvenue/acceptance confirmation—none—
ACL Anthology / PMLRpublished version, page ranges—nonePMLR asset lives at `raw.githubusercontent.com/mlresearch/...`; the intuitive proceedings path 404s
Crossref / Unpaywall / Europe PMCOA routing, bibliographic metadata—none (Unpaywall wants `mailto`)—
PubPeerpost-publication concerns——HTTP 403 to non-browser clients
DBLPvenue fallback——anti-bot challenge; returns HTML, not JSON

The OpenAlex count trap

OpenAlex indexes the arXiv preprint record separately from the published record and does not merge them. For REF-2532 (ROME) it returns `cited_by_count: 178` where Semantic Scholar returns 3,205 — an 18× undercount. Title-search does not fix it; the best-cited match was still the arXiv record.

This is a trap rather than a limitation because of when an agent reaches for it. OpenAlex is the obvious fallback when Semantic Scholar throttles: unauthenticated, generous limits, returns a plausible-looking integer. Substituting it silently records counts an order of magnitude wrong, with no error and no signal. The corpus then carries a number that looks like evidence and is not.

Calibration rule. Never substitute a citation-count source without checking it against a known-high-count paper first. A source that returns 178 for a 3,000-citation paper is not a fallback, it is data corruption. One calibration query catches it.

Provenance rule. Record the source and the date with every count. A count without a provenance line cannot be compared against a later refresh and cannot be audited when two sources disagree. Record a null result as a null result — `is_retracted: false, OpenAlex, 2026-09-12` — never as the absence of a check.

Throttling budget

Semantic Scholar is the best source for counts and the most aggressive throttler. Measured: 4 of 12 succeeded on a first pass at ~4 s spacing; a retry pass at 25 s spacing still lost 4 of 8. The 429 body points at the API-key form.

Budget roughly five minutes of wall-clock for a 12-paper census, and record misses as misses rather than substituting a source that has not been calibrated.

Permanent access limitations

PubPeer returns 403 to this client, so the corpus has never carried a PubPeer signal; radars record "PubPeer not checked" as a permanent access limitation, which is honest. DBLP returns an Anubis challenge page rather than JSON, which fails like a parse error rather than a block — worth naming, since DBLP is the natural venue fallback when Semantic Scholar throttles.

API keys

A Semantic Scholar key removes the throttling problem and is strongly recommended for any batch. Key handling follows `token-security` without exception: a mode-600 file, loaded at the point of use, never passed as a command argument, never echoed, never committed.

# Correct: loaded inline at point of use, scoped to the call
curl -s -H "x-api-key: $(cat ~/.config/semanticscholar/token)" \
  "https://api.semanticscholar.org/graph/v1/paper/..."