USPTO Trademark Scraper - TSDR Status by Serial/Reg # avatar

USPTO Trademark Scraper - TSDR Status by Serial/Reg #

Pricing

$0.50 / 1,000 trademark status rows

Go to Apify Store
USPTO Trademark Scraper - TSDR Status by Serial/Reg #

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

An Tan Huynh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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:

FieldExample
serialNumber88000001
registrationNumber6380676 (null if pending/abandoned)
markTextSLIM JACS
markDrawingType4 - STANDARD CHARACTER MARK
statusShortRegistered. (full sentence)
statusSlugregistered
isLivetrue / false / null (from TM5 common status)
tm5StatusHeadlineLIVE/REGISTRATION/Issued and Active
filingDate / registrationDate / publicationDateISO 8601 dates
internationalClasses["031"] (3-digit Nice classes)
goodsServicesPet food; Pet treats
currentLocation / dateInLocationPUBLICATION AND ISSUE SECTION / 2021-05-06
basis{ filedUse, currentlyUse, filedItu, filed44D, filed66A, filedNoBasis, ... } booleans
ownerName / legalEntityTypeBIL-JAC FOODS INC. / CORPORATION (public record of who owns the mark)
docketNumberattorney docket / matter reference string (reference identifier only)
prosecutionHistoryfull 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].description from 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 prosecutionHistory timeline — no attorney contact scraping required.
  • Trademark MCP server. Expose markText, statusSlug, isLive, internationalClasses and prosecutionHistory[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

EventPrice
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 /statussearch UI displays.
  • markText is populated for word / standard-character marks. Pure design marks (Mark Drawing Type = 2 or 6) have markText = null by design.
  • internationalClasses currently exposes the primary class(es) listed in the status view. Marks with multiple additional-class sections list every class code; internationalClassesText keeps 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.