US Trademark Search (USPTO) — Marks, Status & Classes avatar

US Trademark Search (USPTO) — Marks, Status & Classes

Pricing

from $0.80 / 1,000 trademark records

Go to Apify Store
US Trademark Search (USPTO) — Marks, Status & Classes

US Trademark Search (USPTO) — Marks, Status & Classes

Search the US trademark register (USPTO) by word or by owner company: mark, status, status date, filing and registration dates, Nice classes, goods and services and the company that owns it. Run it again or on a schedule to see new filings and status changes since the last run. No login.

Pricing

from $0.80 / 1,000 trademark records

Rating

0.0

(0)

Developer

Northbell

Northbell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Give it a word or phrase, or an owner company, and get one clean row per USPTO trademark record: mark, status, filing and registration dates, Nice classes, goods and services and the company that owns it, with a link to the official TSDR page. $1.00 per 1,000 records, no login, no API key.

Run it again — or put it on a daily or weekly schedule — and every row also tells you what changed since the last run: isNew for a mark that was not in your results before (a new filing), and statusChanged with previousStatus for a mark whose status moved, for example from New application - record initialized not assigned to examiner to Registered. The USPTO only shows today's status; this keeps the previous one for you.

What you get

FieldWhat it is
serialNumber, registrationNumber, urlthe USPTO application (serial) number, the registration number (only once registered) and the link to its TSDR status page
mark, markType, markFormatthe wording of the mark (null for a design-only mark), its type (trademark, service mark, trademark, service mark, certification mark…) and how it was filed (Standard character mark, Typed drawing, Design only…)
status, statusCode, live, stagethe USPTO's status text, its status code, true while the mark is pending or in force, and stage: pending, registered or dead (abandoned, cancelled, expired)
statusDatethe day the current status was set. Only filled when you switch on Add the status date. That lookup is slow — about 17 records per minute — and stops after 40 minutes, so on a large pull not every record gets one (see Notes)
filingDate, registrationDate, publicationDatefiled, registered and published for opposition. All ISO dates (YYYY-MM-DD); null when it has not happened
classes, goodsServicesSnippetthe Nice classes as numbers ([9, 42]) and the first 300 characters of the goods and services statement
ownerName, ownerType, ownerEntityType, ownerJurisdiction, ownerCountthe current owner when it is a company: its name, company / non-profit / government, its legal form (corporation, limited liability company…), the state or country it is organised in, and how many owners the record lists. People are never named: see Notes
isNew, statusChanged, previousStatus, previousStatusDate, previousObservedAt, firstSeenAtthe change since your previous run of the same search. null on the first run
query, queryType, observedAtwhich word (word) or owner company (owner) found the record, and when it was read

Run it again and again

  • On a schedule — save your input as a task and add a Schedule: the same words and owners every week. Send each run to Google Sheets, Slack or email with an integration on the task.
  • Watch for changes — Keep the same input on the schedule. Each run is its own dataset with the date it ran, so the series builds up run by run and you can compare one day with the last.
  • In bulk — Put every word in Words or phrases to search and every company in Owner companies in one run.

Use it for

  • Name clearance — before you launch a brand or product name, search it in your Nice class and see which live marks already contain it and who owns them. This is a text search; it is not legal advice or an official clearance search
  • Brand and competitor watch — schedule it weekly with your own marks and your competitors' names: isNew is a new filing, statusChanged is a mark that was registered, abandoned or cancelled (a watch sees the records it returns: keep the word specific so that it finds fewer than maxResults, see Notes)
  • A company's portfolio — put the company in Owner companies and get the marks it owns today, with classes and status, for due diligence or a competitor review
  • Lead lists — newly filed marks by companies in a class (filter isNew and stage: pending) show who is starting a new product line

Input

{ "queries": ["apify"], "owners": ["Apify Technologies"], "status": "live", "classes": [42], "maxResults": 100 }
  • queries — words or phrases, one per line. owners — company names. Fill in either or both (to search owners only, leave queries empty). Up to 200 entries per run
  • status — any, live or dead. classes — Nice class numbers, empty for all. A mark filed in several classes is kept when any one of them is in your list, and is returned with all of its classes
  • matchType — contains (default: the mark text contains your words next to each other, in that order), exact or startsWith. Case is ignored
  • maxResults — per word and per owner, 1 to 1,000. A record that two entries both find is returned once
  • lookupStatusDate — adds statusDate. Slow: see Notes

What changed is remembered per search (the words and options together) in a named key-value store in your Apify account, so the second run of the same input already shows changes. Schedule it (Apify → Schedules) for a daily or weekly watch.

