# PubMed Scraper — Abstracts, Authors & MeSH Terms (`logiover/pubmed-scraper`) Actor

Scrape PubMed by keyword query or direct PMIDs. Extract title, abstract, authors, journal, DOI, MeSH terms, keywords, and publication date via NCBI E-utilities. No API key required.

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

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 — Abstracts, Authors, MeSH Terms & DOI Export

Extract biomedical literature from PubMed at scale via NCBI E-utilities — no API key, no login, thousands of articles per run.

---

### What does PubMed Scraper do?

PubMed Scraper connects to the NCBI E-utilities public API (`eutils.ncbi.nlm.nih.gov`) to search and retrieve full bibliographic records from the world's largest biomedical literature database, which indexes over 35 million citations. The scraper uses a two-step pipeline: first, `esearch.fcgi` converts your keyword query into a paginated list of PubMed IDs (PMIDs), then `efetch.fcgi` retrieves full XML records for those PMIDs in batches of up to 100.

All parsing happens server-side in the actor — you get clean, structured JSON rows with title, abstract, authors, journal, publication date, DOI, PMC ID, author keywords, MeSH medical subject headings, and article type. The scraper respects NCBI's 3 request/second rate limit for keyless access, uses built-in retry logic for transient errors, and can paginate through thousands of results in a single run. It also supports direct PMID lookup for known articles and date-range filtering for targeted literature reviews.

---

### Who is it for?

- **Academic researchers** who need large-scale literature data for meta-analyses, systematic reviews, or bibliometric studies.
- **Biotech & pharma teams** monitoring the competitive research landscape for specific drug targets, diseases, or mechanisms.
- **Data scientists & ML engineers** building NLP models, topic classifiers, or citation graphs on biomedical text.
- **Healthcare analysts** extracting clinical trial publications, systematic reviews, or guidelines on specific conditions.
- **Librarians & knowledge managers** compiling literature databases for institutional repositories or continuing education programs.

---

### Use cases

- **Systematic literature review**: Pull 500–5,000 abstracts on "immunotherapy lung cancer 2022–2024" for PRISMA-compliant review pipelines.
- **Competitive intelligence**: Monitor all publications from a competitor research group or institution by author or affiliation query.
- **NLP training data**: Download thousands of titled, abstracted, MeSH-tagged articles for training biomedical language models.
- **Drug target surveillance**: Query "(KRAS OR EGFR) AND inhibitor[TI]" to track emerging research on your target compound.
- **Grant writing support**: Quickly extract the 50 most recent high-impact papers for a specific MeSH heading to inform background sections.

---

### Why use PubMed Scraper?

- **Completely keyless** — uses the NCBI public E-utilities API with no registration, no API key, and no login required.
- **Rich data** — extracts 12 fields per article: PMID, title, abstract, authors, journal, DOI, PMC ID, date, keywords, MeSH terms, article type, and URL.
- **Bulk results** — one run can retrieve thousands of articles through automatic pagination; set `maxResults` up to 10,000.
- **Full PubMed syntax** — supports advanced queries like `(cancer[MeSH]) AND (2023[PDAT]) AND Clinical Trial[PT]` exactly as the PubMed search engine.
- **Export to CSV, JSON, Excel** — Apify dataset viewer lets you download in any format with one click.
- **Pay per result** — you only pay for Apify compute time proportional to articles retrieved; lightweight enough to run thousands of searches cheaply.

---

### What data can you extract?

The actor outputs one structured row per article with the following fields:

| Field | Type | Description |
|-------|------|-------------|
| `pmid` | string | PubMed unique identifier |
| `title` | string | Full article title |
| `abstract` | string | Full abstract text (may include structured sections) |
| `authors` | string | Semicolon-separated author names (LastName FirstName format) |
| `journal` | string | Full journal title |
| `pubDate` | string | Publication date (YYYY-MM or YYYY-MM-DD) |
| `doi` | string | Digital Object Identifier |
| `pmcId` | string | PubMed Central ID (if open access) |
| `keywords` | string | Author-provided keywords, semicolon-separated |
| `meshTerms` | string | MeSH medical subject headings, semicolon-separated |
| `articleType` | string | Publication type (Journal Article, Review, Clinical Trial, etc.) |
| `url` | string | Direct URL to article on PubMed |

