Skip to content

GEO series to BioProject, via esummary db=gds

Route id: gse->bioproject:gds_summary Provider: NCBI E-utilities Direction: GSE → PRJNA

curl -s 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gds&id=200236084&retmode=json' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["result"]["200236084"]["bioproject"])'

NCBI's index of a GEO series, as against the SOFT family file, which is the submitter's own record. The two are not the same thing, and this census is the clearest demonstration in the project of how they differ.

Measured

Corpus: reprocessed-gse, all 13,045 series. Surveyed: 2026-09-15.

soft_family gds_summary
Resolved 12,572 13,038
Empty 466 7
Failed 7 0
Unique projects 12,572 12,830

Head to head over the same 13,045 series:

Agree exactly 12,572
Only gds_summary found anything 466
Only soft_family found anything 0
SOFT failed where gds returned empty 7

Where both answer they never disagree, and gds_summary answers 466 times more, for one API request instead of a multi-megabyte gzip download. On coverage and cost it strictly dominates.

And it still must not be ranked first

The 466 extra answers map to 259 distinct BioProjects. Two of those 259 are species- or consortium-level umbrellas:

Project Series it "resolves" Runs it actually holds
PRJNA30709 — Production ENCODE transcriptome data 138 7,591
PRJNA66167 52 5,910

190 of the 466 — 41% — resolve to an umbrella. Routing a series through one does not recover its data; it returns thousands of unrelated runs and reports success. A GEO series with six samples would resolve to 7,591 runs, and nothing in the response says anything is wrong.

The remaining 276 map to projects holding exactly one of these series each, and for those the extra coverage is genuine: the BioProject exists and is specific, and only the submitter's SOFT file omits it.

What to do with that

Take gds_summary's answer, and check the size of what it gives you before routing through it. A project holding orders of magnitude more runs than the series has samples is an umbrella, not an answer. fetch relations already filters project-level results to the experiments GEO attributes to the series, which is the same defence arrived at from the other direction — see shared umbrella BioProject.

This is the sharpest case in the project against ranking routes on coverage alone. gds_summary wins every headline number in the table above and is still the more dangerous route to trust blindly.