# 🟠 FDA Orange Book — Drug Patent & Exclusivity Tracker (`nexgendata/fda-orange-book-drug-patents`) Actor

Search the FDA Orange Book: every approved drug product joined with its listed patents and exclusivity, plus a computed estimated generic-entry date. Built for generic manufacturers, pharma IP attorneys, and biotech investors tracking patent cliffs.

- **URL**: https://apify.com/nexgendata/fda-orange-book-drug-patents.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 results

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/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

## 🟠 FDA Orange Book — Drug Patent & Exclusivity Tracker

Search the official **FDA Orange Book** (Approved Drug Products with Therapeutic Equivalence Evaluations) joined to every listed patent and FDA marketing-exclusivity entry — plus a **computed estimated generic-entry date** that no other public dataset hands you pre-calculated. This is the structured, queryable version of the patent-cliff intelligence that generic manufacturers, pharma IP attorneys, and biotech investors otherwise reconstruct by hand from PDFs and FDA flat files. Filter by active ingredient, brand name, applicant, application type, marketing status, and patent-expiry window, and the actor returns one clean JSON record per approved drug product with its full patent and exclusivity picture.

> **One actor. One token. The drug-patent-cliff dataset behind IQVIA, Cortellis, and Evaluate Pharma — delivered as pay-per-record JSON for cents per drug product, with the estimated generic-entry date already computed for you.**

### Why use this

- **The estimated generic-entry date is pre-computed.** The raw Orange Book gives you a list of patents and exclusivity expirations; it does not tell you when generics can actually launch. This actor reconciles the two (latest blocking patent vs latest exclusivity, whichever is later) into a single `estimatedGenericEntryDate` field — the number every generics business-development and investment thesis hinges on.
- **Patents and exclusivity are joined to the product, not scattered.** A single brand drug can carry a dozen patents and several overlapping exclusivities. The actor attaches the full arrays to each product so you stop manually cross-referencing Appendix tables.
- **Near-term-opportunity filtering built in.** `patentExpiringBefore` plus `onlyWithUnexpiredPatents` lets you ask "which products have a patent expiring in the next 18 months but are still protected today" — the canonical generic-pipeline screen — in one call.
- **Official source, no anti-bot wall.** Reads the FDA's public Orange Book data. No login, no enterprise contract, no per-seat licence.
- **ETL-ready.** Stable, flat JSON loads straight into Snowflake, BigQuery, Postgres, or a notebook without re-mapping each refresh.

### What you get

Each record represents one approved drug product (an NDA or ANDA application/product line) with its patent and exclusivity context. Core fields:

- `ingredient` — active ingredient(s) (e.g. `APIXABAN`, `SEMAGLUTIDE`)
- `tradeName` — brand / trade name (e.g. `ELIQUIS`, `OZEMPIC`)
- `applicant` — applicant / sponsor company holding the application
- `applicationTypeLabel` — `NDA` (brand / innovator) or `ANDA` (generic), human-readable
- `marketingStatusLabel` — `Prescription (RX)`, `Over-the-counter (OTC)`, or `Discontinued (DISCN)`
- `patentCount` — number of listed patents attached to the product
- `exclusivityCount` — number of FDA exclusivity entries attached to the product
- `estimatedGenericEntryDate` — the computed earliest plausible generic-entry date (latest blocking patent or exclusivity expiry, whichever is later)
- `hasUnexpiredProtection` — boolean: does the product still have at least one patent or exclusivity not yet expired?

When `includePatents=true` and `includeExclusivity=true`, each record additionally carries the full `patents` array (patent number, expiry date, drug-substance / drug-product / use-code flags, delisted flag) and the full `exclusivity` array (exclusivity code and expiry date) exactly as the Orange Book lists them.

### Use cases

- **Generic-pipeline prioritization** — Set `patentExpiringBefore=2027-12-31` and `onlyWithUnexpiredPatents=true` to surface every still-protected brand product whose last patent falls inside your development-and-filing window. This is the Para IV / ANDA target list that BD teams pay six figures a year to license.
- **Patent-cliff investing** — Filter to a sponsor (`applicant=Pfizer`) or a molecule and read `estimatedGenericEntryDate` across its franchise to model the revenue cliff. Biotech / pharma equity analysts use this to time short theses and loss-of-exclusivity (LOE) revenue fade.
- **Pharma IP / litigation diligence** — For a specific product, pull `includePatents=true` to see the full Orange-Book-listed patent estate (drug-substance vs method-of-use), the input layer for freedom-to-operate and Para IV certification analysis.
- **Licensing & in-licensing scouting** — Identify innovator products with thin patent estates (`patentCount` low) and near-term exclusivity expiry — attractive 505(b)(2) or authorized-generic partnering candidates.
- **Formulary & payer strategy** — PBMs and health plans model when a high-spend brand (`tradeName=Eliquis`) loses protection to plan formulary and rebate negotiations around the generic-entry date.
- **Supply-chain & API sourcing** — Generic CDMOs and API suppliers forecast demand by reading the wave of products with `estimatedGenericEntryDate` clustering in a given year.
- **Competitive intelligence** — Track which `applicant` companies dominate a therapeutic area and how exposed each is to imminent loss of exclusivity.
- **Regulatory / academic research** — Aggregate `estimatedGenericEntryDate` and `patentCount` across the whole book for studies on patent-thicketing and generic-entry delay.