#### Example output record

```json
{
  "pmid": "38912345",
  "title": "CRISPR-Cas9-mediated gene editing of BCL11A enhancer reduces HbS and increases fetal hemoglobin in sickle cell disease",
  "abstract": "Background: Sickle cell disease (SCD) affects millions worldwide. METHODS: We designed sgRNAs targeting the BCL11A erythroid enhancer and delivered Cas9 via lentiviral vector to CD34+ hematopoietic stem cells. RESULTS: Editing efficiency exceeded 90% in bulk populations. HbF increased 3.2-fold at 12 weeks post-transplant. CONCLUSIONS: CRISPR-mediated BCL11A disruption is a viable therapeutic strategy for SCD.",
  "authors": "Zhang L; Patel R; Okonkwo C; Kim J; Weatherall D",
  "journal": "Blood",
  "pubDate": "2024-03-15",
  "doi": "10.1182/blood.2024012345",
  "pmcId": "PMC10987654",
  "keywords": "CRISPR; sickle cell disease; fetal hemoglobin; BCL11A; gene therapy",
  "meshTerms": "Anemia, Sickle Cell; CRISPR-Cas Systems; Fetal Hemoglobin; Gene Editing; Hematopoietic Stem Cells",
  "articleType": "Journal Article; Clinical Trial",
  "url": "https://pubmed.ncbi.nlm.nih.gov/38912345/"
}
````

***

### How to use

#### Option A — Search by keyword query

Enter any PubMed search query and a result limit. The actor runs `esearch` to find matching PMIDs, then fetches full records.

**Example input (JSON)**:

```json
{
  "query": "crispr gene editing cancer",
  "maxResults": 500,
  "dateFrom": "2022/01/01",
  "dateTo": "2024/12/31",
  "fetchAbstracts": true
}
```

**Steps**:

1. Go to the actor's **Input** tab.
2. Set **Search Query** to your PubMed search term (supports full PubMed query syntax).
3. Set **Max Results** (1–10,000).
4. Optionally set **Date From** and **Date To** (format `YYYY/MM/DD`).
5. Click **Start**.

#### Option B — Fetch specific PMIDs directly

If you already have a list of PMIDs (e.g. from a saved PubMed search or DOI resolver), pass them directly. This skips `esearch` entirely.

**Example input (JSON)**:

```json
{
  "pmids": ["38912345", "38876543", "37654321", "36543210"],
  "fetchAbstracts": true
}
```

**Steps**:

1. Open the **Input** tab.
2. In the **PubMed IDs (PMIDs)** field, enter your PMID array as JSON.
3. Click **Start**.

***

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | — | PubMed search query. Supports full syntax: field tags \[MeSH], \[Author], \[TI], Boolean operators, etc. |
| `pmids` | array | — | Array of PMID strings for direct lookup. Overrides `query` when provided. |
| `maxResults` | integer | 200 | Maximum articles to return. Paginated automatically. Range: 1–10,000. |
| `dateFrom` | string | — | Filter: published on or after this date. Format `YYYY/MM/DD` or `YYYY`. |
| `dateTo` | string | — | Filter: published on or before this date. Format `YYYY/MM/DD` or `YYYY`. |
| `fetchAbstracts` | boolean | true | Fetch full abstracts via `efetch`. Set false for metadata-only (faster, no abstract). |
| `proxyConfiguration` | object | Datacenter | Apify proxy settings. Datacenter proxy is sufficient for NCBI. |

**Full input JSON**:

```json
{
  "query": "mRNA vaccine immunogenicity",
  "maxResults": 1000,
  "dateFrom": "2021/01/01",
  "dateTo": "2024/06/30",
  "fetchAbstracts": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["DATACENTER"]
  }
}
```

***

### Output example

```json
{
  "pmid": "39154321",
  "title": "Comparative immunogenicity of BNT162b2 and mRNA-1273 after booster vaccination in healthcare workers",
  "abstract": "We compared neutralizing antibody titers and T-cell responses in 312 healthcare workers who received a third dose of either BNT162b2 or mRNA-1273. Both vaccines produced robust humoral and cellular responses, with mRNA-1273 booster recipients showing 1.4-fold higher geometric mean titers at 28 days. No significant difference was observed in T-cell response magnitude.",
  "authors": "Mendez A; Huang Y; Park S; Osei-Twum C; Hakim F",
  "journal": "Nature Medicine",
  "pubDate": "2024-01-09",
  "doi": "10.1038/s41591-023-02789-1",
  "pmcId": "PMC10876543",
  "keywords": "mRNA vaccine; booster; immunogenicity; COVID-19; healthcare workers",
  "meshTerms": "COVID-19; COVID-19 Vaccines; Antibodies, Neutralizing; Immunogenicity, Vaccine; Vaccination",
  "articleType": "Journal Article; Comparative Study",
  "url": "https://pubmed.ncbi.nlm.nih.gov/39154321/"
}
```

***

### Tips for best results

- **Use PubMed query syntax**: Add field tags for precision — `KRAS[Gene Name] AND inhibitor[TI] AND 2023[PDAT]` retrieves papers mentioning KRAS in gene name and inhibitor in title published in 2023.
- **Use date filters for recency**: Set `dateFrom`/`dateTo` to narrow large result sets. PubMed uses `YYYY/MM/DD` format.
- **Boolean operators work**: Combine terms with AND, OR, NOT in uppercase — `(diabetes OR obesity) AND metformin AND clinical trial[PT]`.
- **MeSH terms improve recall**: Querying `cancer[MeSH]` captures papers indexed under any cancer MeSH subheading (broader than a keyword search).
- **Start with 200, scale up**: Test your query with 200 results first to validate relevance before running 5,000.
- **Use `pmids` for known lists**: If you exported PMIDs from PubMed's website, paste them directly — avoids re-running the search.
- **Abstract-free mode for bulk**: Set `fetchAbstracts: false` for quick metadata sweeps when you only need title/authors/journal.
- **Parallel runs for large reviews**: Run multiple actors concurrently with different `dateFrom`/`dateTo` ranges for maximum throughput.
- **Export to Excel**: Download the dataset as XLSX from Apify's dataset viewer for seamless spreadsheet analysis.
- **Schedule monthly**: Use Apify's Scheduler to monitor new publications on a topic each month automatically.

***

### Integrations

Connect PubMed Scraper to your existing workflows:

- **Google Sheets**: Use the Apify → Google Sheets integration to automatically append new article data to a spreadsheet. Ideal for ongoing literature monitoring.
- **Slack**: Trigger a Slack notification when new papers on your topic are published — use Apify webhooks + Slack Incoming Webhooks.
- **Zapier**: Connect via Zapier's Apify integration. When a run finishes, push results to Airtable, Notion, or any Zapier-connected app.
- **Make (Integromat)**: Use Make's Apify module to feed PubMed results into citation managers, databases, or email summaries.
- **Webhooks**: Configure an Apify webhook to `POST` to your endpoint whenever a run succeeds — pipe data into your research pipeline.
- **Schedule**: Use Apify's built-in Scheduler to run weekly/monthly literature sweeps on any saved query. Never miss a new paper.

***

### API usage

You can trigger runs and retrieve data programmatically via the Apify API.

**cURL**:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/logiover~pubmed-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "crispr gene editing", "maxResults": 200}'
```

