# PubMed Scraper — Bulk Biomedical Papers, Abstracts & Metadata (`hipersoft/pubmed-scraper`) Actor

Bulk-scrape PubMed's 35M+ biomedical articles: title, abstract, authors, journal, publication date, DOI, PMC ID, MeSH terms and keywords. Full PubMed query syntax, date filters, thousands of results per run. Powered by NCBI E-utilities. No login, no API key.

- **URL**: https://apify.com/hipersoft/pubmed-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0004 / article scraped

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## PubMed Scraper — Bulk Biomedical Papers, Abstracts & Metadata

Bulk-scrape biomedical literature from **PubMed** — the U.S. National Library of Medicine's index of **35M+ articles**. Get titles, **full abstracts**, authors, journals, publication dates, DOIs, PMC IDs, MeSH terms and keywords for every matching paper. Full PubMed query syntax, date filters, and thousands of results per run. Powered by the official NCBI E-utilities API. No account, no API key.

![PubMed Scraper input — query, date range and result limit in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/pubmed-scraper-input.png)

### Features

- 🔎 **Full PubMed query syntax** — terms, fields (`[Title]`, `[Author]`, `[MeSH]`), booleans and date ranges
- 📄 **Full abstracts** — complete abstract text for every article that has one
- 👥 **Authors** — full author lists with a count per paper
- 🏷️ **Rich metadata** — journal, publication date, DOI, PMC ID, MeSH terms, keywords, article types
- 📅 **Date filters** — restrict by publication date
- 📊 **Bulk & history-paginated** — one query streams through tens of thousands of results
- ⚡ **Official & reliable** — built on NCBI E-utilities

### What you get

![PubMed Scraper output example — biomedical articles with abstracts, authors and MeSH terms as structured JSON](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/pubmed-scraper-output.png?v=1)

One record per article:

```json
{
  "pmid": "38512345",
  "title": "…",
  "journal": "Nature Medicine",
  "pubYear": 2024,
  "pubDate": "2024 Mar 15",
  "authors": ["Jane A Smith", "…"],
  "authorCount": 8,
  "doi": "10.1038/s41591-024-00000-0",
  "pmcId": "PMC10987654",
  "articleTypes": ["Journal Article"],
  "meshTerms": ["CRISPR-Cas Systems", "Gene Editing"],
  "keywords": ["…"],
  "url": "https://pubmed.ncbi.nlm.nih.gov/38512345/",
  "abstract": "…"
}
```

#### Output schema

| Field | Type | Description |
|-------|------|-------------|
| `pmid` | string | PubMed ID of the article. |
| `title` | string | Article title. |
| `journal` | string | Journal the article was published in. |
| `pubYear` | integer | Publication year. |
| `pubDate` | string | Full publication date as printed by PubMed. |
| `authors` | array | List of author names. |
| `authorCount` | integer | Number of authors on the article. |
| `doi` | string | Digital Object Identifier of the article. |
| `pmcId` | string | PubMed Central ID, when the full text is in PMC. |
| `articleTypes` | array | Publication types (e.g. `Journal Article`, `Review`). |
| `meshTerms` | array | Assigned MeSH subject headings. |
| `keywords` | array | Author-supplied keywords. |
| `url` | string (URL) | Link to the article on PubMed. |
| `abstract` | string | Full abstract text (when `includeAbstract` is on). |

### Input

```json
{
  "query": "crispr gene editing",
  "dateFrom": "2020",
  "dateTo": "2025",
  "includeAbstract": true,
  "maxResults": 5000
}
```

| Field | Description |
|-------|-------------|
| `query` | Any PubMed search (e.g. `asthma[MeSH] AND treatment`, `covid-19 AND vaccine[Title]`). |
| `dateFrom` / `dateTo` | Publication date range (YYYY/MM/DD or YYYY). |
| `includeAbstract` | Include the full abstract text. |
| `maxResults` | Max articles to return (a broad query can match tens of thousands). |
| `apiKey` | Optional NCBI key to raise the request rate for very large runs. |

