Dataspryva

Use Google Patents Inventor, Assignee & Citation Lookup with Python

Search Google's aggregated patent index by keyword, inventor, assignee, classification code, or citation graph, and get abstract, claims, dates, family, and citations for each matching patent.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "assignees": [],
  "citationDepth": 1,
  "citationDirection": "both",
  "classifications": [],
  "countryCodes": [],
  "dateType": "priority",
  "detailLanguage": "en",
  "documentLanguages": [],
  "fetchFullDetails": false,
  "grouping": "family",
  "includeNonPatentLiterature": false,
  "includeSimilar": true,
  "inventors": [],
  "litigation": "ANY",
  "maxItems": 3,
  "mode": "searchPatents",
  "patentType": "ANY",
  "publicationNumbers": [],
  "searchQueries": [
    "quantum computing"
  ],
  "sortBy": "relevance",
  "status": "ANY",
  "urls": []
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhich lookup path to use.
searchQueriesarrayoptionalOne or more keyword queries. Google Patents syntax works: quoted phrases, OR, minus, TI=(title words), CL=(claim words), CPC=H04L9/06.
publicationNumbersarrayoptionalPublication numbers such as US11704715B2, EP3789012A1, WO2020012345A1. Used by byPatent, byCitation and byFamily.
inventorsarrayoptionalInventor names. The actor runs one search per name.
assigneesarrayoptionalAssignee or applicant names. The actor runs one search per name.
classificationsarrayoptionalCPC codes or prefixes such as H04L9/06, G06N3/00, H01M10. Combined with a keyword query when both are set.
urlsarrayoptionalPatent pages (/patent/US.../en) or search pages (/?q=...&assignee=...&country=...). All search filters in the URL are honoured.
countryCodesarrayoptionalTwo-letter office codes: US, EP, WO, JP, CN, KR, DE, GB, FR, CA, AU, IN and more. Empty means all offices.
documentLanguagesarrayoptionalOriginal publication languages: ENGLISH, GERMAN, FRENCH, SPANISH, JAPANESE, KOREAN, CHINESE, RUSSIAN, PORTUGUESE, ITALIAN, ARABIC, DUTCH, SWEDISH, FINNISH, NORWEGIAN, DANISH. This filters documents; it does not translate them.
detailLanguagestringoptionalLanguage of the patent page text. Google translates where available.
statusstringoptionalAny status, granted patents only, or published applications only.
patentTypestringoptionalUtility-style patents or design patents.
dateTypestringoptionalWhich date the From and To fields apply to.
dateFromstringoptionalEarliest date, inclusive. Leave empty for no lower bound.
dateTostringoptionalLatest date, inclusive. Leave empty for no upper bound.
sortBystringoptionalGoogle's relevance, newest first, or oldest first.
groupingstringoptionalOne row per patent family (Google's default) or one row per publication.
includeSimilarbooleanoptionalGoogle mixes similar documents into search results. Keep them (label matchType=similar) or drop them.
includeNonPatentLiteraturebooleanoptionalAlso return Google Scholar non-patent literature rows for each keyword query.
litigationstringoptionalOnly patents with related litigation, only patents with no known litigation, or any.
citationDirectionstringoptionalWhich side of the citation graph to walk in byCitation mode.
citationDepthintegeroptionalHow many citation hops to follow in byCitation mode: 1, 2 or 3.
fetchFullDetailsbooleanoptionalFor search modes, also fetch each patent page for claims, legal status, citations, family and other detail fields.
maxItemsintegeroptionalHard cap on emitted records. Google Patents exposes about 1,000 results per query; use date, office or CPC filters to go deeper.
maxItemsPerQueryintegeroptionalOptional cap for each query / inventor / assignee / CPC search. 0 means only the global Max items cap applies.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/qGwyVKXBvzDrcnIAf/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

One dataset with patent records plus optional citation, family-member and non-patent-literature rows. Patent rows include title, abstract, claims, inventors, assignees, CPC classes, dates, legal status, legal events, citations, family, figures and PDF links.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build N7bSR7wWMs9dxceBg and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.