**Node.js (Apify client)**:

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/pubmed-scraper').call({
  query: 'mRNA vaccine immunogenicity',
  maxResults: 500,
  dateFrom: '2022/01/01',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Retrieved ${items.length} articles`);
items.slice(0, 3).forEach(a => console.log(a.title));
```

**Python**:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("logiover/pubmed-scraper").call(run_input={
    "query": "BRCA1 breast cancer mutation",
    "maxResults": 1000,
    "fetchAbstracts": True,
})

dataset = client.dataset(run["defaultDatasetId"])
articles = list(dataset.iterate_items())
print(f"Retrieved {len(articles)} articles")
for a in articles[:3]:
    print(a["pmid"], a["title"][:80])
```

***

### Use with AI agents (MCP)

PubMed Scraper is available as an MCP-compatible tool, making it usable directly from Claude, Cursor, or any MCP-enabled AI agent. Connect via the Apify MCP server and prompt your agent: *"Search PubMed for recent papers on GLP-1 receptor agonists and weight loss published after 2022, get 300 results, and summarize the key findings."* The agent will invoke the actor, retrieve the structured dataset, and synthesize the literature for you — no manual searching or copy-pasting.

***

### FAQ

#### Does this actor require a PubMed API key?

No. It uses the NCBI E-utilities public endpoint, which is freely accessible without registration. For more than 3 requests/second (high-volume use), NCBI recommends registering for a free API key — but the actor is designed to stay within the keyless rate limit automatically.

#### What is the maximum number of results per run?

Up to 10,000 results per run via the `maxResults` parameter. For larger needs, run multiple actors with different date ranges or queries.

#### Does it cover all PubMed articles?

It searches the same index as PubMed.gov — over 35 million biomedical citations from MEDLINE and other life science journals. Coverage and indexing depend on NCBI's policies.

#### Why are some abstract fields empty?

Not all PubMed articles have abstracts indexed. Conference abstracts, editorials, letters, and older articles often lack full text. The `abstract` field will be an empty string in those cases.

#### Why are MeSH terms missing for some articles?

MeSH indexing is done manually by NLM staff and can lag 6–12 months for newly published articles. Recent articles may have no MeSH terms yet.

#### Can I search by author, journal, or institution?

Yes — use PubMed field tags: `Smith J[Author]`, `Nature[Journal]`, `Harvard[Affiliation]`. Full query syntax is supported.

#### How long does a run take?

For 200 articles: ~1–2 minutes. For 1,000 articles: ~5–8 minutes. For 5,000 articles: ~20–30 minutes. Speed is limited by NCBI's rate limit.

#### Can I filter by article type (e.g. only clinical trials)?

Yes — add `Clinical Trial[PT]`, `Review[PT]`, or `Meta-Analysis[PT]` to your query. These are PubMed Publication Type tags.

#### How do I export results to Excel?

Go to the run's dataset in Apify Console, click **Export**, and choose XLSX. Or use the Apify API with `format=xlsx` parameter.

#### How often should I re-run for monitoring?

Monthly for fast-moving topics. Use Apify Scheduler to automate this. Combine with Slack/email webhooks for alerts on new papers.

#### Is the DOI always present?

DOI is populated when NCBI has it indexed (most articles from 2000+). Older articles and some non-English journals may lack DOIs.

#### What does PMC ID mean?

PMC ID (PubMed Central ID) is present when a free full-text version is available at PubMedCentral.gov. Use it to construct links like `https://www.ncbi.nlm.nih.gov/pmc/articles/{pmcId}/`.

