USPTO Trademark Search API — Bulk Phrase, Serial & Owner avatar

USPTO Trademark Search API — Bulk Phrase, Serial & Owner

Pricing

from $4.00 / 1,000 uspto trademark results

Go to Apify Store
USPTO Trademark Search API — Bulk Phrase, Serial & Owner

USPTO Trademark Search API — Bulk Phrase, Serial & Owner

Check phrases against the US trademark register and get one clear or conflict answer each, from live official USPTO data. Bulk trademark search and trademark checker for clearance and availability. $5 per 1,000 results, usage included, no API key or login. US only, not legal advice.

Pricing

from $4.00 / 1,000 uspto trademark results

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

35

Total users

17

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

What is USPTO Trademark Search API?

Check phrases against the US federal trademark register and get one plain clear-or-conflict answer per phrase, from live official USPTO data.

Price: $5 per 1,000 results, plus a $0.00005 start fee. Apify platform usage is included. No API key or login. A CLEAR row counts as one result.

Use it as a bulk trademark search and trademark checker for trademark clearance, trademark availability and trademark conflict checks. Batch-search the United States Patent and Trademark Office register by phrase, serial number, registration number, owner name, or words inside the goods and services text. Each query returns matching federal marks with live/pending/dead status, Nice classes, owner, filing, registration and first-use dates, goods and services, a mark image link and a TSDR link — or one CLEAR row when nothing matches. Every phrase also gets one plain verdict: CLEAR or CONFLICT. 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. It covers US federal marks only, not state, EU or other countries' registers. Source: United States Patent and Trademark Office, www.uspto.gov.

How billing works: one trademark-result event per saved row. Checking 100 phrases with up to 3 rows each costs at most 300 trademark-result events.

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 need a trademark availability screen or a bulk trademark conflict check before you print, list, or name a product.
  • 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. Every row for that phrase also carries queryVerdict: CONFLICT. 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 and queryVerdict: CLEAR, so the rest of the list can ship. The free PHRASE_SUMMARY record lists one line per phrase with its verdict and top match, which is the quickest way to sort a 100-phrase list.

Trademark clearance and availability: what the answer means

Every phrase gets one plain answer in queryVerdict, so a bulk trademark conflict check does not need anyone to read every row.

AnswerWhat it tells youWhat to do
CLEARNo matching federal mark was found under your filters. The phrase looks available on the USPTO register.Keep it, then confirm with an attorney before you file or launch.
CONFLICTAt least one live or pending mark matched.Drop it, or review the matches and their Nice classes.
DEAD_ONLYOnly abandoned, cancelled or expired marks matched.Lower risk, but older unregistered rights can still exist.
REVIEWStatus filter all: the saved rows were dead, but more unsaved matches exist.Raise maxResultsPerTerm or use statusFilter: "live".

Results come straight from the live USPTO search index on every run, not from a stored copy. CLEAR is a search result, not legal clearance: it does not cover similar-sounding marks, state registrations, or unregistered common-law rights.

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

FieldTypeWhat it controls
searchTermsarrayWordmark/keyword phrases, up to 100. Example: star wars.
serialNumbersarrayExact 7-8 digit serials, SN: prefixes, or TSDR URLs.
registrationNumbersarrayExact registration numbers such as 2239077.
ownerNamesarrayOwner-portfolio search, up to 50 names.
goodsServicesTermsarrayWords inside the goods and services text, up to 50. Example: phone case with niceClasses 9.
statusFilterenumlive (default), pending, registered, dead, or all.
niceClassesstringComma-separated Nice classes 1-45. Empty = every class. 25 is clothing.
matchModeenumcontains (default) or exact wordmark. Ignored for serial/registration lookup.
maxResultsPerTerminteger1-50 rows saved per query. Default 5. Prefill 3.
maxResultsintegerRun-wide row cap, 1-1000. Default 250.
includeClearRowsbooleanWrite a CLEAR row when a query has zero matches. Default true.
maxConcurrencyintegerParallel USPTO queries, 1-8. Default 4.

At least one of searchTerms, serialNumbers, registrationNumbers, ownerNames, or goodsServicesTerms 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)",
"queryVerdict": "CONFLICT",
"filingDate": "1997-06-11",
"firstUseDate": "1977-05-25",
"markImageUrl": "https://tsdr.uspto.gov/img/75306994/large",
"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:

ValueMeaning
LIVEAlive and registered
PENDINGAlive but not yet registered
DEADAbandoned, cancelled, or expired
CLEARThis query produced no matches under the chosen filters

queryVerdict values (phrases from searchTerms only, under your own filters):

