USPTO Trademark Scraper - TSDR Status by Serial/Reg #
Pricing
$0.50 / 1,000 trademark status rows
USPTO Trademark Scraper - TSDR Status by Serial/Reg #
Live USPTO trademark status from TSDR. Look up by Serial or Registration Number: mark text, status, TM5 live/dead, filing/registration dates, Int. Classes, goods/services, owner, basis flags, prosecution history. Use when an agent needs trademark status, availability, or history. $0.50 per 1,000.
Pricing
$0.50 / 1,000 trademark status rows
Rating
0.0
(0)
Developer
An Tan Huynh
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
USPTO Trademark Scraper
Scrape the live status of any US trademark directly from the official USPTO
TSDR system (tsdr.uspto.gov), straight into a structured JSON row. Look up
by US Serial Number or US Registration Number: the actor pulls the
TSDR status page, parses every labelled field, and emits one record per
unique trademark.
No API key, no account, no login required. The TSDR endpoints
/statusview/sn<SERIAL> and /statusview/rn<REGNUM> serve the full
server-rendered status page over plain HTTPS from an Apify Proxy datacenter
IP. All source code is open and the actor sends polite requests at human
pace with no browser emulation.
Pricing: $0.50 per 1,000 trademarks (billed as status events — one
charge per unique trademark successfully parsed; HTTP 404 and duplicate
serials are free).
What you get per trademark
Every row carries the data from the TSDR status page as a flat object:
| Field | Example |
|---|---|
serialNumber | 88000001 |
registrationNumber | 6380676 (null if pending/abandoned) |
markText | SLIM JACS |
markDrawingType | 4 - STANDARD CHARACTER MARK |
statusShort | Registered. (full sentence) |
statusSlug | registered |
isLive | true / false / null (from TM5 common status) |
tm5StatusHeadline | LIVE/REGISTRATION/Issued and Active |
filingDate / registrationDate / publicationDate | ISO 8601 dates |
internationalClasses | ["031"] (3-digit Nice classes) |
goodsServices | Pet food; Pet treats |
currentLocation / dateInLocation | PUBLICATION AND ISSUE SECTION / 2021-05-06 |
basis | { filedUse, currentlyUse, filedItu, filed44D, filed66A, filedNoBasis, ... } booleans |
ownerName / legalEntityType | BIL-JAC FOODS INC. / CORPORATION (public record of who owns the mark) |
docketNumber | attorney docket / matter reference string (reference identifier only) |
prosecutionHistory | full timeline of events (date + description + proceeding #) |
Personal data about individuals is deliberately not included: no attorney/correspondent names, no addresses, phone, fax or e-mail addresses.
Dates are returned as ISO 8601 (YYYY-MM-DD). TM5 common status gives a
machine-friendly LIVE / DEAD boolean (isLive) so you can filter at a
glance.
Example input
{"serialNumbers": ["88000001", "97000001"],"registrationNumbers": ["6380676"]}
Both lists are optional, but at least one must be non-empty. Values are
normalised before being sent to USPTO (dashes/spaces/leading zeros are
stripped and the serial is zero-padded to 7 digits). If a serial number
already appeared from the serialNumbers list, the same mark will not be
re-fetched when it also shows up through registrationNumbers — you only
pay once per unique trademark.
Example output row
{"serialNumber": "88000001","registrationNumber": "6380676","markText": "SLIM JACS","statusShort": "Registered.","statusSlug": "registered","statusDate": "2021-06-08","isLive": true,"tm5StatusCode": "8","tm5StatusHeadline": "LIVE/REGISTRATION/Issued and Active","filingDate": "2018-06-14","registrationDate": "2021-06-08","internationalClasses": ["031"],"goodsServices": "Pet food; Pet treats","ownerName": "BIL-JAC FOODS INC.","basis": {"filedUse": false,"currentlyUse": true,"filedItu": true,"currentlyItu": false},"prosecutionHistory": [{ "date": "2021-06-08", "description": "REGISTERED-PRINCIPAL REGISTER", "proceedingNumber": null }],"sourceUrl": "https://tsdr.uspto.gov/statusview/sn88000001"}
Use cases
- Brand monitoring / brand watch. Feed a list of competitors' or
clients' serial numbers and run the actor nightly. Diff
prosecutionHistory[0].date+prosecutionHistory[0].descriptionfrom the previous run to catch new office actions, suspensions, publications or allowances the moment they hit TSDR. - Portfolio due diligence. Supply a legacy registration list ahead of a brand acquisition and get the current owner, cancellation status, and Section 8/9 renewal dates for each mark in one dataset.
- Renewal pipeline. Supply a batch of registration numbers to flag
marks approaching Section 8/9 maintenance windows via the status and
prosecutionHistorytimeline — no attorney contact scraping required. - Trademark MCP server. Expose
markText,statusSlug,isLive,internationalClassesandprosecutionHistory[0]to an AI agent so it can answer "Is this trademark live? When does it renew? Who owns it?" without the Angular TSDR UI in the loop.
Pricing
| Event | Price |
|---|---|
status — one unique trademark parsed | $0.0005 ($0.50 / 1,000) |
Only parsed trademarks are billed. Serial numbers that return HTTP 404 at TSDR, duplicate serials in your input, and failed-to-parse pages are not charged.
Data accuracy and limits
- Rows mirror the TSDR status view at request time. TSDR is the official
USPTO status source and updates in near-real-time once an event is
entered — the same page the USPTO's own
/statussearchUI displays. markTextis populated for word / standard-character marks. Pure design marks (Mark Drawing Type= 2 or 6) havemarkText = nullby design.internationalClassescurrently exposes the primary class(es) listed in the status view. Marks with multiple additional-class sections list every class code;internationalClassesTextkeeps the raw text with '- Primary Class' / 'ADDITIONAL CLASS' labels if you need them.- The TSDR status endpoint occasionally returns HTTP 403 to the same IP in a short window. The actor retries up to 4 times on a fresh IP from the pool, so transient blocks don't cause data gaps.
FAQ
Does this cover TTAB opposition / cancellation proceedings?
No — this release reads the Trademark Status side of TSDR, not the TTAB
Vue decision index. If demand picks up a dedicated ttab_decision mode
will land in a future version.
Can I search by brand name instead of serial?
Not in v0.1. USPTO's modern trademark search (tmsearch.uspto.gov) is a
front-end Angular SPA with no stable public API, so this actor only
covers the deterministic lookup-by-number path. If you need a name
search, submit the serials you want to monitor and the actor will do the
rest.
Where do I find the serial / registration number for my mark? Both numbers are printed on every USPTO filing receipt and on the registration certificate. You can also find them in TSDR itself by searching the mark name — the result page lists serial numbers you can feed back to this actor.