### Sample output

```json
{
  "ingredient": "APIXABAN",
  "tradeName": "ELIQUIS",
  "applicant": "BRISTOL MYERS SQUIBB",
  "applicationTypeLabel": "NDA (brand/innovator)",
  "marketingStatusLabel": "Prescription (RX)",
  "patentCount": 4,
  "exclusivityCount": 1,
  "estimatedGenericEntryDate": "2028-11-21",
  "hasUnexpiredProtection": true,
  "patents": [
    {
      "patentNumber": "6967208",
      "patentExpireDate": "2026-09-17",
      "drugSubstanceFlag": true,
      "drugProductFlag": false,
      "patentUseCode": null,
      "delistFlag": false
    },
    {
      "patentNumber": "9326945",
      "patentExpireDate": "2028-11-21",
      "drugSubstanceFlag": false,
      "drugProductFlag": true,
      "patentUseCode": "U-1234",
      "delistFlag": false
    }
  ],
  "exclusivity": [
    {
      "exclusivityCode": "NCE",
      "exclusivityExpireDate": "2017-12-28"
    }
  ]
}
````

### Input parameters

| Parameter | What it does |
|-----------|--------------|
| `ingredient` | Filter by active ingredient (contains, case-insensitive). E.g. `apixaban`, `semaglutide`. |
| `tradeName` | Filter by brand / trade name (contains, case-insensitive). E.g. `Eliquis`, `Ozempic`. |
| `applicant` | Filter by applicant company name (contains, case-insensitive). E.g. `Pfizer`, `Teva`. |
| `applicationNumber` | Exact NDA/ANDA application number, e.g. `202155`. |
| `applicationType` | `N` = NDA (brand/innovator), `A` = ANDA (generic). |
| `marketingStatus` | `RX` = prescription, `OTC` = over-the-counter, `DISCN` = discontinued. |
| `onlyWithUnexpiredPatents` | Return only products that still have at least one patent not yet expired. |
| `patentExpiringAfter` | Keep products with a patent expiring on/after this date (`YYYY-MM-DD`). |
| `patentExpiringBefore` | Keep products with a patent expiring on/before this date (`YYYY-MM-DD`). Useful for finding near-term generic opportunities. |
| `includePatents` | Include the full array of listed patents per product. |
| `includeExclusivity` | Include the full array of FDA exclusivity entries per product. |
| `maxResults` | Maximum number of drug-product records to return. |

### How to use

#### Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("nexgendata/fda-orange-book-drug-patents").call(run_input={
    "ingredient": "apixaban",
    "onlyWithUnexpiredPatents": True,
    "includePatents": True,
    "includeExclusivity": True,
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["tradeName"], item["applicant"], item["estimatedGenericEntryDate"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~fda-orange-book-drug-patents/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "patentExpiringBefore": "2027-12-31",
    "onlyWithUnexpiredPatents": true,
    "applicationType": "N",
    "maxResults": 500
  }'
```

#### No-code (Zapier / Make)

Use the Apify app's "Run actor and get dataset items" action with actor ID `nexgendata/fda-orange-book-drug-patents`, then map `tradeName`, `estimatedGenericEntryDate`, and `hasUnexpiredProtection` into your sheet, CRM, or alerting workflow.

### Pricing

This actor runs on Apify's **pay-per-event (PPE)** model — **$0.10 per result** (one charge per drug-product record returned), plus a sub-cent actor-start event. No subscription, no seat licence, no minimum commitment.

Worked example:

- A targeted molecule pull returning 40 products → **$4.00**
- A therapeutic-area screen returning 500 products → **$50.00**
- A near-term-cliff screen capped at `maxResults=1000` → up to **$100.00**

Because billing is per result, a filter that returns 0 matching products costs effectively nothing — you never pay for empty runs.

### How this compares to IQVIA / Cortellis / Evaluate Pharma

