# Replication Package Pre-check (`madrasco/replication-package-precheck`) Actor

Static checks for social-science replication packages: README details, missing file references, absolute paths and undeclared software. Supply a Zenodo DOI, record link or HTTPS ZIP link. Get Markdown and structured findings. No research code is run.

- **URL**: https://apify.com/madrasco/replication-package-precheck.md
- **Developed by:** [Jack Valmadre](https://apify.com/madrasco) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 package checkeds

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

## Replication Package Pre-check

For researchers and research assistants preparing a social-science replication package: check a deposited package for missing README details, file references and undeclared software packages. Supply a Zenodo DOI, a Zenodo record link or a direct HTTPS link to a ZIP, and get a Markdown report and structured findings.

The Actor reads files without running your research code (a static check). It cannot tell you whether the results reproduce or whether a journal will accept the package.

### What it checks

- README text for data availability, software versions, run instructions, expected runtime and table or figure instructions.
- File references in Stata, R, Python and Jupyter code, with partial MATLAB support, for inputs the checker cannot find in the package or recognize as generated files.
- Absolute paths and Stata, R or Python dependencies that the checker cannot find declared in installation code, bundled files or documentation. It does not inspect an installed software environment.
- Input data filenames that do not appear in the README.
- Variable names in code and CSV or TSV headers that resemble personal-data fields.
- Large files, unopened archives and code formats outside the parser's coverage.

README checks use text patterns, not a judgment of whether the documentation is complete. File and software-package checks use recognized code patterns, so filenames built from variables, Stata macros and unusual file-writing code can cause missed findings or false alarms. The personal-data check looks for names, not all identifying values; it is not a privacy audit.

### Run a check

Add your sources to **Packages**, then start the Actor. The Actor processes at most 20 unique sources per run; additional sources are ignored. For example:

```json
{
  "packages": ["10.5281/zenodo.21738601"]
}
```

A Zenodo source downloads the record's available files. For a ZIP link, point directly to the archive, not a repository landing page. Only link to packages you have permission to process. Sources must be publicly accessible without login; Harvard Dataverse links and non-Zenodo DOIs are not supported. The default download limit is 1,000 MB per package, adjustable up to 5,000 MB. Oversized downloads are rejected. Each downloaded ZIP must expand to no more than 3 GB; ZIPs inside it are also subject to an extraction limit. Site restrictions may prevent a download.

### Read the results

The dataset contains a row for each processed source, with its status, findings and counts by section. Fetch failures appear as errors. Open **Report (Markdown)** for the readable combined report, or **Run summary** for the summary.

The report separates findings into:

- **To fix**: a possible problem detected by a rule. Check the explanation before changing your package; a missing input may be intentionally restricted and already documented.
- **To confirm by hand**: the checker cannot decide, for example when another script may create a file.
- **To look at**: an informational finding to review.

Review the coverage section as well as the findings. A clean report means these checks found no issues; it does not certify completeness, reproducibility, journal compliance or the absence of personal data. The Actor does not repair files or run a replication.

### Example finding

In a real package, the checker reported that Stata command `reghdfe` was used but it could not find an installation instruction, bundled copy or README declaration. This is a finding to review, not a confirmed defect: check the package's setup instructions before adding or changing anything.

Source: DOI `10.5281/zenodo.22901436`; build `0.2.2` (`VllMQpCrvWCQaqf6g`), run `nTlKNnTEeskJa7N0O`, report `REPORT-7.md`, 18 October 2026. This example shows the report's form, not an accuracy score.

### Price

US$0.05 per checked package, plus the Actor start charge of US$0.00005 per GB of run memory (minimum US$0.00005 per run). A run checking one package at 1 GB costs US$0.05005; ten packages at the same memory cost US$0.50005. No additional platform usage fee is charged under this pricing model.

A failed download has no package-check fee, but the start charge still applies. The package fee buys the static report, including when the report finds no issues.

### Your files and support

Temporary package downloads and extracted files are deleted when the check finishes. Reports, source links and findings remain in the run's Apify storage; reports can include filenames, code fragments and variable names from the package. Avoid linking to confidential material or URLs containing credentials.

Built and maintained with AI agents by Madrasco. Use the Apify Issues tab for support; replies may be AI-assisted, and a human owner can be reached on request.

# Actor input Schema

## `packages` (type: `array`):

Zenodo DOIs (10.5281/zenodo.<number>), Zenodo record links, or direct https links to a package zip. Up to 20 per run. Harvard Dataverse is not fetched (its site answers automated requests with a bot check): download the zip and link it instead.

## `maxDownloadMb` (type: `integer`):

Packages larger than this are not downloaded.

## Actor input object example

```json
{
  "packages": [
    "10.5281/zenodo.21738601"
  ],
  "maxDownloadMb": 1000
}
```

# Actor output Schema

## `packages` (type: `string`):

One row per package with counts per section.

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

Readable report for every checked package.

## `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 = {
    "packages": [
        "10.5281/zenodo.21738601"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("madrasco/replication-package-precheck").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 = { "packages": ["10.5281/zenodo.21738601"] }

# Run the Actor and wait for it to finish
run = client.actor("madrasco/replication-package-precheck").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 '{
  "packages": [
    "10.5281/zenodo.21738601"
  ]
}' |
apify call madrasco/replication-package-precheck --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,madrasco/replication-package-precheck"
        }
    }
}
```

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/rbFY4mGonpGqUuyT1/builds/qBetffdSJ0vhNdjgZ/openapi.json
