PubMed is great, but it only gives you abstracts. What if you need the full text?
Europe PMC has 40M+ biomedical papers and 8M+ full-text articles available through a free API. No key required.
What Is Europe PMC?
Europe PMC is the European mirror of PubMed Central, but better:
- 40M+ articles (more than PubMed's 36M)
- 8M+ full-text papers (not just abstracts)
- Preprints from bioRxiv and medRxiv included
- No API key needed
- No rate limits for reasonable use
Quick Start
import requests
# Search for papers
response = requests.get("https://www.ebi.ac.uk/europepmc/webservices/rest/search", params={
"query": "CRISPR gene therapy clinical trials",
"resultType": "core",
"pageSize": 5,
"format": "json"
})
for paper in response.json()["resultList"]["result"]:
print(f"[{paper.get('pubYear', 'N/A')}] {paper['title']}")
print(f" Journal: {paper.get('journalTitle', 'N/A')}")
print(f" Cited by: {paper.get('citedByCount', 0)}")
print(f" Full text: {'Yes' if paper.get('isOpenAccess') == 'Y' else 'No'}")
print()
Get Full Text of a Paper
# Get full text XML for a PMC article
pmcid = "PMC7610813" # Example
resp = requests.get(f"https://www.ebi.ac.uk/europepmc/webservices/rest/{pmcid}/fullTextXML")
if resp.status_code == 200:
print(f"Full text length: {len(resp.text):,} characters")
# Parse with xml.etree or BeautifulSoup
Search by Author or Affiliation
# Papers by a specific author
response = requests.get("https://www.ebi.ac.uk/europepmc/webservices/rest/search", params={
"query": 'AUTH:"Jennifer Doudna" AND CRISPR',
"resultType": "core",
"pageSize": 5,
"format": "json"
})
for p in response.json()["resultList"]["result"]:
print(f"[{p.get('pubYear')}] {p['title'][:70]}")
print(f" Cited: {p.get('citedByCount', 0):,}")
Citation Network
# Get papers that cite a specific paper
pmid = "26544986" # Example PMID
resp = requests.get(f"https://www.ebi.ac.uk/europepmc/webservices/rest/MED/{pmid}/citations", params={
"page": 1,
"pageSize": 5,
"format": "json"
})
data = resp.json()
print(f"Total citations: {data.get('hitCount', 0)}")
for c in data.get("citationList", {}).get("citation", []):
print(f" [{c.get('pubYear')}] {c.get('title', 'N/A')[:60]}")
Europe PMC vs PubMed vs CORE
| Feature | Europe PMC | PubMed | CORE | OpenAlex |
|---|---|---|---|---|
| Papers | 40M+ | 36M+ | 260M+ | 250M+ |
| Full text | 8M+ | PMC only | 36M+ | Links |
| API key | No | No | Yes (free) | No |
| Preprints | Yes | Limited | Yes | Yes |
| Citations | Yes | No | No | Yes |
Use Cases
- Systematic reviews with full text
- Drug research monitoring
- Clinical trial tracking
- Citation network analysis
- Text mining on biomedical literature
The complete free research API stack: OpenAlex | CORE | Crossref | Unpaywall | Semantic Scholar
What biomedical APIs do you use? Let me know in the comments.
More tools: GitHub\n\n---\n\n## More Free Research APIs\n\nThis is part of my series on free APIs for researchers and data scientists:\n\n- OpenAlex API — 250M+ Academic Works\n- CORE API — 260M+ Scientific Papers\n- Crossref API — DOI Metadata for 150M+ Papers\n- Unpaywall API — Find Free Paper Versions\n- Europe PMC — 40M+ Biomedical Papers\n- World Bank API — GDP & Economic Data\n- ORCID API — 18M+ Researcher Profiles\n- DBLP API — 6M+ CS Publications\n- NASA APIs — 20+ Free Space Data APIs\n- FRED API — 800K+ US Economic Time Series\n- All 30+ Research APIs Mapped\n\n*Tools: Academic Research Toolkit on GitHub*
Top comments (0)