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