# Google Patents Scraper (`scrapier/google-patents-scraper`) Actor

🔎 Google Patents Scraper extracts structured patent data from Google Patents — titles, abstracts, inventors, assignees, CPC/IPC, citations, claims, dates & PDFs. ⚡ Fast, reliable, and bulk-ready for IP research, competitive intel & R\&D landscaping. 📊 CSV/JSON/API.

- **URL**: https://apify.com/scrapier/google-patents-scraper.md
- **Developed by:** [Scrapier](https://apify.com/scrapier) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Google Patents Scraper

The Google Patents Scraper is a fast, reliable Google Patents data scraper that extracts structured patent records at scale — titles, abstracts, inventors, assignees, dates, links, PDFs, and optional deep fields like claims, citations, CPC/IPC, and patent family. It solves the repetitive, error-prone work of copy-paste by automating Google Patents data extraction via Google’s xhr/query and xhr/result endpoints, making it ideal for marketers, developers, data analysts, and researchers who need a production-ready Google Patents crawler for bulk runs. With CSV/JSON output and Apify API access, this Google Patents scraping tool enables end-to-end workflows — from quick lookups to large datasets for competitive intel, IP monitoring, and R&D landscaping.

### What data / output can you get?

| Data field | Description | Example value |
| --- | --- | --- |
| patentNumber | Publication number parsed from search results | "US12438891B1" |
| title | Cleaned patent title text | "Systems and methods for machine learning–based inference" |
| abstract | Cleaned snippet/abstract from results | "A system includes a model trained to..." |
| inventors | List of inventor names | ["Jane Doe", "John Smith"] |
| assignee | Assignee/owner from results | "Example Corp." |
| filingDate | Filing date (YYYY-MM-DD) | "2021-06-01" |
| publicationDate | Publication date (YYYY-MM-DD) | "2023-09-14" |
| grantDate | Grant date when available (YYYY-MM-DD) | "2024-05-10" |
| url | Canonical Google Patents URL | "https://patents.google.com/patent/US12438891B1" |
| pdfUrl | Direct link to the patent PDF on Google’s storage | "https://patentimages.storage.googleapis.com/US12438891B1.pdf" |
| scrapedAt | ISO-8601 timestamp of extraction (UTC, Z) | "2026-04-27T05:27:42Z" |
| classifications.cpc | CPC codes (when classifications enrichment is enabled) | ["G06N20/00"] |
| classifications.ipc | IPC codes (derived when present; may be empty) | ["G06N 20/00"] |
| citations.citedBy | Forward citations (when citations enrichment is enabled) | ["US2020123456A1", "EP3456789B1"] |
| citations.references | Backward citations (when citations enrichment is enabled) | ["US9876543B2"] |

Bonus/optional fields when enrichment is toggled on:
- fullText.description, fullText.claims — adds long-form description and claims text.
- patentFamily — list of related publications in the same family.

Exports are available via the Apify Dataset in CSV or JSON, and accessible through the Apify API for automations and pipelines.

### Key features

- ⚡️ Smart proxy ladder & resilience  
  Automatically tries direct requests first, then falls back to Apify datacenter proxies and finally residential proxies (up to 3 attempts). Successful responses “stick” to the working proxy tier for subsequent requests.

- 🧠 OR-merged query builder  
  Combines keywords, publication numbers, and q= terms from search URLs into a single OR-union so you can scrape Google Patents broadly without missing results when mixing inputs.

- 📦 Enrichment on demand  
  Toggle includeFullText, includeClaims, includeCitations, includePatentFamily, and includeClassifications to tailor each run. Get exactly the depth you need for IP research and Google Patents text mining.

- 📈 Bulk-ready pagination  
  Handles search pagination while respecting your maxResults cap — perfect for Google Patents bulk download workflows and building large datasets.

- 💾 CSV/JSON and API-friendly  
  Export data to CSV or JSON and access programmatically via the Apify API — ideal for developers and teams building ingestion pipelines or a Google Patents API alternative.

- 📎 PDF links included  
  Each record includes pdfUrl, enabling Google Patents PDF downloader workflows in your own system.

- 💻 Python-powered for reliability  
  Built on Python (aiohttp + Apify SDK), with concurrent detail fetching for efficient Google Patents data extraction.

### How to use Google Patents Scraper - step by step

1. Sign in to your Apify account.
2. Open the “Google Patents Scraper” actor.
3. Add input data:  
   - Use urls for patent page links, search links with q=, or plain keyword lines (plain lines are treated as search phrases).  
   - You can also set searchQuery and/or patentNumbers — all inputs are OR-merged so you get a broad combined result.
4. Narrow results (optional): set assignee, inventor, country, dateFrom/dateTo (absolute or relative like “30 days”), and patentType to filter your query.
5. Set limits and enrichment: choose maxResults (use 0 for no cap), and toggle includeFullText, includeClaims, includeCitations, includePatentFamily, includeClassifications.
6. Configure proxyConfiguration only if your workspace requires Apify Proxy for large or repeated runs.
7. Run the actor. It paginates results and logs progress. If enrichment is enabled, details load in parallel and rows appear in the dataset as soon as they’re ready.
8. Download your dataset as CSV or JSON or connect via the Apify API for downstream processing and Google Patents CSV export workflows.

Pro Tip: Automate end-to-end pipelines by pulling results via the Apify API into your Python scripts for further analysis, modeling, or Google Patents text mining.

### Use cases

| Use case | Description |
| --- | --- |
| Competitive intelligence for R&D | Analyze assignees, claims, and citations to map competitor focus areas and technology trajectories. |
| Patent landscaping for IP teams | Build comprehensive datasets by country, date range, and document kind to identify white spaces and clusters. |
| Academic research & text mining | Enable corpus creation with abstracts, optional descriptions, and claims for NLP pipelines. |
| Rapid patent metadata extraction | Extract titles, inventors, dates, and links at scale for dashboards and reporting. |
| Google Patents search results scraper | Turn keyword searches into structured datasets without manual export. |
| Dataset creation & bulk download | Use maxResults and CSV/JSON export for Google Patents dataset download workflows. |
| PDF library building | Leverage pdfUrl to fetch and archive PDFs in your own storage, tied to each patent record. |

### Why choose Google Patents Scraper?

The Google Patents Scraper is built for precision, scale, and real-world reliability.

- 🎯 Structured accuracy: Normalizes Google’s xhr/query results into clean fields for analytics and modeling.
- 🔀 Smarter queries: OR-merge keywords, search URLs, and publication numbers to avoid missed matches.
- 🚀 Scalable runs: Handles pagination and parallel detail loading for large batches.
- 🛠️ Developer access: Export CSV/JSON and integrate via the Apify API — great for Google Patents scraper Python workflows.
- 🛡️ Robust connectivity: Direct-first requests with automatic fallback to datacenter and residential proxies.
- ✅ Public-data focus: Designed to extract publicly available records from patents.google.com responsibly.
- 💸 Operational efficiency: Reduce manual effort and streamline Google Patents data extraction across teams.

In short: a production-grade Google Patents crawler that outperforms brittle, manual, or extension-based alternatives.

### Is it legal / ethical to use Google Patents Scraper?

Yes — when used responsibly. This actor extracts public data from patents.google.com and does not access private or authenticated content.

Guidelines for compliant use:
- Use only publicly available information and respect Google’s terms of service.
- Ensure your usage aligns with applicable data protection laws (e.g., GDPR, CCPA).
- Avoid collecting or processing personal data beyond what is publicly provided in patent records.
- Validate your specific use case with your legal team, especially for redistribution or commercial reuse.

### Input parameters & output format

Example JSON input
```json
{
  "urls": [
    "https://patents.google.com/patent/US12438891B1",
    "machine learning",
    "https://patents.google.com/?q=graph+neural+network"
  ],
  "searchQuery": "computer vision",
  "patentNumbers": ["EP1234567B1", "WO2020123456A1"],
  "assignee": "Example Corp",
  "inventor": "Jane Doe",
  "country": "US",
  "dateFrom": "6 months",
  "dateTo": "",
  "patentType": "ANY",
  "maxResults": 25,
  "includeFullText": false,
  "includeClaims": true,
  "includeCitations": true,
  "includePatentFamily": true,
  "includeClassifications": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

Parameters

- urls (array)\
  Description: One entry per line: patent URLs, search URLs (q=), or plain keywords. Plain lines are search phrases. All entries OR-merge with the Keywords field.\
  Default: n/a (prefill shown in UI). Required: No

- searchQuery (string)\
  Description: Main keyword search. OR-merged with any q= from search URLs and with publication numbers from patent URLs.\
  Default: ""\
  Required: No

- patentNumbers (array)\
  Description: Specific patent IDs. Combined with keywords using OR.\
  Default: \[]\
  Required: No

- assignee (string)\
  Description: Focus on patents owned by a particular organization.\
  Default: ""\
  Required: No

- inventor (string)\
  Description: Find patents listing a specific inventor.\
  Default: ""\
  Required: No

- country (string)\
  Description: Patent office / region filter (e.g., US, EP, WO) or ANY to search everywhere.\
  Default: "ANY"\
  Required: No

- dateFrom (string)\
  Description: Published after — absolute (YYYY-MM-DD) or relative (e.g., 30 days, 6 months).\
  Default: ""\
  Required: No

- dateTo (string)\
  Description: Published before — absolute or relative.\
  Default: ""\
  Required: No

- patentType (string)\
  Description: Limit to grants, applications, or designs — or ANY for all types.\
  Default: "ANY"\
  Required: No

- maxResults (integer)\
  Description: Cap how many patents to collect; use 0 for no limit.\
  Default: 10\
  Required: No

- includeFullText (boolean)\
  Description: Adds the full written description (large text).\
  Default: false\
  Required: No

- includeClaims (boolean)\
  Description: Adds the patent claims text.\
  Default: true\
  Required: No

- includeCitations (boolean)\
  Description: Adds backward and forward citation lists where available.\
  Default: true\
  Required: No

- includePatentFamily (boolean)\
  Description: Adds related publications in the same family.\
  Default: true\
  Required: No

- includeClassifications (boolean)\
  Description: Adds CPC/IPC classification codes.\
  Default: true\
  Required: No

- proxyConfiguration (object)\
  Description: Optional Apify Proxy settings. Leave default off if you don’t need it.\
  Default: {} (UI may prefill useApifyProxy)\
  Required: No

Note: At least one of urls, searchQuery, or patentNumbers must yield a query; otherwise the run exits with a helpful log message.

Example JSON output

```json
{
  "patentNumber": "US12438891B1",
  "title": "Systems and methods for machine learning–based inference",
  "abstract": "A system includes a model trained to...",
  "inventors": ["Jane Doe", "John Smith"],
  "assignee": "Example Corp.",
  "filingDate": "2021-06-01",
  "publicationDate": "2023-09-14",
  "grantDate": "2024-05-10",
  "classifications": {
    "cpc": ["G06N20/00", "G06F17/18"],
    "ipc": ["G06N 20/00", "G06F 17/18"]
  },
  "url": "https://patents.google.com/patent/US12438891B1",
  "pdfUrl": "https://patentimages.storage.googleapis.com/US12438891B1.pdf",
  "scrapedAt": "2026-04-27T05:27:42Z",
  "citations": {
    "citedBy": ["EP3456789B1"],
    "references": ["US9876543B2", "WO2020123456A1"]
  },
  "fullText": {
    "claims": "1. A method comprising ...",
    "description": "In some implementations, the system comprises ..."
  },
  "patentFamily": ["EP1234567B1", "WO2020123456A1"]
}
```

Notes:

- Optional fields (fullText, patentFamily) appear only when the corresponding include\* flags are enabled.
- Some fields may be empty strings or empty arrays when not available from the source or when detail pages can’t be retrieved (the item is still saved with available data).

### FAQ

#### Do I need to log in or provide cookies to scrape Google Patents?

No. The actor works with publicly available endpoints on patents.google.com and does not require login or cookies. It uses direct requests first and only falls back to proxies if needed.

#### Can I use this with Python or an API?

Yes. Results are stored in an Apify Dataset, which you can access via the Apify API. This makes it easy to integrate into Google Patents scraper Python workflows or downstream automation.

#### How many patents can I scrape in one run?

You control this with maxResults. Set a specific number to cap output or use 0 for no limit. The actor paginates results automatically and enriches details in parallel when requested.

#### Can I export to CSV or JSON?

Yes. You can export your dataset as CSV or JSON directly from Apify. This supports Google Patents CSV export and broader Google Patents dataset download use cases.

#### Does it include patent PDFs?

Each record includes a pdfUrl pointing to the Google patent images storage. You can use this link to download PDFs externally as part of a Google Patents PDF downloader workflow.

#### Can it extract claims, citations, classifications, and family?

Yes. Toggle includeClaims, includeCitations, includeClassifications, and includePatentFamily to add these fields to your output. You can also enable includeFullText to add the long-form description.

#### What filters are available?

You can filter by assignee, inventor, country (office/region), dateFrom/dateTo (absolute or relative), and patentType (grant, application, design, or ANY). Inputs are OR-merged with keywords and publication numbers for broad coverage.

#### How does it avoid getting blocked?

The actor tries direct requests first. On block or failure, it automatically climbs a proxy ladder: datacenter proxies (e.g., SHADER) and then residential proxies with up to 3 retries. After a successful proxy response, it “sticks” to the working tier.

### Closing thoughts

The Google Patents Scraper is built for structured, scalable Google Patents data extraction — from quick keyword pulls to large, enriched datasets. With smart query merging, optional deep fields, CSV/JSON exports, and Apify API access, it serves marketers, developers, data analysts, and researchers alike. Build pipelines, power dashboards, or kick off Google Patents text mining with a dependable Google Patents search results scraper. Start extracting smarter patent insights — at scale and on your terms.

# Actor input Schema

## `urls` (type: `array`):

✅ One entry per line: patent URLs, search URLs (q=), or plain keywords (e.g. machine learning). Plain lines are search phrases. All entries OR-merge with the Keywords field.

## `searchQuery` (type: `string`):

💡 Main keyword search. Works together with URLs: your text is OR-merged with any q= from search URLs and with publication numbers from patent URLs so you get a broad combined result.

## `patentNumbers` (type: `array`):

📋 Specific patent IDs. Combined with keywords using OR so you still get broad results when both are set.

## `assignee` (type: `string`):

🏭 Focus on patents owned by a particular organization.

## `inventor` (type: `string`):

🧑‍🔬 Find patents listing a specific inventor.

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

🗺️ Pick a country or office — or **Any** to search everywhere.

## `dateFrom` (type: `string`):

⏳ Pick a **calendar date** or a **relative** range (e.g. *30 days*, *6 months*). Leave empty for no lower bound.

## `dateTo` (type: `string`):

⏳ Same as above — absolute or relative. Leave empty for no upper bound.

## `patentType` (type: `string`):

📑 Limit to grants, applications, or designs — or **Any** for all types.

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

🎚️ Cap how many patents to collect. Use **0** for no limit (be mindful of run time).

## `includeFullText` (type: `boolean`):

📜 Adds the full written description (large text).

## `includeClaims` (type: `boolean`):

📋 Adds the patent claims text.

## `includeCitations` (type: `boolean`):

↩️ Adds backward and forward citation lists where available.

## `includePatentFamily` (type: `boolean`):

🌍 Adds related publications in the same family.

## `includeClassifications` (type: `boolean`):

🧮 Adds classification codes for analytics and filtering.

## `proxyConfiguration` (type: `object`):

🛟 Optional Apify Proxy settings. Leave default off if you don’t need it.

## Actor input object example

```json
{
  "urls": [
    "https://patents.google.com/patent/US12438891B1",
    "machine learning"
  ],
  "searchQuery": "",
  "patentNumbers": [],
  "assignee": "",
  "inventor": "",
  "country": "ANY",
  "dateFrom": "",
  "dateTo": "",
  "patentType": "ANY",
  "maxResults": 10,
  "includeFullText": false,
  "includeClaims": true,
  "includeCitations": true,
  "includePatentFamily": true,
  "includeClassifications": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "urls": [
        "https://patents.google.com/patent/US12438891B1",
        "machine learning"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapier/google-patents-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 = {
    "urls": [
        "https://patents.google.com/patent/US12438891B1",
        "machine learning",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapier/google-patents-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 '{
  "urls": [
    "https://patents.google.com/patent/US12438891B1",
    "machine learning"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapier/google-patents-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapier/google-patents-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Patents Scraper",
        "description": "🔎 Google Patents Scraper extracts structured patent data from Google Patents — titles, abstracts, inventors, assignees, CPC/IPC, citations, claims, dates & PDFs. ⚡ Fast, reliable, and bulk-ready for IP research, competitive intel & R&D landscaping. 📊 CSV/JSON/API.",
        "version": "1.0",
        "x-build-id": "K9L5yhKXij988djqQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapier~google-patents-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapier-google-patents-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/scrapier~google-patents-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapier-google-patents-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/scrapier~google-patents-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapier-google-patents-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",
                "properties": {
                    "urls": {
                        "title": "🔗 Patent & search links",
                        "type": "array",
                        "description": "✅ One entry per line: patent URLs, search URLs (q=), or plain keywords (e.g. machine learning). Plain lines are search phrases. All entries OR-merge with the Keywords field.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "🔤 Keywords",
                        "type": "string",
                        "description": "💡 Main keyword search. Works together with URLs: your text is OR-merged with any q= from search URLs and with publication numbers from patent URLs so you get a broad combined result.",
                        "default": ""
                    },
                    "patentNumbers": {
                        "title": "🔢 Publication numbers",
                        "type": "array",
                        "description": "📋 Specific patent IDs. Combined with keywords using OR so you still get broad results when both are set.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "assignee": {
                        "title": "🏢 Assignee",
                        "type": "string",
                        "description": "🏭 Focus on patents owned by a particular organization.",
                        "default": ""
                    },
                    "inventor": {
                        "title": "👤 Inventor",
                        "type": "string",
                        "description": "🧑‍🔬 Find patents listing a specific inventor.",
                        "default": ""
                    },
                    "country": {
                        "title": "🌍 Patent office / region",
                        "enum": [
                            "ANY",
                            "US",
                            "EP",
                            "WO",
                            "CN",
                            "JP",
                            "KR",
                            "DE",
                            "GB",
                            "FR",
                            "CA",
                            "AU",
                            "IN",
                            "BR",
                            "TW",
                            "RU",
                            "IT",
                            "ES",
                            "NL",
                            "SE",
                            "CH",
                            "AT",
                            "HK",
                            "SG",
                            "MX",
                            "NO",
                            "DK",
                            "FI",
                            "PL",
                            "IL",
                            "NZ",
                            "ZA",
                            "SA",
                            "AR",
                            "TH",
                            "MY",
                            "PH",
                            "ID",
                            "VN"
                        ],
                        "type": "string",
                        "description": "🗺️ Pick a country or office — or **Any** to search everywhere.",
                        "default": "ANY"
                    },
                    "dateFrom": {
                        "title": "📅 Published after",
                        "pattern": "^$|^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
                        "type": "string",
                        "description": "⏳ Pick a **calendar date** or a **relative** range (e.g. *30 days*, *6 months*). Leave empty for no lower bound.",
                        "default": ""
                    },
                    "dateTo": {
                        "title": "📅 Published before",
                        "pattern": "^$|^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
                        "type": "string",
                        "description": "⏳ Same as above — absolute or relative. Leave empty for no upper bound.",
                        "default": ""
                    },
                    "patentType": {
                        "title": "📄 Document kind",
                        "enum": [
                            "ANY",
                            "PATENT",
                            "APPLICATION",
                            "DESIGN"
                        ],
                        "type": "string",
                        "description": "📑 Limit to grants, applications, or designs — or **Any** for all types.",
                        "default": "ANY"
                    },
                    "maxResults": {
                        "title": "🔢 Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "🎚️ Cap how many patents to collect. Use **0** for no limit (be mindful of run time).",
                        "default": 10
                    },
                    "includeFullText": {
                        "title": "📖 Full description",
                        "type": "boolean",
                        "description": "📜 Adds the full written description (large text).",
                        "default": false
                    },
                    "includeClaims": {
                        "title": "⚖️ Claims",
                        "type": "boolean",
                        "description": "📋 Adds the patent claims text.",
                        "default": true
                    },
                    "includeCitations": {
                        "title": "🔗 Citations",
                        "type": "boolean",
                        "description": "↩️ Adds backward and forward citation lists where available.",
                        "default": true
                    },
                    "includePatentFamily": {
                        "title": "👨‍👩‍👧 Patent family",
                        "type": "boolean",
                        "description": "🌍 Adds related publications in the same family.",
                        "default": true
                    },
                    "includeClassifications": {
                        "title": "🏷️ CPC / IPC codes",
                        "type": "boolean",
                        "description": "🧮 Adds classification codes for analytics and filtering.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "🔐 Proxy",
                        "type": "object",
                        "description": "🛟 Optional Apify Proxy settings. Leave default off if you don’t need it."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