ValueMeaning
CLEARNo match
CONFLICTAt least one live or pending mark matched
DEAD_ONLYOnly dead marks matched
REVIEWStatus filter all, the saved rows were dead, but more unsaved matches exist

Other fields when USPTO has them: firstUseInCommerceDate, disclaimer, markDescription, translation, drawingType, standardCharacterClaim, pseudoMark (USPTO's look-alike spelling), designCodes and designCodeDescriptions, registrationType, filingBasis, usClasses, ownerStateCountry, ownerType, attorney, and the full goodsAndServices text.

The key-value store record PHRASE_SUMMARY is free and holds one line per query: search term, query type, verdict, match count, rows saved and top match.

matchCountForQuery is the 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
}

Find live marks whose goods text mentions phone cases, limited to class 9.

{
"goodsServicesTerms": ["phone case"],
"niceClasses": "9",
"statusFilter": "live",
"maxResultsPerTerm": 10
}

Why agents choose this Actor

  • Bounded cost: $0.005 per saved row plus a $0.00005 start event, with maxResults as 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: source is always uspto-tmsearch, scrapedAt is ISO, tsdrUrl points at the official case.
  • One queryVerdict per phrase plus a free PHRASE_SUMMARY record, so an agent can answer "is this phrase taken?" without reading every row.
  • Terminal OUTPUT.outcome values (COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED) are stable enough to branch on.
  • Phrase, serial, registration, owner, and goods/services 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

  1. Pass trademark phrases, serials, registration numbers, or owner names. Patent numbers belong on Google Patents Scraper.
  2. Set maxResults (and maxResultsPerTerm) to the budget you can spend at $0.005 per row.
  3. Prefer statusFilter: "live" and a Nice class such as "25" for merch clearance.
  4. After the run, read OUTPUT.outcome, then the dataset. An empty dataset is a valid CLEAR/no-match result when the outcome is VALID_EMPTY.
  5. Open tsdrUrl when you need the official status page or documents; this Actor does not download TSDR PDFs.
  6. If matchCountForQuery is larger than the rows you received, raise the caps or narrow niceClasses / matchMode.
  7. Schedule repeats against the same searchTerms when 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 with Apify platform usage included. 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):

InputRows billedEvent cost
One phrase, 3 matches3~$0.015
10 phrases, all CLEAR10~$0.050
100 phrases, 1 row each100~$0.500
Serial lookup, 1 hit1~$0.005
Empty / invalid input0start event only

Formula: trademark-result count × $0.005 + start event. Apify platform usage is included in the event price.

Outcome vocabulary

These values live in the key-value store records OUTPUT and RUN_SUMMARY, not on each dataset row.

OutcomeMeaning
COMPLETEEvery query was processed and useful rows were saved.
PARTIALSome queries were incomplete, a cap stopped the run, or the event limit was hit; saved rows are still in the dataset.
VALID_EMPTYQueries succeeded and produced zero rows (usually includeClearRows: false with no matches).
INVALID_INPUTNothing to search. Fix the input; no trademark events are charged.
UPSTREAM_FAILEDUSPTO 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 contains for risk spotting and exact when you care about the literal wordmark.
  • Keep maxResultsPerTerm small (3-5) on famous marks. STAR WARS in class 25 has thousands of live hits.
  • Leave includeClearRows on 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 Actor reads USPTO's current search address at the start of every run and keeps an older address as a fallback. It retries, then tries Apify Residential US. When no 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, owner names, or goods words and read one row per match (or CLEAR), each phrase with a queryVerdict. Inspect OUTPUT.outcome before summarizing.

Does a CLEAR answer mean the trademark is available? It means no matching US federal mark was found under your filters. It is a strong first screen for trademark availability, not a legal opinion. Similar-sounding marks, state registrations and common-law use are not covered.

Does it cover the EU or other countries? No. This Actor covers the US federal register only.

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.

Reliability and spending limits

A CLEAR row requires a validated, successful USPTO response with zero matches. HTTP errors, malformed responses and truncated unresolved source results do not prove no matches. Result fees follow coupled row delivery and named charge verification; saved rows and terminal counts are reconciled against a durable delivery checkpoint. An uncertain write stops further paid writes and automatic replay.

Invalid option values are rejected before requests. Event allowance and the time limit are checked before source requests; a zero or insufficient result allowance reports BUDGET_LIMIT_REACHED. Output capped below the observed source hit count reports PARTIAL. OUTPUT and RUN_SUMMARY include actual saved rows, named fee counts, physical request attempts, fallback use and delivery uncertainty.