In this Article
A Google Patents API search leads to several different access routes, but we did not find a documented public Google API for the website’s search results. Developers should distinguish patent datasets queried through BigQuery, third-party search services, and the website’s undocumented endpoints.
This guide connects that choice to an actual extraction task. We explain the documentation, reproduce the exact Python script from our quick run on October 16, 2026, and report what it extracted from 10 search hits. The measurements are a small snapshot, not a benchmark or a promise of future access.
Key Facts
- Google Patents has no official public API (as of October 2026).
- Patent pages carry title, abstract, claims, assignee and dates as schema.org microdata in plain HTML.
- The search page’s own JSON endpoint returned 129,598 results for “residential proxy”, capped at 100 pages.
- Official routes need registration: EPO OPS answered 403 and the USPTO API 401 without credentials in our check.
- Our extractor got titles and assignees for 10 of 10 patents; Chinese (CN) pages need separate parsing.
- Google’s patents-public-data dataset in BigQuery is the official bulk alternative.
Is a Google Patents API officially available?
We found documented dataset access and website search help, but no documented public Google Patents search API with an official key-registration process. That finding is narrower than proving that no interface exists.
Google’s search help describes website queries. The Google patent dataset repository describes SQL analysis through BigQuery. Neither should be read as documentation for the website’s internal search endpoint. The repository is archived and explicitly says its contents are not an official Google product; its examples are useful references, not a maintenance commitment.
Our run observed JSON from /xhr/query, the endpoint called by the search page. A successful response does not establish a supported API contract, stable schema, permission to automate, or guaranteed pagination. The current robots rules also distinguish this endpoint from patent pages, as discussed below.
Choose the access route before seeking credentials. A third-party provider key authenticates with that provider. BigQuery uses Google Cloud authentication. Neither credential turns the internal XHR endpoint into an official Google Patents api.
Which Google Patents API route fits your task?
Use the 4-factor Patent Access Check to choose a route: scope, freshness, output, and cost. Write down acceptable answers before building a collector.
- Scope: Which jurisdictions, publication kinds, languages, and fields must be present?
- Freshness: Is a dated research snapshot sufficient, or must recent publications and events appear?
- Output: Do you need ranked hits, publication records, complete text, PDFs, or family aggregates?
- Cost: What budget covers queries, requests, transfer, storage, and maintenance?

