Skip to content

BioProject → GEO series

Needs: an NCBI-issued BioProject Feeds: GEO series → samples Routes: 2 measured, and they are the same route in practice.

Routes

Route Requests Reads
gds_direct 2 esearch db=gds for the accession → esummary
elink 3 esearch db=bioproject → ELink bioproject→gds → esummary

Measured behaviour

Over the 12,114 PRJNA projects in the reprocessed table, 2026-05-12:

gds_direct elink
Series found 15,179 15,180
Failed accessions 1,079 1,078

Zero accessions where the two return different series sets. They differ by one accession in 12,114 — PRJNA1244410, found by ELink only — and by one series in 15,000.

The series are counted distinct. The scripts wrote one row per project and series, and five series are reached from more than one project — GSE305915 from three — so the result tables hold 15,186 and 15,185 rows. The registry recorded those row counts until 2026-10-19.

Recommendation

Use gds_direct. Identical answers for one fewer request. The extra ELink hop buys a single accession across the whole corpus and adds a failure mode of its own: ELink is where the MegaLink backend errors show up (1,712 occurrences in the 2026-05 logs).

Neither route applies to PRJEB or PRJDB projects. An EBI- or DDBJ-native project has no GEO record, so the answer is legitimately empty rather than missing — see routing by archive.

About those 1,078 failures

They are not API failures. Manual triage of a sample found re-created, withdrawn and private projects: PRJNA644294 was re-created as PRJNA644462, PRJNA735853 as PRJNA849641, PRJNA857927 is gone from BioProject entirely, and GSE207991 is private.

One class was a client defect, now fixed: ELink can return a history response with no usable querykey, and all 27 projects that hit that resolved through the cmd=neighbor fallback. "No usable history link" is not "no GEO link" — see the troubleshooting notes.