USPTO Trademark Batch Search API
Pricing
from $5.00 / 1,000 uspto trademark results
USPTO Trademark Batch Search API
Batch-search the USPTO trademark register by keyword, serial number, registration number, or owner. Returns live/pending/dead status, Nice classes, owners, dates, goods/services, and TSDR links. HTTP-only, no API key. Built for POD clearance, brand monitoring, and AI agents.
Pricing
from $5.00 / 1,000 uspto trademark results
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Batch-search the United States Patent and Trademark Office register by keyword, serial number, registration number, or owner name. Each query returns matching federal marks with live/pending/dead status, Nice classes, owner, filing and registration dates, goods and services, and a TSDR link — or one CLEAR row when nothing matches. Designed for print-on-demand sellers, brand-clearance workflows, trademark monitoring, and AI agents that need a structured USPTO answer without a USPTO.gov login or API key.
This Actor reads the public Trademark Search index behind tmsearch.uspto.gov. It is a search and status lookup, not a legal opinion and not a substitute for a comprehensive attorney-led clearance search.
Best fit for this Actor
- You have a list of brand phrases, merch slogans, or domain names and need to know whether live or pending US federal marks already use them.
- You already have serial or registration numbers and want structured status, owner, class, and TSDR links in one dataset.
- You want an owner-portfolio snapshot (for example every live mark owned by
Nike, Inc.) capped to a predictable number of rows. - For patents, citations, and family graphs, use Google Patents Scraper instead of this Actor.
POD clothing clearance for a merch phrase
A merch seller is about to print STAR WARS on class 25 apparel. They pass that phrase with niceClasses set to 25 and statusFilter set to live. The dataset comes back with matchFound: true, recordStatus: LIVE, Lucasfilm as ownerName, serial 75306994, and a tsdrUrl they can open. They drop the phrase from the catalog and keep the TSDR link in the audit trail. A nonsense phrase in the same batch returns recordStatus: CLEAR, so the rest of the list can ship.
Quick start input
{"searchTerms": ["star wars"],"niceClasses": "25","statusFilter": "live","maxResultsPerTerm": 3,"includeClearRows": true}
Each value in searchTerms is one USPTO query. maxResultsPerTerm keeps a famous mark from dumping hundreds of rows into the dataset; maxResults is the run-wide cost ceiling.
Input reference
| Field | Type | What it controls |
|---|---|---|
searchTerms | array | Wordmark/keyword phrases, up to 100. Example: star wars. |
serialNumbers | array | Exact 7-8 digit serials, SN: prefixes, or TSDR URLs. |
registrationNumbers | array | Exact registration numbers such as 2239077. |
ownerNames | array | Owner-portfolio search, up to 50 names. |
statusFilter | enum | live (default), pending, registered, dead, or all. |
niceClasses | string | Comma-separated Nice classes 1-45. Empty = every class. 25 is clothing. |
matchMode | enum | contains (default) or exact wordmark. Ignored for serial/registration lookup. |
maxResultsPerTerm | integer | 1-50 rows saved per query. Default 5. Prefill 3. |
maxResults | integer | Run-wide row cap, 1-1000. Default 250. |
includeClearRows | boolean | Write a CLEAR row when a query has zero matches. Default true. |
maxConcurrency | integer | Parallel USPTO queries, 1-8. Default 4. |
At least one of searchTerms, serialNumbers, registrationNumbers, or ownerNames is required. Empty input returns INVALID_INPUT with zero rows and zero trademark-result charges.
What data you receive
One dataset item is either a matching USPTO mark or a CLEAR no-match row for a query.
{"searchTerm": "star wars","queryType": "wordmark","matchFound": true,"recordStatus": "LIVE","wordmark": "STAR WARS","serialNumber": "75306994","registrationNumber": "2534385","statusDescription": "REGISTERED AND RENEWED","niceClasses": [25],"ownerName": "Lucasfilm Ltd. LLC (LIMITED LIABILITY COMPANY; CALIFORNIA, USA)","filingDate": "1997-06-11","tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=75306994&caseSearchType=US_APPLICATION&caseType=SERIAL_NO&searchType=statusSearch","source": "uspto-tmsearch","scrapedAt": "2026-08-17T10:00:00.000Z"}
recordStatus values:
| Value | Meaning |
|---|---|
LIVE | Alive and registered |
PENDING | Alive but not yet registered |
DEAD | Abandoned, cancelled, or expired |
CLEAR | This query produced no matches under the chosen filters |
matchCountForQuery is the USPTO hit total before the per-query cap, so you can see that STAR WARS in class 25 had thousands of hits even when only three rows were saved.
Real-world use cases
1. POD clothing batch
Check a merch phrase list against live class 25 marks before upload.
{"searchTerms": ["star wars", "just do it", "zzzxqwertyplugh999"],"niceClasses": "25","statusFilter": "live","maxResultsPerTerm": 3,"includeClearRows": true}
Use matchFound and recordStatus to drop conflicts. Keep CLEAR phrases.
2. Exact wordmark, all classes
Confirm whether the literal mark NIKE is live anywhere, not just as a substring of longer marks.
{"searchTerms": ["NIKE"],"matchMode": "exact","statusFilter": "live","maxResultsPerTerm": 5}
3. Serial number status
Look up a known filing from a TSDR URL or raw serial.
{"serialNumbers": ["74612654"]}
Returns owner, classes, registration number, and the canonical TSDR link.
4. Registration number lookup
Resolve a certificate number to the current index record.
{"registrationNumbers": ["2239077"],"statusFilter": "all"}
5. Owner portfolio
List live marks for one registrant, capped so the run stays cheap.
{"ownerNames": ["Nike, Inc."],"statusFilter": "live","maxResultsPerTerm": 10,"maxResults": 10}
6. Pending-only watch
See only applications that are alive but not yet registered.
{"searchTerms": ["just do it"],"statusFilter": "pending","maxResultsPerTerm": 5}
7. Dead-mark history
Check whether a name was used before and later abandoned or cancelled.
{"searchTerms": ["twin spray"],"statusFilter": "dead","maxResultsPerTerm": 5,"includeClearRows": false}
8. Mixed batch for an agent
Combine a phrase, a serial, and an owner in one run.
{"searchTerms": ["star wars"],"serialNumbers": ["74612654"],"ownerNames": ["Lucasfilm Ltd."],"niceClasses": "25","statusFilter": "live","maxResultsPerTerm": 3,"maxResults": 20,"maxConcurrency": 2}
Why agents choose this Actor
- Bounded cost:
$0.005per saved row plus a$0.00005start event, withmaxResultsas the hard ceiling. - Flat JSON keys (
wordmark,serialNumber,recordStatus,tsdrUrl) instead of nested USPTO XML. - CLEAR rows make a 100-term batch complete even when most phrases are free of live hits.
- Provenance is explicit:
sourceis alwaysuspto-tmsearch,scrapedAtis ISO,tsdrUrlpoints at the official case. - Terminal
OUTPUT.outcomevalues (COMPLETE,PARTIAL,VALID_EMPTY,INVALID_INPUT,UPSTREAM_FAILED) are stable enough to branch on. - Serial, registration, owner, and keyword search share one schema, so a tool call does not need a mode enum.
- Patent work is out of scope on purpose, which keeps this tool from colliding with Google Patents Scraper.
Agent checklist
- Pass trademark phrases, serials, registration numbers, or owner names. Patent numbers belong on Google Patents Scraper.
- Set
maxResults(andmaxResultsPerTerm) to the budget you can spend at$0.005per row. - Prefer
statusFilter: "live"and a Nice class such as"25"for merch clearance. - After the run, read
OUTPUT.outcome, then the dataset. An empty dataset is a valid CLEAR/no-match result when the outcome isVALID_EMPTY. - Open
tsdrUrlwhen you need the official status page or documents; this Actor does not download TSDR PDFs. - If
matchCountForQueryis larger than the rows you received, raise the caps or narrowniceClasses/matchMode. - Schedule repeats against the same
searchTermswhen you are monitoring new filings; USPTO search is not a live opposition-calendar feed.
Use through the API
curl "https://api.apify.com/v2/acts/khadinakbar~uspto-trademark-batch-search/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["star wars"],"niceClasses": "25","statusFilter": "live","maxResultsPerTerm": 3}'
When the Actor completes, read dataset items from the default dataset and the OUTPUT record from the default key-value store.
Use with AI agents through Apify MCP
Check these merch phrases against live USPTO class 25 trademarks: "star wars", "just do it". Return wordmark, serialNumber, recordStatus, ownerName, niceClasses, and tsdrUrl. Cap at 3 matches per phrase and keep CLEAR rows. Then inspect OUTPUT.outcome before summarizing.
Connect through https://mcp.apify.com. After the tool call, read the dataset and the OUTPUT / RUN_SUMMARY records. Preserve tsdrUrl as the official source link.
Pricing
This Actor uses Pay per event plus Apify platform usage. Open the live Pricing tab for current event details, and use Apify's run cost controls to keep the workflow aligned with your budget.
Worked examples at the launch prices (apify-actor-start $0.00005, trademark-result $0.005):
| Input | Rows billed | Event cost |
|---|---|---|
| One phrase, 3 matches | 3 | ~$0.015 |
| 10 phrases, all CLEAR | 10 | ~$0.050 |
| 100 phrases, 1 row each | 100 | ~$0.500 |
| Serial lookup, 1 hit | 1 | ~$0.005 |
| Empty / invalid input | 0 | start event only |
Formula: trademark-result count × $0.005 + start event + platform usage. Platform usage is billed to the user on top of events.
Outcome vocabulary
These values live in the key-value store records OUTPUT and RUN_SUMMARY, not on each dataset row.
| Outcome | Meaning |
|---|---|
COMPLETE | Every query was processed and useful rows were saved. |
PARTIAL | Some queries were incomplete, a cap stopped the run, or the event limit was hit; saved rows are still in the dataset. |
VALID_EMPTY | Queries succeeded and produced zero rows (usually includeClearRows: false with no matches). |
INVALID_INPUT | Nothing to search. Fix the input; no trademark events are charged. |
UPSTREAM_FAILED | USPTO Trademark Search did not return usable data for the requested work. |
Connect the workflow
- After you confirm a brand name is clear at USPTO, enrich the seller or importer with ImportYeti Scraper when you also need US Customs shipment history and listed trademarks.
- For patent — not trademark — search, citations, and family graphs, use Google Patents Scraper.
- To see whether a brand name is being used in live Google Search ads, continue with Google Ads Scraper.
Best results
- Filter by Nice class for POD and product clearance. Class 25 is clothing; class 9 is electronics; class 18 is bags.
- Use
containsfor risk spotting andexactwhen you care about the literal wordmark. - Keep
maxResultsPerTermsmall (3-5) on famous marks.STAR WARSin class 25 has thousands of live hits. - Leave
includeClearRowson for batch jobs so every input phrase appears in the export. - USPTO search can lag new filings by a short index delay. Re-run if you are checking a mark filed in the last few days.
Builder's note
I built this after posting live queries to the public Trademark Search index. I found the UI is a thin client over an Elasticsearch-style POST whose envelope uses hits.totalValue and source (not _source), and that _source: true can come back empty. In my testing, mapping alive plus registered into LIVE / PENDING / DEAD was more useful for agents than raw USPTO status codes. My goal was a complete 100-phrase batch, which is why a query with zero hits still writes a CLEAR row instead of going missing from the export. When AWS WAF challenges a datacenter IP, the run retries once through Apify Residential US and keeps only real USPTO rows.
FAQ
How many trademarks do I get per phrase?
Up to maxResultsPerTerm matching rows, plus one CLEAR row when includeClearRows is on and nothing matches. Famous marks such as STAR WARS can have thousands of hits; the cap keeps the export and the bill predictable.
Do I need a USPTO API key or login? No. The Actor queries the public Trademark Search index over HTTP. You never supply a USPTO account, cookie, or API key.
What if USPTO is temporarily unavailable?
The run retries, then tries Apify Residential US. When no advertised query returns usable data and no rows were saved, the run ends UPSTREAM_FAILED. Useful partial results still succeed as PARTIAL.
Can an AI agent use this?
Yes. It is MCP-ready: pass phrases, serials, registration numbers, or owner names and read one row per match (or CLEAR). Inspect OUTPUT.outcome before summarizing.
Is this legal advice or a full clearance search? No. Results are public-register data for research and monitoring. Pair them with a trademark attorney before filing or launching a brand.
Responsible use
This Actor returns public USPTO trademark records for clearance research, monitoring, and enrichment. Treat the output as public-register data: pair it with a trademark attorney before filing or launching a brand, keep request volume courteous to the public search service, and use results in line with USPTO terms and applicable laws.