NCBI E-utilities (PubMed)
NCBI E-utilities (PubMed)
NCBI's Entrez Programming Utilities (E-utilities) are the public API to PubMed, NLM's database of citations and abstracts of biomedical literature, of which MEDLINE is the largest component. ESearch returns PubMed IDs for a query, and ESummary or EFetch return the records in JSON or XML; no key is needed for up to three requests a second.
Required Attribution:
NLM asks to be acknowledged as the source; the PubMed data terms also bar using the PubMed wordmark or logo with your product or service.
Coverage
PubMed citations and abstracts from several NLM literature resources, including MEDLINE. For bulk use NLM also publishes an annual baseline, "a complete snapshot of PubMed data", plus daily update files on its FTP servers. Publication delay: Not stated.
Verdict
Use it to search biomedical literature by topic, author, journal or date and pull citation records and PubMed IDs into a pipeline. NLM does not claim copyright on PubMed abstracts, but journal publishers or authors may. NCBI asks scripts to send no more than 3 requests a second, to run series of more than 100 requests at weekends or between 9 pm and 5 am Eastern Time on weekdays, and to pass tool and email parameters; an API key allows a higher rate. Services built on it must make NCBI's Disclaimer and Copyright notice evident to users.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Load PubMed search results via E-utilities into pandas and Parquet. Checked against the provider's documentation on Nov 3, 2026.
Access
- No key needed up to 3 requests a second; an NCBI API key (free) allows more and goes in the api_key parameter.
- Send requests to https://eutils.ncbi.nlm.nih.gov with tool and email parameters so NCBI can contact you.
Request
curl 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=heat+wave+mortality&retmode=json&retmax=100&tool=my-loader&email=you@example.org'Format
ESearch JSON: esearchresult with count and idlist (PubMed IDs). ESummary JSON: result with uids and one object per PMID carrying title, fulljournalname, pubdate, authors and articleids (including doi where present). EFetch returns full PubMed XML.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""PubMed via NCBI E-utilities (ESearch + ESummary) -> pandas -> Parquet. No key needed; at most 3 requests a second."""
import time
import requests
import pandas as pd
BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"
COMMON = {"db": "pubmed", "retmode": "json", "tool": "my-loader", "email": "you@example.org"} # use your own tool name and email
s = requests.get(f"{BASE}/esearch.fcgi", params={**COMMON, "term": "heat wave mortality", "retmax": 100,
"sort": "pub_date", "datetype": "pdat", "mindate": "2025", "maxdate": "2026"}, timeout=60)
s.raise_for_status()
res = s.json()["esearchresult"]
time.sleep(0.4)
m = requests.get(f"{BASE}/esummary.fcgi", params={**COMMON, "id": ",".join(res["idlist"])}, timeout=60)
m.raise_for_status()
summ = m.json()["result"]
rows = [{
"pmid": uid,
"title": summ[uid].get("title"),
"journal": summ[uid].get("fulljournalname"),
"pubdate": summ[uid].get("pubdate"),
"doi": next((i["value"] for i in summ[uid].get("articleids", []) if i.get("idtype") == "doi"), None),
} for uid in summ["uids"]]
df = pd.DataFrame(rows)
df.to_parquet("pubmed_summaries.parquet", index=False)
print(len(df), "PubMed summaries of", res["count"], "matches")Run by us on 2026-11-03 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 100 PubMed summaries of 106 matches
Limits
- No more than 3 requests per second without a key, counted across all E-utilities from one IP address.
- Run series of more than 100 requests at weekends or between 9 pm and 5 am Eastern Time on weekdays.
Quirks
- ESearch only returns IDs; fetch summaries or records in a second call (ESummary or EFetch).
- pubdate is free text such as 2026 Oct 15 or 2026 Spring; parse it with care.
Terms and attribution
- NLM asks to be acknowledged as the source; some PubMed abstracts may be under copyright held by publishers or authors.
- NCBI's Disclaimer and Copyright notice must be evident to users of a service built on the data.
Sources
- https://www.ncbi.nlm.nih.gov/home/about/policies/: “Make no more than 3 requests every 1 second.”
- https://www.ncbi.nlm.nih.gov/home/about/policies/: “NCBI's Disclaimer and Copyright notice must be evident to users of your service.”
- https://pubmed.ncbi.nlm.nih.gov/download/: “PubMed data are available via our FTP servers and via the E-utilities API.”
- https://ftp.ncbi.nlm.nih.gov/pubmed/baseline/README.txt: “NLM freely provides PubMed data. Please note some abstracts may be protected by copyright.”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer