# Google Patents Scraper — Patents, Citations & Assignees (`scrapesage/google-patents-scraper`) Actor

Scrape Google Patents: search by keyword, assignee, inventor, CPC, country, status & date. Get abstracts, claims, CPC classifications, backward/forward citations, legal status, expiry, patent family & assignee intelligence. Assignee & inventor portfolios. Monitoring mode. No API key, no browser.

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

## Pricing

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

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Patents Scraper — Patents, Citations & Assignee Intelligence

Extract **complete patent data from Google Patents** — including the fields other scrapers skip: **full claims, CPC classifications, backward & forward citations, legal status, expiry dates, the entire patent family, and every inventor and assignee**. Search by **keyword, company (assignee), inventor, CPC class, country, status and date**, build full **assignee or inventor portfolios**, and **monitor** a technology area or competitor for newly published patents.

No login, no cookies, no browser, no API key — fast extraction straight from Google Patents, with 99%+ reliability.

### Why this Google Patents scraper?

Most patent scrapers return only the search-result snippet and leave the valuable fields empty. This actor pulls each patent's full detail page and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Publication number, title, dates, inventors, assignee | ✅ | ✅ |
| Full abstract + claims (count + text + first claim) | ❌ | ✅ |
| CPC classification codes + descriptions | partial | ✅ |
| Backward citations (patents this one cites) | ❌ | ✅ with titles, assignees & dates |
| Forward citations (patents that cite this one) | ❌ | ✅ + cited-by count |
| Legal status, expiry date, application & legal events | ❌ | ✅ |
| Patent family members + family ID | ❌ | ✅ |
| Impact score (0–100) per patent | ❌ | ✅ |
| Assignee / company portfolio mode | ❌ | ✅ |
| Inventor portfolio mode | ❌ | ✅ |
| Monitor mode (only new patents) | ❌ | ✅ |

### Use cases

- **Competitive & IP intelligence** — track exactly what a competitor (assignee) is patenting, in which CPC classes, and how often their patents get cited. Build a full company patent portfolio in one run.
- **Patent monitoring / IP watch** — schedule recurring runs with `monitorMode` to get only **newly published** patents in your technology area, for a competitor, or by a key inventor — straight into Slack, a CRM, or a data warehouse.
- **Prior-art & freedom-to-operate search** — pull patents by keyword + CPC class with full claims, citations and legal status to research prior art before filing.
- **R&D and technology landscaping** — map who is innovating in a field, the leading assignees, citation networks, and how active a patent family is across countries.
- **Lead generation & business development** — patent assignees are companies investing in R&D; surface the most active and most-cited assignees in a niche as high-intent B2B prospects for IP services, legal, software and licensing.
- **Licensing & M&A diligence** — assess a portfolio's breadth (family size, country coverage), validity (legal status, expiry) and influence (forward citations).

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Google Patents Scraper**, choose a mode, enter search queries / companies / inventors / patent numbers, and click **Start**.
3. Watch patents stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "search",
    "searchQueries": ["machine learning anomaly detection"],
    "cpcCodes": ["G06N20/00"],
    "countryCodes": ["US"],
    "status": "GRANT",
    "dateType": "publication",
    "dateFrom": "2024-01-01",
    "sortBy": "new",
    "maxResults": 100,
    "includePatentDetails": true,
    "includeClaims": true,
    "includeCitations": true
}
````

