How to scrape Google Patents with Python
This guide shows how to scrape Google Patents with Python: call one endpoint, get every patent as clean JSON with title, inventor, assignee, dates, and a link, then save it to a CSV file.
3,000 free credits / month, no card
Title, inventor, assignee, dates
Clean JSON, no HTML parsing
PULLED LIVE FROM THE API, JULY 20, 2026
One request, real response
The hard part of scraping Google Patents yourself is driving a browser, dodging blocks, and parsing a page that keeps changing. Instead you send one HTTP request to a search endpoint and get clean JSON back. First a quick test with curl:
# one credit per search, however many patents come back; zero results cost nothing
curl "https://crustapi.com/v1/search?type=patents&q=battery" -H "x-api-key: YOUR_KEY"
Then the same call in Python with the requests library. Install it with pip install requests, drop in a key, and run:
# pip install requests, then run this file
import requests
resp = requests.get(
"https://crustapi.com/v1/search",
params={"type": "patents", "q": "battery"},
headers={"x-api-key": "YOUR_KEY"},
)
data = resp.json()
for patent in data["organic"]:
print(patent["publicationNumber"], patent["title"], patent["link"])
The results live in the organic array. Each item has the publication number, title, inventor, assignee, the priority, filing, grant, and publication dates, a link to the page on Google Patents, and a PDF link. Here are two of the patents that came back, shown as CSV so they drop straight into Sheets or a spreadsheet:
publicationNumber,title,inventor,assignee,filingDate,grantDate,link
CN113650574B,"Battery electricity supplementing system for vehicle",冯文强,优毅时代武汉科技有限公司,2021-07-26,2023-07-07,https://patents.google.com/patent/CN113650574B/en
US10862092B2,"Secondary battery with separator having a solid electrolyte, battery pack, and ...","Kazuomi YOSHIMA","Kabushiki Kaisha Toshiba",2017-09-12,2020-12-08,https://patents.google.com/patent/US10862092B2/en
Change q to any topic, company, or inventor you would search on Google Patents, like solid state electrolyte or lithium anode. Results come from offices worldwide, so you will see US, CN, JP, and EP publication numbers side by side.
WHAT EVERY PATENT INCLUDES
The full record, ready to use
Every result comes complete, so you build a dataset or a prior-art list with no second call. The same record as CSV, ready for a spreadsheet or a database:
publicationNumber,title,inventor,assignee,priorityDate,filingDate,grantDate,publicationDate,language,link,pdfUrl
CN113650574B,"Battery electricity supplementing system for vehicle",冯文强,优毅时代武汉科技有限公司,2021-07-26,2021-07-26,2023-07-07,2023-07-07,en,https://patents.google.com/patent/CN113650574B/en,https://patentimages.storage.googleapis.com/0d/a7/e4/ff1b6829fc78e6/CN113650574B.pdf
Or the same record as JSON, exactly as the API returns it:
// one patent in full
{
"title": "Battery electricity supplementing system for vehicle",
"snippet": "The invention provides a vehicle storage battery power supply system, which comprises a vehicle control unit VCU, a battery management system BMS, a low-voltage storage battery sensor, a vehicle body controller BCM and a gateway which are sequentially connected in a communication way through buses ...",
"link": "https://patents.google.com/patent/CN113650574B/en",
"priorityDate": "2021-07-26",
"filingDate": "2021-07-26",
"grantDate": "2023-07-07",
"publicationDate": "2023-07-07",
"inventor": "冯文强",
"assignee": "优毅时代武汉科技有限公司",
"publicationNumber": "CN113650574B",
"language": "en",
"thumbnailUrl": "https://patentimages.storage.googleapis.com/59/11/fe/5cd5cbfc963006/HDA0003180919360000011.png",
"pdfUrl": "https://patentimages.storage.googleapis.com/0d/a7/e4/ff1b6829fc78e6/CN113650574B.pdf",
"figures": [
{ "imageUrl": "https://patentimages.storage.googleapis.com/df/66/6c/67c5dd82f7b508/HDA0003180919360000011.png", "thumbnailUrl": "https://patentimages.storage.googleapis.com/b1/2c/94/5ab60acc085592/HDA0003180919360000011.png" },
{ "imageUrl": "https://patentimages.storage.googleapis.com/2a/e0/d8/0a22be04e70bc9/HDA0003180919360000012.png", "thumbnailUrl": "https://patentimages.storage.googleapis.com/21/28/65/6179b9dc59cac5/HDA0003180919360000012.png" }
]
}
HOW IT COMPARES
vs writing your own scraper
You can build a Google Patents scraper with a headless browser and a parser, and plenty of tutorials show how. The trade is maintenance. Here is the difference in practice.
| Writing it yourself | CrustAPI |
| Setup | Install a headless browser, handle blocks and page changes | One GET request, no browser |
| Output | Parse the HTML yourself; fields break when the layout changes | Clean JSON from the API, or the same rows as CSV |
| Maintenance | Fix the scraper each time the page changes | We keep it working |
| Free tier | Free, but you pay in time and blocked requests | 3,000 credits / month, no card |
| Cost model | Server, proxy, and developer time | One credit per successful search, however many patents come back; empty searches free |
| Storing the data | Yours to manage | No storage limits. Export to CSV or a database |
PRICING
One credit per search
Prepaid packs, and credits never expire: 25k for $49 · 100k for $149 · 500k for $549 · 2.5M for $1,999 · up to 250M, all self-serve, ex-tax. One credit per successful search, however many patents come back, and a search that returns none costs nothing.
Run your first patents search free
3,000 credits a month. No card, no contract.
Get started →
THE LAST STEP
Page through results and save to CSV
Each call returns one page of results. Add a page number and loop to pull more, then write everything to a CSV file with Python's built-in csv module. No extra libraries. This walks pages 1 to 5 and writes one row per patent:
# page through results and save each patent to a CSV file
import csv, requests
rows = []
for page in range(1, 6):
data = requests.get(
"https://crustapi.com/v1/search",
params={"type": "patents", "q": "battery", "page": page},
headers={"x-api-key": "YOUR_KEY"},
).json()
rows.extend(data["organic"])
with open("patents.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["publicationNumber", "title", "inventor", "assignee", "filingDate", "grantDate", "link"])
for p in rows:
writer.writerow([p["publicationNumber"], p["title"], p.get("inventor", ""),
p.get("assignee", ""), p.get("filingDate", ""),
p.get("grantDate", ""), p["link"]])
Open patents.csv in Sheets or Excel and you have a finished list. Swap the query, run it again, and append to build a bigger dataset.
Related: Google Patents API · Google Patents Scraper · Google Search API · Google Scholar API · API docs
FAIR PLAY
When a different tool fits better: a bulk download of the full patent corpus, legal-status feeds, or a formal data license are jobs for the USPTO, EPO, or Google's public BigQuery patents dataset, not a search scraper. This endpoint returns the public search results anyone sees on Google Patents, which is what most prior-art, research, and monitoring work needs.
BEFORE YOU ASK
Common questions
WORKS WITH YOUR STACK
LangChain
n8n
MCP
Clay
Try it on a topic you know
3,000 free credits covers a real search. Run one query and look at the JSON that comes back.
Get 3,000 free credits
No credit card required