Skill Tracer
Skills › Scientific Agent Skills › database-lookup › geo.md

geo.md

130 lines · skills/database-lookup/references/geo.md at 5f2bc03

Open on GitHub
1# NCBI GEO (Gene Expression Omnibus) via E-utilities
2

NCBI GEO (Gene Expression Omnibus) via E-utilities

Raw lines 1 to 2
3## Base URLs
4
5| Purpose | URL |
6|---|---|
7| E-utilities | `https://eutils.ncbi.nlm.nih.gov/entrez/eutils/` |
8| GEO direct query | `https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi` |
9

Base URLs

PurposeURL
E-utilitieshttps://eutils.ncbi.nlm.nih.gov/entrez/eutils/
GEO direct queryhttps://www.ncbi.nlm.nih.gov/geo/query/acc.cgi
Raw lines 3 to 9
10## Important: The database name is `gds`
12The Entrez database for GEO is `gds` (not `geo`). It contains all GEO record types: GDS datasets, GSE series, GPL platforms, GSM samples. Filter by type using `[ETYP]` in the search term.

Important: The database name is gds

The Entrez database for GEO is gds (not geo). It contains all GEO record types: GDS datasets, GSE series, GPL platforms, GSM samples. Filter by type using [ETYP] in the search term.

Raw lines 10 to 13
14## Key Endpoints

Key Endpoints

Raw lines 14 to 15
16### eSearch — Search GEO
18```
19GET /esearch.fcgi?db=gds&term={query}&retmode=json&retmax={n}
20```
22Parameters:
23- `db=gds` (required)
24- `term` — search query with field tags
25- `retmax` — max results (default 20)
26- `retstart` — offset for pagination
27- `retmode=json` — get JSON response
28- `usehistory=y` — store results server-side for large queries
29- `api_key` — NCBI API key (optional, raises rate limit)
31#### Entry type filters (`[ETYP]`)
32- `gds[ETYP]` — curated GEO DataSets
33- `gse[ETYP]` — GEO Series (most common, use this by default)
34- `gpl[ETYP]` — platforms
35- `gsm[ETYP]` — samples
37#### Other field tags
38- `[Organism]` — e.g. `"Homo sapiens"[Organism]`
39- `[PDAT]` — publication date
40- `[Title]` — title search
41- Boolean: `AND`, `OR`, `NOT` (uppercase)
43Example — cancer GSE series in human:
44```
45/esearch.fcgi?db=gds&term=cancer+AND+gse[ETYP]+AND+"Homo+sapiens"[Organism]&retmax=10&retmode=json
46```
48Response:
49```json
51 "esearchresult": {
52 "count": "15432",
53 "retmax": "10",
54 "idlist": ["200012345", "200067890"],
55 "querytranslation": "cancer AND gse[ETYP]"
56 }
58```
60The IDs returned are numeric Entrez UIDs, not accessions. Resolve them with ESummary and read `accession`; do not depend on an arithmetic UID conversion.

eSearch — Search GEO

GET /esearch.fcgi?db=gds&term={query}&retmode=json&retmax={n}

Parameters:

  • db=gds (required)
  • term — search query with field tags
  • retmax — max results (default 20)
  • retstart — offset for pagination
  • retmode=json — get JSON response
  • usehistory=y — store results server-side for large queries
  • api_key — NCBI API key (optional, raises rate limit)

Entry type filters ([ETYP])

  • gds[ETYP] — curated GEO DataSets
  • gse[ETYP] — GEO Series (most common, use this by default)
  • gpl[ETYP] — platforms
  • gsm[ETYP] — samples

Other field tags

  • [Organism] — e.g. "Homo sapiens"[Organism]
  • [PDAT] — publication date
  • [Title] — title search
  • Boolean: AND, OR, NOT (uppercase)

Example — cancer GSE series in human:

/esearch.fcgi?db=gds&term=cancer+AND+gse[ETYP]+AND+"Homo+sapiens"[Organism]&retmax=10&retmode=json

Response:

{
  "esearchresult": {
    "count": "15432",
    "retmax": "10",
    "idlist": ["200012345", "200067890"],
    "querytranslation": "cancer AND gse[ETYP]"
  }
}

The IDs returned are numeric Entrez UIDs, not accessions. Resolve them with ESummary and read accession; do not depend on an arithmetic UID conversion.

