How to search USPTO trademarks programmatically
The USPTO publishes its trademark corpus as weekly XML bulk files — hundreds of megabytes of nested records with dozens of status, classification, and owner fields. It's the authoritative source, but parsing it yourself means writing an XML pipeline, a storage layer, and a query engine before you can ask your first question.
Folio ingests those bulk files and exposes a single JSON endpoint that takes the filters you actually want — owner name, mark text, serial number, international class, filing date range — and returns a paginated result set with a data_freshness timestamp telling you the latest transaction date reflected in the corpus.
The 10-second version
Find trademarks owned by a specific company:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/search?owner_name=Acme+Corp&status_alive_only=true"
{
"results": [
{
"serial_number": "97123456",
"mark_text": "ACME",
"status_code": "700",
"filing_date": "20230615",
"transaction_date": "20260210",
"owners": ["ACME CORPORATION"],
"classifications": ["009", "042"]
}
],
"total": 14,
"limit": 50,
"offset": 0,
"data_freshness": "20260410"
}
Filter reference
At least one of owner_name, mark_name, or serial_number is required. The rest are optional and combine with AND semantics.
owner_name— substring match against the owner (party) name. Case-insensitive.mark_name— substring match against the mark text itself.serial_number— exact match against the USPTO serial number.intl_class— international classification code, e.g.009(electronics) or042(software services). See the Nice Classification for the full list.filing_date_from/filing_date_to— date range bounds. AcceptsYYYY-MM-DDorYYYYMMDD.status_alive_only=true— restrict to trademarks in a live status (registered or pending). Dead, abandoned, and cancelled marks are excluded.limit/offset— pagination. Max 100 per page;totalin the response tells you how many matches exist.
Common query patterns
Watching a competitor's new filings
Get every trademark an owner has filed in the last 90 days, live status only:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/search?owner_name=CompetitorCo&status_alive_only=true&filing_date_from=2026-01-12&limit=100"
Poll this daily, diff against yesterday's result set, and you have a feed of new filings from a specific owner. Useful for product teams tracking a competitor's trademark activity before launches.
Filings in a specific class
All pharmaceutical trademarks (class 005) filed in Q1 2026:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/search?intl_class=005&filing_date_from=20260101&filing_date_to=20260331&limit=100"
Checking whether a name is already taken
Before launching a product, sweep the mark text across all live trademarks:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/search?mark_name=MyProductName&status_alive_only=true"
Substring matching here is helpful — it catches variants and typos in other filings. (This is not legal advice; a proper clearance still needs a trademark attorney, but the first-pass signal is a query away.)
A note on date formats
USPTO dates in responses are YYYYMMDD strings — that's the native format in the bulk corpus, and Folio preserves it verbatim rather than translating to ISO 8601. For query parameters, Folio accepts both YYYY-MM-DD and YYYYMMDD. If you're doing date math, parse the response date accordingly.
Data freshness
Every trademark response includes a data_freshness field with the most recent transaction_date observed in the corpus. Folio refreshes from the USPTO bulk files on a rolling schedule, so expect this to be within a week of the current date. If you need the second-by-second status of a single serial number, the source-of-truth is the USPTO's own TSDR system — but for searching, filtering, and monitoring, the bulk-file corpus Folio serves is what you want.
Next steps
- Full trademark API reference — every parameter and response field.
- Getting trademark prosecution history via API — per-serial events, a programmatic TSDR alternative.
- Retrieving patent assignment history via API — the sibling endpoint for ownership transfers.
- Get a free API key — 50 requests per day on the free tier.