Google Patents Scraper & API - Patent Search and Full Records avatar

Google Patents Scraper & API - Patent Search and Full Records

Pricing

from $2.00 / 1,000 run starts

Go to Apify Store
Google Patents Scraper & API - Patent Search and Full Records

Google Patents Scraper & API - Patent Search and Full Records

Search Google Patents by keyword, company, inventor, country, date window and grant status, or read patents in full: every inventor, four separate dates, CPC classifications, claim count, citations and how many later patents cite it. For IP teams, competitor watch and prior art research.

Pricing

from $2.00 / 1,000 run starts

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

10 days ago

Last modified

Share

Google Patents API - Patent Search & Full Records

This Google Patents API gives you patent search and full patent records as clean JSON or CSV: search the Google Patents index the way the site itself does, or read patents in full, with every inventor, all four dates kept apart, classifications, claim count and how many later patents cite the thing.

No API key, no browser, no login. Built for IP and patent teams, competitor watch, prior art research, analysts and anyone who needs Google Patents data in a spreadsheet or a pipeline instead of a browser tab.

Two modes

Search walks the index and returns a row per hit, a hundred results per request. Filter by keyword, assignee, inventor, country, date window, grant status, document type, and sort by relevance or by date.

Detail takes publication numbers you already have and returns the full record for each.

Tick Read each result in full and search runs into detail automatically, which is how you get from a keyword to complete records without pasting numbers by hand.

What the Google Patents API returns

Four dates, and they are not the same date

A patent carries four, they all read as "the date", and most tools flatten them into one:

priorityfilingpublicationgrant
US6285999B1 (PageRank)1997-01-101998-01-092001-09-042001-09-04
EP1000000A11998-11-121999-11-082000-05-17none
US20250259144A12024-02-082024-06-042025-08-14none

A year between priority and filing is normal, and priority is the one that decides who was first. grant_date stays empty on anything that was never granted. Filling it from the publication date would turn every pending application in your export into a granted patent, silently.

Every inventor, not the first one

The search index publishes one inventor per patent. That is a real limit of that endpoint, not a choice, and it is why the two modes return different fields:

search rowread in full
inventorAli KansoAli Kanso, Muhammed Fatih Bulut, Jinho Hwang, Shripad Nadgowda

Both are on the row and they are named differently, inventor and inventors, so nothing has to be guessed from context.

Counts that are actually counts

cited_by is uncapped. The PageRank patent returns 1,658 later patents citing it. That is the field that tells you a patent matters, so it had to be a real number rather than a page of results.

Similar documents is not published. It stops at about 25 on every patent, including the one with 1,658 citations, so it is a page size wearing a count's clothes.

Claim counts come from Google's own heading. Counting claim elements returns 20 on one patent office's markup and 0 on another's. Google prints the number itself, so that is what gets used: 20, 11, 29, 3 across the four offices in the test set.

Classifications have their parents removed. Codes arrive as a chain, G then G01 then G01S then G01S7/48. Counted raw that is 47 classifications for a patent that has 15.

Patent citations and non-patent citations are separate columns. The papers and books an examiner cited are a different thing from the patents cited, and adding them together is how you get a number that matches nobody else's.

Input

The simplest Google Patents search, a keyword and a ceiling:

{ "query": "machine learning", "max_results": 100 }

Everything a company has filed since 2024, granted only, newest first:

{
"query": "neural network",
"assignee": "Google LLC",
"after": "priority:20240101",
"status": "GRANT",
"sort": "new",
"max_results": 200
}

An inventor's whole output, read in full:

{ "inventor": "Joseph Marron", "follow_details": true }

Specific patents:

{ "mode": "detail", "publication_numbers": ["US10000000B2", "EP1000000A1"] }

A date window on its own office, the way a prior art search starts: Toyota's granted Japanese solid state battery patents with a priority date in 2010–2014, oldest first, read in full. A real run of exactly this input returned 12 full records, the first one JP5445146B2 with priority date 2010-01-06:

{
"query": "solid state battery",
"assignee": "Toyota",
"country": "JP",
"after": "priority:20100101",
"before": "priority:20141231",
"status": "GRANT",
"type": "PATENT",
"sort": "old",
"max_results": 12,
"follow_details": true
}