- **mode** — `search` (keyword + filters), `assigneePortfolio` (every patent for the companies in `assignees`), `inventorPortfolio` (every patent for the names in `inventors`), or `patentDetails` (full records for the numbers in `patentNumbers`).
- **searchQueries** — keywords/phrases; each runs separately and combines with the filters.
- **assignees / inventors** — company or inventor names. Primary input for the portfolio modes; in `search` mode the first value is used as a filter.
- **patentNumbers** — publication numbers for `patentDetails` mode (e.g. `US12438891B1`, `EP3000000A1`, `WO2021123456A1`).
- **cpcCodes** — CPC classes to require (e.g. `G06N20/00`, `H01M10`).
- **countryCodes** — patent offices to include (`US`, `EP`, `WO`, `CN`, `JP`, `KR`, `GB`, `DE`, …).
- **status / patentType / language** — granted vs application, utility vs design, document language.
- **dateType + dateFrom / dateTo** — date-range filter on the publication, filing or priority date.
- **sortBy** — `relevance` (default), `new`, or `old`.
- **includePatentDetails** *(default true)* — fetch each patent's detail page for claims, CPC, citations, legal status, expiry and family. Turn off for fast, cheap search-only runs.
- **includeClaims / includeCitations / includeDescription** — control how much detail is captured per patent.
- **monitorMode** *(default false)* — remember patents from previous runs and emit only **new** ones. Pair with [Schedules](https://docs.apify.com/platform/schedules).
- **maxResults / maxResultsPerQuery / maxCitations** — limits.

### Output

One record per patent (`type: "patent"`):

```json
{
    "type": "patent",
    "publicationNumber": "US12438891B1",
    "countryCode": "US",
    "title": "Anomaly detection based on ensemble machine learning model",
    "abstract": "Methods and systems for detecting anomalies in an entity profile…",
    "priorityDate": "2022-02-18",
    "filingDate": "2022-02-18",
    "grantDate": "2025-10-07",
    "publicationDate": "2025-10-07",
    "inventors": ["Sudhakar Muddu", "Christos Tryfonas", "Joseph Auguste Zadeh"],
    "assignees": ["Cisco Technology Inc"],
    "assigneeOriginal": ["Cisco Technology Inc"],
    "assigneeTop": "Cisco Technology Inc",
    "applicationNumber": "17/676,022",
    "legalStatus": "Active",
    "legalStatusCategory": "active",
    "expirationDate": "2036-01-24",
    "isActive": true,
    "cpcCount": 31,
    "cpcCodes": ["G06N20/00", "H04L63/1425", "G06F18/24"],
    "cpcClassifications": [
        { "code": "G06N20/00", "description": "Machine learning", "system": "CPC" }
    ],
    "claimsCount": 18,
    "firstClaim": "1. A method comprising: accessing an entity profile…",
    "claimsText": "1. A method comprising… 2. The method of claim 1…",
    "citationsCount": 102,
    "citedByCount": 0,
    "citations": [
        {
            "publicationNumber": "US20050278703A1",
            "title": "Method for using statistical analysis to monitor performance…",
            "assignee": "K5 Systems Inc.",
            "priorityDate": "2004-06-15",
            "publicationDate": "2005-12-15",
            "examinerCited": true
        }
    ],
    "citedBy": [],
    "events": [
        { "date": "2022-02-18", "title": "Application filed by Cisco Technology Inc", "type": "filed", "critical": true }
    ],
    "legalEvents": [
        { "date": "2022-02-18", "code": "FEPP", "title": "Fee payment procedure" }
    ],
    "familyId": "US20170063890A1",
    "familyMemberCount": 52,
    "familyMembers": [{ "countryCode": "US", "applicationNumber": "US14/841,634" }],
    "priorArtKeywords": ["data", "entity", "event", "model", "anomaly"],
    "descriptionWordCount": 11308,
    "impactScore": 71,
    "patentUrl": "https://patents.google.com/patent/US12438891B1/en",
    "pdfUrl": "https://patentimages.storage.googleapis.com/…/US12438891B1.pdf",
    "searchQuery": "machine learning anomaly detection",
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

Fields are `null` (or arrays empty) only when the data genuinely doesn't exist on the patent — never because the scraper skipped them.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with `monitorMode` to watch a competitor, CPC class, or inventor for newly published patents.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, docketing system) the moment a run finishes.

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

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

const run = await client.actor('scrapesage/google-patents-scraper').call({
    mode: 'assigneePortfolio',
    assignees: ['Cisco Technology'],
    countryCodes: ['US'],
    status: 'GRANT',
    maxResults: 200,
    includePatentDetails: true,
});

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

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new patents straight into your CRM or docketing tool.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new patents.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find granted US machine-learning patents from 2024 by Cisco and summarize their claims" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a full **company, innovation & market intelligence stack**:

- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — filings, financials and company profiles for public-company R\&D context.
- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** — UK companies, directors and PSCs to enrich assignees.
- **[USAspending Scraper](https://apify.com/scrapesage/usaspending-scraper)** — federal R\&D awards and the contractors behind them.
- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — federal contract opportunities and contacts.
- **[Y Combinator Scraper](https://apify.com/scrapesage/ycombinator-scraper)** — startups, founders and jobs as innovation signals.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** — product launches and the makers behind them.
- **[Levels.fyi Scraper](https://apify.com/scrapesage/levels-fyi-scraper)** — tech salaries and compensation by company and level.
- **[Google Play Scraper](https://apify.com/scrapesage/google-play-scraper)** — apps, reviews and developer leads.

### Tips

- **Going deeper than ~1,000 results**: Google Patents serves up to roughly 1,000 results per query. To exhaust a large topic, split by `countryCodes`, narrow `dateFrom`/`dateTo` windows, or add `cpcCodes`.
- **Cost control**: turn off `includePatentDetails` for a fast, cheap search-only pass, then re-run `patentDetails` on just the publication numbers you care about.
- **Monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) + `monitorMode` + `sortBy: "new"` to capture only newly published patents each run.
- **Proxies**: keep the default Apify datacenter proxy — Google Patents has no aggressive anti-bot.

### FAQ

**How do I get all patents for a company?** Use `assigneePortfolio` mode and list the company names in `assignees` (e.g. `"Apple"`, `"Cisco Technology"`). Add `countryCodes` / `status` / date filters to scope it.

**Can I search by CPC classification?** Yes — add CPC codes to `cpcCodes` (e.g. `G06N20/00`). They combine with your keyword query.

**Does it return claims and citations?** Yes. With `includePatentDetails` on (default), each patent includes its claims (count, text and first claim), backward citations (what it cites) and forward citations (what cites it), plus CPC classes, legal status, expiry and the patent family.

**Do I need a Google Patents or USPTO API key?** No. This actor reads publicly available Google Patents pages — no key, login or browser required.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor a competitor or technology for new patents?** Turn on `monitorMode`, set a `dateFrom`, and create a [Schedule](https://docs.apify.com/platform/schedules). Each run emits only patents you haven't seen before.

**Is scraping Google Patents legal?** This actor collects publicly available patent data only. You are responsible for using the data in compliance with applicable laws and Google's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

search = keyword/filter search. assigneePortfolio = every patent for given companies/assignees. inventorPortfolio = every patent for given inventors. patentDetails = full records for specific patent numbers. Start URLs override the mode.

## `searchQueries` (type: `array`):

Keywords / phrases for search mode. Each query runs separately and combines with the filters below. Examples: "machine learning", "solid state battery", "mRNA vaccine".

## `assignees` (type: `array`):

Company / organization names. Primary input for assigneePortfolio mode (one search per assignee). In search mode the first assignee is used as a filter. Examples: "Apple", "Cisco Technology", "Samsung Electronics".

## `inventors` (type: `array`):

Inventor names. Primary input for inventorPortfolio mode (one search per inventor). In search mode the first inventor is used as a filter. Example: "Geoffrey Hinton".

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

Publication numbers for patentDetails mode, e.g. "US12438891B1", "EP3000000A1", "WO2021123456A1". Full detail (claims, citations, classifications, legal status, family) is always fetched for these.

## `cpcCodes` (type: `array`):

Cooperative Patent Classification codes to require, e.g. "G06N20/00" (machine learning), "H01M10" (batteries). Combined with the search query.

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

Limit to patent offices, e.g. "US", "EP", "WO", "CN", "JP", "KR", "GB", "DE". Empty = all offices.

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

Filter by grant status.

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

Filter by document type.

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

Optional document language filter, e.g. "ENGLISH", "GERMAN", "CHINESE", "JAPANESE", "KOREAN", "FRENCH". Empty = any.

## `dateType` (type: `string`):

Which date the From/To range filters on.

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

Only patents on/after this date (using the date field above). Example: "2024-01-01". Great for monitoring recent filings.

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

Only patents on/before this date (using the date field above). Example: "2024-12-31".

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

Result ordering. "new"/"old" sort by date; relevance is Google's default ranking.

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

Total cap on patents emitted across all queries/assignees/inventors in this run.

## `maxResultsPerQuery` (type: `integer`):

Optional cap per individual query/assignee/inventor (0 = no per-query cap, only the total cap applies). Google Patents serves up to ~1000 results per query — narrow with filters to go deeper.

## `includePatentDetails` (type: `boolean`):

Fetch each patent's detail page for abstract, claims, CPC classifications, citations, legal status, expiry & patent family (one extra request per patent). Turn off for fast, cheap search-only runs.

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

When fetching details, include the full claims text (and always the claim count + first claim). Turn off to keep records smaller.

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

When fetching details, include backward citations (patents this one cites) and forward citations (patents that cite this one), with their numbers, titles, assignees and dates.

## `includeDescription` (type: `boolean`):

When fetching details, also include the (long) specification/description text, truncated to ~8000 chars. Off by default — the description count is always reported.

## `maxCitations` (type: `integer`):

Cap on backward and forward citation rows captured per patent.

## `startUrls` (type: `array`):

Google Patents URLs to scrape directly (auto-routed). Supports patent pages (patents.google.com/patent/US12438891B1/en) and search URLs (patents.google.com/?q=...\&assignee=...).

## `monitorMode` (type: `boolean`):

Remember patents seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a competitor, technology area or inventor for newly published patents. Does not conflict with scheduling.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' patent numbers for monitor mode. Use a distinct name per saved task so their histories stay separate.

## `maxConcurrency` (type: `integer`):

Maximum detail pages fetched in parallel.

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

Proxy settings. Google Patents has no aggressive anti-bot, so the default Apify datacenter proxy is plenty.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "machine learning anomaly detection"
  ],
  "status": "any",
  "patentType": "any",
  "dateType": "publication",
  "sortBy": "relevance",
  "maxResults": 100,
  "maxResultsPerQuery": 0,
  "includePatentDetails": true,
  "includeClaims": true,
  "includeCitations": true,
  "includeDescription": false,
  "maxCitations": 100,
  "monitorMode": false,
  "monitorStoreName": "google-patents-monitor",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped patent records as JSON items in the default dataset.

# 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 = {
    "searchQueries": [
        "machine learning anomaly detection"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = { "searchQueries": ["machine learning anomaly detection"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "searchQueries": [
    "machine learning anomaly detection"
  ]
}' |
apify call scrapesage/google-patents-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Patents Scraper — Patents, Citations & Assignees",
        "description": "Scrape Google Patents: search by keyword, assignee, inventor, CPC, country, status & date. Get abstracts, claims, CPC classifications, backward/forward citations, legal status, expiry, patent family & assignee intelligence. Assignee & inventor portfolios. Monitoring mode. No API key, no browser.",
        "version": "0.1",
        "x-build-id": "TUgb0ErMBwxb95tcj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~google-patents-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~google-patents-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-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/scrapesage~google-patents-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-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": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "assigneePortfolio",
                            "inventorPortfolio",
                            "patentDetails"
                        ],
                        "type": "string",
                        "description": "search = keyword/filter search. assigneePortfolio = every patent for given companies/assignees. inventorPortfolio = every patent for given inventors. patentDetails = full records for specific patent numbers. Start URLs override the mode.",
                        "default": "search"
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords / phrases for search mode. Each query runs separately and combines with the filters below. Examples: \"machine learning\", \"solid state battery\", \"mRNA vaccine\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "assignees": {
                        "title": "Assignees (companies)",
                        "type": "array",
                        "description": "Company / organization names. Primary input for assigneePortfolio mode (one search per assignee). In search mode the first assignee is used as a filter. Examples: \"Apple\", \"Cisco Technology\", \"Samsung Electronics\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "inventors": {
                        "title": "Inventors",
                        "type": "array",
                        "description": "Inventor names. Primary input for inventorPortfolio mode (one search per inventor). In search mode the first inventor is used as a filter. Example: \"Geoffrey Hinton\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "patentNumbers": {
                        "title": "Patent numbers",
                        "type": "array",
                        "description": "Publication numbers for patentDetails mode, e.g. \"US12438891B1\", \"EP3000000A1\", \"WO2021123456A1\". Full detail (claims, citations, classifications, legal status, family) is always fetched for these.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpcCodes": {
                        "title": "CPC classification codes",
                        "type": "array",
                        "description": "Cooperative Patent Classification codes to require, e.g. \"G06N20/00\" (machine learning), \"H01M10\" (batteries). Combined with the search query.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countryCodes": {
                        "title": "Country / office codes",
                        "type": "array",
                        "description": "Limit to patent offices, e.g. \"US\", \"EP\", \"WO\", \"CN\", \"JP\", \"KR\", \"GB\", \"DE\". Empty = all offices.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "status": {
                        "title": "Status",
                        "enum": [
                            "any",
                            "GRANT",
                            "APPLICATION"
                        ],
                        "type": "string",
                        "description": "Filter by grant status.",
                        "default": "any"
                    },
                    "patentType": {
                        "title": "Document type",
                        "enum": [
                            "any",
                            "PATENT",
                            "DESIGN"
                        ],
                        "type": "string",
                        "description": "Filter by document type.",
                        "default": "any"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Optional document language filter, e.g. \"ENGLISH\", \"GERMAN\", \"CHINESE\", \"JAPANESE\", \"KOREAN\", \"FRENCH\". Empty = any."
                    },
                    "dateType": {
                        "title": "Date field for the range",
                        "enum": [
                            "publication",
                            "filing",
                            "priority"
                        ],
                        "type": "string",
                        "description": "Which date the From/To range filters on.",
                        "default": "publication"
                    },
                    "dateFrom": {
                        "title": "Date from (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Only patents on/after this date (using the date field above). Example: \"2024-01-01\". Great for monitoring recent filings."
                    },
                    "dateTo": {
                        "title": "Date to (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Only patents on/before this date (using the date field above). Example: \"2024-12-31\"."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "new",
                            "old"
                        ],
                        "type": "string",
                        "description": "Result ordering. \"new\"/\"old\" sort by date; relevance is Google's default ranking.",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Max patents (total)",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Total cap on patents emitted across all queries/assignees/inventors in this run.",
                        "default": 100
                    },
                    "maxResultsPerQuery": {
                        "title": "Max patents per query",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Optional cap per individual query/assignee/inventor (0 = no per-query cap, only the total cap applies). Google Patents serves up to ~1000 results per query — narrow with filters to go deeper.",
                        "default": 0
                    },
                    "includePatentDetails": {
                        "title": "Include full patent details",
                        "type": "boolean",
                        "description": "Fetch each patent's detail page for abstract, claims, CPC classifications, citations, legal status, expiry & patent family (one extra request per patent). Turn off for fast, cheap search-only runs.",
                        "default": true
                    },
                    "includeClaims": {
                        "title": "Include claims text",
                        "type": "boolean",
                        "description": "When fetching details, include the full claims text (and always the claim count + first claim). Turn off to keep records smaller.",
                        "default": true
                    },
                    "includeCitations": {
                        "title": "Include citations",
                        "type": "boolean",
                        "description": "When fetching details, include backward citations (patents this one cites) and forward citations (patents that cite this one), with their numbers, titles, assignees and dates.",
                        "default": true
                    },
                    "includeDescription": {
                        "title": "Include full description text",
                        "type": "boolean",
                        "description": "When fetching details, also include the (long) specification/description text, truncated to ~8000 chars. Off by default — the description count is always reported.",
                        "default": false
                    },
                    "maxCitations": {
                        "title": "Max citations per direction",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on backward and forward citation rows captured per patent.",
                        "default": 100
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Google Patents URLs to scrape directly (auto-routed). Supports patent pages (patents.google.com/patent/US12438891B1/en) and search URLs (patents.google.com/?q=...&assignee=...).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new patents)",
                        "type": "boolean",
                        "description": "Remember patents seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a competitor, technology area or inventor for newly published patents. Does not conflict with scheduling.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store that holds the 'already seen' patent numbers for monitor mode. Use a distinct name per saved task so their histories stay separate.",
                        "default": "google-patents-monitor"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Maximum detail pages fetched in parallel.",
                        "default": 6
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Google Patents has no aggressive anti-bot, so the default Apify datacenter proxy is plenty.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
