# Clinical Trials Registry (`thebrierfox/clinical-trials-registry-actor`) Actor

Export ClinicalTrials.gov study records for trial landscape and sponsor research. IntuiTek adds source links, consistent fields and clear search coverage.

- **URL**: https://apify.com/thebrierfox/clinical-trials-registry-actor.md
- **Developed by:** [Brier Fox](https://apify.com/thebrierfox) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$8.00 / 1,000 validated studies

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

## Clinical Trials Registry

**IntuiTek · Trial landscape research**

Export ClinicalTrials.gov study records for trial landscape and sponsor research. Find studies for a condition or sponsor, then review a consistent table of study titles, status, phase, sponsor and registry updates. Every record includes a link to its official source.

### Run your first search

1. Open **Try for free** and sign in to Apify. Enter a **Condition or disease** and, optionally, a **Sponsor**.
2. Choose **Maximum studies**. Start with 20 studies, which have a maximum result charge of **$0.16** at the current price. Review the run options and set a finite maximum cost before starting.
3. Start the run. When it succeeds, open **Search summary** to check coverage, then **Studies** to review your records.
4. For a spreadsheet, choose **Export → All fields → CSV → Download**. Keep the search summary with your export so its coverage is clear. CSV flattens lists into columns and represents missing values as blank cells; use JSON when you need the original list and null types.

The example condition is diabetes. Clear it when searching only by sponsor, exact study IDs or another filter. All filters you leave filled are combined. **More search filters** contains study status, update date, exact IDs and additional terms. **Advanced run settings** contains optional request and time limits; the supplied defaults are suitable for a small first search.

An Apify account is required. The platform's “Try for free” button does not guarantee a free run: usage depends on your available credit and account terms. No ClinicalTrials.gov API key, proxy or language-model account is needed.

### Understand your results

| View | What you get |
|---|---|
| **Search summary** | A readable study count and a clear explanation of whether the query finished or stopped at a limit. |
| **Studies** | A focused table of study titles, registry status, sponsor, phase, update dates and source links. |
| **Source details** | A second dataset view with source references, retrieval time and record identifiers. |
| **Technical summary (JSON)** | Machine-readable counts, query identifier and completeness report for integrations. |

A successful run can contain only part of the matching studies. **Complete query** means the source returned no further page for your query. **Capped** means a study, page or budget limit stopped the export. Zero studies in a complete query means no matches were returned; zero studies in a capped query does not establish that there are no matches. A failed run may contain partial records without a final summary.

For a larger landscape, review the summary before deciding whether to increase limits. Separate runs can overlap and charge again for the same studies; this product does not automatically track changed fields or deduplicate across independent runs.

### Pricing

**$0.008 per delivered study — $8 per 1,000 studies.**

| Studies delivered | Result charge |
|---:|---:|
| 20 | $0.16 |
| 100 | $0.80 |
| 1,000 | $8.00 |

These fractional-cent charges accumulate as usage against your Apify account or available credit; there is no separate checkout for each study. The current Actor price includes platform usage and has no configured start fee. Search summaries and empty results add no study charges. Your Apify plan, credit availability and account requirements still apply. Check the **Pricing** tab for the active price.

The saved Console budget is specific to that saved run setup. API callers must supply their own finite maximum charge; the Actor does not impose an account-wide spending cap. Interrupted runs may already contain billable studies. Inspect them before retrying.

### Source and scope

ClinicalTrials.gov's source API is public and free. IntuiTek adds normalized fields, validation, bounded pagination, clear coverage reporting and delivery into Apify. This is a research data tool: it exports public registry metadata, not patient records or medical recommendations. A recruitment status reflects what the registry reports and is not independent confirmation that a site is currently recruiting.

For example, a real completed exact-ID search on 2026-10-17 returned the following registry record:

| Study | Sponsor | Registry status | Phase |
|---|---|---|---|
| [A Trial of HR17031 Injection With Hepatic Insufficiency](https://clinicaltrials.gov/study/NCT05151705) | Jiangsu HengRui Medicine Co., Ltd. | Unknown | Phase 1 |

The historical record and exact input are included below for reproducibility. Registry information can change.

### Developer reference

The input remains a flat JSON object. This bounded example combines a condition and recruitment status:

```json
{
  "condition": "diabetes",
  "statuses": ["RECRUITING"],
  "maxItems": 20,
  "pageSize": 20,
  "maxPages": 5
}
```

For exact identifiers, use `ids` rather than entering an NCT identifier as a text search:

```json
{"ids":["NCT05151705"],"maxItems":2,"pageSize":2,"maxPages":3}
```

At least one condition, term, sponsor, identifier or update date is required. `updatedSince` accepts an inclusive `YYYY-MM-DD` date. Status values use the registry's uppercase names, such as `RECRUITING`, `COMPLETED` or `UNKNOWN`. These are search filters, not conclusions about clinical outcomes.

### Results and completeness

The **Studies** output contains the full normalized records. The table provides an overview and a separate **Source details** view. Exported fields include NCT ID, title, status, type, phases, enrollment, sponsor, conditions and registry dates. Missing values remain `null`; zero enrollment and false flags retain their meaning. Dates preserve the precision provided by the registry.

The **Technical summary (JSON)** output is a separate machine-readable summary. **Search summary** presents the same completion status in readable form. Always inspect the summary before treating an export as exhaustive:

| Summary | Meaning |
|---|---|
| `complete: true`, `stopReason: exhausted` | The upstream API supplied no continuation token. Zero rows means no matching records were returned for that query. |
| `complete: false`, `stopReason: maxItems` | The requested result limit stopped the export. |
| `complete: false`, `stopReason: maxPages` | The page limit stopped the export. |
| `complete: false`, `stopReason: budget` | The remaining event budget could not cover another whole row. |

A successful run can intentionally be partial. A failed run can contain partial data and may have no final summary; inspect its status and error rather than interpreting it as an empty successful search.

`recordHash` identifies normalized study content. `queryHash` binds a row to its query and limits. The registry can change between pages and runs, so an export is not a transactional snapshot or an automatic change feed. Independent runs can contain the same study.

### Example from a completed run

This illustrative record was captured on **2026-10-17** in a real completed run. The input, full delivered study record and completeness report below were retrieved directly from that run's storage. The record links to its official registry source. Registry information can change; these are historical reported values, not medical advice or verification of treatment safety, effectiveness or current recruitment.

**Exact input:**

```json
{
  "ids": ["NCT05151705"],
  "maxDurationMs": 60000,
  "maxItems": 2,
  "maxPages": 3,
  "maxRetries": 1,
  "pageSize": 2,
  "requestTimeoutMs": 20000
}
```

**Full study record:**

```json
{
  "schemaVersion": 1,
  "nctId": "NCT05151705",
  "title": "A Trial of HR17031 Injection With Hepatic Insufficiency",
  "officialTitle": "Pharmacokinetics and Safety of HR17031 Injection in Subjects With Mild and Moderate Liver Impairment and Normal Liver Function.",
  "overallStatus": "UNKNOWN",
  "studyType": "INTERVENTIONAL",
  "phases": ["PHASE1"],
  "enrollment": 24,
  "enrollmentType": "ESTIMATED",
  "conditions": ["Improved Glycemic Control in Patients With Type 2 Diabetes"],
  "leadSponsor": "Jiangsu HengRui Medicine Co., Ltd.",
  "sponsorClass": "INDUSTRY",
  "hasResults": false,
  "startDate": "2021-12-20",
  "completionDate": "2022-06-30",
  "lastUpdatePosted": "2021-12-09",
  "minimumAge": "18 Years",
  "maximumAge": "65 Years",
  "healthyVolunteers": true,
  "recordHash": "507bc4bf5e2cad04086920ccdb3f5b60df5e6ef591a290572ca1880071c611ed",
  "queryHash": "65a607cefe1b2148951cb9a3f28804952d050b1e7becc9d40ead5c7b4221d429",
  "sourceUrl": "https://clinicaltrials.gov/study/NCT05151705",
  "sourceApi": "https://clinicaltrials.gov/api/v2/studies/NCT05151705",
  "retrievedAt": "2026-10-17T15:59:33.687Z"
}
```

**Completeness report:**

```json
{
  "schemaVersion": 1,
  "queryHash": "65a607cefe1b2148951cb9a3f28804952d050b1e7becc9d40ead5c7b4221d429",
  "emitted": 1,
  "pagesCompleted": 1,
  "requests": 1,
  "stopReason": "exhausted",
  "complete": true,
  "source": "https://clinicaltrials.gov/api/v2/studies",
  "finishedAt": "2026-10-17T15:59:34.067Z"
}
```

Here, `complete: true` applies to the exact-ID query. The single delivered record has the same query hash as the summary; its `UNKNOWN` status and `hasResults: false` are preserved as reported.

### Limits and billing

`maxItems` supports 1–1,000 rows; `pageSize` supports 1–100; `maxPages` supports 1–100. Source requests are serial and start at most once per second. Reads have bounded retries and timeouts. Large or slow queries can stop before exhausting the source; use the summary to distinguish that outcome.

Where paid pricing is enabled, the pricing tab governs the price per delivered default-dataset item. There is no separately configured start fee. Summaries, empty results and duplicate IDs suppressed within the same run do not add dataset items. An interrupted run may already have delivered billable rows. Do not blindly repeat a failed paid run: inspect its dataset and contact the operator if delivery is uncertain. This service does not promise exactly-once delivery across network failures or independent runs.

No source API key, proxy or language-model account is required. Your Apify authentication and platform account requirements still apply.

Source documentation: [ClinicalTrials.gov v2 API](https://clinicaltrials.gov/data-api/api), [NLM guidance on automated access](https://www.nlm.nih.gov/pubs/techbull/ja25/ja25_clinical_trials_screen-scraping.html).

# Actor input Schema

## `condition` (type: `string`):

What condition are you researching? For example, diabetes or breast cancer. Clear the example condition if you want to search only by sponsor or exact study IDs.

## `sponsor` (type: `string`):

Add a lead sponsor to narrow your condition search. Leave blank for all sponsors, or clear the condition to search by sponsor alone.

## `maxItems` (type: `integer`):

Stop after this many delivered studies. At $0.008 per study, 20 results cost $0.16 and 100 cost $0.80 in result charges. A cap is not a guarantee of a complete search; check Search summary. Allowed: 1–1,000.

## `statuses` (type: `array`):

Choose one or more reported registry statuses. Leave empty to include all statuses. Status alone does not define a search; keep a condition, sponsor, date, other term or study ID.

## `updatedSince` (type: `string`):

Include studies whose registry update was posted on or after this date. This filters the registry update date; it does not identify which fields changed.

## `ids` (type: `array`):

Optional official NCT identifiers, such as NCT05151705. Clear the example condition for an ID-only search. Up to 100 IDs; other selected filters still apply.

## `term` (type: `string`):

Optional words or an official ClinicalTrials.gov search expression. Use Exact study IDs for NCT numbers. Up to 500 characters.

## `pageSize` (type: `integer`):

Maximum studies fetched in each source request. The Maximum studies setting still caps delivered results.

## `maxPages` (type: `integer`):

Stop after this many pages from the registry. Reaching this limit can leave the search incomplete; Search summary explains the result.

## `maxRetries` (type: `integer`):

Retry transient registry-read failures only. Dataset delivery is never automatically retried by this application.

## `requestTimeoutMs` (type: `integer`):

Maximum wait per source request, including its response. Leave the default unless you need a different bound.

## `maxDurationMs` (type: `integer`):

Checked before reads and deliveries. An in-flight storage request can finish later. Set the platform timeout longer than this value.

## Actor input object example

```json
{
  "condition": "diabetes",
  "maxItems": 20,
  "pageSize": 50,
  "maxPages": 20,
  "maxRetries": 2,
  "requestTimeoutMs": 20000,
  "maxDurationMs": 240000
}
```

# Actor output Schema

## `searchSummary` (type: `string`):

Readable study count and whether the search was complete or stopped at a limit. Available after successful runs.

## `studies` (type: `string`):

Validated study rows from the official API. This dataset may be partial when maxItems, maxPages or the event budget stops the run; read runSummary.complete and runSummary.stopReason.

## `runSummary` (type: `string`):

JSON summary with complete, stopReason, emitted, pagesCompleted, requests and queryHash. complete=true only means upstream pagination was exhausted; maxItems, maxPages or budget produces complete=false. Failed runs may have no summary; inspect run status and logs.

# 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 = {
    "condition": "diabetes"
};

// Run the Actor and wait for it to finish
const run = await client.actor("thebrierfox/clinical-trials-registry-actor").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 = { "condition": "diabetes" }

# Run the Actor and wait for it to finish
run = client.actor("thebrierfox/clinical-trials-registry-actor").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 '{
  "condition": "diabetes"
}' |
apify call thebrierfox/clinical-trials-registry-actor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thebrierfox/clinical-trials-registry-actor"
        }
    }
}
```

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/HMzeDEcTIR7g8d5as/builds/5mcyicFf8hXw0ZcfI/openapi.json
