# Google Patents Scraper — Search, Citations, Family Graph (`khadinakbar/google-patents-scraper`) Actor

Scrape 120M+ patents from USPTO, EPO, WIPO, JPO, CN, KR + 100 offices. Six modes: search, details (claims/citations/family), byAssignee, byInventor, family graph, citationNetwork. Pay-per-event, no API key. Built for prior-art search, IP landscaping, and AI-agent use via Apify MCP.

- **URL**: https://apify.com/khadinakbar/google-patents-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Business, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 patent record (basic)s

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 — Patent Search, Citations, Family Graph, Assignee/Inventor Portfolios

Scrape **120M+ patents** from USPTO, EPO, WIPO, JPO, China, Korea + 100 other patent offices via Google Patents — no API key required. Search by query, fetch full details, walk family graphs across jurisdictions, crawl N-hop citation networks, or pull every patent owned by a company or filed by an inventor.

Built for **prior-art search**, **IP landscaping**, **competitive monitoring**, **citation-network analysis**, and **AI-agent consumption** via Apify MCP.

### What you get

| Field | Always | Deep only | Notes |
|---|---|---|---|
| `patentId` | ✅ | | Canonical, e.g. `US10000000B2` |
| `title`, `abstract`, `assignee`, `inventors[]` | ✅ | | |
| `filingDate`, `publicationDate`, `grantDate`, `priorityDate` | ✅ | | ISO 8601 |
| `status`, `type`, `countryCode`, `kindCode` | ✅ | | `GRANT`/`APPLICATION`, `PATENT`/`DESIGN`/`OTHER` |
| `googlePatentsUrl`, `pdfUrl` | ✅ | | Direct links |
| `cpc[]` | | ✅ | Cooperative Patent Classification codes |
| `claims[]`, `claimsCount` | | ✅ | Every claim, plain text |
| `citationsBackward[]`, `citationsForward[]` | | ✅ | Full citation lists (orig + family) |
| `familyId`, `familyMembers[]` | | ✅ | All jurisdictions of the same invention |
| `citationHop`, `citationSeed` | citationNetwork mode | | Distance from seed in the citation graph |

**Pricing**: $0.002 per basic record · $0.005 per deep record · $0.00005 actor start. No setup fees. No rental.

### Modes

| Mode | When to use | Required input |
|---|---|---|
| `search` (default) | Free-text query with filters | `searchQuery` |
| `details` | You have known patent IDs and want full data | `patentIds[]` |
| `byAssignee` | All patents owned by a company | `assigneeName` |
| `byInventor` | All patents by a person | `inventorName` |
| `family` | All jurisdictions of one invention starting from any seed | `patentIds[]` |
| `citationNetwork` | N-hop forward/backward citation crawl | `patentIds[]`, `citationDirection`, `citationDepth` |

### Quick examples

