# Research Reference Review (`blueberry_windchime/research-reference-review`) Actor

Map recorded corrections, retractions and reinstatements to your reports. Receive a readable collection audit and reusable reference data.

- **URL**: https://apify.com/blueberry\_windchime/research-reference-review.md
- **Developed by:** [Jeremy Johnson](https://apify.com/blueberry_windchime) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$29.00 / collection audit

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?

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

## Research Reference Review

Find which references in your research reports need a closer look when a source records a correction, retraction, expression of concern or reinstatement.

**$29 per completed collection audit, up to 10,000 reference records.** Match your reference list against recorded research notices and download a report showing which of your documents need review.

### What you receive

- A readable HTML report mapping recorded notices to your document labels and reference IDs.
- Structured JSON with source evidence, coverage counts, notice links and review actions.
- A reusable baseline for comparing a later audit with this one.
- A summary table with coverage counts and links to both report files, available for export.

Supply DOI values, unique reference IDs and optional short document labels. You do not need to upload papers or document contents. A DOI used in several documents is checked once and mapped back to every supplied reference.

### See the output before buying

This illustrative table uses **fictional references and document labels**. It shows how results lead back to a document you maintain; it is not a customer report or a live source check. Reading it does not start or purchase an audit.

| Your document label | Your reference ID | Example result | Review action |
| --- | --- | --- | --- |
| EXAMPLE training manual | ref-001 | Recorded correction | Open the notice and review whether the cited claim needs updating. |
| EXAMPLE briefing | ref-002 | Recorded reinstatement | Read the reinstatement and any other notices together. |
| EXAMPLE evidence summary | ref-003 | No recorded notice matched | This is not a reliability finding or clearance. |
| EXAMPLE report | ref-004 | Invalid DOI | Repair the identifier before including it in a later audit. |

Actual audit files include the supplied labels and IDs, source observations, notice links, coverage counts and a reusable baseline. The first audit establishes that baseline. A later audit can identify changed records; repeat audits are separate purchases even when no change is found.

### Price and delivery

The price is one $29 event after the complete report is saved and its storage readback succeeds. Set a run spending limit of $29 and ensure your Apify account has enough available usage credit for the audit. Platform usage is included in the event price; there are no automatic startup or dataset-item fees. Runs with no usable identifiers, source failures, or a failed report save do not request the audit event. If a billing response is interrupted, recover the existing run instead of starting another purchase.

An audit that finds no recorded notices is still a completed, chargeable audit. A repeated audit is also chargeable even if nothing changed. This is a collection-level fee; invalid records within a partly valid collection do not reduce the fee. Review the reference list before starting. Starting a new run is a new purchase; resuming the same run recovers its existing delivery.

Download the HTML and JSON from the run's output files. This audit does not include a subscription, email campaign, human research review, or automatic updates to your documents. A workflow can pass `report.next_baseline` from the preceding `OUTPUT` file as the next input's `baseline`; scheduling such repeat runs creates repeat charges.

### Run your first audit

1. Export the DOI values from the references you want to check. Assign each reference a unique `id`; optionally add an `asset` label identifying the document that uses it.
2. Paste the records into **References**. Leave **Previous baseline** empty for the first audit. The JSON input example below illustrates the format using public identifiers and simulated document labels.
3. Set **Maximum cost per run** to **29 USD**, check your collection and start the run. Running the example also purchases an audit; it is not a free trial.
4. Open **Summary table** for coverage counts and report links, **Readable report** for HTML, and **Data and next baseline** for JSON. Download the files before your account's storage retention expires.

```json
{
  "references": [
    {
      "id": "reference-001",
      "doi": "10.1016/j.scitotenv.2022.156691",
      "asset": "SIMULATED report A"
    },
    {
      "id": "reference-002",
      "doi": "10.1001/jamainternmed.2024.5726",
      "asset": "SIMULATED report B"
    }
  ]
}
```

For a later comparison, copy `report.next_baseline` from the previous structured report into **Previous baseline** and supply the references to check again. The report distinguishes newly observed or changed records from the first baseline. A later check costs another $29 even when it finds no changes.

If Apify rejects the run before it starts with a spending-limit or account-credit error, no report has been produced. Check the account's available usage allowance and the run limit. Do not repeatedly start new runs after a report has already been delivered; use the existing run's status and billing record to investigate first.

### Coverage

Source: [Crossref / Retraction Watch](https://gitlab.com/crossref/retraction-watch-data), with [CC0 license evidence](https://www.crossref.org/documentation/retrieve-metadata/#licensing). The source facts are freely available; the fee is for preparing and delivering the collection audit.

The audit also retrieves [Crossref publisher retraction relationships](https://api.crossref.org/v1/works?filter=update-type%3Aretraction\&rows=1\&select=DOI%2Cupdate-to). Only relationships explicitly identified as publisher-sourced retractions are added. Both sources are labeled in the report; the same notice can appear as separate observations. The additional query does not cover publisher corrections, expressions of concern or reinstatements, and is not a complete or atomic snapshot of all publishers.

The first check establishes a baseline. An old notice appearing in a first report is not described as newly published. Reinstatements remain distinct from retractions. Missing source records are flagged for review, not interpreted as clearance.

No recorded notice in this source does not establish that a paper is reliable, current or free of notices elsewhere. Correction and expression-of-concern coverage is incomplete. A syntactically valid DOI is not independently verified to exist. Notices without usable DOI identifiers cannot match. This service reports metadata for review; it does not judge authors or determine scientific validity.

Each report names its source release, commit and file fingerprint. A release older than seven days or a substantial detected coverage drop stops new audits. Publisher completeness cannot be guaranteed.

The added publisher query reports a retrieval window and its own fingerprint, not a release date. It must be fresh and pass integrity and coverage checks. Both public sources are retrieved for each new audit, which can take several minutes; the default run timeout is 15 minutes. Same-run recovery after a report was saved reuses that report. When comparing with an earlier single-source baseline, the report marks the coverage change; an old notice newly covered by the audit is not a newly published notice.

### Data handling

The Actor uses its current run's storage. It does not write customer inputs into a shared named store, send customer DOI lists to an AI provider, or forward them to the source publisher. Only generic public-source requests go to GitLab and Crossref; the reference list is matched locally. Apify hosts the input and output; platform access controls and retention apply. Do not supply confidential document text, personal contact details or sensitive personal data. Use neutral document labels where appropriate and control access to run links.

This is an early pilot. Review notice links and publisher context before changing your documents. Report a problem through this Actor's Issues tab using the run ID and a concise description; do not post private reference lists or sensitive document labels in a public issue.

# Actor input Schema

## `references` (type: `array`):

JSON array of unique reference IDs, DOI values and optional document labels. Running the prefilled public example also costs $29. Do not include personal details, confidential document text or contact information.

## `baseline` (type: `object`):

Paste report.next\_baseline from the prior audit to identify changes. Omit for a first check. A new run is a new audit and costs $29; an unchanged result is still a completed check.

## Actor input object example

```json
{
  "references": [
    {
      "id": "example/ref-1",
      "doi": "10.1016/j.scitotenv.2022.156691",
      "asset": "SIMULATED example document"
    }
  ]
}
```

# Actor output Schema

## `summary` (type: `string`):

No description

## `report` (type: `string`):

No description

## `data` (type: `string`):

No description

## `billing` (type: `string`):

No description

## `files` (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 = {
    "references": [
        {
            "id": "example/ref-1",
            "doi": "10.1016/j.scitotenv.2022.156691",
            "asset": "SIMULATED example document"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("blueberry_windchime/research-reference-review").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 = { "references": [{
            "id": "example/ref-1",
            "doi": "10.1016/j.scitotenv.2022.156691",
            "asset": "SIMULATED example document",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("blueberry_windchime/research-reference-review").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 '{
  "references": [
    {
      "id": "example/ref-1",
      "doi": "10.1016/j.scitotenv.2022.156691",
      "asset": "SIMULATED example document"
    }
  ]
}' |
apify call blueberry_windchime/research-reference-review --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,blueberry_windchime/research-reference-review"
        }
    }
}
```

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/FEbKrXuIC2uRbSgaB/builds/caeZccrawDGvJXRXD/openapi.json
