# PubMed Search Scraper - Articles, Abstracts and MeSH (`arqlabs/pubmed-search-official-api`) Actor

Search PubMed and export articles with title, full abstract, authors, journal, year, DOI, PMID, PMCID and MeSH terms as JSON or CSV. Official NCBI E-utilities API, ready for literature reviews and AI agents. Pay per article.

- **URL**: https://apify.com/arqlabs/pubmed-search-official-api.md
- **Developed by:** [Muhammad Ariq Fauzan](https://apify.com/arqlabs) (community)
- **Categories:** AI, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 87.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## PubMed Search Scraper - Articles, Abstracts and MeSH

Use it as a PubMed search scraper: export articles, abstracts and MeSH terms for literature reviews, systematic-review screening and AI agents.

PubMed Scraper searches PubMed with the same query syntax as pubmed.ncbi.nlm.nih.gov and exports each article with its abstract, authors, journal, publication year, DOI, PMID, PMCID and MeSH terms. Use it for literature reviews, systematic review screening, biomedical research datasets and RAG over medical literature.

### Why this Actor

- Official source. It uses NCBI's E-utilities API, with no HTML scraping and no blocking.
- Respects NCBI limits. It sends up to 3 requests per second, or 10 if you add your own free NCBI API key.
- Rich fields. It includes structured abstracts, MeSH headings, DOI and PMC IDs.
- Use cases: literature reviews, systematic-review screening, pharma/biotech monitoring, RAG over medical literature, and bibliometrics.

### Example run

Real input and the first output record from run jQ5fRdSWk0cVCnrEZ on 2026-10-30. Long text fields are shortened here with "...".

Input:

```json
{
  "query": "crispr[tiab] AND 2025[dp]",
  "maxResults": 50,
  "sort": "relevance"
}
```

Output (first record):

```json
{
  "pmid": 40411467,
  "title": "CRISPR Digital Sensing: From Micronano-Collaborative Chip to Biomolecular Detection.",
  "abstract": "The Clustered Regularly Interspaced Short Palindromic Repeats (CRISPR) sensing technology proved to be valuable during the COVID-19 pandemic through its sensitivity, specificity, robustness, and versatility. However, issues such as overreli...",
  "authors": [
    "Xinyi Wang",
    "Longjie Zhong",
    "Wenbin Zhang",
    "Pengde Wu",
    "Minghao Wang",
    "Dujuan Li",
    "..."
  ],
  "journal": "ACS nano",
  "year": 2025,
  "doi": "10.1021/acsnano.5c03474",
  "pmcid": null,
  "meshTerms": [
    "Humans",
    "COVID-19",
    "CRISPR-Cas Systems",
    "SARS-CoV-2",
    "Clustered Regularly Interspaced Short Palindromic Repeats",
    "Biosensing Techniques",
    "..."
  ],
  "url": "https://pubmed.ncbi.nlm.nih.gov/40411467/"
}
```

### Input

| Field | Description |
|---|---|
| `query` | PubMed query, e.g. `crispr[tiab] AND 2025[dp]` |
| `maxResults` | 1–10,000 |
| `sort` | `relevance` or `pub_date` |
| `ncbiApiKey` | Optional, your own NCBI key (stored as secret) |
| `contactEmail` | Optional, sent to NCBI as recommended |

### Output (one item per article)

```json
{"pmid":"41468306","title":"...","abstract":"BACKGROUND: ...","authors":["Yiwen Wang"],"journal":"Epigenetics","year":2026,"doi":"10.1080/...","pmcid":"PMC12758201","meshTerms":["Humans"],"url":"https://pubmed.ncbi.nlm.nih.gov/41468306/"}
```

### Notes

PubMed data comes from the U.S. National Library of Medicine. Abstracts may be subject to publisher copyright; check NLM's terms for your use. This Actor is not affiliated with NCBI/NLM.

### Pricing

Pay-per-event: a small start fee plus a fee per article returned.

# Actor input Schema

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

Same syntax as pubmed.ncbi.nlm.nih.gov, e.g. crispr\[tiab] AND 2024\[dp]

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

Max results

## `sort` (type: `string`):

Sort

## `ncbiApiKey` (type: `string`):

Your NCBI API key (optional)

## `contactEmail` (type: `string`):

Contact email for NCBI (optional, recommended by NCBI)

## Actor input object example

```json
{
  "query": "crispr[tiab] AND 2025[dp]",
  "maxResults": 10,
  "sort": "relevance"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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[tiab] AND 2025[dp]",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("arqlabs/pubmed-search-official-api").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[tiab] AND 2025[dp]",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("arqlabs/pubmed-search-official-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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[tiab] AND 2025[dp]",
  "maxResults": 10
}' |
apify call arqlabs/pubmed-search-official-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arqlabs/pubmed-search-official-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PdwqWmtvykRVAgyX1/builds/HGofL7eCyUOqmkgMq/openapi.json
