USPTO Trademark Search — Lookup & Monitoring API | $2.50/1k
Pricing
from $2.00 / 1,000 trademark records
USPTO Trademark Search — Lookup & Monitoring API | $2.50/1k
Search US trademarks on USPTO by word mark, owner or goods, or look up serial and registration numbers: status, Nice classes, filing and registration dates, company owner, goods and services. Filter live/dead, class, filing date. No login.
Pricing
from $2.00 / 1,000 trademark records
Rating
0.0
(0)
Developer
Raffy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Features
Share
What does USPTO Trademark Search do?
Search the US trademark register and get every match as a clean row: word mark, serial and registration number, status (live or dead, plus the USPTO status text), Nice classes, goods and services, filing, publication, registration, abandonment and cancellation dates, and the owner when it is a company (name, entity type, state of incorporation, city). It is built for brand owners, trademark attorneys and paralegals, startups naming a product, and IP-monitoring tools that need USPTO trademark data in bulk instead of one search at a time.
Type a word, an owner name or a goods description, or paste serial and registration numbers, and get a USPTO trademark lookup as JSON, CSV or Excel, or from the Apify API. It works as a simple USPTO trademark API: filter by live/dead status, international class and filing date, sort by newest filing, and schedule it for trademark monitoring. The default 20-mark run finished in about 7 seconds.
It reads the public USPTO trademark search (tmsearch.uspto.gov) that any visitor can use, with no login and no API key. Owners who are individuals are redacted, and attorney and correspondent details are never output.
Use cases for this USPTO trademark scraper
- 🔎 Clearance and name checks. Before you name a product, search the word in your classes (
classes: ["9", "42"],status: "live") and see which live marks already exist, who owns them and since when. - ✅ Phrase check. Give a brand name or slogan in
phrasesand see which live marks match it exactly or closely, withmatchedPhraseandmatchTypeon every row. - 🛡️ Trademark monitoring. Schedule a daily run with your brand words,
sortBy: "newest"andfiledFromset to last week, and get every new application that contains them. - 🏢 Competitor portfolios. Set Search in to owner and type a company name to list its marks, classes and filing activity.
- ⏳ Status tracking. Look up your own serial or registration numbers and follow
markStatusandregistrationDate. - 📊 Market research. Count new filings in a class or for a word over time (
totalMatches,filingDate) to spot trends. - 🔁 Automation. Send rows to Google Sheets, Airtable, Supabase or a CRM with n8n, Make or Zapier, or call the Actor from an AI agent: it runs with no input at all.
What data you get from every trademark
One row per trademark application. The Overview table shows serialNumber, registrationNumber, wordmark, markStatus, isLive, filingDate, registrationDate, internationalClasses, ownerName, ownerEntityType, searchTerm, matchedPhrase, matchType, url, status and error.
| Field | What it is |
|---|---|
serialNumber | USPTO serial (application) number, 8 digits. |
registrationNumber | Registration number once the mark is registered. |
wordmark | The mark text (empty for pure design marks). |
markStatus | USPTO status text, for example REGISTERED AND RENEWED or ABANDONED - NO STATEMENT OF USE FILED. |
statusCode | USPTO numeric status code. |
isLive / isRegistered | Live = pending or registered; registered = has a registration. |
filingDate, publicationDate, registrationDate, abandonmentDate, cancellationDate | Dates as YYYY-MM-DD. |
firstUseDate, firstUseInCommerceDate | Claimed dates of first use. |
internationalClasses | Nice classes as 3-digit strings, e.g. 025. |
goodsAndServices | The goods and services statements, per class. |
ownerName | Current owner when it is an organisation. Omitted for individuals. |
ownerEntityType | CORPORATION, LIMITED LIABILITY COMPANY, INDIVIDUAL, ... |
ownerLegalJurisdiction | Where the owner is organised, e.g. OREGON, USA. |
ownerCity, ownerRegion | Owner city and state/postcode/country line (organisations only). |
ownerRedacted | true when the owner's name and address were removed. |
owners | Every owner on record (original applicant, later owners) with the same redaction rule. |
markType, drawingType, registrationType, filingBasis | Trademark or service mark, drawing code, principal or supplemental register, filing basis (1a, 1b, 44e, 66a). |
markDescription, disclaimer, translation, designCodes | Description and colour claims, disclaimed words, translation, logo design search codes. |
searchTerm, totalMatches | The term that found the mark and how many marks the search matched in total. |
matchedPhrase, matchType | Phrase check only: the input phrase a live mark matched, and exact or close. |
url | The mark's public TSDR status page. |
Result status (tri-state output)
Every row has a status:
ok- a trademark record. This is the only billed row type.not_found- the search matched no marks, or a serial/registration number does not exist. Free.error- the source could not be read after retries, or an input entry was unusable;errorsays why. Free.
How to search USPTO trademarks with this Actor
- Open the Actor in Apify Console and click Try for free.
- Type one or more Search terms, one per line, and pick Search in (word mark, owner name, goods and services, or all). Or paste Serial or registration numbers.
- Optionally narrow it down with Status, International classes, Filed on or after/before and Sort by.
- Set Maximum results (start with the default 20) and click Start. Records appear in the dataset in real time.
- Open the Output tab or Export the dataset as JSON, CSV, Excel, XML or HTML.
To automate it, use the API tab (Node.js, Python, curl examples) or add a Schedule.
Input
Every field is optional; the prefilled values already produce a complete run.
| Field | Type | Default | When to change it |
|---|---|---|---|
keywords | array of strings | ["nike"] | The words to search. Each term is its own search. "exact phrase", nik* and -word work. |
searchIn | wordmark | owner | goods | all | wordmark | Search owner names or goods and services instead of the mark text. |
serialNumbers | array of strings | empty | Look up specific serial (8 digits) or registration numbers. |
phrases | array of strings | empty | Phrase check: brand names or slogans to compare with live marks. Each row says which phrase it matched and whether the match is exact or close. A phrase with no live match gives a free not_found row. Class and date filters apply; status is always live. |
maxItems | integer | 20 | Rows in total; each search term returns at most this many (max 10,000 per term). |
status | all | live | dead | all | Only live or only dead marks. |
classes | array of strings | empty | Nice classes 1-45, e.g. ["25", "9"]. |
filedFrom, filedTo | date YYYY-MM-DD | empty | Filing date window. |
sortBy | relevance | newest | oldest | relevance | newest for monitoring new filings. |
onlyNew | boolean | false | Watch mode: return only marks that an earlier onlyNew run has not returned. Skipped marks are never charged. |
monitorStoreName | string | uspto-trademark-monitor | Named key-value store on your account that remembers the marks already returned. One name per watch list. |
startUrls | array of URLs | an example | TSDR status page URLs or tmsearch URLs with a query parameter. Leave the example as is when you use Search terms. |
Example input (a monitoring run for new live coffee filings in classes 30 and 43):
{"keywords": ["coffee"],"status": "live","classes": ["30", "43"],"filedFrom": "2026-10-01","sortBy": "newest","maxItems": 100}
Phrase check
Put the names you plan to use in phrases:
{ "phrases": ["just do it", "nikee"], "classes": ["25"], "maxItems": 20 }
Only live marks (pending or registered) are compared. matchType is exact when the text is the same ignoring case, accents, punctuation and spaces, and close when the mark contains the phrase as whole words, uses the same words in another order, or differs by about one letter in five (NIKEE against NIKE). Exact matches come first. The Actor reads the best-scoring 100 live marks for each phrase; add a class filter for common words. A phrase with no live match returns one free not_found row. This is a screening aid and not legal advice or a full clearance search.
Watch mode (only new marks)
Set onlyNew to true on a scheduled run. The first run returns the marks it finds, like a normal run, and remembers them in the key-value store named in monitorStoreName. Later runs return only marks not returned before, never charge for the skipped ones, and finish green with a free not_found row per search when nothing is new. Use sortBy: "newest": a search stops at the first page with nothing new. Set maxItems high enough for the first run; marks beyond it are returned by the next run. Phrase checks work in watch mode too (a mark is new per phrase). Serial and registration numbers you enter are always returned. Use a different monitorStoreName per schedule to keep watch lists apart.
{ "keywords": ["coffee"], "sortBy": "newest", "onlyNew": true, "monitorStoreName": "coffee-watch", "maxItems": 200 }
Output
A real row from the default run (trimmed):
{"url": "https://tsdr.uspto.gov/#caseNumber=75187260&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=statusSearch","status": "ok","serialNumber": "75187260","wordmark": "NIKE","markStatus": "ABANDONED - NO STATEMENT OF USE FILED","statusCode": 606,"isLive": false,"isRegistered": false,"filingDate": "1996-10-24","publicationDate": "1997-11-04","abandonmentDate": "1999-01-28","internationalClasses": ["014"],"goodsAndServices": ["(ABANDONED) IC 014: [ timepieces of all types, namely, stopwatches, radial link watches; jewelry ]."],"ownerName": "Nike, Inc.","ownerEntityType": "CORPORATION","ownerLegalJurisdiction": "OREGON, USA","ownerCity": "Beaverton","ownerRegion": "OREGON 97005, UNITED STATES","ownerRedacted": false,"owners": [{ "name": "Nike, Inc.", "entityType": "CORPORATION", "role": "OWNER AT PUBLICATION", "redacted": false }],"markType": "TRADEMARK","drawingType": "(1) TYPED DRAWING","registrationType": "PRINCIPAL","filingBasis": "1b","searchTerm": "nike","totalMatches": 204,"scrapedAt": "2026-10-19T07:15:43.528Z"}
When the owner is an individual the row keeps ownerEntityType: "INDIVIDUAL" and ownerRedacted: true, and has no ownerName, ownerCity or ownerRegion. A missing field means the USPTO record has no such value; it is never a guess.
How much does it cost to search USPTO trademarks?
Pay per result: $2.50 per 1,000 trademark records, plus a $0.005 start fee per run. Rows with status not_found or error are free.
| Event | Price | Charged when |
|---|---|---|
apify-actor-start | $0.005 | Once per run, when it starts. |
result | $0.0025 | Each trademark record saved with status ok. |
| Records | Cost |
|---|---|
| 100 | $0.26 |
| 1,000 | $2.51 |
| 10,000 | $25.01 |
The Actor stops gracefully when your run's maximum charge is reached. No proxy is needed and compute is included.
How it compares
Other USPTO trademark Actors in the Store charge $3 to $7 per 1,000 records. This one costs $2.50 per 1,000, combines keyword search, owner search, goods-and-services search and number lookups in one run, and filters by status, class and filing date on the USPTO side, so you only pay for the marks you asked for.
It is not for you if you need the full prosecution history, office action documents, the mark images, or attorney and correspondent contact details (never output).
Integrations, exports and API access
Run it from the Apify API, the JavaScript or Python client, the Apify CLI, or on a Schedule. Connect the dataset to Google Sheets, Airtable, Make, n8n, Zapier, Slack or a webhook. AI agents can call it through the Apify MCP server.
Limitations
- The USPTO search index returns at most 10,000 marks per search. For more, split the search by class, filing date window or status.
- Individual owners are redacted (name, city, address). Owners that are trusts, estates, sole proprietorships or of unknown type are treated the same way.
- The data is what the USPTO search index holds. On 2026-10-19 its newest filings were dated 2026-10-17, so the newest filings and status changes can lag TSDR by a few days.
- Design-only marks have no
wordmark; search them by owner or goods, or by number. - The USPTO limits unusually heavy use. The Actor keeps to a few parallel requests; very large monitoring jobs are best split into several scheduled runs.
FAQ
Do I need a USPTO account or API key? No. The Actor uses the public trademark search that any visitor can use. No account, no key.
Is this the USPTO's own API? No. It is an independent tool that reads the public USPTO trademark search and returns plain rows.
How do I monitor new filings for my brand? Put your brand words in Search terms, set Sort by to newest and Filed on or after to the start of your window, and add a daily Schedule.
Why did I get fewer rows than maxItems? The search matched fewer marks, or the run hit your Max total charge. totalMatches shows how many marks the search matched.
Why is ownerName empty on some rows? The owner is an individual (or not clearly an organisation), so the name and address are redacted; ownerRedacted is true and ownerEntityType still tells you the owner type.
What happens if the USPTO changes something? Rows come back with status: error and a reason instead of silently wrong data, and you are not billed for them. Report it in the Issues tab with the run ID.
Can I use this Actor from an AI agent or MCP client? Yes. It runs with no input at all, every row is self-describing (status plus error), and inputs are plain strings.
Related Actors
- Domain Intelligence Report - use it to check whether the matching .com domain for a name is taken, and who runs it.
- LinkedIn Company Scraper - use it to profile the companies that own conflicting marks.
- Google News Scraper - use it to follow news about a brand or a trademark dispute.
- Keyword Suggestions Scraper - use it to see what people search for a brand word before you file it.
- Google Trends Scraper - use it to compare interest in candidate brand names.
- Companies House Scraper - use it to verify a UK company's legal status, incorporation date, registered office and SIC codes.
Legal and data-protection notice
This Actor extracts only data that the USPTO publishes in its public trademark search. US government trademark records are public; the USPTO asks that heavy users not overload its servers, and the Actor keeps its request rate low. Owner names, cities and addresses are output only for organisations; for individuals (and owners that are not clearly organisations) they are removed, and attorney and correspondent names, emails, phones and addresses are never output. A word mark can itself be a person's name, because that is what was filed. Your results could therefore still contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You are responsible for complying with applicable law when using the extracted data.
This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by the United States Patent and Trademark Office. All trademarks belong to their respective owners.