Skip to main content
v2026.11,610 entries · CC-BY 4.0
LAC HealthLaboratory & Research SupplyReagents, PPE & instruments — chain-of-custody documented.Fast, traceable sourcing built for regulated research environments, from bench consumables to instrumentation.Shop lac.us CodeCASRAIlac.us

Getting Clean BibTeX from a DOI

How to pull accurate BibTeX from any DOI using Crossref and DataCite content negotiation, and how to fix the title-casing, journal-abbreviation, dash, and citation-key problems the raw output leaves behind.

Ask about Getting Clean BibTeX from a DOI

Answers are drawn from this guide and the rest of the CASRAI corpus, with a link to every source.

Answers are AI-generated from CASRAI’s own published pages and can be wrong, so check the linked sources before relying on one; your question is logged without personal data — never sold, never used to train a third-party model — to show us what CASRAI is missing, so please do not type personal or confidential details. How we use this

Every DOI can hand you a working BibTeX record directly, for free, with one HTTP request — no third-party website required. The mechanism is called content negotiation: you ask doi.org for the DOI in a specific format via an HTTP Accept header, and the registration agency behind that DOI (usually Crossref or DataCite) returns structured metadata instead of redirecting your browser to the publisher’s page. Sites like doi2bib.org are just a form wrapped around this exact request. This guide shows the request itself, then walks through the specific fields Crossref’s and DataCite’s BibTeX output routinely gets wrong — title capitalization, journal abbreviations, page-range dashes, unescaped ampersands, and awkward citation keys — with the fix for each, plus how to do this for a batch of DOIs instead of one at a time.

The one command: DOI to BibTeX via content negotiation

From a terminal:

curl -LH "Accept: application/x-bibtex" "https://doi.org/10.1038/nphys1170"

That returns (tested live against doi.org, verified 2026-08-16):

