USPTO Trademark Scraper avatar

USPTO Trademark Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
USPTO Trademark Scraper

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.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share


🎯 What this 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.

🔥 Features

  • 🛡️ Browser fingerprint rotationcurl-cffi replays 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 / 503 and network errors — up to 5 attempts, honouring Retry-After headers.
  • 🧱 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-start warm-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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — supply at least one of query, serialNumbers, or registrationNumbers. All three can run together in a single call.
  3. Click Start. Results stream into the run's dataset as each lookup resolves.
  4. When the run finishes, open Storage → Dataset to export as JSON, CSV, or Excel — or pull rows via the Apify API.

Input mode tips:

  • serialNumbers and registrationNumbers — always processed in full, ignoring maxResults.
  • query — searched against mark text and owner name, capped at maxResults.
  • statusFilter — set to live or dead to post-filter by parsed status text.

📥 Input

FieldTypeRequiredDefaultNotes
querystringno*Free-text mark text or owner name to search, 1-200 chars.
serialNumbersarrayno*Direct lookup by USPTO serial number(s), 8 digits each.
registrationNumbersarrayno*Direct lookup by USPTO registration number(s), 1-8 digits each.
statusFilterstringnoanyany, live, or dead — post-filter on parsed status text.
maxResultsintegerno20Cap on rows returned for query mode only. Max 500.
proxyConfigurationobjectno{"useApifyProxy": false}Apify Proxy configuration. USPTO tolerates direct calls at a light pace.

* At least one of query, serialNumbers, registrationNumbers is required.

Example input

{
"query": "BLINKING NAILS",
"serialNumbers": ["88148890"],
"registrationNumbers": ["5912174"],
"statusFilter": "any",
"maxResults": 2,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
serial_numberstringUS Serial Number.
registration_numberstring | nullUS Registration Number.
mark_textstringMark / Mark Literal Elements.
mark_typestring | nullMark Type.
standard_character_claimboolean | nullStandard Character Claim (Yes/No).
description_of_markstring | nullDescription of Mark, including Disclaimer text when present.
statusstring | nullStatus (free text).
status_datestring | nullStatus Date, ISO-8601.
filing_datestring | nullApplication Filing Date, ISO-8601.
registration_datestring | nullRegistration Date, ISO-8601.
publication_datestring | nullPublication Date, ISO-8601.
registerstring | nullPrincipal / Supplemental.
international_classesarrayInternational Class(es), zero-padded.
goods_servicesstring | nullFor: field — goods & services description.
first_use_datestring | nullFirst Use, ISO-8601.
use_in_commerce_datestring | nullUse in Commerce, ISO-8601.
filing_basisarrayDerived from Filed Use/ITU/44D/44E/66A flags.
owner_namestring | nullOwner Name.
owner_addressstring | nullOwner Address.
attorney_namestring | nullAttorney Name.
tsdr_urlstringTSDR case-status URL for this serial number.
scraped_atstringISO-8601 UTC timestamp when this row was recorded.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.005One-off warm-up charge per run
result$0.005Per trademark row written to the dataset

Example: 1 000 results at the rates above ≈ $5.00. No subscription, no minimum — Apify gives every new account $5 of free credit to start. Commercial trademark-watch platforms charge per-mark subscriptions that add up fast across a portfolio; this Actor bills only for rows that land.

🚧 Limitations

  • Search ranking is controlled by USPTO's trademark search index internally — the order for query mode is theirs.
  • status_date is null for query-mode rows. USPTO's search index doesn't expose a discrete "status changed on" date for free-text hits; direct serialNumbers/registrationNumbers lookups 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.

🔗 Use with n8n

Wire this Actor into your n8n automations with the official Apify node:

  1. Add the Apify node and pick the Run Actor operation.
  2. Set the Actor to devilscrapes/uspto-trademark-scraper and pass your input as JSON.
  3. Chain a Get Dataset Items step to read the structured rows into the rest of your workflow (Sheets, Slack, your CRM, an AI agent, …).

Because n8n runs on a schedule or trigger, you get fresh trademark records on autopilot — for example, a daily trademark-watch that alerts you the moment a mark's status changes or a competitor files a confusingly similar mark.

❓ FAQ

Do I need a USPTO API key?

No. This Actor uses USPTO's public TSDR case-status pages and trademark search index directly — no registered API key required for the surfaces this Actor covers.

Is the data real-time?

TSDR case-status pages reflect USPTO's live prosecution record — status changes typically appear within a business day of USPTO posting them.

Can I monitor my own trademark portfolio automatically?

Yes — schedule recurring runs via Apify's built-in Schedule feature with your serial or registration numbers. We don't build a separate diff/alerting engine; Apify Schedule plus your own diffing of the dataset covers recurring monitoring.

Does this cover international or EU trademarks?

No — this Actor covers US federal (USPTO) marks only. We can build dedicated Actors for EUIPO or Madrid Protocol marks on request.

Can I get opposition or cancellation (TTAB) history?

Not in v1 — TTAB proceeding documents are a distinct data surface, already covered by a separate competing Actor. Only case-status summary fields ship here.

Why is status_date sometimes null?

Rows produced by the free-text 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?

Not every filing lists a registered attorney — pro se filings and some foreign-owned marks often omit it.

💬 Your feedback

Spotted a bug, hit an edge case, or need a new field (image/logo download, TTAB history, assignment records)? Open an issue on the Actor's Issues tab in Apify Console — we ship fixes weekly and read every report.