USPTO APItmsearch.uspto.gov ↗
Search and retrieve US trademark data from USPTO. Query by wordmark or serial number, get owner details, filing dates, status, and goods/services classes.
What is the USPTO API?
The USPTO Trademark Search API provides access to US trademark registration data across 2 endpoints, covering search by wordmark or serial number and detailed case lookups. The search_trademarks endpoint returns paginated results including serial numbers, registration IDs, mark type, status, and filing dates. The get_trademark_details endpoint returns owner information, goods/services classes, prosecution status, correspondent details, and TM5 status for a specific serial number.
curl -X GET 'https://api.parse.bot/scraper/82426fc4-aff3-4504-aa52-1dea89a26c73/search_trademarks?limit=10&query=apple&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace tmsearch-uspto-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.uspto_trademark_search_api import USPTO, TrademarkSummary, Trademark
client = USPTO()
# Search for trademarks by wordmark name
for summary in client.trademarks.search(query="apple"):
print(summary.serial_number, summary.wordmark, summary.status)
print(summary.owner_name, summary.international_class)
# Navigate from summary to full trademark detail
detail = summary.details()
print(detail.tm5_live_dead, detail.status_date)
for owner in detail.owners:
print(owner.name, owner.entity_type, owner.citizenship)
for cls in detail.classes:
print(cls.class_number, cls.first_use_anywhere_date)
print(detail.correspondent.name, detail.correspondent.email)
print(detail.registration_maintenance.earliest_renewal_date)
break
# Direct lookup by serial number
tm = client.trademarks.get(serial_number="97161824")
print(tm.serial_number, tm.registration_id, tm.tm5_live_dead)
for entry in tm.prosecution_history:
print(entry.date, entry.description, entry.proceeding)
Full-text search over USPTO trademark filings by wordmark name or serial number. Returns paginated results ordered by relevance. Serial numbers (all-digit queries) match exactly; text queries match against the wordmark and pseudo-mark fields with phrase boosting. Each result is a TrademarkSummary with filing metadata, owner, and class info. Offset-based manual pagination via offset and limit params.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum results to return per page |
| queryrequired | string | Search term - trademark name/wordmark or serial number (e.g., 'apple' or '78406612') |
| offset | integer | Pagination offset for results |
{
"type": "object",
"fields": {
"limit": "integer - requested limit",
"query": "string - the search term used",
"total": "integer - total number of matching trademarks",
"offset": "integer - pagination offset used",
"trademarks": "array of trademark summary objects"
},
"sample": {
"data": {
"limit": 10,
"query": "apple",
"total": 5029,
"offset": 0,
"trademarks": [
{
"id": "85841295",
"status": "Cancelled",
"attorney": null,
"wordmark": "APPLE 'N' APPLE",
"mark_type": [
"TRADEMARK"
],
"filed_date": "2013-02-05T00:00:00",
"owner_name": [
"Haidar, Raed (INDIVIDUAL; USA)"
],
"serial_number": "85841295",
"registration_id": "4366276",
"registration_date": "2013-07-09",
"goods_and_services": [
"(CANCELLED) IC 034: [ Hookah tobacco ]."
],
"international_class": [
"IC 034"
]
}
]
},
"status": "success"
}
}About the USPTO API
Trademark Search
The search_trademarks endpoint accepts a query parameter supporting both wordmark text (e.g., apple) and numeric serial numbers (e.g., 78406612). Results are paginated via offset and limit parameters and include a total count of matching records. Each item in the trademarks array carries a serial_number, registration_id, wordmark, mark_type, status, and filed_date, giving enough context to filter or triage results before pulling full case details.
Trademark Detail
The get_trademark_details endpoint takes a single serial_number and returns a structured record covering the full case. The owners array includes each owner's name, entity_type, address, and citizenship. The classes array lists each Nice Classification class number alongside firstUseAnywhereDate and firstUseInCommerceDate dates. Additional fields include attorney, correspondent (name, address, email), status, status_date, mark_type, and tm5_status — the TM5 designation relevant for international filings.
Data Coverage
Data reflects the USPTO's TSDR and TMSEARCH systems, which cover federally registered and pending US trademarks. Status descriptions match USPTO case status language, making the API suitable for monitoring active applications, abandoned marks, or registered trademarks. Serial numbers are the consistent identifier across both endpoints and can be stored from search results for subsequent detail lookups.
The USPTO API is a managed, monitored endpoint for tmsearch.uspto.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tmsearch.uspto.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official tmsearch.uspto.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Check whether a proposed brand name conflicts with existing registered or pending US trademarks before filing
- Monitor the status and status_date of a portfolio of trademarks by serial number for automated prosecution tracking
- Extract owner entity_type and address data to map trademark ownership across corporate families
- Retrieve firstUseInCommerceDate from the classes array to establish priority timelines in disputes
- Look up correspondent and attorney fields to identify which law firms manage specific trademark portfolios
- Search by serial number to confirm registration_id and current status before licensing negotiations
- Aggregate tm5_status fields to identify trademarks with active international filing designations
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does USPTO offer an official developer API for trademark data?+
What does get_trademark_details return beyond what search_trademarks includes?+
Does the API return prosecution history documents or image files of the mark?+
Are state trademark registrations or common-law marks included?+
How does pagination work in search_trademarks?+
total field with the full match count alongside the current page of results. Use offset to advance through pages and limit to control page size. For example, to retrieve results 21–40, set offset=20 and limit=20. Both parameters are optional; omitting them returns a default first page.