USPTO Trademark Status Checker
Pricing
Pay per event
USPTO Trademark Status Checker
Check USPTO trademark serial and registration numbers in bulk. Export status, owners, filing dates, classes, goods/services, and TSDR links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Check USPTO trademark serial and registration numbers in bulk and export clean status data from the official TSDR system.
The actor turns a list of trademark numbers into structured records with mark name, live/dead status, owner, dates, goods and services, classes, attorney, and source links.
What does USPTO Trademark Status Checker do?
USPTO Trademark Status Checker reads public USPTO Trademark Status and Document Retrieval (TSDR) status pages and converts them into spreadsheet-ready data.
Use it when you have serial numbers or registration numbers and need a repeatable export instead of opening each TSDR page by hand.
The actor is designed for official-data workflows, portfolio checks, due diligence, and brand monitoring.
Who is it for?
- ๐งโโ๏ธ IP attorneys checking client trademark portfolios
- ๐ก๏ธ Brand protection teams monitoring live/dead status changes
- ๐ Amazon and private-label sellers validating marks before product launches
- ๐งพ Due diligence teams reviewing trademark assets in acquisitions
- ๐ Domain and naming researchers checking whether a brand name is already protected
- ๐ Operations teams that need CSV, JSON, Excel, or API output from USPTO pages
Why use this actor?
Manual TSDR checks are slow when you need to review dozens or hundreds of marks.
This actor helps you:
- โ Check many serial or registration numbers in one run
- โ Export normalized results to CSV, JSON, Excel, XML, or API
- โ Keep official USPTO source links with every row
- โ Preserve per-number errors for invalid or empty records
- โ Avoid browser automation overhead by using server-rendered USPTO pages
What data can you extract?
| Field | Description |
|---|---|
inputNumber | Number exactly as you entered it |
normalizedNumber | Digits-only USPTO number |
numberType | Serial, registration, or unknown |
markName | Trademark mark text |
status | USPTO status text |
statusDate | Date associated with the current status |
filingDate | Application filing date |
registrationNumber | Registration number, when available |
registrationDate | Registration date, when available |
register | Principal or Supplemental register |
markType | USPTO mark type |
liveDeadFlag | LIVE or DEAD summary when detected |
ownerName | Current owner name |
ownerAddress | Current owner address |
attorneyName | Attorney of record |
goodsServices | Goods and services description |
classes | International classes |
tm5Status | TM5 common status descriptor |
tsdrUrl | Official USPTO status page |
documentsUrl | Official USPTO documents tab link |
error | Per-number error, if any |
scrapedAt | Extraction timestamp |
How much does it cost to check USPTO trademark status?
The actor uses pay-per-event pricing.
Current pricing is a $0.005 run-start fee plus a tiered per-record fee. The BRONZE per-record price is $0.000024217, with lower rates on higher Apify usage tiers.
This pricing works well for both one-off due diligence and recurring portfolio checks because you only pay for processed numbers.
Input options
You can provide numbers in two ways:
- Add values to Serial or registration numbers.
- Paste a bulk list into Paste numbers.
Numbers can contain punctuation, spaces, or line breaks. The actor normalizes them to digits before requesting USPTO TSDR.
Example input
{"trademarkNumbers": ["85071981", "90000000", "74656267"],"includeDocuments": true,"maxConcurrency": 2,"requestDelayMs": 250}
Example output
{"inputNumber": "85071981","normalizedNumber": "85071981","numberType": "serial","markName": "AVB","status": "REGISTERED AND RENEWED","statusDate": "Jun. 25, 2020","filingDate": "Jun. 25, 2010","registrationNumber": "4012345","registrationDate": "Aug. 16, 2011","liveDeadFlag": "LIVE","ownerName": "Example owner","classes": ["010"],"tsdrUrl": "https://tsdr.uspto.gov/statusview/sn85071981","documentsUrl": "https://tsdr.uspto.gov/#caseNumber=85071981&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=documentSearch","error": null,"scrapedAt": "2026-06-22T00:00:00.000Z"}
Exact field values depend on the live USPTO TSDR record.
How to run it
- Open the actor on Apify.
- Paste serial or registration numbers.
- Keep concurrency at the default value for large lists.
- Start the run.
- Download the dataset as CSV, JSON, Excel, XML, or HTML.
Tips for best results
- Use official USPTO serial or registration numbers.
- Keep very large checks conservative to avoid USPTO throttling.
- Use
requestDelayMsif you are checking long portfolios. - Keep
includeDocumentsenabled when reviewers need source links. - Review the
errorfield instead of assuming every number exists.
Handling invalid numbers
The actor does not fail the whole run when one number is invalid.
Instead, it saves a row with the original input and an error message.
This makes it easier to clean spreadsheets because successful and failed checks stay aligned with your input list.
Integrations
You can connect USPTO Trademark Status Checker to:
- ๐ Google Sheets for portfolio monitoring
- ๐งฐ Zapier or Make for recurring brand checks
- ๐๏ธ Airtable for trademark asset databases
- ๐ฌ Slack or email alerts when a downstream workflow detects status changes
- ๐งช Internal due-diligence tools using the Apify API
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/uspto-trademark-status-checker').call({trademarkNumbers: ['85071981', '90000000'],includeDocuments: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/uspto-trademark-status-checker').call(run_input={'trademarkNumbers': ['85071981', '90000000'],'includeDocuments': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~uspto-trademark-status-checker/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"trademarkNumbers":["85071981","90000000"],"includeDocuments":true}'
MCP integration
Use this actor from Claude Desktop, Claude Code, or other MCP clients through Apify MCP Server.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/uspto-trademark-status-checker
Claude Code setup:
$claude mcp add apify-uspto-trademark-checker https://mcp.apify.com/?tools=automation-lab/uspto-trademark-status-checker
Claude Desktop JSON config:
{"mcpServers": {"apify-uspto-trademark-checker": {"url": "https://mcp.apify.com/?tools=automation-lab/uspto-trademark-status-checker"}}}
Example prompts:
- "Check these USPTO serial numbers and summarize which marks are live."
- "Turn this trademark portfolio into a CSV with owner, status, filing date, and TSDR links."
- "Find rows with missing or invalid trademark numbers from this list."
Official source
The actor reads public USPTO TSDR status pages.
Each dataset item includes the official source URL so you can click through and verify the current record.
Reliability notes
USPTO is a government website and may throttle bursts of traffic.
The actor uses conservative defaults, retries temporary 403/429/5xx responses, and exposes advanced delay and concurrency settings.
If you run very large lists, use lower concurrency and a delay between requests.
Legality
USPTO trademark status pages are public government records.
You should still use the data responsibly, respect USPTO availability, and follow applicable laws and professional duties for your use case.
This actor does not bypass logins, paywalls, or private systems.
FAQ
Why do I see an error for one number?
The number may be invalid, missing from TSDR, or temporarily unavailable. Check the error field and open the tsdrUrl manually if you need to verify.
Why is a run slower for large lists?
The actor intentionally uses conservative concurrency because USPTO can throttle bursts. Increase concurrency carefully or decrease it for maximum reliability.
Can I monitor status changes?
Yes. Schedule the actor on Apify, export each run, and compare status, statusDate, and liveDeadFlag in your downstream workflow.
Related scrapers
Other automation-lab actors can support adjacent due-diligence workflows:
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/company-website-finder
- https://apify.com/automation-lab/domain-email-finder
Support
If a USPTO layout change breaks extraction, open an Apify issue with a run link and example serial numbers.
Changelog
0.1
Initial version with bulk trademark number input, TSDR status extraction, per-number errors, and official source links.