# Google Patents Scraper: Search, Claims & Citations (`tidyharvest/google-patents-scraper`) Actor

Search Google Patents (USPTO, EPO, WIPO, CN, JP, KR, 100+ offices) by keyword, assignee, inventor, CPC, country and date, or look up patent numbers: abstract, claims, CPC, citations, cited-by, family, legal events, expiry, PDF. $1.50 per 1,000 search records, $3.70 per 1,000 full records.

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

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Patents Scraper: Search, Claims & Citations

Search **Google Patents** across the USPTO, EPO, WIPO, CNIPA, JPO, KIPO and 100+ other offices, or look up patents by
number, and get clean JSON: **title, abstract, assignee, inventors, priority / filing / publication / grant dates,
anticipated expiration, legal status, CPC classifications, claims, cited patents, cited-by, family members, legal
events, images and the PDF link**. No API key, no Google account. Proxy (datacenter, with automatic residential fallback) is included in the price.

Two prices, and you only pay for what you ask for:

- **Search records** (`patent-found`, $1.50 / 1,000): the result list, fast. Number, title, snippet, assignee,
  inventors, all dates, family country status and the PDF link (granted patents).
- **Full records** (`patent-detailed`, $3.70 / 1,000): everything on the patent page. Used for patent-number lookups
  and for search results when **Full details** is on.

### What you can do with it

- **Prior-art search:** run keyword searches with the same syntax as patents.google.com, then pull claims and
  citations for the hits.
- **Competitor patent portfolios:** every patent of an assignee (`Waymo`, `Apple Inc`), optionally narrowed by
  keyword, CPC class, country or date.
- **IP landscaping and technology trends:** filter by CPC code (`G06N3/08`, `H01M10/0562`) and priority date, sort
  by newest.
- **Patent monitoring:** schedule a daily or weekly run sorted by newest to catch new filings in your field.
- **Citation analysis:** forward citations (cited-by) and backward citations (prior art), with examiner-cited flags.
- **Citation networks and families:** start from patent numbers and get the full record of every patent they cite,
  every patent citing them (up to 3 hops) and every family member filed at other offices.
- **Expiry and legal-status checks:** look up a list of patent numbers and get status, expiration date and legal events.

### Input