### Use cases

- **Systematic & literature reviews** — pull every paper on a topic, with abstracts, in one run
- **Research monitoring** — track new publications in your field by date
- **Biomedical datasets** — build corpora of titles + abstracts for analysis or AI
- **Citation & metadata** — collect DOIs, PMC IDs and MeSH terms at scale

### Pricing

Pay-per-event: a small amount per article scraped. See the **Pricing** tab for current rates.

### FAQ

**Do I need an API key?**
No. This Actor runs on the official NCBI E-utilities API with no account required. You can optionally add an NCBI `apiKey` to raise the request rate for very large runs, but it's not needed for typical use.

**How many articles can I scrape per run?**
Set `maxResults` as high as you need — a single query streams through PubMed's history server, so one broad query can return tens of thousands of articles in a run.

**Is scraping PubMed legal?**
Yes. This Actor uses [PubMed](https://pubmed.ncbi.nlm.nih.gov)'s official NCBI E-utilities API and follows its usage guidance (paced requests, an identified client). It returns openly available metadata as-is.

**What format is the output?**
Structured JSON — one record per article — exportable as JSON, CSV or Excel. Each record includes PMID, title, full abstract, authors, journal, publication date, DOI, PMC ID, MeSH terms and keywords.

**Can I filter by date or use PubMed field syntax?**
Yes. The `query` field accepts full PubMed syntax including fields like `[Title]`, `[Author]` and `[MeSH]` plus booleans, and `dateFrom`/`dateTo` restrict results to a publication date range.

**Can I integrate this with other tools?**
The PubMed Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

### Related Actors

Building a biomedical literature dataset? These other hipersoft scrapers pair well with this one:

- [Europe PMC Scraper](https://apify.com/hipersoft/europepmc-scraper) — life-science papers with full-text links across PubMed, PMC and preprints
- [ClinicalTrials.gov Scraper](https://apify.com/hipersoft/clinicaltrials-scraper) — bulk clinical trial records, sponsors and locations
- [OpenAlex Scraper](https://apify.com/hipersoft/openalex-scraper) — 250M+ scholarly works with citations and abstracts
- [Crossref Scraper](https://apify.com/hipersoft/crossref-scraper) — DOIs, citation counts and metadata from 150M+ works

### Notes

Uses the official NCBI E-utilities API and follows its usage guidance (paced requests, identified client). Returns PubMed's openly-available metadata as-is. PubMed is a service of the U.S. National Library of Medicine; this is an independent tool and is not affiliated with or endorsed by the NLM or NCBI.

# Actor input Schema

## `query` (type: `string`):

Any PubMed search query. Supports full syntax: terms, fields (\[Title], \[Author], \[MeSH]), booleans, and date ranges. e.g. "crispr gene editing", "asthma\[MeSH] AND treatment", "covid-19 AND vaccine\[Title]".

## `dateFrom` (type: `string`):

Earliest publication date (YYYY/MM/DD or YYYY). Optional.

## `dateTo` (type: `string`):

Latest publication date (YYYY/MM/DD or YYYY). Optional.

## `includeAbstract` (type: `boolean`):

Include the full abstract text for each article.

## `maxResults` (type: `integer`):

Maximum number of articles to return (a broad query can match tens of thousands).

## `apiKey` (type: `string`):

Optional NCBI API key to raise the request rate (3→10/sec) for faster large runs. Not required.

## Actor input object example

```json
{
  "query": "crispr gene editing",
  "includeAbstract": true,
  "maxResults": 1000
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "crispr gene editing"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/pubmed-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "crispr gene editing" }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/pubmed-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "crispr gene editing"
}' |
apify call hipersoft/pubmed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hipersoft/pubmed-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6zYExdyvmAHApDkPu/builds/qBkJu2F4bqE4iOdmA/openapi.json
