# Research Paper Alerts · Google Scholar Alternative (`thequietstack/openalex-paper-alerts`) Actor

New research papers on your topics since the last run, plus citation watch for your DOIs, from OpenAlex (300M+ works, CC0). Title, date, venue, open-access link, citations, topic, institutions. No captchas, no Scholar scraping.

- **URL**: https://apify.com/thequietstack/openalex-paper-alerts.md
- **Developed by:** [TheQuietStack](https://apify.com/thequietstack) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 papers

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

## Research Paper Alerts: Google Scholar alternative on OpenAlex

Get **new research papers on your topics** since the last run, and **watch citations** of your own papers, from
**OpenAlex**, the open catalogue of 300M+ scholarly works (CC0 data, no captchas, no Google Scholar scraping).

**Typical uses:** a weekly literature alert for a research group, lab or R\&D team · tracking a technology (e.g. "solid-state battery")
across journals and preprints · following how often your papers are cited, and how many new citations arrived since last week.

### Two modes

**1 · Topic alerts.** One search per line (quotes for exact phrases). Searches **title + abstract**, newest first, filtered by date, type,
open access and minimum citations. With `onlyNew` (default) a scheduled run delivers only papers it has not delivered before.

**2 · Citation watch.** A list of DOIs → current citation count, **new citations since the last run**, open-access link, venue.
Up to 50 DOIs cost a single OpenAlex request.

### Output per paper

`title` · `publicationDate` · `type` · `venue` · `doi` · `url` · `isOpenAccess` · `oaStatus` · `oaUrl` · `citedByCount` · `fwci` · `isRetracted` ·
`primaryTopic` · `field` · `keywords` · `institutions` · `countries` · `authorCount` · `openalexId` · `query` / `watchedDoi` · `newCitations`

**No personal data:** author names are not included, only institutions, countries and the number of authors. The DOI/URL leads to the full record.

### Example (real run, 13.10.2026, topic `"retrieval augmented generation"`, last 2 days)

40 papers. A second run right after: **0 new** (40 recognised as already delivered).

```json
{ "query": "\"retrieval augmented generation\"", "publicationDate": "2026-10-12",
  "title": "Drug Molecular and Route Similarity-Aware Retrieval-Augmented LLM Generation with Knowledge Graph for Semantic Reasoning",
  "type": "preprint", "venue": "ChemRxiv", "isOpenAccess": true, "citedByCount": 0, "institutions": ["Tsinghua University"], "authorCount": 2 }
```

Citation watch, same day: AlphaFold (10.1038/s41586-021-03819-2) → 43,299 citations · Optuna (10.1145/3292500.3330701) → 8,382.

### OpenAlex budget (honest)

OpenAlex is free but metered per IP: without a key there are ~1,000 credits per day (a topic search = 10 credits, citation watch = 1 credit per
50 DOIs). On shared cloud IPs that budget can be partly used up by others. **Add your own free OpenAlex API key** (input `apiKey`, stored as a secret)
for 10x the budget. If the budget runs out mid-run, the Actor stops cleanly, keeps what it found and says so in `SUMMARY`.

### Pricing

Pay per event: **$0.002 per paper**, **$0.003 per citation check** on the free plan, −10/−20/−30 % on higher Apify plans. Already-seen papers,
invalid and unknown DOIs are never charged.

### Limits

- Coverage, dates and titles are as OpenAlex has them. Some records have wrong or future dates (future-dated papers are filtered out by default),
  and a few DOIs carry a wrong title.
- Search = keywords in title and abstract (not semantic search, not full text).
- New papers appear in OpenAlex days to weeks after publication, depending on the source.

# Actor input Schema

## `mode` (type: `string`):

Topic alerts search titles and abstracts. Citation watch tracks how often your papers are cited and how many new citations since the last run.

## `queries` (type: `array`):

One search per line. Quotes for exact phrases: "retrieval augmented generation". Searches title + abstract.

## `lookbackDays` (type: `integer`):

Only papers published in the last N days (ignored if 'From date' is set).

## `fromDate` (type: `string`):

YYYY-MM-DD. Overrides look back.

## `toDate` (type: `string`):

YYYY-MM-DD

## `types` (type: `array`):

Empty = all types.

## `openAccessOnly` (type: `boolean`):

Only papers with a free full-text version (open access).

## `minCitations` (type: `integer`):

Only papers cited at least this often (0 = all, recommended for alerts on new papers).

## `maxResultsPerQuery` (type: `integer`):

Upper limit of new papers per topic in one run. Unseen papers above the limit come in the next run.

## `onlyNew` (type: `boolean`):

Remembers paper IDs per topic in the state store. Scheduled runs then deliver only genuinely new papers.

## `dois` (type: `array`):

One DOI or DOI link per line (10.1038/... or https://doi.org/10.1038/...).

## `onlyChanges` (type: `boolean`):

Citation watch: return only DOIs whose citation count changed since the last run (the first check of a DOI is always returned).

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

Without a key you share OpenAlex's keyless daily budget (~100 topic searches/day). A free key from openalex.org gives 10x.

## `stateStoreName` (type: `string`):

Named key-value store that remembers delivered papers and citation counts. Use different names for different watch lists.

## Actor input object example

```json
{
  "mode": "topic_alerts",
  "queries": [
    "\"retrieval augmented generation\""
  ],
  "lookbackDays": 7,
  "openAccessOnly": false,
  "minCitations": 0,
  "maxResultsPerQuery": 50,
  "onlyNew": true,
  "dois": [
    "10.1038/s41586-021-03819-2"
  ],
  "onlyChanges": false,
  "stateStoreName": "openalex-paper-alerts-state"
}
```

# Actor output Schema

## `papers` (type: `string`):

No description

## `summary` (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 = {
    "queries": [
        "\"retrieval augmented generation\""
    ],
    "dois": [
        "10.1038/s41586-021-03819-2"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thequietstack/openalex-paper-alerts").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 = {
    "queries": ["\"retrieval augmented generation\""],
    "dois": ["10.1038/s41586-021-03819-2"],
}

# Run the Actor and wait for it to finish
run = client.actor("thequietstack/openalex-paper-alerts").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 '{
  "queries": [
    "\\"retrieval augmented generation\\""
  ],
  "dois": [
    "10.1038/s41586-021-03819-2"
  ]
}' |
apify call thequietstack/openalex-paper-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thequietstack/openalex-paper-alerts"
        }
    }
}
```

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/n2C9Qtfk3g3ixOrO5/builds/hmHG2bX09OMpizJWP/openapi.json