Pricing

$1.00 per 1,000 records, plus $0.01 per run. Error rows (a search that could not be read) are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

Notes

  • The source is the USPTO's own trademark search and case-status service (the data behind tmsearch.uspto.gov and TSDR), read the way the website reads it. This Actor is not affiliated with the USPTO. The data is what the register shows at observedAt; it is not legal advice and not an official certificate.
  • Companies only; people are not named. ownerName is filled only when the current owner is a company or organisation: the applicant's entity label is not a person, and the name carries a company form (Inc., LLC, Ltd, GmbH, S.A. …) or an institution word (university, foundation, state agency …). For a record owned by a person, a sole proprietor or joint owners, ownerName is null and ownerType is individual. The entity label is typed in by the applicant and some people are filed as a company, so these are also left out, with ownerName null and ownerType withheld: a name with no company form, a partnership of named people, a trust or trustee, a professional practice (…, P.C., …, D.D.S.) and a person's "d/b/a" name. A company that carries its founder's name in a legal form (Firstname Lastname, Inc.) is still a company and is shown. Addresses, attorneys and correspondents are never put in the output. The current owner is the one the USPTO flags as last listed, so a mark that was sold shows the buyer. A mark whose wording is a person's name is still returned, because that is the mark.
  • Owner search returns a record only when a company that owns it today carries every word you typed. An owner whose name is withheld (see above) is not found. A person's name finds only companies that have those words in their name, never the person's own marks.
  • It compares text, not sound or look. Case is ignored, but BLUEBIRD and BLUE BIRD are different texts, so search both spellings. contains needs your words next to each other and in order (NIKE AIR is found by nike air, not by air nike).
  • Status date is slow, so it is off by default. The USPTO limits how fast one IP address may ask: when I sent 139 requests in 98 seconds on 9 Oct 2026, its firewall answered HTTP 429 and then 403 for about four minutes. So the Actor sends one request every 3.5 seconds. A search returns up to 1,000 records in a single request, but statusDate needs one more request per record: about 17 records per minute (20 records plus the search took 72 seconds on 9 Oct 2026). The Actor stops asking for dates after 40 minutes (about 680 records) and after five failed lookups in a row; the records after that come out with statusDate null and the run log says how many. If the firewall blocks the address anyway, the Actor waits three minutes and tries again (up to four times), then reports the search as an error row.
  • Fields filled only in some cases. registrationNumber and registrationDate exist only for registered marks, publicationDate only once a mark was published for opposition, and mark is null for design-only marks. ownerEntityType and ownerJurisdiction are filled only together with ownerName (and ownerEntityType is null when the applicant typed a whole sentence of more than 100 characters); a few records list no owner at all (ownerType is null). classes is [] and goodsServicesSnippet null when the record lists none. statusDate is filled only with Add the status date, and a row for which the service had no date keeps null. previousStatus and previousObservedAt are filled only for a record you saw before, previousStatusDate only when that earlier run also had Add the status date on; statusChanged is null for a record that is new.
  • What "new" and "changed" mean. isNew is a record that was not among the results of the same search on your previous run. statusChanged is a new status code, or, when both runs read the status date, a new status date on the same status. Both only see the records that are returned. When a search finds more records than maxResults, the best text matches come first, then the newest filings, so a word that matches thousands of marks is watched through its top maxResults only. Use a specific word, or raise maxResults above the number of matches (the run log and the totalMatches count in the run's OUTPUT say how many there are). Raising maxResults later shows the extra records as new once, and at the edge of a big window an older mark can move in for the first time and show as new too: compare filingDate to tell a new filing from an old mark. A record that drops out of the window keeps its remembered status (up to 3,000 records are remembered per search), so it is not flagged new when it comes back.
  • Status wording is the USPTO's text, first letter capital (Registered and renewed). statusCode is the USPTO's number for it. goodsServicesSnippet has email addresses and phone numbers removed.
  • One row per record per run. If two entries of your input find the same record, it appears once, under the first.

More company data from northbell: UK Companies House Search, Company Lookup by Domain.

For AI agents

{"queries": ["apify"], "maxResults": 5} returns up to 5 rows with mark, status, dates, classes and owner. {"queries": [], "owners": ["Nike, Inc."], "status": "live"} returns the live marks that company owns. Rows have type: trademark or error. To monitor, run the same input on a schedule and read isNew and statusChanged.

**Something broke or looks wrong?** Open an issue on this Actor's Issues tab and I'll look at it. **Found it useful?** A short review on the Store page helps other people find it.