Google Patents Scraper With Legal Status & Ownership Details avatar

Google Patents Scraper With Legal Status & Ownership Details

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Google Patents Scraper With Legal Status & Ownership Details

Google Patents Scraper With Legal Status & Ownership Details

๐Ÿ”Ž Google Patents Scraper extracts structured patent data from Google Patents โ€” titles, abstracts, inventors, assignees, dates, legal status, citations & CPC/IPC classifications. ๐Ÿ“Š Export CSV/JSON. ๐Ÿš€ Ideal for prior art, patent landscaping & competitive intelligence.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Google Patents Scraper With Legal Status & Ownership Details pulls patent records straight from Google Patents by keyword, publication number, assignee, inventor, or URL, returning title, abstract, inventors, filing/publication dates, CPC/IPC codes, PDF links โ€” plus two fields most patent scrapers skip: live legal status (active, expired, or pending, with expiration date) and full ownership/assignment history down to the current assignee. Built for patent attorneys, IP researchers, and competitive-intelligence teams who need to know who owns a patent today, not just who filed it.

It's an Apify Actor that automates a Google Patents search and detail-page lookup, then returns every matching patent as structured JSON โ€” no browser, no manual clicking through patents.google.com one result at a time. No Google account, API key, or login of any kind is required; the Actor talks to Google Patents' own public search and result endpoints the same way a browser does.

  • Discovery by keyword, publication number, assignee, inventor, or URL โ€” paste patent links, search-result links, or plain keyword lines, and mix them freely with dedicated assignee/inventor filters
  • Core patent record โ€” publication number, title, abstract, inventors, original assignee, filing/publication/grant/priority dates, PDF link, thumbnail and figures
  • Legal status intelligence โ€” per-patent status statement plus per-country family legal state, sourced from Google's own data
  • Ownership/assignment history โ€” original-to-current assignee chain, an ownershipChanged flag, and a full assignment-events child dataset
  • Optional deep data โ€” full description text, claims text, backward/forward citations, patent family members, and CPC/IPC classification codes, each toggled independently
  • Filterable by jurisdiction, document kind, and date range (absolute or relative), with a configurable cap on how many patents to analyze

Every run returns patent-level records plus, when enabled, a child dataset of ownership events and a one-off search-summary row. All fields below use the exact JSON keys the Actor writes.

FieldExample ValueUse Case
patentNumberUS12438891B1Unique identifier for joins, lookups, and dedup
titleAnomaly detection based on ensemble machine learning modelSearch result labeling
abstractA system detects anomalies using an ensemble of models...Quick relevance triage
inventors["Jane Doe", "John Smith"]Inventor-level research
assigneeCisco Technology IncFiling-time owner, as shown on the search hit
filingDate2022-02-18Priority/filing timeline analysis
publicationDate2025-10-07Recency filtering, monitoring feeds
grantDate2025-10-07Grant-vs-application status checks
priorityDate2022-02-18Global filing-family timeline
languageenLocalization/translation triage
urlhttps://patents.google.com/patent/US12438891B1Direct link to the source record
pdfUrlhttps://patentimages.storage.googleapis.com/.../US12438891B1.pdfFull-document download
thumbnailUrlhttps://patentimages.storage.googleapis.com/.../thumb.pngFigure preview in a UI
figures[{"thumbnailUrl": "...", "fullUrl": "..."}]Drawing/figure extraction
classifications{"cpc": ["G06N 20/00"], "ipc": ["G06N 20/00"]}Technology-area segmentation
citations{"citedBy": ["US123..."], "references": ["US456..."]}Prior-art and forward-citation mapping
patentFamily["EP123456A1", "WO2023..."]Cross-jurisdiction family tracking
fullText{"description": "...", "claims": "..."}Legal-language review
familyLegalStatus[{"countryCode": "US", "state": "ACTIVE"}]Per-country enforceability at a glance
legalStatus{"status": "Active", "isActive": true, "expirationDate": "2036-01-24"}Freedom-to-operate screening
originalAssigneeCisco Technology IncWho first owned the patent
currentAssigneeCisco Technology IncWho owns it right now
ownershipChangedtrueOne-flag portfolio-change alerting
ownershipEventsCount3How many reassignments to expect in the child rows
rank0Search-result ordering
docIdpatent/US12438891B1/enGoogle's internal document ID
scrapedAt2026-07-20T10:15:32ZData-freshness auditing

