# ClinicalTrials.gov Trial Sites Scraper (`automation-lab/clinicaltrials-trial-sites-scraper`) Actor

Export ClinicalTrials.gov studies as one row per recruiting facility/site with trial, sponsor, location, contact, eligibility, and date fields.

- **URL**: https://apify.com/automation-lab/clinicaltrials-trial-sites-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## ClinicalTrials.gov Trial Sites Scraper

Export ClinicalTrials.gov studies as one row per trial site or facility. This Apify Actor uses the official public ClinicalTrials.gov v2 API and returns clean, spreadsheet-ready rows for site selection, patient recruitment planning, competitive trial footprint analysis, and healthcare market research.

It is deliberately site-centric. Instead of giving you only one nested JSON record per clinical study, it expands each study's listed locations into separate dataset rows with trial context attached to every facility.

### What does ClinicalTrials.gov Trial Sites Scraper do?

ClinicalTrials.gov Trial Sites Scraper searches public ClinicalTrials.gov records and flattens trial location data.

Each output row represents a facility/site and includes:

- 🧪 NCT ID, title, status, phase, sponsor, and study type
- 🏥 facility name, site status, city, state, ZIP, country, and coordinates when available
- 👤 site contact strings when ClinicalTrials.gov publishes them
- 📅 start, primary completion, completion, and last-update dates
- 📋 conditions, interventions, enrollment, eligibility, and summary fields
- 🔗 source URL back to the official ClinicalTrials.gov study page

### Who is it for?

This actor is built for teams that need facility-level clinical trial intelligence:

- Pharma business development teams mapping competitor trial footprints
- CRO site-selection teams building investigator and facility shortlists
- Patient recruitment vendors planning geography-specific campaigns
- Biotech analysts tracking active studies by indication and sponsor
- Healthcare market researchers monitoring trial activity in target regions
- Data teams that need a repeatable API-to-dataset workflow on Apify

### Why use this actor?

ClinicalTrials.gov records are rich, but the official JSON is nested by study. For commercial workflows, the unit of analysis is often the site.

This actor saves time by:

- converting nested API responses into flat rows
- preserving trial context on every location row
- supporting location, status, phase, sponsor, intervention, and NCT ID inputs
- producing a stable dataset schema for BI tools and enrichment pipelines
- avoiding browser automation because the official API is public

### How is this different from generic clinical trial scrapers?

Most generic clinical trial scrapers focus on study-level records. That is useful for search, but less useful for site planning.

This actor is different because it is optimized for location intelligence:

- one row per trial site/facility
- coordinates when ClinicalTrials.gov provides them
- facility status and contacts where available
- easy grouping by country, state, city, sponsor, phase, or condition

### Data you can extract

| Field group | Example fields |
| --- | --- |
| Trial identity | `nctId`, `briefTitle`, `officialTitle`, `sourceUrl` |
| Status and phase | `overallStatus`, `lastKnownStatus`, `phases`, `studyType` |
| Sponsors | `leadSponsor`, `collaborators` |
| Site location | `facilityName`, `facilityStatus`, `city`, `state`, `zip`, `country`, `latitude`, `longitude` |
| Contacts | `contacts` |
| Study scope | `conditions`, `interventions`, `keywords` |
| Dates | `startDate`, `primaryCompletionDate`, `completionDate`, `lastUpdatePostDate` |
| Population | `enrollmentCount`, `minimumAge`, `maximumAge`, `sex`, `healthyVolunteers` |
| Text | `eligibilitySummary`, `briefSummary` |

### How much does it cost to scrape ClinicalTrials.gov trial sites?

The actor uses pay-per-event pricing:

- A small start event is charged once per run.
- A result event is charged for each trial-site row saved.

Current formula-derived pricing is $0.005 per run plus tiered per-site pricing. BRONZE is $0.000026842 per trial-site row, with lower prices on higher Apify tiers. Default examples are intentionally small so first runs are inexpensive, and Apify displays the maximum charge before you run the actor.

### Input overview

You can search by:

- condition or disease
- intervention, drug, biologic, procedure, or device
- sponsor or collaborator
- recruitment status
- trial phase
- country, state, and city
- start date or last-update date ranges
- direct NCT IDs

### Example input: recruiting diabetes sites in the United States

