# ClinicalTrials.gov Scraper | Sponsors & Research Sites (`peerless_columbine/clinical-trial-sponsor-site-export`) Actor

Export ClinicalTrials.gov study records with sponsors, eligibility, outcomes, available contacts, complete nested locations and explicit source dates.

- **URL**: https://apify.com/peerless_columbine/clinical-trial-sponsor-site-export.md
- **Developed by:** [tingyou333 zhuang](https://apify.com/peerless_columbine) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 delivered 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 Trial Sponsor & Site Export

Prepare recurring study, sponsor and site lists from **ClinicalTrials.gov**, maintained by the **U.S. National Library of Medicine (NLM)**. A study is the primary Dataset item. Its complete available site list remains nested in `locations`, alongside study eligibility, outcomes, document metadata and available central and facility contacts. The site CSV link derives site rows from those locations without another registry collection. Matching a recruiting study does not mean every listed site is recruiting.

This Actor is for clinical operations and research teams comparing sponsor pipelines, study eligibility or institutional sites. This is registry metadata, not patient data, medical advice or an independent verification of a study's claims. It is not an email-marketing list.

### Bounded default example

Use [examples/default.json](examples/default.json):

```json
{
  "condition": "type 2 diabetes",
  "studyStatusFilter": "recruitingAndNotYetRecruiting",
  "funderTypes": [
    "industry"
  ],
  "maxItems": 10,
  "pageSize": 5,
  "maxRequests": 5,
  "runTimeoutSecs": 240,
  "maxResponseBytes": 8388608,
  "maxRecordBytes": 8388608
}
```

This explicit example requests up to10 distinct studies, in API pages of at most5. Its total transport budget is5 attempts, including DNS and `/api/v2/version`; the runtime deadline is240seconds and response/record limits are8MiB each. DNS, errors and source behaviour can use the budget before10 studies arrive. The API may have more matches after the bounded run; the report must say so.

Schema defaults also set `maxItems=10`, the safety values shown above, unrestricted status/sex/results, relevance ordering and years for age units. `condition`, the recruiting-status selection and `funderTypes=["industry"]` prefill the UI example. Prefills do not change the API defaults. Native API input `{}` therefore differs from clicking the prefilled example. The separate [URL example](examples/search-url.json) demonstrates URL precedence. Do not send a URL together with filter values you expect to be combined: URL query filters replace separate filters. Output and safety limits still apply.

### Search and collection controls

The following search fields and execution controls are available. No field is required. Empty optional text or arrays add no filter. Filters across supplied fields narrow the search; multiple choices within a category are alternatives. Manual age bounds are additional constraints when supplied. Invalid dates or reversed bounds require correction rather than silent swapping.

| Field | Type | Own schema default | Meaning and bounds |
|---|---|---|---|
| `startUrl` | string | `unset` | Optional ClinicalTrials.gov search or studies-API URL. Its query replaces the separate search filters. The study limit and safety settings still apply. No credentials or other hosts. |
| `maxItems` | integer | `10` | Stop after this many distinct study rows. This is separate from page size and request budget. A large accepted value does not guarantee that a run will finish within its time or charge limit. Values: 1–1000000. |
| `condition` | string | `unset` | Search diseases or conditions, for example type 2 diabetes. Can be combined with the other search fields. |
| `otherTerms` | string | `unset` | Search other terms in registry records. Leave empty to omit this query. |
| `intervention` | string | `unset` | Search an intervention, medicine, device or procedure reported in a study. |
| `location` | string | `unset` | Search the registry by place, such as city, region, postal code or country. This filters studies; it does not remove other listed sites from a matching study. |
| `studyStatusFilter` | string | `"all"` | Choose all study statuses or the recruiting and not-yet-recruiting study statuses. A study status does not imply the same status at each site. Values: all / recruitingAndNotYetRecruiting. |
| `sex` | string | `"all"` | Restrict study eligibility by sex, or leave unrestricted. This is registry eligibility data, not participant-level data. Values: all / female / male. |
| `ageGroups` | array | `unset` | Select any standard age buckets to match. An empty list leaves this filter unset. Manual age bounds are separate filters. Values: child / adult / older. |
| `ageRangeFrom` | number | `unset` | Optional nonnegative lower eligibility-age bound, expressed in the chosen lower-bound unit. Values: 0–no schema maximum. |
| `ageRangeFromUnit` | string | `"years"` | Unit for the lower age bound. Subyear units remain available. Values: years / months / weeks / days / hours / minutes. |
| `ageRangeTo` | number | `unset` | Optional nonnegative upper eligibility-age bound, expressed in the chosen upper-bound unit. Reversed bounds must be corrected. Values: 0–no schema maximum. |
| `ageRangeToUnit` | string | `"years"` | Unit for the upper age bound. It may differ from the lower-bound unit. Values: years / months / weeks / days / hours / minutes. |
| `acceptsHealthyVolunteers` | boolean | `unset` | Enable to require studies that accept healthy volunteers. Leaving this off adds no healthy-volunteer restriction. |
| `phases` | array | `unset` | Choose one or more trial phases. Early Phase 1 uses phase0; notApplicable preserves the registry not-applicable category. Values: phase0 / phase1 / phase2 / phase3 / phase4 / notApplicable. |
| `studyTypes` | array | `unset` | Select study categories, including patient registries and individual, intermediate-size or treatment expanded-access categories. An empty selection adds no type restriction. Values: interventional / observational / patientRegistry / expandedAccess / expandedAccessIndividual / expandedAccessIntermediate / expandedAccessTreatment. |
| `resultsAvailability` | string | `"any"` | Require posted results, require their absence, or leave unrestricted. This does not request extraction of results tables. Values: any / withResults / withoutResults. |
| `documentTypes` | array | `unset` | Filter for uploaded protocol, statistical-analysis-plan or informed-consent documents. Returned document metadata does not download attachment bytes. Values: protocol / sap / consent. |
| `funderTypes` | array | `unset` | Select reported sponsor or funder categories. This does not infer an organisation category from its name. Values: nih / federal / industry / other. |
| `studyStartDateFrom` | string | `unset` | Optional from bound for study start, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `studyStartDateTo` | string | `unset` | Optional through bound for study start, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `primaryCompletionDateFrom` | string | `unset` | Optional from bound for primary completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `primaryCompletionDateTo` | string | `unset` | Optional through bound for primary completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `studyCompletionDateFrom` | string | `unset` | Optional from bound for study completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `studyCompletionDateTo` | string | `unset` | Optional through bound for study completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `firstPostedDateFrom` | string | `unset` | Optional from bound for first registration posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `firstPostedDateTo` | string | `unset` | Optional through bound for first registration posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `resultsFirstPostedDateFrom` | string | `unset` | Optional from bound for first results posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `resultsFirstPostedDateTo` | string | `unset` | Optional through bound for first results posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `lastUpdatePostedDateFrom` | string | `unset` | Optional from bound for latest study update posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `lastUpdatePostedDateTo` | string | `unset` | Optional through bound for latest study update posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output. |
| `titleOrAcronym` | string | `unset` | Search a study title or acronym. |
| `outcomeMeasure` | string | `unset` | Search reported outcome-measure text. |
| `sponsorOrCollaborator` | string | `unset` | Search organisations named as lead sponsors or collaborators. |
| `leadSponsor` | string | `unset` | Search lead-sponsor names only. |
| `studyIds` | string | `unset` | Search NCT identifiers or other registry-reported protocol identifiers. |
| `facilityName` | string | `unset` | Search a named study facility. Matching a facility must not discard the other locations of the study. |
| `fdaRegulationViolation` | boolean | `unset` | Enable to require the registry FDAAA results-submission violation annotation. This is not an independent legal compliance assessment. |
| `sortBy` | string | `"relevance"` | Choose relevance or newest registrations first. Source sorting and any remaining continuation are recorded by the runtime; this is not a live change-monitoring service. Values: relevance / newestFirst. |
| `pageSize` | integer | `5` | Maximum study count requested per API page. It is not the output limit; a source page may return fewer studies. Values: 1–1000. |
| `maxRequests` | integer | `5` | Limit all source-side transport attempts, including DNS resolution and the registry version request. Stop with explicit coverage status if another page would exceed the budget. Values: 1–1000000. |
| `runTimeoutSecs` | integer | `240` | Time budget in seconds for this collection. The platform run timeout may be shorter; completed rows must not be labelled a complete source export after interruption. Values: 30–3600. |
| `maxResponseBytes` | integer | `8388608` | Maximum accepted response bytes, with streaming and decoded-content checks. An oversized response is an explicit error, not silent field truncation. Values: 1024–8388608. |
| `maxRecordBytes` | integer | `8388608` | Maximum encoded bytes for one complete study row, including nested locations and contacts. Oversize rows are reported; fields or sites must not be silently removed to fit. Values: 1024–8388608. |

`startUrl` is limited to recognised ClinicalTrials.gov search/studies aliases; the runtime must translate them into the supported official APIv2 rather than visiting arbitrary targets or treating an internal endpoint alias as independent access permission. `newestFirst` sorts by the first study posting date. Manual age bounds select studies whose published eligibility interval overlaps the requested interval; they also apply when age buckets are selected. Definitely reversed mixed-unit bounds are rejected using calendar ranges of28–31days/month and365–366days/year; ambiguous calendar bounds retain their source units. An NCT-only API query must not silently drop other requested constraints.

`maxItems` accepts up to1,000,000 to preserve the full requested range. This is not a claim that1M rows have been tested, will fit a small container, or can finish within the example budgets. Page size, request/time/charge limits and source continuation remain separate. Increase resource settings deliberately; a bound reached with unconsumed source data must be reported as incomplete coverage. Oversized responses/rows must fail explicitly, not silently delete sites, contacts or text.

### Study rows and site export

The overview fields are:

`nctId`, `briefTitle`, `studyUrl`, `briefSummary`, `overallStatus`, `hasResults`, `studyType`, `phase`, `leadSponsorName`, `leadSponsorClass`, `conditions`, `interventions`, `primaryOutcomeMeasures`, `secondaryOutcomeMeasures`, `locations`, `enrollmentCount`, `enrollmentType`, `startDate`, `primaryCompletionDate`, `completionDate`, `lastUpdatePostDate`, `gender`, `minimumAge`, `maximumAge`, `standardAges`, `inclusionCriteria`, `exclusionCriteria`, `centralContacts`, `collaborators`, `scrapedAt`, `error`.

Additional fields preserve official title, original eligibility text, full outcome objects alongside measure labels, phase values, first/results posting dates, healthy-volunteer eligibility, FDAAA annotation, document metadata and source provenance. `rawStudy` retains the complete received study JSON; `sourceStudyJsonSha256` hashes canonical study JSON and must not be described as an HTTP response-byte hash. See [.actor/dataset_schema.json](.actor/dataset_schema.json) for field types.

- `locations` retains all sites of a matching study, including their own status, facility, locality, postal code, country, coordinates and contacts when published. There is no hidden site count limit. Do not deduplicate facilities globally: the same facility can belong to several studies.
- `centralContacts` and each site's `contacts` retain published name, role, phone, extension and email when available. A missing contact is not permission to invent one. Use these for legitimate clinical/institutional workflows; extracted emails must not be used for marketing or promotion.
- `interventions`, outcome measures, collaborators and documents retain available source metadata. Document filtering and links do not imply downloaded PDFs, linked-publication extraction, OCR or extraction of results tables.
- `hasResults` and `resultsFirstPostedDate` describe reported results presence/posting. They do not attest to scientific quality or that the complete results tables were collected.
- Preserve `eligibilityCriteria` in full. Parsed inclusion/exclusion arrays supplement it; ambiguous headings must not cause the original text to be discarded.
- Nullable scalars mean unknown/unavailable; an empty array means no entries were returned for that collection. The transport must request the complete intended source fields before treating absence as registry absence. No fabricated contact, date, zero enrollment or false FDAAA flag.
- Source dates can beYYYY-MM orYYYY-MM-DD. Retain their precision. `lastUpdatePostDate` is a study update; `scrapedAt` is retrieval UTC; `sourceDataTimestamp` is the registry processing date from `/api/v2/version`. They are not interchangeable. If the processing date cannot be obtained, show it as unknown and report the failure.

The study Dataset supports JSON, CSV, Excel and XML through Apify exports. `sitesCsv` in [.actor/output_schema.json](.actor/output_schema.json) uses `unwind=locations&omit=rawStudy`: location fields become top-level CSV columns (including `facility`, `status`, `city`, `state`, `zip` and `country`; nested values use columns such as `contacts/0/email` and `geoPoint/lat` when published), while the repeated `rawStudy` column is omitted from this export only. The default Dataset retains the complete `rawStudy`. The export keeps NCT, sponsor, study status, site details, source credit, modification notices and source dates. This export is derived from study rows and adds no custom per-site fee. A study without sites does not represent a real site. The source study JSON remains authoritative. No second independently populated sites Dataset is promised. Apify CSV exports have a 2,000-column limit; use complete JSON when large nested arrays exceed this table limit.

### Coverage, errors and charges

Pagination follows source cursors until exhaustion, the study cap, or an explicit safety/charge bound. An empty page may still have another cursor; it does not prove exhaustion. Repeated cursors, invalid responses and source failures must not be reported as complete export. Good rows already acknowledged before a later failure remain available; `RUN-REPORT` must distinguish complete source exhaustion, requested-study limit, partial collection, errors and uncertain delivery. An abrupt platform kill can prevent a final report; absence of a report is not success.

Valid studies are delivered in batches of at most 50 rows, split further around 1 MiB of serialized output; a larger valid record is delivered alone. Each batch is acknowledged by the Dataset before its custom study events are charged. Unknown write or charge outcomes stop new work and retain uncertainty; they must not trigger blind write replay. Failed or skipped studies do not become billable success rows. A charge limit can stop collection after the last affordable study. RUN-REPORT records acknowledged rows and observed SDK event counts; the platform billing receipt is authoritative for charges.

Actor fees are **$0.002 per delivered study**, plus **$0.001 per startup unit**. Ten studies with one startup unit cost $0.021 in Actor fees. Site expansion adds no separate fee. Startup units can depend on selected memory, with a minimum of one; check the Store Pricing tab for the active platform usage allocation.

An optional Apify run-price limit is honoured when supplied. Omit it to use the normal SDK behaviour; the study, request and time limits still apply. Source failures, invalid studies and duplicate NCT IDs are not charged as new study results. A snapshot of the public registry is not a guarantee of completeness, scientific quality or future availability.

### Source attribution and reuse

Source: [ClinicalTrials.gov](https://clinicaltrials.gov/), a U.S. Government registry maintained by NLM. [NLM's2025 API guidance](https://www.nlm.nih.gov/pubs/techbull/ja25/ja25_clinical_trials_screen-scraping.html) recommends documented API GET and cursor pagination. No ClinicalTrials.gov API key is required for the documented public API. This independent product is not endorsed by NLM.

Follow the [ClinicalTrials.gov Terms and Conditions](https://clinicaltrials.gov/about-site/terms-conditions). Preserve source credit, keep redistributed data current, clearly display the registry's processing date and disclose all modifications. This product's transformations include field renaming, nested-object extraction, optional eligibility-section parsing, duplicate NCT suppression and a derived site export; values are not independently corrected or clinically validated. Each delivered snapshot needs its actual source processing/retrieval dates. A saved export does not update itself: rerun and replace or reconcile dated snapshots when current data are needed.

Do not claim proprietary ownership of the database or describe it as a non-government database. Do not use extracted email addresses for marketing or promotion. Third-party content and rights outside the United States can carry additional conditions; this package does not grant blanket worldwide rights to all registry text or attachments. The service charge is for automation, normalisation and integration, not ownership of the public database. Preserve attribution and modification notices when distributing derived files.

# Actor input Schema

## `startUrl` (type: `string`):

Optional ClinicalTrials.gov search or studies-API URL. Its query replaces the separate search filters. The study limit and safety settings still apply. No credentials or other hosts.

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

Stop after this many distinct study rows. This is separate from page size and request budget. A large accepted value does not guarantee that a run will finish within its time or charge limit.

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

Search diseases or conditions, for example type 2 diabetes. Can be combined with the other search fields.

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

Search other terms in registry records. Leave empty to omit this query.

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

Search an intervention, medicine, device or procedure reported in a study.

## `location` (type: `string`):

Search the registry by place, such as city, region, postal code or country. This filters studies; it does not remove other listed sites from a matching study.

## `studyStatusFilter` (type: `string`):

Choose all study statuses or the recruiting and not-yet-recruiting study statuses. A study status does not imply the same status at each site.

## `sex` (type: `string`):

Restrict study eligibility by sex, or leave unrestricted. This is registry eligibility data, not participant-level data.

## `ageGroups` (type: `array`):

Select any standard age buckets to match. An empty list leaves this filter unset. Manual age bounds are separate filters.

## `ageRangeFrom` (type: `number`):

Optional nonnegative lower eligibility-age bound, expressed in the chosen lower-bound unit.

## `ageRangeFromUnit` (type: `string`):

Unit for the lower age bound. Subyear units remain available.

## `ageRangeTo` (type: `number`):

Optional nonnegative upper eligibility-age bound, expressed in the chosen upper-bound unit. Reversed bounds must be corrected.

## `ageRangeToUnit` (type: `string`):

Unit for the upper age bound. It may differ from the lower-bound unit.

## `acceptsHealthyVolunteers` (type: `boolean`):

Enable to require studies that accept healthy volunteers. Leaving this off adds no healthy-volunteer restriction.

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

Choose one or more trial phases. Early Phase 1 uses phase0; notApplicable preserves the registry not-applicable category.

## `studyTypes` (type: `array`):

Select study categories, including patient registries and individual, intermediate-size or treatment expanded-access categories. An empty selection adds no type restriction.

## `resultsAvailability` (type: `string`):

Require posted results, require their absence, or leave unrestricted. This does not request extraction of results tables.

## `documentTypes` (type: `array`):

Filter for uploaded protocol, statistical-analysis-plan or informed-consent documents. Returned document metadata does not download attachment bytes.

## `funderTypes` (type: `array`):

Select reported sponsor or funder categories. This does not infer an organisation category from its name.

## `studyStartDateFrom` (type: `string`):

Optional from bound for study start, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `studyStartDateTo` (type: `string`):

Optional through bound for study start, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `primaryCompletionDateFrom` (type: `string`):

Optional from bound for primary completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `primaryCompletionDateTo` (type: `string`):

Optional through bound for primary completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `studyCompletionDateFrom` (type: `string`):

Optional from bound for study completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `studyCompletionDateTo` (type: `string`):

Optional through bound for study completion, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `firstPostedDateFrom` (type: `string`):

Optional from bound for first registration posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `firstPostedDateTo` (type: `string`):

Optional through bound for first registration posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `resultsFirstPostedDateFrom` (type: `string`):

Optional from bound for first results posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `resultsFirstPostedDateTo` (type: `string`):

Optional through bound for first results posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `lastUpdatePostedDateFrom` (type: `string`):

Optional from bound for latest study update posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `lastUpdatePostedDateTo` (type: `string`):

Optional through bound for latest study update posting, written YYYY-MM-DD. Source dates keep their published precision; do not enter a fabricated day into source output.

## `titleOrAcronym` (type: `string`):

Search a study title or acronym.

## `outcomeMeasure` (type: `string`):

Search reported outcome-measure text.

## `sponsorOrCollaborator` (type: `string`):

Search organisations named as lead sponsors or collaborators.

## `leadSponsor` (type: `string`):

Search lead-sponsor names only.

## `studyIds` (type: `string`):

Search NCT identifiers or other registry-reported protocol identifiers.

## `facilityName` (type: `string`):

Search a named study facility. Matching a facility must not discard the other locations of the study.

## `fdaRegulationViolation` (type: `boolean`):

Enable to require the registry FDAAA results-submission violation annotation. This is not an independent legal compliance assessment.

## `sortBy` (type: `string`):

Choose relevance or newest registrations first. Source sorting and any remaining continuation are recorded by the runtime; this is not a live change-monitoring service.

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

Maximum study count requested per API page. It is not the output limit; a source page may return fewer studies.

## `maxRequests` (type: `integer`):

Limit all source-side transport attempts, including DNS resolution and the registry version request. Stop with explicit coverage status if another page would exceed the budget.

## `runTimeoutSecs` (type: `integer`):

Time budget in seconds for this collection. The platform run timeout may be shorter; completed rows must not be labelled a complete source export after interruption.

## `maxResponseBytes` (type: `integer`):

Maximum accepted response bytes, with streaming and decoded-content checks. An oversized response is an explicit error, not silent field truncation.

## `maxRecordBytes` (type: `integer`):

Maximum encoded bytes for one complete study row, including nested locations and contacts. Oversize rows are reported; fields or sites must not be silently removed to fit.

## Actor input object example

```json
{
  "maxItems": 10,
  "condition": "type 2 diabetes",
  "studyStatusFilter": "recruitingAndNotYetRecruiting",
  "sex": "all",
  "ageRangeFromUnit": "years",
  "ageRangeToUnit": "years",
  "resultsAvailability": "any",
  "funderTypes": [
    "industry"
  ],
  "sortBy": "relevance",
  "pageSize": 5,
  "maxRequests": 5,
  "runTimeoutSecs": 240,
  "maxResponseBytes": 8388608,
  "maxRecordBytes": 8388608
}
```

# Actor output Schema

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

No description

## `overview` (type: `string`):

No description

## `studiesCsv` (type: `string`):

No description

## `sitesCsv` (type: `string`):

Each published location becomes a site row by merging its fields into the study row. Source credit, dates and modification notice remain; the duplicate rawStudy column is omitted only from this CSV export. Studies without listed locations do not imply real sites.

## `report` (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 = {
    "maxItems": 10,
    "condition": "type 2 diabetes",
    "studyStatusFilter": "recruitingAndNotYetRecruiting",
    "funderTypes": [
        "industry"
    ],
    "pageSize": 5,
    "maxRequests": 5,
    "runTimeoutSecs": 240,
    "maxResponseBytes": 8388608,
    "maxRecordBytes": 8388608
};

// Run the Actor and wait for it to finish
const run = await client.actor("peerless_columbine/clinical-trial-sponsor-site-export").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 = {
    "maxItems": 10,
    "condition": "type 2 diabetes",
    "studyStatusFilter": "recruitingAndNotYetRecruiting",
    "funderTypes": ["industry"],
    "pageSize": 5,
    "maxRequests": 5,
    "runTimeoutSecs": 240,
    "maxResponseBytes": 8388608,
    "maxRecordBytes": 8388608,
}

# Run the Actor and wait for it to finish
run = client.actor("peerless_columbine/clinical-trial-sponsor-site-export").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 '{
  "maxItems": 10,
  "condition": "type 2 diabetes",
  "studyStatusFilter": "recruitingAndNotYetRecruiting",
  "funderTypes": [
    "industry"
  ],
  "pageSize": 5,
  "maxRequests": 5,
  "runTimeoutSecs": 240,
  "maxResponseBytes": 8388608,
  "maxRecordBytes": 8388608
}' |
apify call peerless_columbine/clinical-trial-sponsor-site-export --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,peerless_columbine/clinical-trial-sponsor-site-export"
        }
    }
}
```

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/oWbVQJ4YKc35MNcda/builds/ApqB3oJ9LayOIyqNE/openapi.json