**1. Prior-art search for autonomous-vehicle ML**
```json
{
  "mode": "search",
  "searchQuery": "machine learning autonomous vehicle perception",
  "dateFrom": "2020-01-01",
  "status": "GRANT",
  "maxResults": 100,
  "enrichmentDepth": "basic"
}
````

Returns 100 granted patents, basic fields. Cost: ~$0.20.

**2. Full detail for a known patent**

```json
{
  "mode": "details",
  "patentIds": ["US10000000B2", "EP3000000B1"]
}
```

Returns 2 fully enriched records with claims, citations, family. Cost: ~$0.01.

**3. Apple's machine-learning portfolio (US-only)**

```json
{
  "mode": "byAssignee",
  "assigneeName": "Apple Inc.",
  "searchQuery": "machine learning",
  "countryCodes": ["US"],
  "maxResults": 500,
  "enrichmentDepth": "basic"
}
```

Cost: ~$1.00.

**4. Geoffrey Hinton's deep-learning patents**

```json
{
  "mode": "byInventor",
  "inventorName": "Geoffrey Hinton",
  "maxResults": 200,
  "enrichmentDepth": "deep"
}
```

Cost: ~$1.00.

**5. Worldwide family of one invention**

```json
{
  "mode": "family",
  "patentIds": ["US10000000B2"]
}
```

Returns the seed plus every jurisdictional family member (JP, EP, WO, etc.).

**6. 2-hop forward citation network**

```json
{
  "mode": "citationNetwork",
  "patentIds": ["US10000000B2"],
  "citationDirection": "forward",
  "citationDepth": 2,
  "maxResults": 500
}
```

Crawls every patent that cites the seed, then every patent that cites those — capped at 500 records.

### Pricing

Pay-per-event. Three events, capped:

| Event | Price | Triggered by |
|---|---|---|
| `apify-actor-start` | $0.00005 | Container start (auto, per 1 GB RAM) |
| `patent-found` | $0.002 | Each record returned with basic fields |
| `patent-detailed` | $0.005 | Each record returned with deep fields (claims/citations/family/CPC) |

`details`, `family`, and `citationNetwork` modes always charge as `patent-detailed` (deep fetch is required to extract citations and family). `search`, `byAssignee`, `byInventor` charge `patent-found` by default and switch to `patent-detailed` only when `enrichmentDepth: "deep"`.

**Typical run costs**:

- Prior-art search, 50 patents, basic = $0.10
- Landscape sweep, 1,000 patents, basic = $2.00
- Deep enrichment, 100 records = $0.50
- 3-hop citation network, ~500 patents = $2.50

### How it works

The actor hits Google Patents' public XHR query endpoint for search and the standard detail page for full records. No API key. Residential proxies are enabled by default — Google throttles datacenter IPs and returns HTTP 500 "Sorry" on filtered queries, so this is **mandatory** for reliable runs.

Reliability features built in:

- **Canary URL check** at run start (`US10000000B2`)
- **Session pool** with same proxy + same UA + same cookie jar across requests
- **Retry with backoff** on 429/5xx + per-status logic
- **Circuit breaker** — aborts the run if the failure rate exceeds 50% over the last 20 requests, to preserve your proxy budget
- **Multi-fallback selectors** for every extracted field (so a Google layout change doesn't break the whole run)
- **Bot-block detection** — recognizes the "Sorry" page and rotates session
- **Graceful degradation** — when one selector fails, others fill in

### MCP / AI-agent usage

The actor is exposed as `apify--google-patents-scraper` in [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Drop it into Claude Desktop / Cursor / any MCP-compatible client and ask things like:

- *"Find prior art for US10000000B2 — give me 50 backward citations with claims."*
- *"What patents has OpenAI filed since 2022?"*
- *"List every jurisdiction of Apple's M1 chip patent (start from US10916298B2)."*
- *"Build a 2-hop forward citation network from Tesla's autopilot patent."*

The agent picks the right `mode`, fills the right input, and walks away with structured JSON.

### Code examples

**JavaScript (Apify Client)**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('khadinakbar/google-patents-scraper').call({
    mode: 'search',
    searchQuery: '"large language model" training',
    dateFrom: '2023-01-01',
    maxResults: 100,
    enrichmentDepth: 'basic',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} patents`);
```

**Python (apify-client)**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("khadinakbar/google-patents-scraper").call(run_input={
    "mode": "byAssignee",
    "assigneeName": "OpenAI",
    "maxResults": 200,
    "enrichmentDepth": "deep",
})

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"OpenAI has {len(items)} patents in the dataset")
```

### Output shape

Each item is flat (≤500 tokens, agent-friendly):

```json
{
  "patentId": "US10000000B2",
  "title": "Coherent LADAR using intra-pixel quadrature detection",
  "abstract": "A frequency modulated (coherent) laser detection and ranging system...",
  "filingDate": "2015-03-10",
  "publicationDate": "2018-06-19",
  "grantDate": "2018-06-19",
  "priorityDate": "2015-03-10",
  "status": "GRANT",
  "type": "PATENT",
  "countryCode": "US",
  "kindCode": "B2",
  "assignee": "Raytheon Co",
  "inventors": ["Joseph Marron"],
  "cpc": ["G01S7/483", "G01S7/4911", "G01S17/32", "G01S17/89"],
  "claimsCount": 20,
  "claims": ["1. A laser detection and ranging (LADAR) system, comprising...", "..."],
  "citationsBackward": ["US5093563A", "US5751830A", "..."],
  "citationsForward": ["US10845468B2", "US20180172806A1", "..."],
  "familyId": "55456961",
  "familyMembers": ["JP2018510362A", "JP6570658B2", "WO2016144528A1", "..."],
  "pdfUrl": "https://patentimages.storage.googleapis.com/c0/d5/f7/86ad5b42759506/US10000000.pdf",
  "googlePatentsUrl": "https://patents.google.com/patent/US10000000B2/en",
  "mode": "details",
  "scrapedAt": "2026-05-03T19:22:00.000Z"
}
```