```json
{
  "condition": "diabetes",
  "statuses": ["RECRUITING", "NOT_YET_RECRUITING"],
  "country": "United States",
  "maxItems": 100
}
````

### Example input: sponsor footprint

```json
{
  "condition": "oncology",
  "sponsor": "AstraZeneca",
  "statuses": ["RECRUITING"],
  "maxItems": 250
}
```

### Example input: known NCT IDs

```json
{
  "nctIds": ["NCT03723486", "NCT04280705"],
  "maxItems": 50,
  "includeStudiesWithoutLocations": true
}
```

### Output example

```json
{
  "nctId": "NCT03723486",
  "sourceUrl": "https://clinicaltrials.gov/study/NCT03723486",
  "briefTitle": "Bariatric Surgery: Microbiome & Diabetes",
  "overallStatus": "UNKNOWN",
  "phases": [],
  "leadSponsor": "University Health Network, Toronto",
  "facilityName": "University Health Network, Toronto General Hospital",
  "city": "Toronto",
  "state": "Ontario",
  "country": "Canada",
  "latitude": 43.70643,
  "longitude": -79.39864,
  "conditions": ["Obesity"],
  "startDate": "2015-11",
  "enrollmentCount": 120
}
```

### How to use it on Apify

1. Open the actor on Apify.
2. Enter a condition or a list of NCT IDs.
3. Add optional location, status, phase, sponsor, or date filters.
4. Set `maxItems` to the number of trial-site rows you need.
5. Run the actor.
6. Download the dataset as JSON, CSV, Excel, XML, or RSS.

### Tips for better results

- Use broad condition terms first, then narrow by sponsor or geography.
- Leave phase empty if you want observational studies too.
- Use `includeStudiesWithoutLocations` only when study-level placeholder rows are acceptable.
- For national footprint mapping, filter by country but leave state and city empty.
- For competitive monitoring, use sponsor plus condition and repeat the same input weekly.

### Integrations

Common integration patterns include:

- sending CSV exports to Airtable or Google Sheets
- loading JSON into Snowflake, BigQuery, or Postgres
- joining site rows with internal investigator CRM data
- mapping latitude/longitude fields in BI tools
- triggering weekly runs from Apify schedules
- feeding recruitment territory dashboards

### API usage: Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/clinicaltrials-trial-sites-scraper').call({
  condition: 'diabetes',
  country: 'United States',
  statuses: ['RECRUITING'],
  maxItems: 100,
});

console.log(run.defaultDatasetId);
```

### API usage: Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/clinicaltrials-trial-sites-scraper').call(run_input={
    'condition': 'diabetes',
    'country': 'United States',
    'statuses': ['RECRUITING'],
    'maxItems': 100,
})
print(run['defaultDatasetId'])
```

### API usage: cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~clinicaltrials-trial-sites-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"condition":"diabetes","country":"United States","statuses":["RECRUITING"],"maxItems":100}'
```

### MCP integration

Use this actor from AI tools through Apify MCP. The recommended HTTP endpoint is:

```text
https://mcp.apify.com/?tools=automation-lab/clinicaltrials-trial-sites-scraper
```

Claude Code setup:

```bash
claude mcp add --transport http apify-clinicaltrials-sites \
  "https://mcp.apify.com/?tools=automation-lab/clinicaltrials-trial-sites-scraper" \
  --header "Authorization: Bearer YOUR_APIFY_TOKEN"
```

Claude Desktop / Cursor / VS Code HTTP configuration:

```json
{
  "mcpServers": {
    "apify-clinicaltrials-sites": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=automation-lab/clinicaltrials-trial-sites-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

If your MCP client only supports local stdio servers, use Apify's npm bridge:

```bash
npx @apify/actors-mcp-server --actors automation-lab/clinicaltrials-trial-sites-scraper
```

Example prompts:

- "Find recruiting diabetes trial sites in California and summarize the sponsors."
- "Export oncology trial facilities for this sponsor and group them by country."
- "Compare active trial-site locations for two NCT ID lists."

### Scheduling and monitoring

You can schedule the actor in Apify to monitor new or updated clinical trial sites.

Suggested schedules:

- weekly for competitor sponsor footprints
- monthly for broad indication maps
- daily for urgent recruitment campaigns

Use the same input over time so dataset counts and geography changes are comparable.

### Data source

The actor uses the official public ClinicalTrials.gov v2 API at:

```text
https://clinicaltrials.gov/api/v2/studies
```

No login, cookies, browser automation, or API key is required for the source data.

### Limitations

- Contacts are only available when ClinicalTrials.gov publishes them.
- Some studies do not list facility-level locations.
- Location coordinates are not guaranteed for every facility.
- ClinicalTrials.gov data reflects submitted registry records and may lag real-world site changes.
- Date filters depend on the source API's supported search syntax.

### Legality

ClinicalTrials.gov is a public registry. Use the exported data responsibly and comply with applicable laws, privacy rules, clinical research regulations, and Apify's Terms of Service. Do not use contact information for spam or unlawful outreach.

### Legal and ethical use

The actor exports public registry records, not private patient data. Users remain responsible for their own compliance review before using site contacts, investigator information, or trial metadata in outreach, analytics, or regulated workflows.

### FAQ

#### Does this actor scrape private patient data?

No. It exports public clinical trial registry records and facility/site metadata from ClinicalTrials.gov.

#### Why did I get fewer rows than expected?

Your filters may be narrow, or studies may not have listed facilities. Try removing city/state filters, broadening statuses, or enabling `includeStudiesWithoutLocations`.

#### Why are contact fields empty?

ClinicalTrials.gov does not publish site contacts for every study or every location. Empty contact arrays mean the source record did not include site-level contacts.

#### Can I search by NCT ID?

Yes. Add IDs to `nctIds`. The actor will request those studies directly and flatten their locations.

### Related scrapers

Explore other Automation Lab actors at:

- https://apify.com/automation-lab
- https://apify.com/automation-lab/google-maps-lead-finder
- https://apify.com/automation-lab/website-contact-finder

### Support

If a run fails or the output does not match your input, open an Apify issue with the run URL and expected result. Include the condition, location, statuses, and NCT IDs you used so the problem can be reproduced.

# Actor input Schema

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

Condition, disease, or therapeutic area to search, e.g. diabetes, oncology, asthma.

## `intervention` (type: `string`):

Optional intervention, drug, biologic, procedure, or device term.

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

Optional sponsor, collaborator, company, university, or agency name.

## `otherTerms` (type: `string`):

Optional extra query text for ClinicalTrials.gov search syntax.

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

Limit to selected ClinicalTrials.gov overall statuses. Leave empty for all statuses.

## `phases` (type: `array`):

Limit to selected phases. Leave empty for all phases.

## `country` (type: `string`):

Optional facility country filter, e.g. United States, Canada, Germany.

## `state` (type: `string`):

Optional facility state or province filter, e.g. California, Ontario.

## `city` (type: `string`):

Optional facility city filter, e.g. Boston, Toronto, Berlin.

## `startDateFrom` (type: `string`):

Optional study start-date lower bound in YYYY-MM-DD or YYYY-MM format.

## `startDateTo` (type: `string`):

Optional study start-date upper bound in YYYY-MM-DD or YYYY-MM format.

## `lastUpdateFrom` (type: `string`):

Optional ClinicalTrials.gov last-update lower bound in YYYY-MM-DD or YYYY-MM format.

## `lastUpdateTo` (type: `string`):

Optional ClinicalTrials.gov last-update upper bound in YYYY-MM-DD or YYYY-MM format.

## `nctIds` (type: `array`):

Optional list of NCT identifiers to export. When provided, the actor queries these studies directly.

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

Maximum number of facility/site rows to save to the dataset.

## `includeStudiesWithoutLocations` (type: `boolean`):

If enabled, studies with no location block are emitted as study-level rows with blank facility fields.

## Actor input object example

```json
{
  "condition": "diabetes",
  "statuses": [
    "RECRUITING",
    "NOT_YET_RECRUITING"
  ],
  "phases": [],
  "country": "United States",
  "nctIds": [],
  "maxItems": 20,
  "includeStudiesWithoutLocations": false
}
```

# Actor output Schema

## `overview` (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 = {
    "condition": "diabetes",
    "intervention": "",
    "sponsor": "",
    "otherTerms": "",
    "statuses": [
        "RECRUITING",
        "NOT_YET_RECRUITING"
    ],
    "phases": [],
    "country": "United States",
    "state": "",
    "city": "",
    "startDateFrom": "",
    "startDateTo": "",
    "lastUpdateFrom": "",
    "lastUpdateTo": "",
    "nctIds": [],
    "maxItems": 20,
    "includeStudiesWithoutLocations": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/clinicaltrials-trial-sites-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 = {
    "condition": "diabetes",
    "intervention": "",
    "sponsor": "",
    "otherTerms": "",
    "statuses": [
        "RECRUITING",
        "NOT_YET_RECRUITING",
    ],
    "phases": [],
    "country": "United States",
    "state": "",
    "city": "",
    "startDateFrom": "",
    "startDateTo": "",
    "lastUpdateFrom": "",
    "lastUpdateTo": "",
    "nctIds": [],
    "maxItems": 20,
    "includeStudiesWithoutLocations": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/clinicaltrials-trial-sites-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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",
  "intervention": "",
  "sponsor": "",
  "otherTerms": "",
  "statuses": [
    "RECRUITING",
    "NOT_YET_RECRUITING"
  ],
  "phases": [],
  "country": "United States",
  "state": "",
  "city": "",
  "startDateFrom": "",
  "startDateTo": "",
  "lastUpdateFrom": "",
  "lastUpdateTo": "",
  "nctIds": [],
  "maxItems": 20,
  "includeStudiesWithoutLocations": false
}' |
apify call automation-lab/clinicaltrials-trial-sites-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/clinicaltrials-trial-sites-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ClinicalTrials.gov Trial Sites Scraper",
        "description": "Export ClinicalTrials.gov studies as one row per recruiting facility/site with trial, sponsor, location, contact, eligibility, and date fields.",
        "version": "0.1",
        "x-build-id": "SL9sEDCc7P7Gv3nyw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~clinicaltrials-trial-sites-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-clinicaltrials-trial-sites-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~clinicaltrials-trial-sites-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-clinicaltrials-trial-sites-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~clinicaltrials-trial-sites-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-clinicaltrials-trial-sites-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "maxItems"
                ],
                "properties": {
                    "condition": {
                        "title": "Condition or disease",
                        "type": "string",
                        "description": "Condition, disease, or therapeutic area to search, e.g. diabetes, oncology, asthma."
                    },
                    "intervention": {
                        "title": "Intervention / drug / device",
                        "type": "string",
                        "description": "Optional intervention, drug, biologic, procedure, or device term."
                    },
                    "sponsor": {
                        "title": "Sponsor or collaborator",
                        "type": "string",
                        "description": "Optional sponsor, collaborator, company, university, or agency name."
                    },
                    "otherTerms": {
                        "title": "Other ClinicalTrials.gov query terms",
                        "type": "string",
                        "description": "Optional extra query text for ClinicalTrials.gov search syntax."
                    },
                    "statuses": {
                        "title": "Recruitment statuses",
                        "type": "array",
                        "description": "Limit to selected ClinicalTrials.gov overall statuses. Leave empty for all statuses.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "RECRUITING",
                                "NOT_YET_RECRUITING",
                                "ACTIVE_NOT_RECRUITING",
                                "COMPLETED",
                                "ENROLLING_BY_INVITATION",
                                "SUSPENDED",
                                "TERMINATED",
                                "WITHDRAWN",
                                "UNKNOWN"
                            ],
                            "enumTitles": [
                                "Recruiting",
                                "Not yet recruiting",
                                "Active, not recruiting",
                                "Completed",
                                "Enrolling by invitation",
                                "Suspended",
                                "Terminated",
                                "Withdrawn",
                                "Unknown"
                            ]
                        }
                    },
                    "phases": {
                        "title": "Trial phases",
                        "type": "array",
                        "description": "Limit to selected phases. Leave empty for all phases.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "EARLY_PHASE1",
                                "PHASE1",
                                "PHASE2",
                                "PHASE3",
                                "PHASE4",
                                "NA"
                            ],
                            "enumTitles": [
                                "Early Phase 1",
                                "Phase 1",
                                "Phase 2",
                                "Phase 3",
                                "Phase 4",
                                "Not applicable"
                            ]
                        }
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Optional facility country filter, e.g. United States, Canada, Germany."
                    },
                    "state": {
                        "title": "State / province",
                        "type": "string",
                        "description": "Optional facility state or province filter, e.g. California, Ontario."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Optional facility city filter, e.g. Boston, Toronto, Berlin."
                    },
                    "startDateFrom": {
                        "title": "Start date from",
                        "type": "string",
                        "description": "Optional study start-date lower bound in YYYY-MM-DD or YYYY-MM format."
                    },
                    "startDateTo": {
                        "title": "Start date to",
                        "type": "string",
                        "description": "Optional study start-date upper bound in YYYY-MM-DD or YYYY-MM format."
                    },
                    "lastUpdateFrom": {
                        "title": "Last update from",
                        "type": "string",
                        "description": "Optional ClinicalTrials.gov last-update lower bound in YYYY-MM-DD or YYYY-MM format."
                    },
                    "lastUpdateTo": {
                        "title": "Last update to",
                        "type": "string",
                        "description": "Optional ClinicalTrials.gov last-update upper bound in YYYY-MM-DD or YYYY-MM format."
                    },
                    "nctIds": {
                        "title": "Specific NCT IDs",
                        "type": "array",
                        "description": "Optional list of NCT identifiers to export. When provided, the actor queries these studies directly.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum trial-site rows",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of facility/site rows to save to the dataset.",
                        "default": 20
                    },
                    "includeStudiesWithoutLocations": {
                        "title": "Include studies without listed facilities",
                        "type": "boolean",
                        "description": "If enabled, studies with no location block are emitted as study-level rows with blank facility fields.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