| Field | What it does |
|---|---|
| `searchQueries` | Keyword searches (`solid state battery`, `"neural network" AND pruning`) or pasted patents.google.com search URLs. |
| `patentIds` | Patent numbers or URLs for full records: `US9876543B2`, `US-10000000-B2`, `EP3000000B1`, `WO2017120318A1`. |
| `assignees`, `inventors`, `cpc` | Filters for every search. Each also works alone (an assignee's whole portfolio). |
| `countries` | Patent offices: `US`, `EP`, `WO`, `CN`, `JP`, `KR`, ... |
| `dateFrom`, `dateTo`, `dateType` | Date range on priority, filing or publication date. |
| `status`, `patentType`, `languages` | Granted vs applications, utility vs design, original language. |
| `sortBy` | `relevance`, `newest`, `oldest`. |
| `includeDetails` | Turn search hits into full records (charged as `patent-detailed`). |
| `followCitations`, `citationDepth` | For `patentIds`: also return full records of the patents they cite (`backward`), that cite them (`forward`) or both, 1-3 hops. Each says `relation`, `relatedTo` and `networkDepth`. |
| `includeFamily` | For `patentIds`: also return full records of every family member. |
| `includeClaims`, `includeDescription` | Claim text (on by default) and the full specification text (off by default; large). |
| `detailLanguage` | `en` (English or Google's translation) or the original language, e.g. `de`, `ja`. |
| `maxItems` | Hard cap on results for the whole run (and on cost). Default 50. |

Search for new US grants on solid-state batteries:

```json
{ "searchQueries": ["solid state battery"], "countries": ["US"], "status": "GRANT",
  "dateFrom": "2023-01-01", "sortBy": "newest", "maxItems": 200 }
```

A company's lidar portfolio with full details:

```json
{ "searchQueries": ["lidar"], "assignees": ["Waymo"], "includeDetails": true, "maxItems": 100 }
```

Look up specific patents:

```json
{ "patentIds": ["US9876543B2", "EP3000000B1", "https://patents.google.com/patent/CN110573898B/en"] }
```

Citation network around one patent (everything it cites and everything citing it, two hops, at most 200 records):

```json
{ "patentIds": ["US9876543B2"], "followCitations": "both", "citationDepth": 2, "maxItems": 200 }
```

### Output

A search record:

```json
{
  "publicationNumber": "US20260133317A1",
  "title": "Distance-velocity disambiguation in hybrid light detection and ranging devices",
  "snippet": "FMCW lidars utilize high precision technology and are complex and expensive devices. A less expensive option can be to use a hybrid lidar device ...",
  "assignee": "Waymo Llc",
  "inventors": ["Bryce Remesch"],
  "priorityDate": "2021-08-04", "filingDate": "2025-12-22", "publicationDate": "2026-05-14", "grantDate": null,
  "countryCode": "US", "language": "en",
  "familyCountryStatus": {"US": "ACTIVE"},
  "pdfUrl": null,
  "url": "https://patents.google.com/patent/US20260133317A1/en",
  "searchRank": 2, "searchQuery": "lidar", "searchTotalResults": 8250, "detailed": false
}
```

A full record adds (shortened):

```json
{
  "publicationNumber": "US9876543B2",
  "title": "Systems and methods for channel state information exchange",
  "abstract": "Systems and methods are disclosed herein to provide improved channel estimation ...",
  "assignee": "Keysight Technologies Singapore Sales Pte Ltd",
  "currentAssignees": ["Keysight Technologies Singapore Sales Pte Ltd"],
  "originalAssignees": ["Keysight Technologies Singapore Holdings Pte Ltd"],
  "inventors": ["Thomas Alexander", "Lester Noel Stott"],
  "priorityDate": "2016-01-05", "filingDate": "2016-01-05", "publicationDate": "2018-01-23",
  "grantDate": "2018-01-23", "expirationDate": "2036-01-05", "legalStatus": "Active",
  "kindCode": "B2", "applicationNumber": "US14/988,707", "familyId": "59235955",
  "cpcCodes": ["H04B7/0417", "H04B7/0617", "H04B7/0626", "H04L1/1664", "H04L1/1671"],
  "cpcClassifications": [{"code": "H04B7/0417", "description": "Feedback systems", "first": true, "inventive": false}],
  "claimsCount": 20, "independentClaimsCount": 16,
  "firstClaim": "1. A system for transferring a channel estimate for wireless digital communications, comprising: ...",
  "claims": [{"number": 1, "text": "1. A system for ...", "dependent": false}],
  "citationsCount": 6,
  "citations": [{"publicationNumber": "US20050259686A1", "priorityDate": "2004-05-07", "publicationDate": "2005-11-24",
                 "assignee": "Michael Lewis", "title": "Initiation of communication", "examinerCited": true}],
  "citedByCount": 4, "citedBy": [{"publicationNumber": "US11108442B1", "assignee": "Qualcomm Incorporated", "...": "..."}],
  "familyCitedByCount": 14,
  "nonPatentCitations": ["Paul et al., \"Wireless LAN Comes of Age ...\" (2008)."],
  "alsoPublishedAs": [{"publicationNumber": "WO2017120318A1", "publicationDate": "2017-07-13"}],
  "similarDocuments": ["US20170195016A1", "CA2856049C"],
  "events": [{"date": "2016-01-05", "title": "Application filed by ...", "type": "filed", "critical": true}],
  "legalEvents": [{"date": "2016-02-25", "code": "AS", "title": "Assignment", "attributes": {"Owner name": "IXIA, CALIFORNIA"}}],
  "imageUrls": ["https://patentimages.storage.googleapis.com/.../US09876543-20180123-D00000.png"],
  "pdfUrl": "https://patentimages.storage.googleapis.com/ad/75/30/1bcbbfcb1519af/US9876543.pdf",
  "externalLinks": {"espacenet": "https://worldwide.espacenet.com/...", "globalDossier": "https://globaldossier.uspto.gov/..."},
  "language": "en", "translatedFrom": null,
  "url": "https://patents.google.com/patent/US9876543B2/en",
  "detailed": true
}
```

Machine-translated pages (CN, JP, KR, DE...) return the English text only; `translatedFrom` names the original
language. A run summary (per-search counts, Google's total match count, failed inputs) is saved as `SUMMARY` in the
key-value store.

### Pricing

Pay per result, no start fee beyond Apify's own:

- **$1.50 per 1,000 search records** (`patent-found`)
- **$3.70 per 1,000 full records** (`patent-detailed`)

A patent is charged once, at one of the two prices, never both. Filters and `maxItems` apply before you are charged.
Cheaper on Apify's higher plans. Proxy cost is included.

### Limits and behaviour

- Google Patents serves at most **1,000 results per search**. For more, split by date range, country or CPC class.
- Requests are sequential and paced (~1.5 s apart) so Google does not throttle the run: about 40 full records or
  a few thousand search records per minute. If Google rate-limits even after switching proxy IPs, the run stops and keeps
  what it already has.
- A run that finds nothing fails with a clear message instead of returning an empty dataset. Unknown or mistyped patent
  numbers are listed in `SUMMARY.failed` and the rest of the run continues.
- Data is what Google Patents shows; legal status, expiry and current assignee are Google's estimates, not legal
  conclusions.

# Actor input Schema

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

One search per line, same syntax as patents.google.com: `solid state battery`, `"neural network" AND pruning`, `(lidar OR radar) vehicle`. You can also paste the URL of any search you set up on patents.google.com (all its filters are kept). The filters below apply to every keyword search. Leave empty to search by assignee / inventor / CPC alone.

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

Look up specific patents by publication number or Google Patents URL: `US9876543B2`, `US-10000000-B2`, `EP3000000B1`, `WO2017120318A1`, `https://patents.google.com/patent/CN110573898B/en`. The kind code (B2, A1...) is optional. Always returns the full record.

## `followCitations` (type: `string`):

Build a citation network around the patent numbers above: also return the full record of every patent they cite and/or that cites them. Each extra record says how it relates (`relation`, `relatedTo`, `networkDepth`). Counts toward Max results.

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

1 = direct citations only, 2 = citations of citations, 3 = one more hop. Grows fast: keep Max results set.

## `includeFamily` (type: `boolean`):

Also return the full record of every family member of the patent numbers above (the same invention filed at other offices: US, EP, CN, JP...).

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

Only patents owned by these companies (any of them), e.g. `Waymo`, `Apple Inc`. Works alone for a whole portfolio.

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

Only patents by these inventors (any of them), e.g. `Geoffrey Hinton`.

## `cpc` (type: `array`):

Only patents in these CPC classes, e.g. `G06N3/08` (neural network learning) or `H01M10/0562`. Prefixes like `G06N` work too.

## `countries` (type: `array`):

Two-letter codes: `US`, `EP`, `WO`, `CN`, `JP`, `KR`, `DE`... Empty = all 100+ offices.

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

Earliest date (YYYY-MM-DD), applied to the date type below.

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

Latest date (YYYY-MM-DD).

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

Which date the date range filters on.

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

Granted patents, published applications, or both.

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

Utility (invention) or design patents.

## `languages` (type: `array`):

Only documents originally published in these languages: `ENGLISH`, `GERMAN`, `CHINESE`, `JAPANESE`, `KOREAN`, `FRENCH`... Empty = all.

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

Order of search results.

## `includeDetails` (type: `boolean`):

Open every search hit's patent page and return the full record (abstract, claims, CPC, citations, cited-by, family, legal events, expiry). Charged as `patent-detailed` instead of `patent-found`. Off = fast search records only.

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

Full records: include every claim's text (claim counts and the first claim are always included).

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

Full records: include the whole specification text (can be 50-500 KB per patent).

## `detailLanguage` (type: `string`):

Language of full records: `en` (Google's English text or machine translation), or the original language code, e.g. `de`, `ja`, `zh`.

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

Hard cap on results for the whole run (also caps your cost), split fairly across searches. Google Patents serves at most 1,000 results per search; split big searches by date range or country.

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

Default: Apify datacenter proxy, switching automatically to residential if Google refuses datacenter IPs (proxy cost is included in the price). Choose a specific group only if you need to.

## Actor input object example

```json
{
  "searchQueries": [
    "solid state battery"
  ],
  "followCitations": "none",
  "citationDepth": 1,
  "includeFamily": false,
  "dateType": "priority",
  "status": "any",
  "patentType": "any",
  "sortBy": "relevance",
  "includeDetails": false,
  "includeClaims": true,
  "includeDescription": false,
  "detailLanguage": "en",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `patents` (type: `string`):

Patents with number, title, assignee, inventors, dates and links; full records add abstract, claims, CPC, citations, cited-by, family and legal events.

# 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": [
        "solid state battery"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/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": ["solid state battery"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tidyharvest/google-patents-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "solid state battery"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tidyharvest/google-patents-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tidyharvest/google-patents-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9Y0IdiSxaJq7E8rxf/builds/l6qPEgOAb6MhAep83/openapi.json
