Google Patents Scraper - Search & Full Records avatar

Google Patents Scraper - Search & Full Records

Pricing

Pay per event

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

Google Patents Scraper - Search & Full Records

Search the Google Patents index by keyword, assignee, inventor, country, date window and grant status, or read patents in full: every inventor, the four dates kept apart, classifications, claim count and how many later patents cite it.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Search the Google Patents index the way the site itself does, or read patents in full: 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.

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.

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.

What you get

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, statusyes
inventors, assignees (complete)yes
application_number, claims_countyes
cpc_codes, cpc_countyes
patent_citations, non_patent_citations, cited_byyes

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

Input

{ "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"] }

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

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.

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.

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.

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.