The patent-cliff and exclusivity intelligence in this actor is the same data layer sold inside **IQVIA**, **Clarivate Cortellis**, and **Evaluate Pharma** — platforms that run **tens of thousands of dollars per seat per year** and lock the underlying fields behind dashboards and enterprise contracts. Those suites add curated forecasts, analyst commentary, and global coverage you should still pay for if you need them. But if your workflow is a **generic-pipeline screen**, a **patent-cliff revenue model**, or a **diligence pull on a specific molecule**, you do not need a full Cortellis seat to get the Orange Book's patent and exclusivity facts plus a computed generic-entry date — you need this actor, at a 95%+ cost saving, queryable from your own code.

### FAQ

**Q: Where does the data come from?**
A: The FDA's official Orange Book (Approved Drug Products with Therapeutic Equivalence Evaluations) — the product, patent, and exclusivity files the FDA publishes publicly.

**Q: How is `estimatedGenericEntryDate` calculated?**
A: It is the later of (a) the latest unexpired blocking patent expiry and (b) the latest exclusivity expiry attached to the product. It is an estimate for planning — it does not account for Para IV settlements, 30-month stays, pediatric extensions granted after the data snapshot, or at-risk launches. Always verify against the primary filing for legal decisions.

**Q: What's the difference between NDA and ANDA records?**
A: `NDA` products are brand/innovator applications (these carry the patents and exclusivities that block generics). `ANDA` products are generics themselves and generally carry no listed patents. Use `applicationType=N` to focus on the innovator products that define a patent cliff.

**Q: Why do some products show `patentCount: 0`?**
A: Generics (ANDAs), discontinued products, and older off-patent brands often have no Orange-Book-listed patents. Combine `applicationType=N` with `onlyWithUnexpiredPatents=true` to keep only still-protected innovator products.

**Q: Can I get the full patent list, not just the count?**
A: Yes — set `includePatents=true` (and `includeExclusivity=true`) and each record carries the full arrays with patent numbers, expiry dates, and drug-substance / drug-product / use-code flags.

**Q: How current is it?**
A: The Orange Book is updated by the FDA on a rolling basis (with monthly cumulative supplements). Schedule the actor monthly via Apify's built-in scheduler to track newly listed patents and newly granted exclusivities.

### Schema stability & versioning

This actor follows NexGenData's **additive-only schema** contract. New fields may be added over time (they appear as new JSON keys, defaulting to `null` for older runs), but existing fields are never renamed or removed without a major-version bump and advance changelog notice. Field semantics — units, date formats, value-sets — are never silently changed. You can build production pipelines on this output without fear of a refresh breaking your ETL.

### Compliance & legal

- This actor reformats **public, official FDA Orange Book data**. It is not affiliated with, endorsed by, or sponsored by the FDA.
- `estimatedGenericEntryDate` is a computed convenience estimate, not legal or investment advice. For any regulated decision — Para IV strategy, LOE forecasting, freedom-to-operate, formulary timing — **verify against the primary FDA Orange Book filing and consult qualified counsel**.
- You are responsible for ensuring your downstream use complies with applicable laws and any sector-specific rules.

### Related NexGenData actors

Part of NexGenData's **Pharma & Health intelligence** cluster — pair this actor with:

