Search Patents
search_patentsSearch USPTO patent applications and grants — without a granted_after/granted_before bound this returns the APPLICATION corpus sorted newest-FILED-first, not issued patents. USPTO publishes an application ~18 months after filing and typically takes 2+ years to grant it, so the newest rows in an unfiltered search are always recent, unexamined filings with grant_date: null — that is expected, not stale data. Pick the date field on the QUESTION'S VERB, not on the word "recent": a question asking who has FILED / applied for / sought patents in a window wants filed_after/filed_before — the default application corpus already includes pending AND granted patents, so no granted_after is needed or wanted, and adding one will silently drop recently-filed-but-not-yet-examined applications (grant lags filing by 2+ years, so "filed in the last 3 years" AND "granted in the last 3 years" are mostly DISJOINT sets). Only use granted_after/granted_before when the question explicitly says GRANTED / ISSUED / APPROVED / "has a patent" (not just "recent patents"). Use query for free-text keywords ("lithium battery", "crispr", "machine learning"); all terms are required (AND), and you can quote a phrase to keep it together. A curated, short list of known synonym/abbreviation pairs for concepts that patents describe inconsistently (e.g. cfRNA / cell-free RNA / circulating RNA; MRD / minimal residual disease / residual cancer) is recognized in query — quoted or bare — and expanded to an OR group before the search runs, so "cfRNA" and "cell-free RNA" are treated as the same concept rather than requiring the caller to guess a specific patent's exact wording (marked synonyms_expanded: true in the response; this is a fixed, documented list, not general synonym invention). A question that names several DISTINCT ways of describing the same idea (e.g. a condition plus a detection method, each expressed as its own quoted phrase) should still be passed as one query — if the literal AND-of-everything match returns zero, the tool automatically retries once with those same quoted phrases OR'd together instead and marks the response broadened: true; it only ever relaxes multi-phrase AND to OR on a genuine zero, so a search that is narrow for a real reason (e.g. one specific applicant with no matching filings, or an ordinary bare-keyword AND) still correctly returns zero. Optional structured filters: applicant (exact corporate name as filed, e.g. "APPLE INC."), inventor (person name), title (words in the invention title), number (a specific application number), filed_after / filed_before, granted_after / granted_before. Common synonyms are understood — assignee, company and owner all reach applicant, and keywords, q or text all reach query. Results include title, application number, filing date, first applicant, all applicants, inventors, status, classification. total is the full match count but USPTO returns at most 25 records per search — narrow with applicant or a date range rather than raising limit. Powered by the USPTO Open Data Portal (data.uspto.gov).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default 10). USPTO caps every search at 25 records, so values above 25 have no effect — use the filters to narrow instead. | |
| query | No | Free-text keywords. Every term must appear (they are AND-ed), so add words to narrow and remove words to widen. Wrap words in double quotes to require them adjacent: `"machine learning" model` needs the exact phrase plus the word model. Examples: "lithium battery", "crispr", "neural network". Pass "*" if you only want to filter by applicant/date with no keyword constraint. A curated set of known synonyms/abbreviations (e.g. cfRNA / cell-free RNA / circulating RNA, or MRD / minimal residual disease / residual cancer) is automatically expanded to an OR group within the query — quoted or bare, either form is recognized — so you do not need to guess which exact wording a given patent uses (see `synonyms_expanded` in the response). If several quoted phrases — or two recognized synonym-group concepts, quoted or not — ANDed together still match nothing, the tool retries once with them OR'd instead (see `broadened` in the response) rather than returning a bare zero. | |
| title | No | Optional. Words that must appear in the invention title, which narrows far harder than `query` does since `query` searches the whole record. Example: "solid state battery". | |
| number | No | Optional. A specific US application number, digits only or formatted — "16123456" or "16/123,456". Accepted synonyms: `application_number`, `patent_number`. | |
| _apiKey | No | USPTO ODP API key. Get free at https://data.uspto.gov/myodp. Falls back to platform key if configured. | |
| inventor | No | Optional. Inventor name as recorded on the filing; a last name matches most reliably. Examples: "Hinton", "Bengio". Accepted synonyms: `inventor_name`, `author`. | |
| applicant | No | Optional. Company applicant name as it appears on the USPTO filing. **Must include the exact corporate suffix** the company uses (PBC / Inc. / LLC / Corporation / Co. / NV / AG / KK). A wrong or missing suffix matches nothing — "Apple" returns zero where "APPLE INC." returns hundreds. Examples: "Anthropic, PBC" (not "Anthropic Inc."), "Apple Inc." (not "Apple"), "Alphabet Inc." (not "Google"), "Meta Platforms, Inc." (not "Facebook"), "Microsoft Corporation" (not "Microsoft Corp."). If you get zero results plus a `warning` field, the name form is wrong rather than the company being absent — retry with a different corporate form. | |
| filed_after | No | Optional. Filter to patents FILED on/after this date (ISO YYYY-MM-DD). Use this for "who has filed / applied for patents on X (recently / in the last N years)" — it covers both pending applications and already-granted patents, so it is the right bound even when the question also says "recent". Do NOT substitute `granted_after` for a filing-activity question: grant lags filing by 2+ years, so a recent filing window under `granted_after` typically returns zero even when filing activity is real. | |
| filed_before | No | Optional. Filter to patents FILED on/before this date (ISO YYYY-MM-DD). | |
| granted_after | No | Optional. Filter to patents GRANTED (issued) on/after this date (ISO YYYY-MM-DD) — use ONLY when the question explicitly says GRANTED / ISSUED / APPROVED, not for a plain "recent patents" or "who has filed" question (use `filed_after` for those — see its description). Accepted synonym: `issued_after`. | |
| granted_before | No | Optional. Filter to patents GRANTED (issued) on/before this date (ISO YYYY-MM-DD). Accepted synonym: `issued_before`. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Present when total exceeds the returned records — explains the 25-record ODP page cap | |
| query | Yes | The composed ODP query string actually sent | |
| total | Yes | Total number of matching applications (USPTO ODP returns at most 25 records per search regardless of limit) | |
| filters | Yes | Echo of the structured filters applied; each is null when unused | |
| patents | Yes | Same records with full ODP fields | |
| results | Yes | Back-compat summary shape (title, number, dates, applicant) | |
| warning | No | Present when an applicant filter matched nothing — ODP matches the corporate name literally ("APPLE INC." not "Apple") | |
| returned | Yes | Number of records in this response |