CSL-JSON to BibTeX Converter

Convert CSL-JSON citation data back to .bib format

Reverses CSL-JSON to BibTeX, mapping CSL variables back to BibTeX fields and choosing entry types from CSL type strings. Reconstructs author names and issued dates. Browser-based — no reference data is uploaded. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

Where do the cite keys come from?

Each CSL item's `id` becomes the BibTeX cite key. If an item has no id, the converter builds one from the first author's family name plus the year, and adds a letter suffix to keep keys unique.

Convert CSL-JSON to BibTeX

This is the reverse of a BibTeX-to-CSL-JSON conversion: it takes CSL-JSON — the format used by Pandoc and citeproc — and produces BibTeX entries you can use directly with LaTeX. It is handy when a collaborator sends a .json bibliography but your document is built with bibtex or biber.

When to use this tool

The most common situation is receiving a bibliography.json from someone using Pandoc-flavoured Markdown or Zotero’s “CSL JSON” export. If your own document uses \bibliography{refs} and compiles with pdflatex + bibtex, you need a .bib file, not JSON. Paste the CSL-JSON here and copy a ready-to-add .bib block.

It is also useful when you have chained a CSL-based reference manager upstream but need to hand off a LaTeX project to a journal that only accepts .bib submissions.

How it works

The tool parses the JSON (accepting either an array of items or a single object), then walks each CSL item. The CSL type chooses the BibTeX entry type (article-journal@article, paper-conference@inproceedings, thesis@phdthesis, and so on). Variables are mapped back to fields: title→title, container-title→journal or booktitle, volume→volume, issue→number, page→pages (with - rewritten as the LaTeX --), DOI→doi, publisher→publisher.

Author and editor arrays are rebuilt into Family, Given strings joined with and. The issued date-parts array supplies the year (and month if present). Special characters such as &, % and _ are escaped so the resulting .bib compiles cleanly under LaTeX.

Worked example

Given this CSL-JSON snippet:

[{
  "id": "Doe2023",
  "type": "article-journal",
  "title": "On Logical Inference",
  "author": [{"family": "Doe", "given": "Jane"}],
  "issued": {"date-parts": [[2023, 4]]},
  "container-title": "Journal of Logic",
  "volume": "12",
  "page": "55-67",
  "DOI": "10.0000/jol.2023.55"
}]

The converter produces:

@article{Doe2023,
  author  = {Doe, Jane},
  title   = {On Logical Inference},
  journal = {Journal of Logic},
  year    = {2023},
  month   = {4},
  volume  = {12},
  pages   = {55--67},
  doi     = {10.0000/jol.2023.55},
}

Notice that the page range becomes 55--67 with the LaTeX double-hyphen, ready for typesetting as an en-dash.

Notes and edge cases

If a CSL item lacks an id, a cite key is synthesised from the first author’s family name and the year (for example Smith2021). Page ranges are normalised to the LaTeX double-hyphen en-dash form (3--17) regardless of how they were written in the input.

For CSL types without a direct BibTeX mapping — webpage, broadcast, dataset — the entry falls back to @misc, which is the conventional catch-all. You may want to manually promote these to @online or @unpublished if you are using BibLaTeX rather than plain BibTeX, since BibLaTeX defines those richer entry types.

BibTeX vs BibLaTeX: which do you need?

If your document compiles with pdflatex + bibtex, you need classic BibTeX output. If it uses biblatex + biber (now common in German academic publishing and increasingly elsewhere), you have richer entry types available — @online, @software, @dataset — and may want to manually edit the @misc fallbacks after conversion.

A quick way to tell which system you are using: look at your .tex preamble. \usepackage{biblatex} means BibLaTeX/biber; \bibliographystyle{...} means classic BibTeX.

Common problems after conversion

Missing abstract or URL fields. BibTeX traditionally ignores abstract and url fields, but BibLaTeX respects them. If you need these preserved, check that the CSL items carry a URL key — the converter maps it to the url field. Abstracts are not part of the standard CSL-to-BibTeX mapping and will not appear in the output.

Accented characters. CSL-JSON stores text in Unicode. Classic BibTeX works best when accents are encoded as LaTeX commands ({\'e} rather than é). If your journal uses pdflatex without inputenc=utf8, you may need to escape diacritics after conversion. BibLaTeX with biber handles UTF-8 natively and requires no escaping.

Conference proceedings. CSL’s paper-conference maps to @inproceedings, but it only populates the booktitle field if the CSL item carries a container-title. If your CSL lacks that key, the booktitle will be empty — fill it in manually from the conference name.

Everything runs locally in your browser — your citation data is never uploaded.