***

### Is it legal?

This actor uses the NCBI E-utilities API, a publicly documented service provided by the National Library of Medicine for programmatic access to PubMed data. NCBI explicitly designed E-utilities for automated querying. Bibliographic metadata (titles, authors, abstracts) is factual data not subject to copyright in most jurisdictions. The actor operates within NCBI's rate limits and does not scrape the PubMed website HTML. Use responsibly and in accordance with NCBI's [API terms](https://www.ncbi.nlm.nih.gov/home/about/policies/) and your institution's data policies.

***

### Related scrapers

- [OpenAlex Academic Papers Scraper](https://apify.com/logiover/openalex-academic-papers-scraper) — 250M+ open access academic papers across all disciplines.
- [Semantic Scholar Research Scraper](https://apify.com/logiover/semantic-scholar-research-scraper) — AI-focused academic search with citation counts and influence scores.
- [arXiv Paper Scraper](https://apify.com/logiover/arxiv-paper-scraper) — Preprints in physics, math, CS, and biology before peer review.
- [ClinicalTrials.gov Scraper](https://apify.com/logiover/clinicaltrials-gov-scraper) — Extract clinical trial registrations, phases, sponsors, and results.

# Actor input Schema

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

PubMed search query. Supports full PubMed syntax (e.g. 'crispr gene editing', 'cancer\[MeSH] AND 2023\[PDAT]', 'Smith J\[Author]'). Leave empty to browse the most recent papers.

## `pmids` (type: `array`):

List of specific PubMed IDs to fetch directly. Overrides the query field if provided.

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

Maximum number of articles to return. Paginated automatically. Default 200, max 10000.

## `articleType` (type: `string`):

Restrict results to a PubMed publication type. Leave as 'Any' for no restriction.

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

How to sort search results.

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

Filter articles published on or after this date. Format: YYYY/MM/DD or YYYY.

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

Filter articles published on or before this date. Format: YYYY/MM/DD or YYYY.

## `fetchAbstracts` (type: `boolean`):

Fetch full abstracts via efetch (recommended). If false, only summary metadata is retrieved (faster but no abstracts).

## `proxyConfiguration` (type: `object`):

Proxy settings. Automatic Apify Proxy (AUTO) is recommended for NCBI E-utilities; a direct connection is used as a final fallback.

## Actor input object example

```json
{
  "query": "crispr gene editing",
  "pmids": [
    "39001234",
    "38987654"
  ],
  "maxResults": 200,
  "articleType": "",
  "sort": "relevance",
  "dateFrom": "2020/01/01",
  "dateTo": "2024/12/31",
  "fetchAbstracts": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("logiover/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 '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/pubmed-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PubMed Scraper — Abstracts, Authors & MeSH Terms",
        "description": "Scrape PubMed by keyword query or direct PMIDs. Extract title, abstract, authors, journal, DOI, MeSH terms, keywords, and publication date via NCBI E-utilities. No API key required.",
        "version": "1.0",
        "x-build-id": "iumGw8m92ebhboXYw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~pubmed-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-pubmed-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~pubmed-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-pubmed-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~pubmed-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-pubmed-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "PubMed search query. Supports full PubMed syntax (e.g. 'crispr gene editing', 'cancer[MeSH] AND 2023[PDAT]', 'Smith J[Author]'). Leave empty to browse the most recent papers."
                    },
                    "pmids": {
                        "title": "PubMed IDs (PMIDs)",
                        "type": "array",
                        "description": "List of specific PubMed IDs to fetch directly. Overrides the query field if provided."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of articles to return. Paginated automatically. Default 200, max 10000.",
                        "default": 200
                    },
                    "articleType": {
                        "title": "Article Type",
                        "enum": [
                            "",
                            "clinical-trial",
                            "randomized-controlled-trial",
                            "review",
                            "systematic-review",
                            "meta-analysis",
                            "case-reports",
                            "comparative-study",
                            "observational-study",
                            "journal-article",
                            "letter",
                            "editorial",
                            "guideline"
                        ],
                        "type": "string",
                        "description": "Restrict results to a PubMed publication type. Leave as 'Any' for no restriction.",
                        "default": ""
                    },
                    "sort": {
                        "title": "Sort Order",
                        "enum": [
                            "relevance",
                            "date",
                            "pubdate",
                            "author",
                            "journal"
                        ],
                        "type": "string",
                        "description": "How to sort search results.",
                        "default": "relevance"
                    },
                    "dateFrom": {
                        "title": "Date From (YYYY/MM/DD)",
                        "type": "string",
                        "description": "Filter articles published on or after this date. Format: YYYY/MM/DD or YYYY."
                    },
                    "dateTo": {
                        "title": "Date To (YYYY/MM/DD)",
                        "type": "string",
                        "description": "Filter articles published on or before this date. Format: YYYY/MM/DD or YYYY."
                    },
                    "fetchAbstracts": {
                        "title": "Fetch Full Abstracts",
                        "type": "boolean",
                        "description": "Fetch full abstracts via efetch (recommended). If false, only summary metadata is retrieved (faster but no abstracts).",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Automatic Apify Proxy (AUTO) is recommended for NCBI E-utilities; a direct connection is used as a final fallback.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