Publication numbers accept full Google Patents URLs too, so a list pasted out of a browser works without cleaning it up first.

inputwhat it doesdefault
modesearch or detailsearch
querykeywords, as typed into Google Patents—
assigneecompany or owner (patent search by company)—
inventorinventor name (patent search by inventor)—
countrypatent office code, e.g. US, EP, JP, CN—
after, beforedate window, e.g. priority:20240101—
statusANY, GRANT, APPLICATIONANY
typeANY, PATENT, DESIGNANY
sortrelevance, new, oldrelevance
max_resultshard ceiling on rows, 1–5000100
follow_detailsread every search result in fullfalse
publication_numbersnumbers or URLs for mode detail—
language_pagelanguage of the detail pageen
attemptstries per request, 1–103

About the assignee filter

Google matches corporate families, not exact strings. Searching Google LLC also returns X Development LLC and the same company's filings under its Japanese-script name. That is usually what you want from a competitor sweep and occasionally a surprise, so the assignee Google recorded is on every row and you can filter afterwards on what actually came back.

Google also attaches its own caveat to assignee data, that the listed assignees may be inaccurate and it has performed no legal analysis. That caveat travels with the field. This Actor reports what Google publishes.

Output

Rows go to the default dataset. The run summary and any errors go to the default key-value store as summary and errors. The summary carries the mode, rows returned, search and detail request counts, retries, throttles, and the list of fields that never resolved, so a run can be judged without reading the rows.

fieldsearchin full
publication_number, title, urlyesyes
snippet (the matched passage)yes—
inventor, assignee (first of each)yesyes
priority_date, filing_date, publication_date, grant_dateyesyes
figure_count, pdf_urlyesyes
abstract, status—yes
inventors, assignees (complete)—yes
application_number, claims_count—yes
cpc_codes, cpc_count—yes
patent_citations, non_patent_citations, cited_by—yes
language, positionyesyes
query (the search that produced the row)yes—
record_kind (patent or patent_detail)yesyes
cited_by_count (same number as cited_by)—yes
source, engine, fetched_atyesyes
search_row_count, detail_row_count (1 or 0)yesyes

record_kind says what a row is and therefore what it was billed as: a patent row is a search hit, a patent_detail row is a full record. The two row-count fields say the same thing as numbers, so a spreadsheet can sum them.

status is Google's: Active, Pending, Expired - Lifetime, Expired - Fee Related.

Example search row

From a real run with {"query": "machine learning"}, the first of 100 rows:

{
"publication_number": "US12438891B1",
"title": "Anomaly detection based on ensemble machine learning model",
"snippet": "accessing the entity profile to read the plurality of features scores for the entity; processing the plurality of feature scores for the entity, accessed from the entity profile, by using a plurality of machine-learning models; generating a plurality of intermediate anomaly scores for the entity, …",
"inventor": "Sudhakar Muddu",
"assignee": "Splunk Inc.",
"priority_date": "2015-08-31",
"filing_date": "2022-02-18",
"publication_date": "2025-10-07",
"grant_date": "2025-10-07",
"language": "en",
"figure_count": 116,
"pdf_url": null,
"url": "https://patents.google.com/patent/US12438891B1/en",
"query": "q=(machine+learning)",
"position": 1
}

Example full record

From a real run with {"mode": "detail", "publication_numbers": ["US10000000B2"]} (abstract shortened here):

{
"publication_number": "US10000000B2",
"url": "https://patents.google.com/patent/US10000000B2/en",
"title": "Coherent LADAR using intra-pixel quadrature detection",
"abstract": "A frequency modulated (coherent) laser detection and ranging system includes a read-out integrated circuit …",
"status": "Active",
"inventors": ["Joseph Marron"],
"assignees": ["Raytheon Co"],
"application_number": "US:14/643,719",
"priority_date": "2015-03-10",
"filing_date": "2015-03-10",
"publication_date": "2018-06-19",
"grant_date": "2018-06-19",
"claims_count": 20,
"cpc_codes": ["G01S13/00", "G01S13/88", "G01S13/89", "G01S17/00", "G01S17/88", "G01S17/894", "G01S7/00", "G01S7/483", "G01S7/4861", "G01S7/4863", "G01S7/4865", "G01S7/4912", "G01S7/4913", "G01S7/4914", "G01S7/4917"],
"cpc_count": 15,
"patent_citations": 5,
"non_patent_citations": 7,
"cited_by": 22,
"pdf_url": "https://patentimages.storage.googleapis.com/c0/d5/f7/86ad5b42759506/US10000000.pdf",
"language": "en",
"position": 1
}