- [FDA Purple Book — Biologics & Biosimilars Tracker](https://apify.com/nexgendata/fda-purple-book-biologics-biosimilars?fpr=2ayu9b)
- [FDA Drug Shortages Monitor](https://apify.com/nexgendata/fda-drug-shortages-monitor?fpr=2ayu9b)
- [FDA Recall Monitor](https://apify.com/nexgendata/fda-recall-monitor?fpr=2ayu9b)
- [FDA Drug Approvals Tracker](https://apify.com/nexgendata/fda-drug-approvals?fpr=2ayu9b)
- [ClinicalTrials.gov Trials Tracker](https://apify.com/nexgendata/clinical-trials-tracker?fpr=2ayu9b)
- [NIH RePORTER Grants Scraper](https://apify.com/nexgendata/nih-reporter-grants-scraper?fpr=2ayu9b)

Browse the full 200+ actor catalog at **https://apify.com/nexgendata?fpr=2ayu9b**.

# Actor input Schema

## `ingredient` (type: `string`):

Filter by active ingredient (contains, case-insensitive). E.g. 'apixaban', 'semaglutide'.

## `tradeName` (type: `string`):

Filter by brand name (contains, case-insensitive). E.g. 'Eliquis', 'Ozempic'.

## `applicant` (type: `string`):

Filter by applicant company name (contains, case-insensitive). E.g. 'Pfizer', 'Teva'.

## `applicationNumber` (type: `string`):

Exact NDA/ANDA application number, e.g. '202155'.

## `applicationType` (type: `array`):

N = NDA (brand/innovator), A = ANDA (generic).

## `marketingStatus` (type: `array`):

RX = prescription, OTC = over-the-counter, DISCN = discontinued.

## `onlyWithUnexpiredPatents` (type: `boolean`):

Return only products that still have at least one patent not yet expired.

## `patentExpiringAfter` (type: `string`):

Keep products with a patent expiring on/after this date (YYYY-MM-DD).

## `patentExpiringBefore` (type: `string`):

Keep products with a patent expiring on/before this date (YYYY-MM-DD). Useful for finding near-term generic opportunities.

## `includePatents` (type: `boolean`):

Include the full array of listed patents per product.

## `includeExclusivity` (type: `boolean`):

Include the full array of FDA exclusivity entries per product.

## `maxResults` (type: `integer`):

Maximum number of drug-product records to return.

## Actor input object example

```json
{
  "ingredient": "apixaban",
  "onlyWithUnexpiredPatents": false,
  "includePatents": true,
  "includeExclusivity": true,
  "maxResults": 1000
}
```

# 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 = {
    "ingredient": "apixaban"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/fda-orange-book-drug-patents").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 = { "ingredient": "apixaban" }

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/fda-orange-book-drug-patents").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 '{
  "ingredient": "apixaban"
}' |
apify call nexgendata/fda-orange-book-drug-patents --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/fda-orange-book-drug-patents",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🟠 FDA Orange Book — Drug Patent & Exclusivity Tracker",
        "description": "Search the FDA Orange Book: every approved drug product joined with its listed patents and exclusivity, plus a computed estimated generic-entry date. Built for generic manufacturers, pharma IP attorneys, and biotech investors tracking patent cliffs.",
        "version": "0.0",
        "x-build-id": "VoKjKjv6hoUpw9VcC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~fda-orange-book-drug-patents/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-fda-orange-book-drug-patents",
                "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/nexgendata~fda-orange-book-drug-patents/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-fda-orange-book-drug-patents",
                "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/nexgendata~fda-orange-book-drug-patents/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-fda-orange-book-drug-patents",
                "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",
                "properties": {
                    "ingredient": {
                        "title": "Active ingredient",
                        "type": "string",
                        "description": "Filter by active ingredient (contains, case-insensitive). E.g. 'apixaban', 'semaglutide'."
                    },
                    "tradeName": {
                        "title": "Brand / trade name",
                        "type": "string",
                        "description": "Filter by brand name (contains, case-insensitive). E.g. 'Eliquis', 'Ozempic'."
                    },
                    "applicant": {
                        "title": "Applicant / company",
                        "type": "string",
                        "description": "Filter by applicant company name (contains, case-insensitive). E.g. 'Pfizer', 'Teva'."
                    },
                    "applicationNumber": {
                        "title": "FDA application number",
                        "type": "string",
                        "description": "Exact NDA/ANDA application number, e.g. '202155'."
                    },
                    "applicationType": {
                        "title": "Application type",
                        "type": "array",
                        "description": "N = NDA (brand/innovator), A = ANDA (generic).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "N",
                                "A"
                            ],
                            "enumTitles": [
                                "NDA (brand)",
                                "ANDA (generic)"
                            ]
                        }
                    },
                    "marketingStatus": {
                        "title": "Marketing status",
                        "type": "array",
                        "description": "RX = prescription, OTC = over-the-counter, DISCN = discontinued.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "RX",
                                "OTC",
                                "DISCN"
                            ],
                            "enumTitles": [
                                "Prescription",
                                "Over-the-counter",
                                "Discontinued"
                            ]
                        }
                    },
                    "onlyWithUnexpiredPatents": {
                        "title": "Only products with unexpired patents",
                        "type": "boolean",
                        "description": "Return only products that still have at least one patent not yet expired.",
                        "default": false
                    },
                    "patentExpiringAfter": {
                        "title": "Patent expiring after",
                        "type": "string",
                        "description": "Keep products with a patent expiring on/after this date (YYYY-MM-DD)."
                    },
                    "patentExpiringBefore": {
                        "title": "Patent expiring before",
                        "type": "string",
                        "description": "Keep products with a patent expiring on/before this date (YYYY-MM-DD). Useful for finding near-term generic opportunities."
                    },
                    "includePatents": {
                        "title": "Include patent list",
                        "type": "boolean",
                        "description": "Include the full array of listed patents per product.",
                        "default": true
                    },
                    "includeExclusivity": {
                        "title": "Include exclusivity list",
                        "type": "boolean",
                        "description": "Include the full array of FDA exclusivity entries per product.",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Maximum number of drug-product records to return.",
                        "default": 1000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