### FAQ

**Q: Does it cover non-US patents?**
Yes. Google Patents indexes 120M+ docs from 100+ offices: USPTO (US), EPO (EP), WIPO (WO), JPO (JP), CNIPA (CN), KIPO (KR), UKIPO (GB), DPMA (DE), INPI (FR), CIPO (CA), IP Australia (AU) and many more.

**Q: Can I get full claims and citations from search results?**
Set `enrichmentDepth: "deep"` on `search`/`byAssignee`/`byInventor`, and the actor will fetch each patent's detail page (one extra HTTP per record). For known IDs, just use `mode: "details"` — always returns the full record.

**Q: How does the citation-network mode work?**
You pass one or more seed patentIds. The actor fetches each seed's detail page, follows the requested citation direction (`backward`/`forward`/`both`), and queues each cited patent for the next hop. Depth caps the chain (1, 2, or 3 hops). `maxResults` caps the total nodes — set it before launching a 3-hop crawl on a heavily-cited patent.

**Q: My run returned 0 patents. What's wrong?**

- Verify `searchQuery` syntax — try the same query at `patents.google.com` first
- Date range too narrow? Remove `dateFrom`/`dateTo`
- Country filter excludes everything? Drop `countryCodes`
- For `details`/`family`/`citationNetwork`: confirm `patentIds` are valid (Google Patents URL format, e.g. `US10000000B2`, no spaces or punctuation)

**Q: How do I avoid Google blocking my run?**
Keep the default residential proxy. Datacenter IPs get the "Sorry" page on filtered queries. The actor automatically rotates sessions on 429/403 and includes a circuit breaker.

**Q: What's the difference between `priority_date` and `filing_date`?**
`priority_date` is the earliest filing claimed (typically the original home-country application). `filing_date` is when this specific publication was filed. They differ for international filings.

**Q: Is this legal?**
Patent data is public-record data. Google Patents indexes published patents from public patent offices and Google's terms allow accessing this content. We respect rate limits and never bypass authentication walls. **You are responsible for compliance with Google's Terms of Service and your local laws.** This actor is provided for legitimate research, IP analysis, and educational use.

### Pair with these actors

This actor is one of 50+ research and lead-generation actors in the Khadin Akbar portfolio:

- [`scrape-google-serp`](https://apify.com/khadinakbar/scrape-google-serp) — Google SERP results for keyword research
- [`google-news-scraper`](https://apify.com/khadinakbar/google-news-scraper) — track news mentions of patents
- [`google-trends-scraper`](https://apify.com/khadinakbar/google-trends-scraper) — interest trends for technology areas
- [`ai-search-brand-monitor`](https://apify.com/khadinakbar/ai-search-brand-monitor) — monitor brand/IP mentions across AI surfaces
- [`linkedin-profile-email-scraper`](https://apify.com/khadinakbar/linkedin-profile-email-scraper) — find inventor / counsel contacts

### Changelog

- **1.0** (2026-05-03) — Initial release: search, details, byAssignee, byInventor, family, citationNetwork. Pay-per-event, residential proxy default, canary check, circuit breaker.

### Issues & feature requests

[apify.com/khadinakbar/google-patents-scraper/issues](https://apify.com/khadinakbar/google-patents-scraper/issues)

# Actor input Schema

## `mode` (type: `string`):

What kind of patent task to run. 'search' = free-text Google Patents search with filters. 'details' = fetch full record (abstract, claims, citations, family) for known patentIds. 'byAssignee' = all patents owned by a company. 'byInventor' = all patents by a person. 'family' = all jurisdictions (US, EP, WO, JP, CN, KR…) of one invention starting from any seed patentId. 'citationNetwork' = N-hop forward and/or backward citation crawl from seed patentIds. Default: 'search'.

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

Free-text query for Google Patents search. Supports the same syntax as patents.google.com (boolean AND/OR, quoted phrases, wildcards). Used when mode='search'. Example: 'machine learning OR "neural network" autonomous vehicle'. NOT a patent number — for known IDs use mode='details'.

## `patentIds` (type: `array`):

List of patent publication numbers (with or without country prefix and kind code). Required for mode='details', 'family', or 'citationNetwork'. Examples: 'US10000000B2', 'US-10000000-B2', 'EP3000000B1', 'WO2018000000A1', 'CN111111111A'. Country codes accepted: US, EP, WO, JP, CN, KR, GB, DE, FR, KR, CA, AU and 100+ more. NOT free text — for searches use mode='search' with searchQuery.

## `assigneeName` (type: `string`):

Company / organization name that owns the patents. Used when mode='byAssignee'. Free-text matched against Google Patents' normalized assignee field. Example: 'Apple Inc.' or 'Tesla Motors' or 'OpenAI'. NOT a person — for individuals use mode='byInventor'.

## `inventorName` (type: `string`):

Inventor full name. Used when mode='byInventor'. Free-text matched against Google Patents' inventor field. Example: 'Geoffrey Hinton' or 'Elon Musk'. NOT a company — for organizations use mode='byAssignee'.

## `countryCodes` (type: `array`):

Filter results by country / patent office. Two-letter codes from Google Patents. Default: empty (all countries). Common: US (USPTO), EP (European Patent Office), WO (WIPO/PCT), JP (Japan), CN (China), KR (Korea), GB, DE, FR, CA, AU. Pass multiple to OR them. Ignored in mode='details' and 'family' (those use exact patentIds).

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

Lower bound for patent date in YYYY-MM-DD format. Filters by publication date when status=GRANT, by filing date for APPLICATION. Example: '2020-01-01'. Leave empty for no lower bound. Ignored in mode='details', 'family', 'citationNetwork'.

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

Upper bound for patent date in YYYY-MM-DD format. Same date field semantics as dateFrom. Example: '2026-01-01'. Leave empty for no upper bound.

## `status` (type: `string`):

Filter by grant status. 'ANY' (default) returns both granted patents and pending applications. 'GRANT' = issued patents only. 'APPLICATION' = published applications only.

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

Filter by patent type. 'ANY' (default) returns all types. 'PATENT' = utility patents (inventions). 'DESIGN' = design patents (ornamental designs). 'OTHER' = plant patents and other.

## `language` (type: `string`):

Document language for detail page extraction. Default 'en'. Use 'de' for German originals, 'ja' for Japanese, 'zh' for Chinese, etc. Google Patents auto-translates to English where machine translations are available.

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

Maximum total number of patent records to return. Hard cap protects budget. Default: 50. Each item charged at $0.002 (basic) or $0.005 (deep) per record. For citationNetwork mode, this caps total nodes across all hops.

## `enrichmentDepth` (type: `string`):

Field richness per record. 'basic' (default) = patentId, title, abstract, dates, status, type, country, assignee, inventors\[], googlePatentsUrl — charged at $0.002 per record. 'deep' = basic + claims\[], citationsBackward\[], citationsForward\[], familyId, familyMembers\[], cpc\[], pdfUrl — charged at $0.005 per record. Use 'basic' for landscaping sweeps, 'deep' for prior-art analysis.

## `citationDirection` (type: `string`):

Which citations to follow when mode='citationNetwork'. 'backward' = patents that this seed cites (prior art). 'forward' = patents that cite this seed (later art). 'both' (default) = both directions, deduplicated.

## `citationDepth` (type: `integer`):

How many hops to crawl when mode='citationNetwork'. 1 = direct citations only. 2 = citations of citations. 3 = citations of citations of citations (very large, use maxResults to cap). Default: 1.

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

Apify proxy settings. Default: residential proxy in US — required because Google Patents throttles datacenter IPs and returns HTTP 500 'Sorry' on filtered queries. Override only if you have your own residential pool.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "\"large language model\" training",
  "patentIds": [
    "US10000000B2"
  ],
  "assigneeName": "OpenAI",
  "inventorName": "Yann LeCun",
  "countryCodes": [],
  "dateFrom": "2020-01-01",
  "dateTo": "2026-01-01",
  "status": "ANY",
  "patentType": "ANY",
  "language": "en",
  "maxResults": 50,
  "enrichmentDepth": "basic",
  "citationDirection": "both",
  "citationDepth": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `deep` (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 = {
    "searchQuery": "machine learning autonomous vehicle",
    "patentIds": [
        "US10000000B2"
    ],
    "assigneeName": "Apple Inc.",
    "inventorName": "Geoffrey Hinton",
    "countryCodes": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "searchQuery": "machine learning autonomous vehicle",
    "patentIds": ["US10000000B2"],
    "assigneeName": "Apple Inc.",
    "inventorName": "Geoffrey Hinton",
    "countryCodes": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/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 '{
  "searchQuery": "machine learning autonomous vehicle",
  "patentIds": [
    "US10000000B2"
  ],
  "assigneeName": "Apple Inc.",
  "inventorName": "Geoffrey Hinton",
  "countryCodes": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call khadinakbar/google-patents-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Patents Scraper — Search, Citations, Family Graph",
        "description": "Scrape 120M+ patents from USPTO, EPO, WIPO, JPO, CN, KR + 100 offices. Six modes: search, details (claims/citations/family), byAssignee, byInventor, family graph, citationNetwork. Pay-per-event, no API key. Built for prior-art search, IP landscaping, and AI-agent use via Apify MCP.",
        "version": "1.0",
        "x-build-id": "HajuLRHk8Q4rm6AUE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~google-patents-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~google-patents-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-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/khadinakbar~google-patents-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "details",
                            "byAssignee",
                            "byInventor",
                            "family",
                            "citationNetwork"
                        ],
                        "type": "string",
                        "description": "What kind of patent task to run. 'search' = free-text Google Patents search with filters. 'details' = fetch full record (abstract, claims, citations, family) for known patentIds. 'byAssignee' = all patents owned by a company. 'byInventor' = all patents by a person. 'family' = all jurisdictions (US, EP, WO, JP, CN, KR…) of one invention starting from any seed patentId. 'citationNetwork' = N-hop forward and/or backward citation crawl from seed patentIds. Default: 'search'.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text query for Google Patents search. Supports the same syntax as patents.google.com (boolean AND/OR, quoted phrases, wildcards). Used when mode='search'. Example: 'machine learning OR \"neural network\" autonomous vehicle'. NOT a patent number — for known IDs use mode='details'.",
                        "default": "machine learning autonomous vehicle"
                    },
                    "patentIds": {
                        "title": "Patent IDs",
                        "type": "array",
                        "description": "List of patent publication numbers (with or without country prefix and kind code). Required for mode='details', 'family', or 'citationNetwork'. Examples: 'US10000000B2', 'US-10000000-B2', 'EP3000000B1', 'WO2018000000A1', 'CN111111111A'. Country codes accepted: US, EP, WO, JP, CN, KR, GB, DE, FR, KR, CA, AU and 100+ more. NOT free text — for searches use mode='search' with searchQuery.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "US10000000B2"
                        ]
                    },
                    "assigneeName": {
                        "title": "Assignee name",
                        "type": "string",
                        "description": "Company / organization name that owns the patents. Used when mode='byAssignee'. Free-text matched against Google Patents' normalized assignee field. Example: 'Apple Inc.' or 'Tesla Motors' or 'OpenAI'. NOT a person — for individuals use mode='byInventor'.",
                        "default": "Apple Inc."
                    },
                    "inventorName": {
                        "title": "Inventor name",
                        "type": "string",
                        "description": "Inventor full name. Used when mode='byInventor'. Free-text matched against Google Patents' inventor field. Example: 'Geoffrey Hinton' or 'Elon Musk'. NOT a company — for organizations use mode='byAssignee'.",
                        "default": "Geoffrey Hinton"
                    },
                    "countryCodes": {
                        "title": "Country codes",
                        "type": "array",
                        "description": "Filter results by country / patent office. Two-letter codes from Google Patents. Default: empty (all countries). Common: US (USPTO), EP (European Patent Office), WO (WIPO/PCT), JP (Japan), CN (China), KR (Korea), GB, DE, FR, CA, AU. Pass multiple to OR them. Ignored in mode='details' and 'family' (those use exact patentIds).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dateFrom": {
                        "title": "Date from (filing/publication)",
                        "type": "string",
                        "description": "Lower bound for patent date in YYYY-MM-DD format. Filters by publication date when status=GRANT, by filing date for APPLICATION. Example: '2020-01-01'. Leave empty for no lower bound. Ignored in mode='details', 'family', 'citationNetwork'."
                    },
                    "dateTo": {
                        "title": "Date to (filing/publication)",
                        "type": "string",
                        "description": "Upper bound for patent date in YYYY-MM-DD format. Same date field semantics as dateFrom. Example: '2026-01-01'. Leave empty for no upper bound."
                    },
                    "status": {
                        "title": "Patent status",
                        "enum": [
                            "ANY",
                            "GRANT",
                            "APPLICATION"
                        ],
                        "type": "string",
                        "description": "Filter by grant status. 'ANY' (default) returns both granted patents and pending applications. 'GRANT' = issued patents only. 'APPLICATION' = published applications only.",
                        "default": "ANY"
                    },
                    "patentType": {
                        "title": "Patent type",
                        "enum": [
                            "ANY",
                            "PATENT",
                            "DESIGN",
                            "OTHER"
                        ],
                        "type": "string",
                        "description": "Filter by patent type. 'ANY' (default) returns all types. 'PATENT' = utility patents (inventions). 'DESIGN' = design patents (ornamental designs). 'OTHER' = plant patents and other.",
                        "default": "ANY"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Document language for detail page extraction. Default 'en'. Use 'de' for German originals, 'ja' for Japanese, 'zh' for Chinese, etc. Google Patents auto-translates to English where machine translations are available.",
                        "default": "en"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum total number of patent records to return. Hard cap protects budget. Default: 50. Each item charged at $0.002 (basic) or $0.005 (deep) per record. For citationNetwork mode, this caps total nodes across all hops.",
                        "default": 50
                    },
                    "enrichmentDepth": {
                        "title": "Enrichment depth",
                        "enum": [
                            "basic",
                            "deep"
                        ],
                        "type": "string",
                        "description": "Field richness per record. 'basic' (default) = patentId, title, abstract, dates, status, type, country, assignee, inventors[], googlePatentsUrl — charged at $0.002 per record. 'deep' = basic + claims[], citationsBackward[], citationsForward[], familyId, familyMembers[], cpc[], pdfUrl — charged at $0.005 per record. Use 'basic' for landscaping sweeps, 'deep' for prior-art analysis.",
                        "default": "basic"
                    },
                    "citationDirection": {
                        "title": "Citation direction (citationNetwork mode)",
                        "enum": [
                            "backward",
                            "forward",
                            "both"
                        ],
                        "type": "string",
                        "description": "Which citations to follow when mode='citationNetwork'. 'backward' = patents that this seed cites (prior art). 'forward' = patents that cite this seed (later art). 'both' (default) = both directions, deduplicated.",
                        "default": "both"
                    },
                    "citationDepth": {
                        "title": "Citation depth (citationNetwork mode)",
                        "minimum": 1,
                        "maximum": 3,
                        "type": "integer",
                        "description": "How many hops to crawl when mode='citationNetwork'. 1 = direct citations only. 2 = citations of citations. 3 = citations of citations of citations (very large, use maxResults to cap). Default: 1.",
                        "default": 1
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings. Default: residential proxy in US — required because Google Patents throttles datacenter IPs and returns HTTP 500 'Sorry' on filtered queries. Override only if you have your own residential pool.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
