Search USPTO Patent Public Search (PPS) for granted patents and pre-grant publications by title, abstract, inventor, assignee, full spec, or claim text — returning patent number, title, abstract excerpt, assignee, inventor list, filing/grant dates, and document URL.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install uspto.gov/search-patents-nwh84aCompatible with
Supported agents
| name | search-patents |
| title | USPTO Patent Search |
| description | >- Search USPTO Patent Public Search (PPS) for granted patents and pre-grant publications by title, abstract, inventor, assignee, full spec, or claim text — returning patent number, title, abstract excerpt, assignee, inventor list, filing/grant dates, and document URL. |
| website | uspto.gov |
| category | research |
| tags | - uspto - patents - patent-search - ip - government - research - ppubs |
| source | 'browserbase: agent-runtime 2026-05-16' |
| updated | '2026-05-16' |
| recommended_method | browser |
| alternative_methods | - method: api rationale: >- If the user supplies a USPTO Open Data Portal API key (free signup at data.uspto.gov/key/myapikey), prefer POST https://api.uspto.gov/api/v1/patent/applications/search — significantly faster and more structured than browsing the PPS Angular SPA. BUT: ODP only covers patent applications filed on or after 2001-01-01, so it cannot serve queries for pre-2001 grants or for grant-only fields. Returns 403 with no body if X-API-KEY header is missing. - method: url-param rationale: >- PPS publishes a documented external-entry deep-link at https://ppubs.uspto.gov/pubwebapp/external.html?q=<query>&db=USPAT,US-PGPUB&casenumber= — the comment in the external.html source explicitly markets this as the URL contract. The deep-link is the recommended way to enter PPS programmatically (skips the landing-page menu) but you still need a browser to render the Angular SPA and read results. - method: api rationale: >- PatentsView legacy (api.patentsview.org/patents/query) is DEAD — confirmed 2026-05-16: 301-redirects to data.uspto.gov/support/transition-guide/patentsview. PatentsView v2 (search.patentsview.org/api/v1/) requires a separate key AND returned 500 errors across every endpoint during reconnaissance. The patent_client Python library that wrapped PatentsView was archived 2026-04-24 by its maintainer. Do not attempt either. |
| verified | true |
| proxies | true |
Search the USPTO patent database for granted patents (USPAT), pre-grant publications (US-PGPUB), and OCR'd legacy patents (USOCR) matching a query — by title, abstract, inventor, applicant/assignee, full specification, or claim text — and return the top results with patent number, title, abstract excerpt, assignee, inventor(s), application filing date, grant/publication date, and a link to the patent document. Read-only; does not file, edit, or pay anything.
ppubs.uspto.gov/pubwebapp.The USPTO has three relevant programmatic surfaces today (2026-05). They are not equivalent in coverage or cost — pick by what the user actually needs:
| Surface | URL | Auth | Coverage | Verdict |
|---|---|---|---|---|
| Patent Public Search (PPS) | ppubs.uspto.gov/pubwebapp/ | None | USPAT (granted, all years) + US-PGPUB (applications since 2001-03) + USOCR (OCR'd pre-1976 grants) | Primary — only fully free, fully covering option. Browser-driven (Angular SPA). |
| Open Data Portal (ODP) API | api.uspto.gov/api/v1/patent/applications/search | Required (free key) | Applications only, filed on/after 2001-01-01 | Use if the user already has an ODP API key and only needs application data. Faster and more structured than browser. Cannot fetch pre-2001 grants or modern grant-only metadata via this endpoint. |
PatentsView (legacy) api.patentsview.org/patents/query | DEPRECATED | — | — | Do not use. Confirmed 2026-05-16: 301-redirects to data.uspto.gov/support/transition-guide/patentsview. Hard-removed. |
PatentsView (v2) search.patentsview.org/api/v1/ | Required (free key, separate from ODP) | All grants | Subject to outages — returned 500 across all paths during 2026-05-16 reconnaissance. | Use only if the user supplies a PatentsView key AND the endpoint is up; verify with a /api/v1/patent HEAD first. |
The recommended browser flow uses a published URL-param deep-link that the PPS application itself documents as its external-entry API. From the PPS source (ppubs.uspto.gov/pubwebapp/external.html):
DATA OBJECT:
casenumber: string; default = ""
db: string; default = "USPAT,US-PGPUB"
q: string; default = ""
GET REQUEST
EX: https://pasr.uspto.gov/webapp/external.html?q=("20150376584" | "9138715" | "8981250").PN.&casenumber=&db=
PPS resolves the same external.html on ppubs.uspto.gov — use that host (not pasr, which is the older Patent Application Search Result host) for current behavior.
Build the query string using PPS field-code syntax: <terms>.<CODE>. e.g., quantum.TI. for title contains "quantum", (machine ADJ learning).TI. for adjacent words, Apple.AS. for assignee. Operators are AND, OR, NOT (uppercase), ADJ (adjacent), SAME (same sentence), NEAR (within window). Wrap multi-word phrases in "..." and use () for grouping. Common codes (verified against the official searchable-indexes table):
TI / TTL — Title (preferred: TI accepts proximity operators)AB / ABTX — Abstract text (full)IN / INV — Inventor nameAANM — Applicant name (post-AIA, often the operating entity)ASNM / AS — Assignee name (recorded at issuance)INNM — Combined Applicant/Inventor name (use when the user can't distinguish)PN — Patent number (9138715.PN. matches that grant; supports prefixes like D design, PP plant, RE reissue, T defensive pub)PD — Patent grant/issue date ("20240101"->"20241231".PD. for ranges)APD — Application filing dateSPEC — Description / specification bodyCLM / ACLM — Claims textAPP — Application series + serial (e.g. 16/444401.APP.)BIC — Title + Claims combined; handy single-shot "claim-or-title contains X" filterCombine via boolean: (neural ADJ network).TI. AND ("Google LLC".AS. OR Alphabet.AS.) AND 2023.PY.
Pick the database(s) with the db param. Values are comma-joined:
USPAT — granted U.S. patents (utility, design, plant, reissue, defensive publication)US-PGPUB — published applications (since 2001-03; applications publish at 18-month mark unless requested non-publication)USOCR — OCR'd pre-1976 grants (text quality is poor; only available for the AB, ACLM, SPEC composite fields)db: USPAT,US-PGPUB. Add USOCR only when the user explicitly wants very old grants — it bloats result count with low-quality matches.Open the deep-link directly (skip the landing page entirely):
https://ppubs.uspto.gov/pubwebapp/external.html?q=<URL-ENCODED QUERY>&casenumber=&db=USPAT,US-PGPUB
mat-tab-group becomes visible; the actual results grid is cdk-virtual-scroll-viewport.Read the results grid. Each row contains: result number, patent/pub number, title, inventor, publication date, page count. The patent number is the canonical click target — clicking it opens the document in the right-hand "Reading" pane and updates the URL to ?...&docId=<docId>&docNumber=.... The reading-pane URL is the durable per-document link the agent should return.
browse get html body over browse snapshot for the grid — the virtualized scroller exposes only ~25 rows to the a11y tree at a time. Scroll the viewport to force virtualization to render more rows before extracting.#docPageContainer iframe) to load → extract from the bibliographic section. This costs ~1 turn per detail fetch — only do it for the top-K results the user wants.Page through via the pagination bar at the bottom of the results grid (mat-paginator). PPS returns up to 500 results per query; for total_results > 500, refine the query — paginating past 500 is not supported.
Return JSON matching the schema in Expected Output. Always include the document_url field constructed from the durable PDF link: https://ppubs.uspto.gov/dirsearch-public/print/downloadPdf/<patent_number> (also works without a session for granted patents — verified independently by the PPS team).
If the agent's query is a person/company name without a clear field hint, run two passes:
(<name>).INNM. — combined applicant+inventor (recall-heavy; finds the name in either role)(<name>).AANM. OR (<name>).ASNM. — applicant + assignee separately (more precise; helps disambiguate inventor "John Smith" from assignee "Smith & Wesson")Merge results and de-duplicate by patent number.
If the user supplies an ODP API key (PATENT_CLIENT_ODP_API_KEY or X-API-KEY header) and they only need application-level data (no granted-only fields, nothing older than 2001), prefer the ODP API — it's ~50× cheaper in agent turns than browsing.
POST https://api.uspto.gov/api/v1/patent/applications/search
X-API-KEY: <user-supplied key>
Content-Type: application/json
{
"q": "applicationMetaData.inventionTitle:\"quantum computing\"",
"sort": "applicationMetaData.filingDate desc",
"limit": 25,
"offset": 0,
"fields": [
"applicationNumberText",
"applicationMetaData.patentNumber",
"applicationMetaData.inventionTitle",
"applicationMetaData.filingDate",
"applicationMetaData.grantDate",
"applicationMetaData.applicantBag",
"applicationMetaData.inventorBag",
"applicationMetaData.firstApplicantName",
"applicationMetaData.firstInventorName",
"applicationMetaData.applicationTypeCode"
]
}
Response shape: { "totalNumFound": N, "patentFileWrapperDataBag": [...], "requestIdentifier": "..." }. The query language is Solr-like — field:value, boolean AND/OR/NOT, range [2020-01-01 TO 2024-01-01], wildcards */?, exact-phrase "...". The /applications/search endpoint covers BOTH granted patents (where applicationMetaData.patentNumber is populated) AND pending applications under one search — the user-facing distinction is just whether grantDate is set.
Do not mix ODP results with PPS results in the same response — they have different field shapes and ODP only covers post-2001. Either return ODP-shaped or PPS-shaped output, not both.
patft.uspto.gov and appft.uspto.gov were retired September 30, 2022 and now 301 to PPS. Don't waste time on /netacgi/nph-Parser legacy URLs — they're gone.api.patentsview.org is dead. Confirmed 2026-05-16: 301 → data.uspto.gov/support/transition-guide/patentsview. The 2024-and-earlier requests.post('https://api.patentsview.org/patents/query', json=...) recipe found in tutorials no longer works. Code samples still referencing it (including some 2026-03 blog posts) were not updated for the migration.search.patentsview.org (v2 PatentsView) returned 500 on every path tested during 2026-05-16 reconnaissance (/api/v1/patent, /api/v1/patent/?q=..., /docs/, root). The service exists, requires a separate API key per its docs, and may recover — but treat it as flaky. The patent_client Python wrapper (parkerhancock/patent_client) was archived 2026-04-24 when its maintainer hit one too many of these outages — that history is itself a strong "don't rely on PatentsView for production" signal.api.uspto.gov/api/v1/patent/applications/search returns 403 {"message":"Forbidden"} (Amazon API Gateway ForbiddenException) with no body explanation if X-API-KEY is missing. Get keys at data.uspto.gov/key/myapikey (free). The same key works for the full ODP family (applications, file-wrapper documents, assignments, bulk).https://0dd6fc7fe1e2.edge.sdk.awswaf.com/.../challenge.js on every fresh session — a browse cloud sessions create --verified session passes it transparently; a plain (non-Verified) session occasionally triggers a CAPTCHA modal. Use --verified flag every time. --proxies is helpful but not strictly required for PPS — the WAF is per-fingerprint, not per-IP.button[data-mat-button][aria-label="Continue"] or the only enabled mat-dialog-container button. Snapshot will show it as the only focusable target — clicking it dismisses and starts the search.cdk-virtual-scroll-viewport). At most ~25 rows are in the DOM at any time; to harvest more, scroll the viewport (browse scroll <x> <y> 0 800 inside the grid) and re-extract. The "results" counter at the top of the panel gives total_results reliably — read it before scrolling.TI:quantum (Solr style) — PPS will silently treat that as a literal-string search and return 0 results. The correct syntax is quantum.TI. (term, dot, code, dot). The PPS query bar accepts both classic CCL (SS 1-style numbered set logic) and a simplified expression mode; the deep-link q= param uses simplified mode by default.PN field accepts prefixes that change the patent class: bare digits (9138715.PN.) match utility; D475502.PN. matches design; PP12345.PN. matches plant; RE38134.PN. matches reissue; T123456.PN. matches statutory invention registration / defensive publication. Pre-grant publication numbers (e.g. 20150376584) only match in the US-PGPUB database — make sure db= includes it.AS (assignee at issuance) ≠ AANM (applicant at filing) ≠ current owner. AIA assignees often refile through holding entities; "Google LLC" patents from 2015 may be ASNM:Google Inc. (the pre-2017 name). Try a name + OR variant set: (Google OR "Google LLC" OR "Google Inc." OR Alphabet).ASNM.casenumber= param is for internal pasr.uspto.gov USPTO-employee bookmarks ("examiner case number"). Leave it empty.document_url durable form: https://ppubs.uspto.gov/dirsearch-public/print/downloadPdf/<patent_number> returns the full PDF without requiring a session. For the HTML / structured view, use https://image-ppubs.uspto.gov/dirsearch-public/print/downloadPdf/<patent_number> (mirror host). Do not return the SPA URL with ?q=...&docId=... as the document_url — those are session-scoped and break for downstream consumers./dirsearch-public/searches/searchWithBeFamily, /dirsearch-public/users/me/session) are actively blocked. Direct POST attempts return 404 / 403 today. The patent_client maintainer's archive note in April 2026 explicitly cites this. Don't try to reverse-engineer the JSON API — every recipe published before mid-2024 has been broken by USPTO. Stay on the documented UI deep-link.{
"query": "quantum computing",
"query_field": "TI",
"constructed_query": "(\"quantum computing\").TI.",
"databases": ["USPAT", "US-PGPUB"],
"total_results": 1284,
"page_size": 5,
"page": 1,
"results": [
{
"patent_number": "US 11,989,628 B2",
"kind_code": "B2",
"document_type": "granted_patent",
"title": "Quantum computing apparatus and methods for fault-tolerant operation",
"abstract_excerpt": "A quantum computing system that implements a surface-code fault-tolerant architecture using superconducting transmon qubits. The disclosed methods include syndrome extraction without measurement disturbance...",
"assignee": "International Business Machines Corporation",
"inventors": ["John A. Doe", "Jane B. Smith", "Wei C. Chen"],
"filing_date": "2020-01-15",
"grant_date": "2024-05-21",
"publication_date": "2021-07-22",
"application_number": "16/744123",
"publication_number": "US 2021-0224656 A1",
"classification_cpc_primary": "G06N 10/00",
"page_count": 47,
"document_url": "https://ppubs.uspto.gov/dirsearch-public/print/downloadPdf/11989628"
}
],
"source": "ppubs.uspto.gov",
"retrieved_at": "2026-05-16T05:30:00Z"
}
For pre-grant publications (US-PGPUB), document_type is "published_application", grant_date is null, and patent_number is the 11-digit publication number formatted US 2021-0224656 A1.
For multi-outcome responses:
// No results
{ "query": "...", "constructed_query": "...", "total_results": 0, "results": [], "source": "ppubs.uspto.gov" }
// WAF block (rare — only if --verified was not used)
{ "query": "...", "error": "waf_challenge", "error_reasoning": "PPS returned an AWS WAF CAPTCHA challenge that the session could not solve. Retry with browse cloud sessions create --verified --solve-captchas.", "results": [] }
// Query syntax error
{ "query": "...", "error": "query_syntax", "error_reasoning": "PPS returned 'No documents matched your query' with a syntax-help banner. The constructed query was '<...>' — likely a missing field-code suffix (write 'quantum.TI.' not 'TI:quantum').", "results": [] }
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionsearch-patentsExecute the skills CLI command in your project's root directory to begin installation:
browse install uspto.gov/search-patents-nwh84aFetches search-patents from uspto.gov/search-patents-nwh84a and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/search-patents
Restart Cursor to activate search-patents. Access via /search-patentsin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
search-patents
patents.google.com/search-patents-369445 · research · 3 shared tags
peptide-research
peptideportal.org/peptide-research-to6qkq · research · tag: research
efficient-fable
BuilderIO/skills · productivity · tag: research
find-california-business
bizfileonline.sos.ca.gov/find-california-business-izbvm2 · government · tag: government
deep-research
daymade/claude-code-skills · Productivity · tag: research
company-research
claude-office-skills/skills · Productivity · tag: research
search-patents has been reliable in day-to-day use. Documentation quality is above average for community skills.
Solid pick for teams standardizing on skills: search-patents is focused, and the summary matches what you get after install.
Registry listing for search-patents matched our evaluation — installs cleanly and behaves as described in the markdown.
search-patents fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
search-patents reduced setup friction for our internal harness; good balance of opinion and flexibility.
Useful defaults in search-patents — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
I recommend search-patents for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
Registry listing for search-patents matched our evaluation — installs cleanly and behaves as described in the markdown.
I recommend search-patents for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
We added search-patents from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
showing 1-10 of 75