| Route | Use X when… | Avoid X when… |
|---|---|---|
| BigQuery | Use BigQuery when SQL analysis is required. | Avoid BigQuery when website ranking must match. |
| Third-party API | Use a third-party API when structured search output is needed. | Avoid a third-party API when vendor dependence is unacceptable. |
| Public-page extraction | Use public-page extraction when a small metadata task warrants it. | Avoid public-page extraction when bulk completeness is essential. |
| Official bulk/API source | Use an official source when source-specific records fit. | Avoid that source when its coverage mismatches the project. |
For example, competitor discovery and a historical filing study need different acceptance tests. Our guide to market research data sources explains how to evaluate source suitability before collection.
How do you query patent datasets with BigQuery and Python?
Use BigQuery for reproducible SQL analysis, after inspecting the table schema and estimating query cost. We did not execute a BigQuery query in this run.
The repository’s publication schema reference identifies patents-public-data.patents.publications, repeated CPC records, and localized text arrays. It describes worldwide bibliographic data and US full text. Because that reference contains historical metadata, inspect the live table before assuming current international claims or description coverage.
Design the query around publication identifiers, dates, a CPC condition, and the text field actually needed. For repeated classifications and localized text, use separate existence conditions to avoid multiplying rows. Select the language explicitly. An abstract keyword filter is not a full-text search, and a publication count is not a family count.
For Python authentication, follow Google’s Application Default Credentials instructions. The Python client documentation explains query submission. Select the project explicitly and keep credentials out of source control.
The REST jobs.query method returns job completion information and can return a page token. Retrieve subsequent results through the documented continuation method; do not repeatedly execute the original analysis just to obtain another page.
For on-demand queries, set a maximum bytes billed limit (as of October 2026) and perform a dry run first. Google’s cost controls explain why LIMIT alone does not reliably reduce scanned bytes. Save the query, table identifier, execution date, and byte estimate with the output.
How do third-party search and details APIs work?
Third-party APIs expose their own authentication and response contracts. Search retrieves candidates; details retrieval requests information about a particular record.
SerpApi’s Google Patents documentation specifies engine=google_patents, a query, and a provider API key. Its response examples include structured search results. Pagination uses page and num; the documented page-size range is 10 to 100 results (as of October 2026). Follow the provider’s numbering rather than copying the internal website endpoint’s page value.
SearchApi’s details documentation specifies engine=google_patents_details and a patent_id, such as a patent URL path. Its documented JSON includes publication and application identifiers, inventors, assignees, classifications, and events. These parameters belong to SearchApi, not SerpApi.
Separately, SerpApi’s pricing page lists its Starter plan at $25 per month for 1,000 searches (as of October 2026). Budget for search pages and any additional details requests your workflow requires; do not assume every result always requires another call.
We did not test either commercial API. Before committing, evaluate a representative set of identifiers and compare required fields, missing values, duplicate handling, and billed usage. Keep the original provider response alongside your normalized record so schema changes remain diagnosable.
How can Python extract public patent pages and PDFs?
Our Python extractor reads metadata from patent HTML and records PDF links. It does not download PDFs or establish that an absent parsed field is absent from the underlying patent.
Access restriction: the current Google Patents robots file allows /patent/ but disallows the XHR search path under its general rule. The exact measurement script below records what ran; its automated search step should not be reused without authorization consistent with the applicable terms and rules.
The script uses requests for HTTP and regular expressions for the observed markup. It pauses two to four seconds between patent requests and writes patents.csv. This narrow parser is easy to inspect, but its failures on Chinese pages show why it is unsuitable as a universal patent parser.
import csv, html, json, random, re, time
from urllib.parse import quote
import requests
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"}
def search(query, num=10, page=0):
"""The JSON endpoint the Google Patents search page itself calls (undocumented, may change)."""
inner = f"q=({quote(query)})&num={num}&page={page}"
r = requests.get("https://patents.google.com/xhr/query",
params={"url": inner, "exp": ""}, headers=HEADERS, timeout=40)
r.raise_for_status()
res = r.json()["results"]
ids = [hit["id"] for c in res["cluster"] for hit in c["result"]] # e.g. patent/US12381958B2/en
return res["total_num_results"], ids
def itemprop(page, name):
m = re.search(rf'itemprop="{name}"[^>]*>(.*?)</', page, re.S)
return html.unescape(re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", m.group(1)))).strip() if m else None
def patent(path):
"""Patent pages carry schema.org microdata (itemprop) in plain HTML."""
page = requests.get(f"https://patents.google.com/{path}", headers=HEADERS, timeout=40).text
claims = re.search(r'<section itemprop="claims".*?</section>', page, re.S)
pdf = re.search(r'<meta name="citation_pdf_url" content="([^"]+)"', page)
abstract = re.search(r'<div[^>]*class="abstract"[^>]*>(.*?)</div>', page, re.S)
return {
"id": path.split("/")[1],
"title": itemprop(page, "title"),
"assignee": itemprop(page, "assigneeOriginal"),
"priority_date": itemprop(page, "priorityDate"),
"publication_date": itemprop(page, "publicationDate"),
"status": itemprop(page, "legalStatusIfi"),
"abstract": html.unescape(re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", abstract.group(1)))).strip()[:500] if abstract else None,
"claims": len(re.findall(r'class="claim"', claims.group(0))) if claims else 0,
"pdf": pdf.group(1) if pdf else None,
}
if __name__ == "__main__":
total, ids = search("residential proxy", num=10)
print(f"{total} results; fetching {len(ids)} patents")
rows = []
for path in ids[:10]:
rows.append(patent(path))
time.sleep(random.uniform(2, 4))
with open("patents.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
w.writeheader()
w.writerows(rows)
print(json.dumps(rows[0], indent=1)[:800])
Interpret its output carefully: abstracts are truncated to 500 characters, claims are counted rather than extracted, and the assignee field is the original assignee. The page-fetch function also lacks an HTTP status check, so an error page could become a misleading row of empty fields.
For authorized PDF retrieval, treat each discovered URL as a separate download: check the destination’s rules, verify the response and content type, stream to storage, and record a checksum. Keep missing links distinct from failed downloads. Our Python requests proxy guide covers connection configuration when a permitted workflow actually needs it.
What did our quick access test return?
Our quick run on October 16, 2026 returned usable metadata with visible parsing gaps. It was a small snapshot, not a benchmark.
Andrii ran the checks on Linux using Python 3.12 and requests. The extraction sample comprised the first 10 hits for residential proxy, fetched directly with pauses. The measurement artifacts are google_patents.py, reproduced above, and its patents.csv output. Separate checks covered one patent page, the search endpoint, and unauthenticated alternative services.
| Check | Observed result |
|---|---|
| US9876543B2 page | HTTP 200; approximately 449 KB; 0.16 seconds |
| XHR search | HTTP 200; application/json; approximately 37 KB; 1.1 seconds |
| Search response | Reported 129,598 results and a 100-page cap |
| Titles and assignees | Extracted for 10 of 10 hits |
| Abstracts | Missing from parsed output for 3 of 10 hits |
| Claims | Zero parsed for 2 Chinese patent pages with different structure |
| PDF links | Missing from parsed output for 1 of 10 hits |
The first hit was US12381958B2, Methods and systems for implementing a regionally contiguous proxy service. Its extracted fields named Oxylabs UAB, priority date 2021-03-19, publication date 2025-08-05, status Active, and 18 claims. These are observed page values, not an independent legal assessment.
OPS returned 403 with a Fair Use rejection message without OAuth registration. ODP returned 401 without an API key. The old PatentsView hostname failed DNS resolution from our server. None establishes a general outage or an authenticated service success rate.
Using roughly 0.45 MB per page, 1,000 similar pages would transfer about 0.45 GB, or about $0.45 at $1/GB. That extrapolation excludes PDFs, retries, and other traffic. We needed no proxy for the 10 pages and did not measure an aggregate collection time.
Which official APIs and exports are alternatives?
Start with the source whose records match the project. An export, research dataset, and document API solve different problems.
For a short list, Google’s CSV export instructions allow up to the top 1,000 results (as of October 2026), with fewer sometimes returned. This is a bounded search export, not evidence of corpus completeness.
USPTO now identifies PatentsView as hosted on ODP. The transition guide could not be read during verification, so we do not infer replacement endpoints or carry old authentication instructions forward. The official landing page is stronger evidence of location than our server’s failed DNS lookup.
EPO OPS documents registration and OAuth. Its non-paying allowance is up to 4 GB weekly, with an annual EUR 2,800 subscription for higher usage (as of October 2026), subject to its conditions and fair-use rules.
PATSTAT, DOCDB, and The Lens bulk service belong on the shortlist for larger analytical collections. Compare their delivery models before choosing a storage format.
How do you assemble bulk patent data for analysis?
Build bulk collections from identifiable releases, preserve raw files, and normalize them into a documented analytical schema. A successful import alone does not establish completeness.
| Source | Documented delivery | Refresh and history checks | Integration decision |
|---|---|---|---|
| Google search export | CSV | Record query and export date | Small candidate lists; preserve search context |
| BigQuery publications | SQL-accessible tables | Inspect live table metadata and date coverage | Repeated fields require deliberate joins |
| USPTO publication data | Grant and application XML | Match files to issue dates and schema generations | Separate grants from application publications |
| PATSTAT | Bulk CSV tables; SQL analysis through its online service | Twice-yearly editions; retain edition identity | Relational joins suit statistical studies |
| DOCDB | Bibliographic XML | Weekly current-data downloads; assess backfile needs | Plan XML normalization and updates |
| The Lens | Compressed JSON Lines | Fortnightly releases and update metadata | Check subscription entitlement and token access |
Format and release references are the USPTO XML resources, PATSTAT manual, DOCDB documentation, and Lens bulk documentation linked above. Do not assume a SQL dump or TSV export exists simply because downstream analysis uses those formats. Historical depth must be checked for the fields and jurisdictions you need.
Step 1: Inventory. Record product, release, issue-date range, schema, checksum, and usage terms. Check redistribution rights separately from access rights. Obtain current subscription quotes where needed; no universal bulk-data price applies.
Step 2: Normalize. For USPTO XML, extract publication identifiers, kind codes, dates, assignees, and required text into separate related tables. Preserve identifiers as strings. Keep repeated inventors, classifications, and claims out of a flattened row that accidentally multiplies publications.
Step 3: Load. Write normalized CSV with explicit columns, then use the documented DuckDB CSV importer. Declare identifier and date types deliberately. Compare source document counts with imported distinct identifiers, inspect rejects, and test joins before calculating trends.
Step 4: Update. Track processed releases and replace or merge records according to source semantics. Keep raw versions so corrections can be explained. Schedule availability checks around documented releases rather than repeatedly downloading unchanged files.
For an ODP client, distinguish the bulk-product search API from application-level File Wrapper retrieval. Its documented bulk search requires an API key; our unauthenticated check did not validate application retrieval or pagination.
For an OPS client, complete OAuth registration, select XML or JSON using the OPS reference, and implement that endpoint’s continuation rules. Bound every job by records, requests, and elapsed time. Follow response throttling instructions and stop on authentication failures. Our API rate limiting guide explains the operational pattern.
How reliable are coverage and legal-status fields?
Coverage and status must be evaluated at the field, jurisdiction, and date level. A populated field cannot guarantee that an analytical conclusion is correct.
Google’s coverage documentation explicitly does not guarantee completeness. Website indexing, a downloadable dataset, and a third-party response should therefore be audited separately. Our missing abstracts and claims were parser observations, not proof that those documents lacked text.
Keep application, publication, and family identifiers separate. Define whether your study counts published documents, applications, or families before deduplication. Preserve the original kind code and source identifier even when adding a normalized key.
For legal-status work, store the observed value with its source and retrieval date. Verify consequential conclusions against the relevant patent office record and underlying events. The Active value in our sample is a page label, not a guarantee of enforceable rights in every jurisdiction.
Audit a stratified sample across countries, years, document types, and languages. Measure field completeness separately from request success. For research spanning patents and literature, our Google Scholar collection guide offers a related workflow, but each source requires its own checks.
What legal and operational constraints apply?
Public visibility does not settle permission to automate, reuse, or redistribute data. Check the applicable terms and machine-readable rules before collection.
The current robots file allows patent paths but disallows XHR search. Google’s terms prohibit automated access contrary to machine-readable instructions. These checks do not establish what was reviewed before our historical run; its successful responses establish technical observations only.
The 2022 hiQ v. LinkedIn opinion concerned preliminary relief and a particular CFAA issue involving public pages. It is not blanket permission for scraping or a resolution of every contractual claim.
The EU Database Directive can restrict substantial extraction or reutilization. Where personal data is involved, assess lawful processing, purpose, retention, and minimization under the GDPR. Public inventor information is not automatically outside those duties.
Use bounded requests, respect refusals, and avoid treating proxy rotation as permission. See our web scraping legal guide for further context; the reader decides, check local law
Frequently Asked Questions
Is there an official Google Patents API?
We did not identify a documented public Google API for the website’s search results. The internal XHR interface observed in our run should not be treated as a supported public API.
Where do I obtain an API key?
Choose the service first, then follow its official authentication instructions linked above. A search-provider credential, Google Cloud identity, and patent-office credential are not interchangeable.
Can I access patent data for free?
Our direct page checks incurred no proxy charge, and the official access options above include bounded free access. That does not make every workflow free: query execution, storage, subscriptions, and maintenance can still cost money.
How do BigQuery, Google Patents, USPTO, and EPO OPS differ?
Treat them as different source and access choices rather than equivalent endpoints. Match each documented route to the analysis, jurisdictions, fields, and freshness you require, then test those requirements before scaling.
When does public-page extraction need a proxy?
A proxy may fit an authorized workflow that requires a particular network route or geographic exit. Our 10-page run needed none, and adding one would not resolve parser errors, missing fields, or access restrictions.
Does a zero claims count mean the patent has no claims?
No. Our script returned zero when its expected claims structure was absent, including two Chinese pages. Treat that result as a parsing issue requiring inspection.
Can the tested script download every matching patent and PDF?
No. It processes the first 10 search hits and stores discovered PDF links without downloading them. It also truncates abstracts and depends on an undocumented search endpoint whose current robots rules restrict automated access.
Estimate transfer costs before adding proxies
If an authorized collection workflow needs proxy routing, DataImpulse residential proxies start at $1 per GB. Measure representative pages and PDFs separately before budgeting. DataImpulse supplies proxy connectivity, not a scraping API, managed unblocker, VPN, or patent data vendor.
Last updated: October 16, 2026.

State/City/Zip/ASN Targeting 