@article{Aspelmeyer_2009,
  title={Measured measurement},
  volume={5},
  ISSN={1745-2481},
  url={http://dx.doi.org/10.1038/nphys1170},
  DOI={10.1038/nphys1170},
  number={1},
  journal={Nature Physics},
  publisher={Springer Science and Business Media LLC},
  author={Aspelmeyer, Markus},
  year={2009},
  month=Jan,
  pages={11–12}
}

Two things worth noting before you copy this into a .bib file. First, this works identically whether the DOI was registered by Crossref (journal articles, conference papers, books) or DataCite (datasets, software, preprints on some platforms) — doi.org proxies the request to whichever registration agency owns that DOI prefix, so you don’t need to know in advance which one you’re dealing with. Second, the output above is usable but not clean: the dash in pages is not a plain ASCII hyphen, the title has no protection against a bibliography style lower-casing it, and the citation key (Aspelmeyer_2009) is one Crossref generated, not one you chose. The rest of this guide covers exactly what breaks and how to fix it before the entry goes into a shared .bib file or a manuscript.

For background on DOI resolution generally — what a DOI is, how to look one up, what to do when one won’t resolve — see How to Find, Look Up, and Resolve a DOI. This guide picks up specifically where that one’s content-negotiation section leaves off, for the BibTeX/LaTeX case.

What “Crossref content negotiation” actually means

Content negotiation is an HTTP mechanism, not a Crossref-specific feature: the same URL (https://doi.org/<doi>) returns different representations depending on the Accept header you send. A plain browser request (Accept: text/html) gets the normal redirect to the publisher’s landing page. Send Accept: application/x-bibtex instead and you get a BibTeX record. Other useful values on the same endpoint:

  • application/vnd.citationstyles.csl+json — CSL-JSON, the format reference managers like Zotero and most citation-processing pipelines actually consume internally.
  • text/x-bibliography; style=apa (or any style slug from the CSL style repository) — a fully formatted citation string in that style, no BibTeX involved.
  • application/x-research-info-systems — RIS, for EndNote and similar tools.

Crossref also exposes the same BibTeX transform directly on its own API, without going through the doi.org redirect:

curl -L "https://api.crossref.org/works/10.1038/nphys1170/transform/application/x-bibtex"

(Confirmed live 2026-08-16: identical output to the doi.org content-negotiation request above.) This is worth knowing because the two entry points differ slightly in what they expose. The doi.org/api.crossref.org BibTeX transform is deliberately minimal — it maps only the fields a basic BibTeX entry expects. Crossref’s own CSL-JSON response for the same DOI carries additional fields the BibTeX transform silently drops, most usefully container-title-short (the abbreviated journal name, e.g. "Nature Phys" for "Nature Physics") — not every article has one, but where Crossref holds it, it’s only retrievable via the JSON, not the BibTeX endpoint. That gap is the root cause of the journal-abbreviation problem below.

Tools like doi2bib.org, and the “copy as BibTeX” buttons in Google Scholar or a publisher page, are not independent metadata sources — they are, functionally, a form field wrapped around this same request (or a very similar one against the same Crossref/DataCite records). Once you know the direct request, the third-party site adds a dependency without adding accuracy; you’re still getting Crossref’s or DataCite’s raw deposited metadata either way, with the same gaps described below.

What’s broken in DOI-derived BibTeX, and how to fix each field

None of the issues below are bugs in Crossref’s or DataCite’s API — they’re a direct consequence of what publishers actually deposit, and of BibTeX’s own age (the format predates Unicode and has no native concept of “don’t touch this capitalization”). A second real DataCite example, requested the same way, shows several of them at once:

curl -LH "Accept: application/x-bibtex" "https://doi.org/10.1002/adfm.201505328"
@article{Halim_2016,
  title={Synthesis and Characterization of 2D Molybdenum Carbide (MXene)},
  volume={26},
  ISSN={1616-3028},
  url={http://dx.doi.org/10.1002/adfm.201505328},
  DOI={10.1002/adfm.201505328},
  number={18},
  journal={Advanced Functional Materials},
  publisher={Wiley},
  author={Halim, Joseph and Kota, Sankalp and Lukatskaya, Maria R. and Naguib, Michael and Zhao, Meng‒Qiang and Moon, Eun Ju and Pitock, Jeremy and Nanda, Jagjit and May, Steven J. and Gogotsi, Yury and Barsoum, Michel W.},
  year={2016},
  month=Feb,
  pages={3118–3127}
}

(Live output, verified 2026-08-16.) Field by field:

Field / symptom Why it happens The fix
Title capitalization gets flattened (e.g. an acronym like “MXene” or a proper noun gets lower-cased in your final bibliography) BibTeX styles that use sentence case or title case (common in physics/chemistry journal styles) walk the title field and re-case every word except the first, unless a word is explicitly protected. Crossref/DataCite deposit the title as plain text with no protection markup. Wrap the specific words that must keep their capitalization in an extra pair of braces: title={Synthesis and Characterization of 2D Molybdenum Carbide ({MXene})}. Don’t double-brace the whole title — that disables italicization/emphasis some styles apply, and defeats the point of using a style at all.
Journal name isn’t abbreviated (you need “Adv. Funct. Mater.”, the BibTeX gives you “Advanced Functional Materials”) The application/x-bibtex transform only maps Crossref’s full container-title. Crossref’s separate container-title-short field (where deposited) is dropped from the BibTeX output entirely — it only appears in the CSL-JSON representation. Request the CSL-JSON for the same DOI (Accept: application/vnd.citationstyles.csl+json) and check for a container-title-short value; paste that into the BibTeX journal field if your target style needs the abbreviated form. If Crossref doesn’t hold a short form for that title, fall back to a standard ISO4/NLM abbreviation list — there’s no shortcut around maintaining one for high-volume use.
En dash instead of a plain hyphen in page ranges (pages={11–12}) Crossref/DataCite deposit the true Unicode en dash (U+2013) character in page ranges, matching how it’s typeset in the original article. Classic BibTeX (the 8-bit .bst-driven engine, as opposed to biblatex/biber) expects a double hyphen (--) to render an en dash and can mis-render or warn on the raw Unicode character depending on your font encoding. Replace the en dash with --: pages={11--12}. If you’re compiling with biblatex+biber (UTF-8 native throughout), the raw en dash is actually fine as-is — the fix is only needed for classic BibTeX pipelines.
Unescaped ampersands and special characters in publisher or organization names Crossref/DataCite deposit publisher and society names exactly as registered, which sometimes include a literal & (e.g. some society and imprint names). LaTeX treats an unescaped & as a special character reserved for tables. Escape it as & wherever it appears in a field that will be typeset, or run a cleanup pass (see the batch section below) that escapes &, %, _, and # across every field before the file is compiled.
Non-ASCII characters inside author names (the Wiley example above deposits a non-breaking hyphen, U+2010, inside “Meng‒Qiang” rather than a plain ASCII hyphen; accented names carry real diacritics) Metadata is deposited as the publisher’s own Unicode string, which is correct — the issue is only on the consuming end, in engines that aren’t UTF-8 native. Compile with biblatex+biber rather than classic BibTeX+bst where possible; it’s UTF-8 native and handles this correctly with no manual escaping. If you’re locked into classic BibTeX, convert accented/special characters to their LaTeX-escaped equivalents (e.g. via a conversion script) before compiling.
Citation key is the full DOI URL, not an author/year key (DataCite entries in particular often key as @article{https://doi.org/10.5438/0012, ...}) DataCite records frequently lack the clean structured author-surname data Crossref journal-article records have (a dataset or software DOI may credit a working group or organization rather than a person), so the BibTeX transform falls back to the DOI itself as the key. Rename the key manually to something usable in cite{} — a short, memorable convention such as authorYYYYkeyword works fine; the key is arbitrary as long as it’s unique and doesn’t start with a digit.
Missing page numbers Many current articles — especially in journals that moved to continuous-publication or article-number formats instead of print pagination, and most datasets/software/preprints — genuinely have no page range to deposit. This isn’t a negotiation failure; there’s nothing to return. Leave pages out rather than inventing one. If the record has an article number instead, some styles support an articleno or eid field — check what your target style/class expects rather than forcing the article number into pages.

Batch: converting many DOIs to BibTeX at once

The same content-negotiation request works in a loop for any list of DOIs you already have — from a reference list, a systematic-review screening export, or a lab’s shared reading list:

while read -r doi; do
  curl -sL -H "Accept: application/x-bibtex" "https://doi.org/${doi}" >> combined.bib
  echo "" >> combined.bib
  sleep 1
done < dois.txt

Two practical notes for doing this at any real volume:

  • Identify yourself to Crossref’s API. Adding a mailto= parameter (or a descriptive User-Agent with a contact email) to requests against api.crossref.org routes you into Crossref’s better-supported request pool rather than the anonymous default — worth doing for anything beyond a handful of one-off lookups. See Crossref’s own API documentation for the current recommended syntax.
  • Run every entry through the field fixes above before merging — a batch job multiplies the same title-casing, dash, and ampersand issues across every record rather than avoiding them, so clean once, systematically (a small script that walks the merged .bib file replacing en dashes with -- and escaping & is the highest-leverage single fix for a large batch), not per-entry by hand.

If you’re already working inside a reference manager rather than the command line, Zotero can add DOIs directly (via its “Add Item by Identifier” lookup) and export a library or collection as BibTeX in bulk, applying some of this same cleanup automatically through its citation-processing layer; see Zotero Setup and Troubleshooting if the browser connector or sync isn’t working. That’s a reasonable alternative when you’re managing an ongoing library rather than a one-off conversion — but it’s still built on the same underlying Crossref/DataCite metadata, so the field-level issues above can still surface in its export.

Frequently asked questions

What is Crossref content negotiation?

It’s the mechanism described above: sending an HTTP Accept header to a DOI’s doi.org URL to request structured metadata (BibTeX, CSL-JSON, RIS, a formatted citation string) instead of the default HTML redirect. It’s not exclusive to Crossref — DataCite DOIs resolve the same way through the same doi.org endpoint.

Are doi2bib.org and similar sites reliable?

They’re generally accurate for a single, occasional lookup, because they’re making the same content-negotiation request described in this guide against the same Crossref/DataCite records — they aren’t a separate or more authoritative data source. They carry the same field-level issues (title casing, missing abbreviations, dash characters) documented above, and add a third-party dependency you don’t need once you can make the request directly.

Why is my BibTeX title in lowercase / missing capitals?

Your bibliography style is applying sentence case or title case to the raw title field, and Crossref’s/DataCite’s deposited title has no capitalization-protection markup. Wrap the specific proper nouns, acronyms, or chemical/gene names that must stay capitalized in an extra pair of braces, as shown in the table above — not the entire title.

Can I batch-convert a whole reference list of DOIs to BibTeX?

Yes — loop the same content-negotiation request over a list of DOIs (see the batch section above), or use a reference manager’s bulk DOI import/export if you’re maintaining an ongoing library rather than doing a one-time conversion.

Does this work for datasets and software, not just journal articles?

Yes. Any DOI resolves through the same doi.org content-negotiation mechanism regardless of which registration agency issued it — Crossref DOIs (journal articles, books, conference papers) and DataCite DOIs (datasets, software, and other non-article outputs) both return BibTeX from the identical request. See Crossref vs. DataCite for how the two registration agencies and their metadata coverage differ, and How to Cite Data for citation formats beyond BibTeX specifically for datasets.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →