USPTO Trademark Search API, Scraper & New Filing Monitor avatar

USPTO Trademark Search API, Scraper & New Filing Monitor

Pricing

from $5.00 / 1,000 trademark returneds

Go to Apify Store
USPTO Trademark Search API, Scraper & New Filing Monitor

USPTO Trademark Search API, Scraper & New Filing Monitor

For brand clearance, trademark watch and competitor filings: USPTO trademarks as an API, one row per mark with serial number, mark, status, owner, classes, goods and services, dates. Search by mark text, owner, live/dead and class. Trademark monitoring returns only new filings and status changes.

Pricing

from $5.00 / 1,000 trademark returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Search US trademarks at the United States Patent and Trademark Office (USPTO) by mark text, owner name, live/dead status and international class, and get one clean row per trademark. Turn on monitoring mode and run the same search on a schedule: you get only new filings and trademarks whose status changed since the last run.

No API key, no login, no proxy. The Actor reads the same public search that the USPTO trademark search page uses.

What you can do with it

  • Clearance check: is a brand name already filed or registered in the US, by whom, in which classes, and is it still live?
  • Brand watch: schedule a search for your brand name and be told when somebody files a similar mark.
  • Competitor watch: schedule a search by owner name and see every new application a company files and every status change (published, registered, abandoned, cancelled).
  • Portfolio export: all trademarks of one owner with status, classes, dates and goods and services.

Input

FieldWhat it does
markTextWords of the trademark. Uses the word-mark field of the USPTO search: marks that match every word are returned, an exact phrase ranks first.
ownerNameOwner or applicant name. Marks with an owner whose name contains these words as a phrase (same order) are returned.
statusall (default), live or dead, as the USPTO marks the record.
internationalClassesOne or more international (Nice) classes, 001 to 045. A mark matches when it is filed in at least one of them.
filedAfterOnly marks filed on or after this date (YYYY-MM-DD).
sortByrelevance (default) or newest (filing date, newest first).
maxResultsRows to return with monitoring off. Default 100, up to 1,000 per run.
monitoringModeReturn only new filings and status changes since the last run of the same search.
resetMonitoringStateForget everything remembered and start over.

Give at least one of markText, ownerName or internationalClasses.

Example: every live mark that contains "never empty":

{ "markText": "never empty", "status": "live", "maxResults": 100 }

Example: watch new filings of one company:

{ "ownerName": "Fluid Research Corporation", "monitoringMode": true }

Output

One row per trademark:

{
"serialNumber": "86641208",
"registrationNumber": null,
"markText": "NEVEREMPTY",
"markPseudoText": ["NEVER EMPTY"],
"isLive": false,
"isRegistered": false,
"statusCode": 602,
"statusDescription": "ABANDONED-FAILURE TO RESPOND OR LATE RESPONSE",
"markTypes": ["TRADEMARK"],
"drawingDescription": "(4) STANDARD CHARACTER MARK",
"filedDate": "2015-05-26",
"registrationDate": null,
"abandonDate": "2016-10-14",
"firstUseDate": "2010-01-01",
"internationalClasses": ["007"],
"goodsAndServices": ["(ABANDONED) IC 007: Automated liquid dispending machines; ..."],
"ownerNames": ["Fluid Research Corporation (CORPORATION; WISCONSIN, USA)"],
"ownerEntity": "CORPORATION",
"ownerCity": "Germantown",
"ownerStateCountry": "WISCONSIN 53022, UNITED STATES",
"attorney": "Daniel E. Kattman",
"filingBasis": ["1a"],
"registerTypes": ["PRINCIPAL"],
"recordLoadedAt": "2025-11-07T22:57:15",
"tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=86641208&caseType=SERIAL_NO&searchType=statusSearch",
"searchedFor": { "markText": "neverempty", "ownerName": null, "status": "all", "internationalClasses": [], "filedAfter": null },
"scrapedAt": "2026-10-05T09:00:00.000Z"
}

Other columns: publishedForOppositionDate, cancelDate, renewalDate, firstUseInCommerceDate, priorityDate, usClasses, ownerCitizenship, ownerType, drawingCode, isStandardCharacterMark, disclaimer, markDescription, translation, designCodes. In monitoring mode every row also has change (new or status-changed), previousStatusCode and previousCheckedAt.

Values are passed on as the USPTO gives them. Status codes and descriptions are the USPTO's own; nothing is translated or guessed. A value the USPTO does not give is null or an empty list. Design marks without words have markText: null. The USPTO word-mark field also matches pseudo marks and some translated or transliterated marks (a search for "apple" returned the mark YABLONI), so a few rows may not show your word in markText. The street address of the owner is not returned.

Monitoring mode

  1. First run of a search: the trademarks that match now and their status codes are remembered. No trademark row is returned and nothing is charged.
  2. Later runs of the same search return only:
    • change: "new": a trademark that was not in the search before. Usually a new filing. With a status filter it can also be an existing mark whose status moved into the filter.
    • change: "status-changed": a trademark whose USPTO status code is different from the remembered one; previousStatusCode holds the old code.
  3. A run that finds nothing new returns no trademark row, says so in a free note row (no-change-since-last-run) and is charged one small monitoring check.

Good to know:

  • Trademarks are remembered per search (mark text, owner name, status, classes, filed-after). Changing any of them starts a new search with its own first run.
  • One search watches up to 2,000 trademarks, newest filing dates first. If more match, a note row says so; status changes of older marks are then not seen. Narrow the search to watch all of it.
  • maxResults is not applied in monitoring mode: every new or changed trademark is returned. If the maximum charge of the run is too small for all of them, the rest are not remembered and come in the next run.
  • The USPTO search index looked refreshed about once a day when this Actor was built (October 2026), so running more often than daily rarely finds anything new.
  • Do not run two schedules with the same search at the same moment; one could overwrite what the other remembered.

Rows that are not charged

When there is no trademark row to give, the dataset holds a note row with status and message instead, so an empty result is never silent: no-results (the USPTO answered that 0 trademarks match), no-change-since-last-run, monitoring-baseline, monitoring-covers-newest-only, limit-reached, budget-reached, partial-read, unreadable, blocked, search-rejected, bad-input, not-read. Note rows have serialNumber: null.

Price

  • Trademark returned: charged per trademark row.
  • Monitoring check: charged once for a monitoring run that compared the search and had nothing new to return.
  • No start fee. Note rows, the first monitoring run, and searches that could not be read are free.

Limits

  • Up to 1,000 rows per run with monitoring off, 2,000 watched trademarks per search in monitoring mode. This Actor is for searches and watches, not for copying the register; for the whole register use the USPTO's bulk data products.
  • Requests go to the USPTO one at a time with more than a second between them, at most 100 trademarks per request.
  • The data is the USPTO search index. The official record of a trademark is its USPTO status page (tsdrUrl). This is not legal advice and not a full clearance search: similar-sounding marks, design marks and common-law marks need their own search.
  • If the USPTO refuses or changes the search, the run says so in a note row and charges nothing for it.

Data source: United States Patent and Trademark Office (USPTO), www.uspto.gov. This Actor is not affiliated with or endorsed by the USPTO.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.