Lead generation
USPTO Trademark Scraper
Search and export U.S. federal trademark records from the USPTO by mark text, owner name, serial number, or registration number. Structured rows: mark text, owner, status, filing/registration dates, Nice classes, goods & services. No API key.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
USPTO's modern trademark search (tmsearch.uspto.gov) is a JS-rendered single-page app, and the official TSDR JSON API now gates bulk access behind a registered API key. This Actor wraps USPTO's trademark search index and TSDR case-status pages directly, so you get a structured row per mark without wrestling either surface yourself.
Give it a free-text query (mark text or owner name), a list of serial numbers, or a list of registration numbers — or mix all three in one run. Every request runs through our fingerprint-rotating HTTP stack and a paced, retrying client so your runs stay clean even when USPTO throttles.
What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffireplays real Chrome / Firefox / Safari TLS handshakes so USPTO sees a real browser, not a Python script. - 🌐 Optional residential proxy rotation via Apify Proxy — fresh session and exit IP whenever a lookup gets rate-limited.
- 🔁 Retries with exponential backoff on
429 / 503and network errors — up to 5 attempts, honouringRetry-Afterheaders. - 🧱 Paced TSDR requests — direct lookups are throttled to roughly one request per second so we never trip USPTO's rate limits.
- 🧊 Clean, typed dataset rows — Pydantic-validated fields, ISO-8601 dates, stable serial numbers as IDs.
- 💰 Pay-Per-Event pricing — you pay only when a trademark row lands in your dataset. No data, no charge (only the small
actor-startwarm-up fee).
Use cases
- Brand-protection monitoring — schedule recurring runs against your own mark portfolio to catch status changes (Section 8/15 declarations, oppositions, cancellations) as USPTO posts them.
- Trademark-watch services — track a competitor's or client's marks by owner name across renewal cycles without manual TSDR lookups.
- Clearance research — pull existing registrations in a Nice class before filing a new application.
- M&A / brand-portfolio diligence — quantify a target company's live trademark holdings by owner name in minutes.
- IP attorney workflows — bulk-resolve a docket of serial or registration numbers into structured case-status rows for internal tracking systems.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
query | string | no | Free-text mark text or owner name to search. |
serialNumbers | array | no | Direct lookup by USPTO serial number(s) — 8 digits each. |
registrationNumbers | array | no | Direct lookup by USPTO registration number(s) — 1-8 digits each. |
statusFilter | string | no | Post-filter on parsed status category. |
maxResults | integer | no | Cap on rows returned for the free-text query mode. Does not cap serialNumbers/registrationNumbers, which always process every listed number. |
{
"query": "BLINKING NAILS",
"serialNumbers": [
"88148890"
],
"registrationNumbers": [
"5912174"
],
"statusFilter": "any",
"maxResults": 2,
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
serial_numberregistration_numbermark_textmark_typestandard_character_claimdescription_of_markstatusstatus_datefiling_dateregistration_datepublication_dateregisterinternational_classesgoods_servicesfirst_use_dateuse_in_commerce_date
{
"serial_number": "88148890",
"registration_number": "5912174",
"mark_text": "BLINKING NAILS",
"mark_type": "Trademark",
"standard_character_claim": false,
"description_of_mark": "The mark consists of the stylized wording \"BLINKINGNAILS\" with a butterfly design appearing above the second letter \"I\". Disclaimer: \"NAILS\"",
"status": "A Section 8 declaration has been accepted.",
"status_date": "2025-09-26",
"filing_date": "2018-10-09",
"registration_date": "2019-11-19",
"publication_date": "2019-09-03",
"register": "Principal",
"international_classes": [
"008"
],
"goods_services": "Fingernail polishers, electric or non-electric; Hair-removing tweezers; Nail files, electric; Cuticle nippers; Cuticle tweezers; Electric nail clippers; Electric pedicure sets; Emery boards; Manicure sets; Pedicure sets.",
"first_use_date": "2017-01-22",
"use_in_commerce_date": "2017-01-22",
"filing_basis": [
"USE_IN_COMMERCE"
],
"owner_name": "Zhongshan R & F Heavy Makeup Cosmetics Limited Company",
"owner_address": "Garden, No.36 Rihua Rd, Southern Dist, No.9-189, Tianhuixingyuan, Xinghuiyunjin, Zhongshan, Guangdong, 528455, CHINA",
"attorney_name": null,
"tsdr_url": "https://tsdr.uspto.gov/#caseNumber=88148890&caseType=SERIAL_NO&searchType=statusSearch",
"scraped_at": "2026-07-18T10:12:26+00:00"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0050 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Search ranking is controlled by USPTO's trademark search index internally — the order for
querymode is theirs. status_dateis null forquery-mode rows. USPTO's search index doesn't expose a discrete "status changed on" date for free-text hits; directserialNumbers/registrationNumberslookups always carry a real value when the source page has one.- TTAB opposition/cancellation proceeding documents are out of scope — that's a distinct data surface.
- Full prosecution-history documents (office actions, specimens, drawings/images) and assignment / chain-of-title history are not included in v1.
- International/Madrid Protocol or EUIPO marks are out of scope — US federal (USPTO) marks only.
- Legal disclaimer — this tool retrieves public trademark metadata for research and monitoring purposes. It is not a substitute for professional trademark counsel. Always consult a registered trademark attorney for clearance opinions, opposition strategy, or litigation.
FAQ
Do I need a USPTO API key?
Is the data real-time?
Can I monitor my own trademark portfolio automatically?
Does this cover international or EU trademarks?
Can I get opposition or cancellation (TTAB) history?
Why is `status_date` sometimes null?
query mode don't carry a discrete status-change date in USPTO's search index; direct serialNumbers/registrationNumbers lookups do when the source page has one.Why is `attorney_name` sometimes empty?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors