Existing ADS bibliography tools like adstex, filltex, and bibslurp are all designed for LaTeX workflows: you have a .tex file with \cite{} commands, and they resolve the citation keys against ADS.
But if you maintain an academic homepage with Quarto (or any static site generator), you need the opposite workflow: start from your identity (ORCID), fetch everything, and produce a clean .bib file ready for the web.
That’s what ads-bib-tools does.
What it does
One command:
python update_bib.py --orcid 0000-0002-4088-1928This:
- Fetches all papers linked to your ORCID from NASA ADS, querying all three claim sources (
orcid_pub,orcid_user,orcid_other) so nothing gets missed - Strips bulky fields like
abstractandfilethat bloat the.biband aren’t needed for rendering - Cleans MathML markup that some publishers (notably Elsevier) embed in titles — converts it to proper LaTeX notation so your titles render correctly
- Tags each entry with
refereedornon-refereedin the BibTeXkeywordsfield, based on the ADSpropertymetadata
The output is a website-ready .bib file. The script is idempotent — run it again and it updates cleanly without duplicating tags.
The MathML problem
This is one of those things you don’t notice until it ruins a title on your homepage. Some publishers store formulas as MathML in their metadata, and ADS faithfully passes it through. So instead of seeing:
CO₂ ice sublimation on Mars
you get a mess of <mml:msub> tags in your BibTeX title field. The script detects and converts these to LaTeX notation automatically.
Refereed vs. non-refereed
The ADS API exposes a property field on each paper that includes REFEREED for peer-reviewed publications. The script reads this and adds a refereed or non-refereed keyword to each BibTeX entry.
Why bother? Because you can then split your bibliography page into tabs. This is exactly what I do on my bibliography page using the chronobib Quarto extension:
---
bibliography: MyPublications.bib
citeproc: false
filters:
- michaelaye/highlight-author
- michaelaye/chronobib
highlight-author: "Aye"
chronobib:
split-keyword: refereed
---
::: {.panel-tabset}
## Refereed
::: {#refs-refereed}
:::
## Non-Refereed
::: {#refs-nonrefereed}
:::
:::This gives you two tabs, each with year-grouped entries, and your name highlighted in bold. Three tools, one clean result.
Installation
git clone https://github.com/michaelaye/ads-bib-tools.git
pip install requestsOr grab just the script:
curl -O https://raw.githubusercontent.com/michaelaye/ads-bib-tools/main/update_bib.py
pip install requestsYou’ll need an ADS API token exported as ADS_API_TOKEN.
Prerequisites: complete your ORCID claims in ADS
The script can only fetch papers that ADS has linked to your ORCID. If your claims are incomplete, papers will be silently missing from the output. It’s worth checking this before your first run.
Link your ORCID to ADS. In ADS user settings, connect your ORCID account if you haven’t already.
Claim missing papers. Search for your publications in ADS. On any paper that isn’t yet linked to your ORCID, click the ORCID icon to claim it. ADS supports three claim sources:
orcid_pub— claimed by the publisher (automatic for some journals)orcid_user— claimed by you through the ADS interfaceorcid_other— claimed through other ORCID-connected services
The script queries all three sources, so a paper claimed through any of these channels will be included.
Check for completeness. Run this ADS query to see everything currently linked to your ORCID:
orcid:0000-0002-4088-1928Compare the result count against what you expect. Conference abstracts, instrument papers, and older publications are the most common gaps.
Once your claims are complete, the script will pick up everything automatically on every subsequent run.
The full pipeline
Here’s how all the pieces fit together for an academic Quarto homepage:
- ads-bib-tools fetches and cleans your
.bibfile from ADS - highlight-author highlights your name in the rendered bibliography
- chronobib groups entries by year and optionally splits them into refereed/non-refereed tabs
Each tool works independently, but they’re designed to complement each other.
Links
- GitHub: michaelaye/ads-bib-tools
- DOI:
- Companion extensions: highlight-author, chronobib
- Live example: my bibliography page