DEV Community

Alex Spinov
Alex Spinov

Posted on

Europe PMC Has a Free API — Search 40M+ Biomedical Papers With Full Text

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()
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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):,}")
Enter fullscreen mode Exit fullscreen mode

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]}")
Enter fullscreen mode Exit fullscreen mode

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

  1. Systematic reviews with full text
  2. Drug research monitoring
  3. Clinical trial tracking
  4. Citation network analysis
  5. 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)