Raw lines 16 to 61
62### eSummary — Get metadata for UIDs
64```
65GET /esummary.fcgi?db=gds&id={uid_list}&retmode=json
66```
68Key response fields per record:
69- `accession` — e.g. "GSE12345"
70- `title`, `summary`
71- `taxon` — organism
72- `entrytype` — "GDS", "GSE", "GPL", "GSM"
73- `gdstype` — e.g. "Expression profiling by array"
74- `n_samples` — sample count
75- `pubmedids` — linked PubMed IDs
76- `pdat` — publication date
77- `samples` — array of sample objects
78- `ftplink` — data download path
80Example:
81```
82/esummary.fcgi?db=gds&id=200012345&retmode=json
83```

eSummary — Get metadata for UIDs

GET /esummary.fcgi?db=gds&id={uid_list}&retmode=json

Key response fields per record:

  • accession — e.g. "GSE12345"
  • title, summary
  • taxon — organism
  • entrytype — "GDS", "GSE", "GPL", "GSM"
  • gdstype — e.g. "Expression profiling by array"
  • n_samples — sample count
  • pubmedids — linked PubMed IDs
  • pdat — publication date
  • samples — array of sample objects
  • ftplink — data download path

Example:

/esummary.fcgi?db=gds&id=200012345&retmode=json
Raw lines 62 to 84
85### GEO Direct Query — Full records by accession
87```
88GET https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={accession}&form={format}&view={detail}
89```
91Parameters:
92- `acc` — GEO accession (GSE12345, GDS1234, GPL570, GSM12345)
93- `targ` — `self`, `gsm` (samples), `gpl` (platform), `gse` (series)
94- `form` — `text` (SOFT format), `xml` (MINiML), `html`
95- `view` — `quick`, `brief`, `full`, `data`
97Example — series metadata in SOFT:
98```
99acc.cgi?acc=GSE53757&targ=self&form=text&view=brief
100```
102Note: acc.cgi does not return JSON. Use eSearch + eSummary for JSON results. Use acc.cgi when you need full SOFT/MINiML records.

GEO Direct Query — Full records by accession

GET https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={accession}&form={format}&view={detail}

Parameters:

  • acc — GEO accession (GSE12345, GDS1234, GPL570, GSM12345)
  • targ — self, gsm (samples), gpl (platform), gse (series)
  • form — text (SOFT format), xml (MINiML), html
  • view — quick, brief, full, data

Example — series metadata in SOFT:

acc.cgi?acc=GSE53757&targ=self&form=text&view=brief

Note: acc.cgi does not return JSON. Use eSearch + eSummary for JSON results. Use acc.cgi when you need full SOFT/MINiML records.

Raw lines 85 to 103
104### eLink — Cross-reference with other NCBI databases
106```
107GET /elink.fcgi?dbfrom=gds&db=pubmed&id={uid}&retmode=json
108```

eLink — Cross-reference with other NCBI databases

GET /elink.fcgi?dbfrom=gds&db=pubmed&id={uid}&retmode=json
Raw lines 104 to 109
110## Practical Workflow
112For most queries, use this two-step approach:
1141. **eSearch** to find UIDs matching the query
1152. **eSummary** to get metadata for those UIDs
117This gives you JSON throughout.

Practical Workflow

For most queries, use this two-step approach:

  1. eSearch to find UIDs matching the query
  2. eSummary to get metadata for those UIDs

This gives you JSON throughout.

Raw lines 110 to 118
119## Important Notes
121- GDS records are mostly frozen — NCBI stopped curating new GDS. Use `gse[ETYP]` for comprehensive results.
122- eFetch has limited support for the `gds` database. Use eSummary for metadata or acc.cgi for full records.
123- URL-encode spaces as `+` and quotes as `%22`.

Important Notes

  • GDS records are mostly frozen — NCBI stopped curating new GDS. Use gse[ETYP] for comprehensive results.
  • eFetch has limited support for the gds database. Use eSummary for metadata or acc.cgi for full records.
  • URL-encode spaces as + and quotes as %22.
Raw lines 119 to 124
125## Rate Limits
127- **Without API key**: 3 requests/second
128- **With API key**: 10 requests/second (free registration at ncbi.nlm.nih.gov/account/settings)
129- Include `&email=user@example.com` as a courtesy
130- For large result sets, use the History server (`usehistory=y` then pass `WebEnv` and `query_key` to eSummary)

Rate Limits

  • Without API key: 3 requests/second
  • With API key: 10 requests/second (free registration at ncbi.nlm.nih.gov/account/settings)
  • Include &email=user@example.com as a courtesy
  • For large result sets, use the History server (usehistory=y then pass WebEnv and query_key to eSummary)
Raw lines 125 to 130