# bioRxiv & medRxiv Preprints Scraper (Biology, Health) (`scrapers_lat/biorxiv-medrxiv-preprints-scraper`) Actor

Scrape bioRxiv and medRxiv preprints by date, category or keyword: title, authors, corresponding institution, abstract, DOI, license, published-journal status and AI summary. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/biorxiv-medrxiv-preprints-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.56 / 1,000 preprint records

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

[![bioRxiv & medRxiv Preprints Scraper (Biology, Health)](https://scrapers.lat/banners/biorxiv-medrxiv-preprints-scraper.png)](https://console.apify.com/actors/nlnXqfyH9mcnpAXOV/input)

## bioRxiv & medRxiv Preprints Scraper (Biology, Health)

Here is one real result, with every field the actor returns:

```json
{
  "server": "biorxiv",
  "doi": "10.1101/2023.03.29.534823",
  "title": "Hydrogel Capsule-Based Digital Quantitative Polymerase Chain Reaction",
  "authors": "Tan, Z. L.; Yasuura, M.; Horiguchi, Y.; Ashiba, H.; Fukuda, T.",
  "authorList": ["Tan, Z. L.", "Yasuura, M.", "Horiguchi, Y.", "Ashiba, H.", "Fukuda, T."],
  "authorCount": 5,
  "correspondingAuthor": "Takashi Fukuda",
  "correspondingInstitution": "Sensing System Research Center, National Institute of Advanced Industrial Science and Technology, Central 5, 1-1-1 Higashi, Tsukuba, Ibaraki, 305-8565, Japan",
  "postedDate": "2023-04-27",
  "version": 2,
  "type": "new results",
  "category": "molecular biology",
  "license": "cc_no",
  "abstract": "Droplet digital PCR (ddPCR) is accurate in nucleic acid quantification owing to its linearity and high sensitivity ...",
  "preprintUrl": "https://www.biorxiv.org/content/10.1101/2023.03.29.534823v2",
  "isPublished": true,
  "publishedDoi": "10.1007/s00604-023-05827-7",
  "publishedJournal": "Microchimica Acta",
  "publishedJournalDoi": "10.1007/s00604-023-05827-7",
  "publishedDate": "2023-06-01",
  "aiPlainSummary": "This research introduces a new method for digital PCR that uses hydrogel capsules instead of droplets, making the process more stable and sensitive.",
  "aiSignificance": "This method enhances the accessibility and effectiveness of digital PCR, especially in resource-limited settings.",
  "aiField": "molecular biology",
  "aiMethods": "gel capsule-based digital PCR (gc-dPCR)",
  "source": "bioRxiv / medRxiv preprint servers",
  "observedAt": "2026-08-20T22:30:41.983Z",
  "error": null
}
```

The most complete bioRxiv and medRxiv preprint scraper available. It returns every field the preprint servers expose for each paper (title, full author list, corresponding author and institution, abstract, subject category, license, version and DOI), plus a joined published-journal status so you know whether and where each preprint later appeared in a peer-reviewed journal, an optional AI plain-language read, and five filters to target exactly the preprints you need.

**📥 [Input](https://apify.com/scrapers_lat/biorxiv-medrxiv-preprints-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/biorxiv-medrxiv-preprints-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/biorxiv-medrxiv-preprints-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/biorxiv-medrxiv-preprints-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-bioRxiv%20%7C%20medRxiv-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor pulls preprints from bioRxiv (biology) and medRxiv (health sciences). Give it a posted-date range on one or both servers, or a single DOI, and it returns one clean record per preprint. Each preprint is deduplicated to its latest version, the abstract is cleaned, and the author string is also split into an array with an author count. Optional category and keyword filters are applied so you keep only the papers you care about.

Every record carries the published-journal status: `isPublished` and `publishedDoi` tell you whether the preprint was later published in a peer-reviewed journal and give the journal article DOI. Turn on the published-status add-on to also resolve the journal name and publication date. Turn on the AI add-on for a plain-English summary, a significance line, the field, and the methods used.

Coverage is bioRxiv and medRxiv only. For already-published, indexed literature see the related scrapers below (PubMed, Crossref, OpenAlex, Semantic Scholar).

### Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 8 neuroscience preprints posted on bioRxiv in the first week of 2025.

```json
{
  "server": "biorxiv",
  "dateFrom": "2025-01-01",
  "dateTo": "2025-01-07",
  "category": "neuroscience",
  "maxResults": 8
}
```

Set `server` to `medrxiv` for health-sciences preprints, or `both` to scan both servers in one run. Leave `category` and `searchTerm` empty to get every preprint in the date range. To look up a single paper, pass its `doi` and the date range is ignored.

### Input reference

| Field | Type | Required | Description |
|---|---|---|---|
| `server` | enum | no | Which preprint server to scrape: `biorxiv` (biology), `medrxiv` (health sciences), or `both`. Default `biorxiv`. |
| `dateFrom` | string | no | Start of the posted-date range (inclusive), `YYYY-MM-DD`. Required unless a `doi` is set. Example `2025-01-01`. |
| `dateTo` | string | no | End of the posted-date range (inclusive), `YYYY-MM-DD`. Required unless a `doi` is set. Example `2025-01-07`. |
| `category` | string | no | Keep only preprints whose subject category contains this text. Case-insensitive substring match. Example `neuroscience`, `genomics`, `infectious diseases`. |
| `searchTerm` | string | no | Keep only preprints whose title or abstract contains this text. Case-insensitive substring match. |
| `doi` | string | no | Look up one preprint by DOI, for example `10.1101/2023.03.29.534823`. When set, the date range and filters are ignored and one record (latest version) is returned. |
| `withPublishedStatus` | boolean | no | Add-on. Resolve the journal name, published DOI, and publication date for preprints later published in a journal. Off by default, paid plans only. Billed per preprint only when a real mapping is found. |
| `withAiSummary` | boolean | no | Add-on. Add an AI plain-language summary, significance, field, and methods per preprint. Off by default, paid plans only. Billed per preprint only when a usable summary is produced. |
| `maxResults` | integer | no | Maximum preprints to return in one run. Free Apify plans are capped at 10. Default `10`. |

### Output reference

One dataset item per preprint. Types are `string`, `integer`, `boolean`, `string[]`, or `null` when a value is absent.

| Field | Type | Description |
|---|---|---|
| `server` | string | Preprint server: `biorxiv` or `medrxiv`. |
| `doi` | string | Preprint DOI. |
| `title` | string | Preprint title. |
| `authors` | string | Full author list as a semicolon-separated string. |
| `authorList` | string\[] | Authors split into an array. |
| `authorCount` | integer | Number of authors. |
| `correspondingAuthor` | string | Corresponding author name. |
| `correspondingInstitution` | string | Corresponding author institution. |
| `postedDate` | string | Date the latest version was posted (`YYYY-MM-DD`). |
| `version` | integer | Preprint version number (latest kept). |
| `type` | string | Preprint type, for example `new results`. |
| `category` | string | Subject category. |
| `license` | string | License, for example `cc_by`, `cc_no`. |
| `abstract` | string | Cleaned abstract text. |
| `preprintUrl` | string | Public preprint page URL. |
| `isPublished` | boolean | Whether the preprint was later published in a journal. |
| `publishedDoi` | string | DOI of the published journal article, or `null`. |
| `publishedJournal` | string | Published journal name. Populated by the published-status add-on. |
| `publishedJournalDoi` | string | Published journal article DOI. Populated by the published-status add-on. |
| `publishedDate` | string | Journal publication date. Populated by the published-status add-on. |
| `aiPlainSummary` | string | AI plain-English summary. Populated by the AI add-on. |
| `aiSignificance` | string | AI why-it-matters line. Populated by the AI add-on. |
| `aiField` | string | AI-identified field or subfield. Populated by the AI add-on. |
| `aiMethods` | string | AI-identified methods or study design. Populated by the AI add-on. |
| `source` | string | Data source label. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed or empty lookup a single item with a populated `error` field is written instead. |

### Example output record

Real record from a live run (input `{"server":"biorxiv","dateFrom":"2025-01-01","dateTo":"2025-01-07","category":"neuroscience","maxResults":8}`):

```json
{
  "server": "biorxiv",
  "doi": "10.1101/2025.01.02.631090",
  "title": "State-dependent modulation of spiny projection neurons controls levodopa-induced dyskinesia",
  "authors": "Zhai, S.; Cui, Q.; Wokosin, D.; Sun, L.; Tkatch, T.; Crittenden, J. R.; Graybiel, A. M.; Surmeier, D. J.",
  "authorCount": 8,
  "correspondingAuthor": "Dalton James Surmeier",
  "correspondingInstitution": "Northwestern University",
  "postedDate": "2025-01-07",
  "version": 2,
  "type": "new results",
  "category": "neuroscience",
  "license": "cc_by",
  "preprintUrl": "https://www.biorxiv.org/content/10.1101/2025.01.02.631090v2",
  "isPublished": true,
  "publishedDoi": "10.1126/sciadv.adv8224",
  "publishedJournal": null,
  "aiPlainSummary": null,
  "source": "bioRxiv / medRxiv preprint servers",
  "observedAt": "2026-08-20T22:26:46.737Z",
  "error": null
}
```

### Run via API and CLI

Start a run and read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~biorxiv-medrxiv-preprints-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"server":"medrxiv","dateFrom":"2024-06-01","dateTo":"2024-06-03","maxResults":25}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~biorxiv-medrxiv-preprints-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"server":"both","dateFrom":"2025-01-01","dateTo":"2025-01-07","searchTerm":"cancer","maxResults":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/biorxiv-medrxiv-preprints-scraper \
  --input '{"doi":"10.1101/2023.03.29.534823","withPublishedStatus":true}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets.

### Billing and limits

- **Pay per result.** You are charged per preprint returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/biorxiv-medrxiv-preprints-scraper/pricing) for the current per-result price.
- **Opt-in add-ons.** `withPublishedStatus` bills only when a real published-journal mapping is found. `withAiSummary` bills only when a usable AI summary is produced. Both are off by default and disabled for free Apify plans.
- **No charge on failure.** If a lookup errors or matches nothing, the actor writes a single item with a populated `error` field and does not charge for it. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 preprints per run and cannot use the paid add-ons. Upgrade for higher `maxResults`.

### FAQ and troubleshooting

**What is the difference between this and a PubMed or Crossref scraper?**
This actor reads the bioRxiv and medRxiv preprint servers directly, so you get papers at the preprint stage, often months before journal publication. PubMed, Crossref, OpenAlex, and Semantic Scholar index already-published literature. This actor also joins the two worlds: it tells you whether and where each preprint was later published.

**A date-range run returned 0 records. Why?**
The category or keyword filter matched nothing in that window, or no preprints were posted in the range. Widen the date range, or remove `category` and `searchTerm`. Zero-result runs are not charged.

**How does version handling work?**
Preprints can have several versions. The actor keeps the latest version per DOI and reports its `version` number and `postedDate`.

**Why is `publishedJournal` null even though `isPublished` is true?**
`isPublished` and `publishedDoi` come from the base record for free. The journal name and publication date are resolved by the `withPublishedStatus` add-on. Turn it on to populate `publishedJournal`, `publishedJournalDoi`, and `publishedDate`. Journal resolution covers preprints published within the scanned window and may be partial for very old preprints.

**Can I scan both servers at once?**
Yes. Set `server` to `both`. Each record is tagged with the `server` it came from.

**Is this an official bioRxiv or medRxiv tool?**
No. This actor is independent and has no affiliation with bioRxiv, medRxiv, or Cold Spring Harbor Laboratory. It reads only publicly available preprint metadata. Use it in accordance with the source terms of service.

### Related scrapers

- [PubMed Scraper](https://apify.com/scrapers_lat/pubmed-scraper): biomedical literature indexed in PubMed.
- [Crossref Scraper](https://apify.com/scrapers_lat/crossref-scraper): scholarly metadata and DOIs from Crossref.
- [OpenAlex Scraper](https://apify.com/scrapers_lat/openalex-scraper): works, authors, and institutions from OpenAlex.
- [Semantic Scholar Scraper](https://apify.com/scrapers_lat/semantic-scholar-scraper): papers, citations, and references from Semantic Scholar.
- [arXiv Papers Scraper](https://apify.com/scrapers_lat/arxiv-papers-scraper): preprints in physics, math, and computer science from arXiv.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for public platforms: company registries, government data, finance, research, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with bioRxiv, medRxiv, or Cold Spring Harbor Laboratory. Accesses only publicly available preprint metadata. Use in accordance with the source terms of service.

# Actor input Schema

## `server` (type: `string`):

Which preprint server to scrape: bioRxiv (biology), medRxiv (health sciences), or both.

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

Start of the posted-date range (inclusive), format YYYY-MM-DD. Ignored when a DOI is supplied.

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

End of the posted-date range (inclusive), format YYYY-MM-DD. Ignored when a DOI is supplied.

## `category` (type: `string`):

Optional. Keep only preprints whose subject category contains this text, for example "neuroscience", "genomics", "infectious diseases". Case-insensitive substring match.

## `searchTerm` (type: `string`):

Optional. Keep only preprints whose title or abstract contains this text. Case-insensitive substring match.

## `doi` (type: `string`):

Optional. Look up one preprint by its DOI, for example "10.1101/2024.12.31.630767". When set, the date range and filters are ignored and one record (latest version) is returned.

## `withPublishedStatus` (type: `boolean`):

Also resolve whether and where each preprint was later published in a peer-reviewed journal (journal name, published DOI, published date). Opt-in add-on, billed per preprint only when a real published mapping is found. Available to paid Apify plans.

## `withAiSummary` (type: `boolean`):

Add an AI-written plain-language read of each preprint (plain summary, why it matters, field, methods) generated from the title and abstract. Opt-in add-on, billed per preprint only when a usable summary is produced. Available to paid Apify plans.

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

Maximum number of preprints to return in one run. Free Apify plans are capped at 10.

## Actor input object example

```json
{
  "server": "biorxiv",
  "dateFrom": "2025-01-01",
  "dateTo": "2025-01-07",
  "withPublishedStatus": false,
  "withAiSummary": false,
  "maxResults": 10
}
```

# 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 = {
    "dateFrom": "2025-01-01",
    "dateTo": "2025-01-07",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/biorxiv-medrxiv-preprints-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 = {
    "dateFrom": "2025-01-01",
    "dateTo": "2025-01-07",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/biorxiv-medrxiv-preprints-scraper").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 '{
  "dateFrom": "2025-01-01",
  "dateTo": "2025-01-07",
  "maxResults": 10
}' |
apify call scrapers_lat/biorxiv-medrxiv-preprints-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/biorxiv-medrxiv-preprints-scraper"
        }
    }
}

```

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/nlnXqfyH9mcnpAXOV/builds/WStNUDY767q75e4qM/openapi.json