Use cases

  • Competitor watch. Run an assignee search with sort: new every week and see what a rival filed, granted or abandoned since the last export.
  • Prior art search. Search a concept with a before date and read the hits in full, with abstracts, classifications and citation counts side by side.
  • Inventor and talent mapping. A patent search by inventor returns their whole output, and the full records name every co-inventor and employer.
  • Portfolio analysis. Feed a list of publication numbers and get status, grant date, claim count and cited_by for each, ready for a spreadsheet.
  • Landscaping and research. Pull a few thousand rows on a technology, group them by CPC code, country and priority year.

Google Patents API compared with the alternatives

this ActorGoogle Patents websitepublic patent datasetsother patent search APIs
bulk exportyes, up to 5000 rows per runby handyesyes
setupnonenonea cloud account and SQLan account and a key
every inventor, four datesyeson each pageyesvaries
uncapped cited_by countyeson each pageyesvaries
pay per patentyesfree, but manualpay per query scannedusually a monthly plan

The website is the right tool for reading one patent. This Actor is for the moment you need fifty, or five thousand, in a table, with the filters of the Google Patents advanced search and nothing to install.

Pricing

Pay per event.

eventprice
Run start$0.002
Patent found (search row)$0.002
Patent read in full$0.005

A search row and a full record cost very different amounts to produce: one request returns a hundred search rows, one request returns one full record. Charging them the same would either make a large search absurd or sell full records below cost.

A 100-patent search bills $0.202. The same search reading every result in full bills $0.502. Ten patents read in full bills $0.052. max_results is a hard ceiling, so a run cannot cost more than you decided in advance. A patent whose page could not be read bills as a search row, not as a full record, because you did not get one. A search that finds nothing returns an empty, successful run and bills only the run start. Every row carries record_kind, so you can check the bill against the dataset yourself.

Free plan. On a free Apify plan a run delivers at most 10 rows and bills only those 10. Paid plans get the full max_results.

Limits, stated plainly

  • Search rows carry one inventor and one assignee. That is what the index publishes. Turn on follow_details for the complete lists.
  • The result total is an estimate. Google reports 119,420 for a bare query and 120,421 for the same query restricted to one country. A restriction cannot widen a result set, so the number is reported as estimatedTotalResults and never as a total. The rows themselves are real and were checked against the filters that produced them.
  • Volume is throttled. Sustained reading gets an HTTP 503 refusal. Requests are retried and the summary reports requestsThrottled so a short run is explainable rather than mysterious. A throttled request is never reported as a patent that does not exist.
  • Not every field exists on every patent. Design patents carry no classifications, Chinese patents in the test set carried no cited references, applications carry no grant date. Those come back empty rather than filled in from something nearby, and any field that resolved on no row at all is named in the run summary under fieldsThatDidNotResolve.
  • Abstracts and claim counts, not full claim text. The record is the metadata layer. The pdf_url on each row is the document itself.

FAQ

Is there an official Google Patents API? Google does not offer a public REST API for patents.google.com. This Actor works as one: send a search or a list of numbers, get JSON back.

Can I search patents by company or by inventor? Yes. Fill assignee for a patent search by company and inventor for a patent search by inventor; both work without a keyword and combine with country, date and status filters.

Which patent offices are covered? Everything the Google Patents index holds, including US, EP, WO, JP, CN, KR and DE publications. Use country to restrict a search to one office.

Why is grant_date empty on some rows? Because the document is an application that was never granted. The date is left empty rather than borrowed from the publication date.

How do the date filters work? after and before take a date type and a date, written as priority:20240101. The date type is priority, filing or publication, the same choices as the Google Patents advanced search. Combine both for a window; they work with every other filter.

How many results can one run return? Up to 5000 search rows, set with max_results. Reading every result in full takes one request per patent, so large detail runs take longer.

Do I need a Google account or an API key? No. You only need an Apify account; the run uses public Google Patents pages.