Ownership events arrive as their own child rows (type: "ownershipEvent") with patentNumber, date, eventType, fromAssignee, toAssignee, and rawTitle. A once-per-run searchSummary row (type: "searchSummary") adds whole-result-set facets: totalNumResults, topAssignees, topInventors, and topCpcCodes.

This is the Actor's headline data group, and it is genuinely extracted, not inferred. legalStatus comes from the Legal Status statement on each patent's own detail page (status plus expiration date); familyLegalStatus comes from Google's per-country family legal-state data attached to every search hit. originalAssignee/currentAssignee and the ownership-events child rows are parsed from the same detail page's Assignment Events table, which lists every reassignment, merger, or name change with a date and the from/to parties. Any field Google doesn't publish for a given patent comes back null rather than a guessed value โ€” a patent with no recorded assignment history returns ownershipEventsCount: 0, not a fabricated event.

Filing and classification data

Filing, publication, grant, and priority dates place a patent in its examination and enforceability timeline, and pair with jurisdiction to answer "when and where was this filed." familyLegalStatus's countryCode field lets you check enforceability office-by-office for the same invention. CPC and IPC codes (classifications.cpc, classifications.ipc) group patents by technology area for landscape analysis, independent of how the patent's title or abstract is worded โ€” useful for finding related art a keyword search would miss.

Why not build this yourself?

Google doesn't publish a simple REST API for querying Google Patents on demand โ€” its official bulk offering is the Google Patents Public Data dataset on BigQuery, which is a static, periodically-refreshed export meant for large-scale SQL analysis, not a live endpoint you can query by keyword, date range, or country and get back today's legal status. To get current data yourself, you'd be scripting against patents.google.com's own internal search and result endpoints directly: matching its exact request headers, handling pagination and result caps, and adding proxy rotation once requests get blocked at volume. Legal status and ownership are harder still โ€” they live in undocumented HTML markers on the detail page (a legalStatusIfi block for status/expiration, assigneeCurrent/assigneeOriginal blocks, and a repeating events block for the assignment history) that have no equivalent in the BigQuery export at all, so reconstructing them means parsing detail-page HTML patent by patent.

This Actor already does that parsing and request handling, and falls back from a direct connection to datacenter and then residential proxies automatically when a request is blocked. Use the BigQuery public dataset when you need bulk historical analysis across millions of patents and can tolerate a periodic snapshot. Use this Actor when you need current, per-patent legal status and ownership data returned as clean JSON from a query you define today.

How to use data extracted from Google Patents?

Patent attorneys and IP researchers

Run a patentIds lookup on the specific publications in a client's portfolio or a target's filings, with includeLegalStatus and includeOwnershipHistory left on, and get back each patent's current enforceability (legalStatus.isActive, expirationDate) and its full chain of custody in one pass โ€” no opening the USPTO Assignment database or Espacenet one record at a time. The ownershipEventsCount and child event rows show exactly which reassignments, mergers, or name changes to flag in a due-diligence memo before a deal closes, and familyLegalStatus lets you check whether the same invention is still enforceable in other countries before clearing a freedom-to-operate question across a whole jurisdiction, not just the one publication a client happened to send over.

R&D and competitive-intelligence teams

Set assigneeFilter to a competitor's name with a publishedAfter date to monitor their newly published filings on a recurring schedule, then read classifications.cpc and title/abstract to see which technology areas they're actively patenting in. Re-running the same input periodically turns this into a standing competitor-filing watch instead of a one-off pull, and currentAssignee flags when a competitor's portfolio has quietly changed hands through a subsidiary or acquisition.

Market and technology research

Use broad searchTerms combined with jurisdiction and documentKind to pull a technology landscape (e.g., all granted US patents matching a keyword over a date range), then group the results by classifications.cpc and currentAssignee to see which companies dominate a given technology area and how concentrated ownership is. The once-per-run searchSummary row's topAssignees and topCpcCodes facets give the same landscape view as a single free aggregate, without tallying every individual record by hand.

