Google Patents API
Search patent results by query.
What is this API?
Serqo’s Google Patents API returns patent search results shown for a Google query as structured JSON. Use engine: "google" and type: "patents"; entries may include titles, links, displayed dates and text from the result page.
Common use cases
- Discover patent-related pages for a technology or product query.
- Collect result links and snippets for an initial research review.
- Compare patent-result visibility across search terms.
Request example
POST https://api.serqo.io/v1/search
| Field | Value |
|---|---|
| engine | google |
| type | patents |
Request headers
Create an API key and store it on your server. Send the API key in the x-api-key header.
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | JSON request body. |
| x-api-key | YOUR_API_KEY | API key used to authenticate the request. |
export SERP_API_KEY='YOUR_API_KEY'
curl https://api.serqo.io/v1/search \
-H "x-api-key: $SERP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"q": "solid state battery",
"engine": "google",
"type": "patents",
"gl": "us",
"hl": "en"
}' Code examples
Use the same API key with a standard HTTP client. These examples require Node.js 22 or later, or Python 3.
const response = await fetch('https://api.serqo.io/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SERP_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"q": "solid state battery","engine":"google","type":"patents"}),
});
const result = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${result.error?.message ?? 'Search failed'}`);
console.log(result.data);import json
import os
from urllib.request import Request, urlopen
payload = {"q": "solid state battery","engine":"google","type":"patents"}
request = Request(
'https://api.serqo.io/v1/search',
data=json.dumps(payload).encode(),
headers={
'x-api-key': os.environ['SERP_API_KEY'],
'Content-Type': 'application/json',
},
)
with urlopen(request) as response:
result = json.load(response)
print(result['data'])Parameters
The number of results returned per request depends on the search engine and may vary.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | — | Non-empty search query. |
| engine | string | No | Use google for this API. | |
| type | string | No | web | Use patents for this API. |
| gl | string | No | — | Two-letter lowercase country code, for example us. |
| hl | string | No | — | Interface language code, for example en. |
| start | integer | No | — | Not applied to Google patents searches. |
| safe | off | active | No | — | Not applied to Google patents searches. |
| tbs | string | No | — | Not applied to Google patents searches. |
Only q is required by the API, but keep engine and type as shown for this search. A dash means the API does not assign a default. Unknown parameters return 422 INVALID_PARAM.
Response
HTTP 200. A real API response, trimmed to the first three results for readability. Field availability and result groups vary by the returned page; values can be null.
{
"success": true,
"requestId": "req_1842a3c9-d211-41b1-aff9-a02120bdf659",
"data": {
"engine": "google",
"type": "patents",
"query": {
"q": "solid state battery",
"gl": "us",
"hl": "en"
},
"searchInformation": {
"totalResults": 113065,
"timeTakenMs": null,
"displayed": "113065 results"
},
"results": [
{
"position": 1,
"type": "patent",
"title": "Battery module",
"url": "https://patents.google.com/patent/US10886558B2/en",
"displayedUrl": "US10886558B2",
"domain": "patents.google.com",
"source": "Toyota Jidosha Kabushiki Kaisha",
"date": "2021-01-05",
"snippet": "100 of one embodiment disclosed herein a restraining load is applied perpendicularly to electrode surfaces within the unit cells 10 . In a case where all- solid-state batteries are used as the unit cells 10 , the edges of stacking surfaces, being the surfaces of the unit cells 10 in a direction (i.e. …",
"thumbnail": "https://patentimages.storage.googleapis.com/c3/1c/0b/9115ff0803df16/US10886558-20210105-D00000.png",
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"publicationNumber": "US10886558B2",
"language": "en",
"filingDate": "2019-01-17",
"publicationDate": "2021-01-05",
"grantDate": "2021-01-05",
"priorityDate": "2018-01-19",
"inventor": "Takuma Sakamoto",
"assignee": "Toyota Jidosha Kabushiki Kaisha",
"pdf": "https://patentimages.storage.googleapis.com/69/c4/79/36baff2e61b6ca/US10886558.pdf",
"isSimilarDocument": false,
"rank": 0
}
},
{
"position": 2,
"type": "patent",
"title": "Solid state battery with uniformly distributed electrolyte, and methods of …",
"url": "https://patents.google.com/patent/US11942620B2/en",
"displayedUrl": "US11942620B2",
"domain": "patents.google.com",
"source": "GM Global Technology Operations LLC",
"date": "2024-03-26",
"snippet": "In the instances of solid-state batteries , which include solid-state electrolyte layers disposed between solid-state electrodes, the solid-state electrolyte layer physically separates the solid-state electrodes so that a distinct separator is not required. Solid-state batteries have advantages over …",
"thumbnail": "https://patentimages.storage.googleapis.com/90/b8/0e/ed6c106ab89ebf/US11942620-20240326-D00000.png",
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"publicationNumber": "US11942620B2",
"language": "en",
"filingDate": "2021-12-06",
"publicationDate": "2024-03-26",
"grantDate": "2024-03-26",
"priorityDate": "2020-12-07",
"inventor": "Yong Lu",
"assignee": "GM Global Technology Operations LLC",
"pdf": "https://patentimages.storage.googleapis.com/f8/02/22/a9e3950cab3340/US11942620.pdf",
"isSimilarDocument": false,
"rank": 1
}
},
{
"position": 3,
"type": "patent",
"title": "Low-expansion composite electrodes for all- solid-state batteries",
"url": "https://patents.google.com/patent/US11239459B2/en",
"displayedUrl": "US11239459B2",
"domain": "patents.google.com",
"source": "GM Global Technology Operations LLC",
"date": "2022-02-01",
"snippet": "The drawings described herein are for illustrative purposes only of selected embodiments and not all possible implementations, and are not intended to limit the scope of the present disclosure. FIG. 1 is a schematic of an example of an all- solid-state electrochemical battery cell; FIG. 2A is an …",
"thumbnail": "https://patentimages.storage.googleapis.com/31/2c/35/2f94d4ccf0b302/US11239459-20220201-D00000.png",
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"publicationNumber": "US11239459B2",
"language": "en",
"filingDate": "2018-10-18",
"publicationDate": "2022-02-01",
"grantDate": "2022-02-01",
"priorityDate": "2018-10-18",
"inventor": "Thomas A. Yersak",
"assignee": "GM Global Technology Operations LLC",
"pdf": "https://patentimages.storage.googleapis.com/9b/93/8b/6a8616b3676c91/US11239459.pdf",
"isSimilarDocument": false,
"rank": 2
}
}
],
"features": {},
"pagination": {
"page": 1,
"start": 0,
"hasNext": true,
"nextStart": 10
},
"meta": {
"elapsedMs": 1415
}
},
"meta": {
"cache": "miss"
}
}
Response fields
| Field | Type | Description |
|---|---|---|
| data.query | object | Search query passed to the engine. |
| data.searchInformation | object | Reported result count and search timing, when provided. |
| success | boolean | Whether the request succeeded. True in this example. |
| requestId | string | Request identifier to include when troubleshooting. |
| data.type | string | Search type used for this response. |
| data.engine | string | Engine that returned the results. |
| data.results | array | Main result list. Check feature groups as well when present. |
| data.features | object | Additional result groups; groups not returned by the engine may be absent. |
| data.pagination | object | Current offset and next-page availability. |
| data.meta.elapsedMs | number | Search duration in milliseconds, not a performance guarantee. |
| meta.cache | string | null | hit, miss, or null if cache status is unknown. |
Result fields
Read entries from data.results. Additional groups, when present, are in data.features.
| Field | Type | Description |
|---|---|---|
| data.results[].domain | string | null | Destination domain, when available. |
| data.results[].favicon | string | null | Site icon when provided. |
| data.results[].sitelinks | array | Additional links nested under the result. |
| data.results[].sitelinks[].title | string | Sitelink label. |
| data.results[].sitelinks[].url | string | null | Sitelink destination. |
| data.results[].extensions | object | Other result-specific properties. |
| data.results[].snippetHighlightedWords | string[], optional | Highlighted terms in the snippet, when provided. |
| data.results[].position | integer | Rank on this results page, starting at 1. |
| data.results[].type | string | Result category: organic, news, image, video, shopping, local, forum, book, patent or ad. This can differ from the request type. |
| data.results[].title | string | null | Title shown in the result. |
| data.results[].url | string | null | Destination URL when resolved; it may be null. |
| data.results[].displayedUrl | string | null | URL or domain displayed by the engine; not always a clickable link. |
| data.results[].source | string | null | Source name or displayed domain. |
| data.results[].date | string | null | Date text when extracted; not necessarily an ISO timestamp. |
| data.results[].snippet | string | null | Result summary. |
| data.results[].thumbnail | string | null | Thumbnail URL or inline data URL, when provided. |
| data.results[].duration | string | null | Video duration text when provided. |
| data.results[].price | string | null | Price text when provided. |
| data.results[].rating | number | null | Rating when provided. |
Pagination
start is not applied to this search type. Do not use it to request a different page.
| Field | Type | Description |
|---|---|---|
| data.pagination.nextUrl | string | null | Search-engine URL for the next page, when available; use nextStart with this API. |
| data.pagination.requestedPage | integer | Page requested; may differ from the returned page if the engine does not provide it. |
| data.pagination.page | integer | Current page number. |
| data.pagination.start | integer | Current result offset. |
| data.pagination.hasNext | boolean | Whether another page is available. |
| data.pagination.nextStart | integer | null | Offset for the next request, or null when unavailable. |
Errors
{
"success": false,
"requestId": "req_example",
"error": {
"code": "INVALID_PARAM",
"message": "Unknown parameter \"page\"",
"retryable": false
}
} | Field | Type | Description |
|---|---|---|
| error.code | string | Machine-readable error code. |
| error.message | string | Reason the request failed. |
| error.retryable | boolean | Whether retrying is recommended. |
| error.retryAfterMs | number, optional | Minimum wait before retrying, in milliseconds. |
| HTTP status | Meaning | What to do |
|---|---|---|
| 400 | Invalid request or unsupported search type. | Check the query and engine/type combination. |
| 401 | Missing, invalid or revoked API key. | Check the authentication header and API key. |
| 402 | Insufficient credits. | Check your credit balance. |
| 403 | Permission or plan restriction. | Check account access and plan limits. |
| 422 | Invalid parameter. | Correct the parameter identified by error.message. |
| 429 | Request rate or queue limit. | Follow the retry rules below. |
| 5xx | Server or search service failure. | Keep the requestId; retry only if allowed. |
Retry rules
- Retry only when
error.retryableistrue. - If
error.retryAfterMsis present, wait at least that many milliseconds.
Pricing and limits
- Successful searches use credits at the applicable rate.
- Failed searches and timeouts are not charged.
- Cache hits are free at the default rate. Before searching, your available balance must cover the full request cost.
See plan pricing and rate-limit and credit details.
Frequently asked questions
Is this a legal patent-status or clearance check?
No. It returns search results, not an authoritative patent register, legal-status determination or freedom-to-operate opinion. Verify any legal or filing question with the relevant official records and qualified counsel.
How are patent searches charged?
Successful searches use the applicable credit rate for the engine, type and country. Failed searches and timeouts release the reservation; cache hits are free at the default rate. See Pricing and limits below for the current rules.