AI agents and RAG pipelines

A patentIds lookup returning title, abstract, claims, and legalStatus gives an agent grounded, current facts to answer "is this patent still enforceable" or "who owns it now" instead of relying on outdated training data โ€” a natural tool call in a patent-research or FTO-screening agent.

๐Ÿ”ผ Input sample

All 18 input fields are optional โ€” supply at least one of patentLinks, searchTerms, or patentIds to get results. Read directly from the Actor's input schema.

ParameterRequiredTypeDescriptionExample Value
patentLinksNoarrayPatent URLs, search URLs (q=), or plain keyword lines, one per entry; OR-merged with searchTerms["https://patents.google.com/patent/US12438891B1", "machine learning"]
searchTermsNostringMain keyword search; OR-merged with any q= from search URLs and with patentIds"anomaly detection"
patentIdsNoarraySpecific publication numbers to check legal status/ownership on["US12438891B1"]
assigneeFilterNostringRestrict to patents originally filed by a given organization"Cisco Technology Inc"
inventorFilterNostringRestrict to patents listing a given inventor"Jane Doe"
jurisdictionNostring (enum)Country/office code, or ANY for no country filter"US"
publishedAfterNostringAbsolute date (YYYY-MM-DD) or relative range ("30 days", "6 months"); empty = no lower bound"2024-01-01"
publishedBeforeNostringSame format as above; empty = no upper bound"2026-01-01"
documentKindNostring (enum)ANY, PATENT (granted), APPLICATION, or DESIGN"PATENT"
maxPatentsNointegerCap on patents to analyze; 0 = no limit10
includeLegalStatusNobooleanAdds legalStatus (status + expiration) and relies on familyLegalStatus already present on search hitstrue (default)
includeOwnershipHistoryNobooleanAdds originalAssignee/currentAssignee, ownershipChanged, and the ownership-events child datasettrue (default)
fetchFullTextNobooleanAdds the full written descriptionfalse (default)
fetchClaimsNobooleanAdds the patent claims texttrue (default)
fetchCitationsNobooleanAdds backward/forward citation liststrue (default)
fetchPatentFamilyNobooleanAdds related family publicationstrue (default)
fetchClassificationsNobooleanAdds CPC/IPC classification codestrue (default)
proxySettingsNoobjectApify Proxy configuration{"useApifyProxy": true}
{
"searchTerms": "anomaly detection machine learning",
"assigneeFilter": "Cisco Technology Inc",
"jurisdiction": "US",
"publishedAfter": "2022-01-01",
"documentKind": "PATENT",
"maxPatents": 25,
"includeLegalStatus": true,
"includeOwnershipHistory": true,
"fetchClassifications": true
}

Pitfall to avoid: publishedAfter/publishedBefore only accept an absolute YYYY-MM-DD date or a strict relative pattern like "30 days" or "6 months". A phrase like "last month" or "Q1 2024" doesn't match either pattern and gets inserted into the search query literally, silently producing zero or unexpected results instead of an error โ€” stick to the two supported formats.

๐Ÿ”ฝ Output sample

Output is typed, normalized JSON pushed to the Actor's default dataset, one row per patent plus optional child rows โ€” exportable from Apify as JSON, CSV, Excel, or via API in any format the platform supports. Here is one full patent record with legal status and ownership enrichment enabled:

{
"patentNumber": "US12438891B1",
"title": "Anomaly detection based on ensemble machine learning model",
"abstract": "A system and method for detecting anomalies in network traffic using an ensemble of machine learning models trained on historical flow data.",
"inventors": ["Jane Doe", "John Smith"],
"assignee": "Cisco Technology Inc",
"filingDate": "2022-02-18",
"publicationDate": "2025-10-07",
"grantDate": "2025-10-07",
"priorityDate": "2022-02-18",
"language": "en",
"classifications": { "cpc": ["G06N 20/00"], "ipc": ["G06N 20/00"] },
"url": "https://patents.google.com/patent/US12438891B1",
"pdfUrl": "https://patentimages.storage.googleapis.com/xx/xx/xx/US12438891B1.pdf",
"thumbnailUrl": "https://patentimages.storage.googleapis.com/xx/xx/xx/thumb.png",
"docId": "patent/US12438891B1/en",
"rank": 0,
"type": "patent",
"isChild": false,
"familyLegalStatus": [{ "countryCode": "US", "state": "ACTIVE" }],
"legalStatus": { "status": "Active", "isActive": true, "expirationDate": "2036-01-24" },
"originalAssignee": "Cisco Technology Inc",
"currentAssignee": "Cisco Technology Inc",
"ownershipChanged": true,
"ownershipEventsCount": 3,
"scrapedAt": "2026-07-20T10:15:32Z"
}

A follow-up ownership-event child row for the same patent looks like this, and is also available on the dedicated "Ownership / assignment events" dataset view:

{
"patentNumber": "US12438891B1",
"type": "ownershipEvent",
"isChild": true,
"date": "2025-07-22",
"eventType": "name_change",
"fromAssignee": ["SPLUNK INC."],
"toAssignee": "SPLUNK LLC",
"rawTitle": "Assigned to SPLUNK LLC"
}

How do you filter and target specific patents?

Two query modes cover different needs: searchTerms is a broad, ranked keyword search (like typing into Google Patents' search box), while patentIds is exact โ€” you already know which publication numbers you want legal status and ownership checked on. Both OR-merge together, but when you supply both, the Actor resolves your explicit patentIds first before adding ranked keyword results, so known patent links never get buried under a keyword ranking.

Scope precision comes from jurisdiction (a single country/office code or ANY), documentKind (granted patents, applications, or designs), and publishedAfter/publishedBefore (absolute dates or relative windows like "6 months"). assigneeFilter and inventorFilter narrow further by who's named on the filing.

There is no separate legal-status filter โ€” includeLegalStatus and includeOwnershipHistory control what data gets attached to each result, not which results come back. To isolate only active (or only expired) patents, pull the fields as usual and filter the dataset afterward on legalStatus.isActive or familyLegalStatus[].state. Volume is controlled by maxPatents (0 for no cap, but mind run time on large pulls).

{ "searchTerms": "battery thermal management", "jurisdiction": "KR", "documentKind": "APPLICATION", "publishedAfter": "6 months" }
{ "patentIds": ["US12438891B1", "EP3456789A1"], "includeLegalStatus": true, "includeOwnershipHistory": true, "fetchClaims": false, "fetchCitations": false }
{ "assigneeFilter": "Splunk Inc", "maxPatents": 0, "includeOwnershipHistory": true, "publishedAfter": "2020-01-01" }

โ–ถ๏ธ Want to try other research/IP scrapers?

No other Google Patents or IP-specific scraper currently exists in this account's catalog โ€” this is the only one. For the adjacent step in most IP due-diligence workflows (checking out the company behind a currentAssignee), these SimpleAPI scrapers are genuine, verified listings:

Scraper NameWhat it extracts
LinkedIn Company Scraper: Search By Name, Keyword or URLCompany profile data by name, keyword, or LinkedIn URL
LinkedIn Company About Scraper With Firmographic EnrichmentCompany "About" page data enriched with firmographic details

How to extract Google Patents data programmatically

Every run of this Actor is callable through the standard Apify API โ€” one authenticated call starts the run, and results land in a dataset you can pull as structured JSON.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"patentIds": ["US12438891B1"],
"includeLegalStatus": True,
"includeOwnershipHistory": True,
}
run = client.actor("<YOUR_USERNAME>/google-patents-scraper-with-legal-status-and-ownership-details").call(
run_input=run_input
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("type") == "patent":
print(item["patentNumber"], item["legalStatus"], item["currentAssignee"])

MCP for AI agents

Apify actors are reachable through Apify's own MCP server at mcp.apify.com, which exposes any Actor in the store as a callable tool for MCP-compatible clients such as Claude and other agent frameworks. A patent-research agent can add this Actor as a tool and call it with a patentIds list to pull current legal status and ownership before drafting a summary โ€” no custom scraping code in the agent itself.

Export to spreadsheets or CRM

Apify's dataset view exports directly to CSV or Excel from the Actor run page or via API. Map patentNumber, title, currentAssignee, and legalStatus.status/legalStatus.expirationDate to spreadsheet columns for a portfolio tracker, or feed the same fields into a CRM/case-management system to flag patents by owner or enforceability status.

Yes. Patents are public legal records โ€” every filing this Actor returns was already published by a government patent office (USPTO, EPO, WIPO, and others) specifically so the public can search and examine it, and Google Patents itself just aggregates that already-public data. Inventor and assignee names appear on the patent as part of that public legal filing, not as private contact data, so this falls under standard database/ToS considerations rather than GDPR/CCPA personal-data handling. Google's own Legal Status data on each patent page is described by Google as "an assumption, not a legal conclusion" โ€” treat it as a starting point, not a substitute for verifying enforceability against USPTO Assignment or Espacenet records. Use the data responsibly and in line with Google's terms of service, and consult legal counsel for commercial applications involving bulk storage of personal data.

โ“ FAQ

How does the Actor handle expired, abandoned, or pending patents?

legalStatus.status reports exactly what Google Patents' Legal Status statement shows (e.g., "Active", "Expired", "Pending"), with isActive as a boolean and expirationDate where published. familyLegalStatus adds the same active/not-active/unknown state per country in the patent family. If Google hasn't published a legal-status statement for a given patent, these fields come back null rather than a guessed value.

Can I get ownership/assignment history along with the main patent records?

Yes, with includeOwnershipHistory (on by default): each patent row gets originalAssignee, currentAssignee, and ownershipChanged, and every individual reassignment, merger, or name-change event is pushed as its own ownershipEvent child row with a date and the from/to parties โ€” no separate run or extra request needed.

It's exactly what Google Patents itself shows at request time, sourced from the same Legal Status statement and Assignment Events table a human would see on the page. Google labels its legal-status field an assumption rather than a legal conclusion, so for any decision with legal weight (litigation, M&A, licensing), verify the current record against USPTO Assignment or the relevant national patent office before relying on it.

How many patents can I get per run?

maxPatents controls this directly โ€” the default is 10, and setting it to 0 removes the cap entirely (matching everything the search returns), though larger uncapped pulls take longer since legal-status and ownership data require an extra detail-page fetch per patent.

Yes โ€” put the publication numbers you already know into patentIds and leave searchTerms empty. The Actor fetches exactly those patents' detail pages for legal status and ownership without pulling in any ranked keyword results.

Yes. It's reachable through Apify's MCP server (mcp.apify.com) as a callable tool for MCP-compatible clients, and it's callable as a standard HTTP endpoint via the Apify API by any agent framework that can make an authenticated web request.

How does it compare to other Google Patents scrapers on Apify?

As observed on its live Apify Store listing on 2026-07-26, johnvc/google-patents-api offers keyword, assignee, and inventor search modes across 100+ patent offices with claims, citations, and family-graph detail, priced per event ($0.02 setup plus $0.02 per page); its listing doesn't describe extracting legal status or ownership/assignment history beyond assignee names in the base record. This Actor's legal-status and ownership-history extraction (current assignee, ownership-change flag, and a full assignment-events child dataset) is its specific point of difference.

Can I use this Actor without a Google account or API key?

Yes โ€” no Google account, Google API key, or patents.google.com login is required. You only need an Apify account to run the Actor (or an Apify API token if you're calling it programmatically).

Can I combine assignee, inventor, jurisdiction, and date filters at the same time?

Yes โ€” assigneeFilter, inventorFilter, jurisdiction, publishedAfter/publishedBefore, and documentKind all combine together into a single narrowed query, so you can, for example, pull only granted US patents filed by one company in the last two years.

Conclusion

Google Patents Scraper With Legal Status & Ownership Details turns a manual, patent-by-patent Google Patents lookup into a single structured-JSON run โ€” complete with the legal status and current-ownership data that a plain keyword scrape leaves out. It's built for patent attorneys, IP researchers, and competitive-intelligence teams who need to know whether a patent is still enforceable and who actually owns it today. Every field is documented above exactly as the Actor outputs it, with nulls instead of guesses wherever Google doesn't publish the data. Open the Actor on Apify and run it with a keyword, an assignee, or a list of publication numbers to see your first dataset.