# USPTO Trademark Watch & Opposition Monitor (`maliksaid/uspto-trademark-watch`) Actor

Watch the USPTO Trademark Official Gazette for marks that match your brand terms, competitor names or Nice classes. Get the 30-day opposition deadline, goods and services and owner type. Similar-mark matching, monitor mode for alerts and batch serial or registration number checks. No API key.

- **URL**: https://apify.com/maliksaid/uspto-trademark-watch.md
- **Developed by:** [Malik Said](https://apify.com/maliksaid) (community)
- **Categories:** Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 gazette entries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## USPTO Trademark Watch & Opposition Monitor

USPTO trademark watch for brand owners, trademark attorneys and paralegals. The Actor reads the weekly USPTO Trademark Official Gazette and returns marks that match your brand terms, competitor names or Nice classes. Each result has the 30-day opposition deadline, goods and services and the owner type. A second mode checks a list of serial or registration numbers and returns their gazette history. No API key and no USPTO account are needed.

### USPTO trademark watch: what it covers

| Item | Detail |
|---|---|
| Source | USPTO Trademark Official Gazette (TMOG), the public gazette service at tmog.uspto.gov |
| Issues | Every weekly issue since 19 July 2016. 536 issues on 22 October 2026 |
| New issue | Every Tuesday |
| Size of one issue | About 26,000 entries. The 20 October 2026 issue had 10,666 marks published for opposition |
| Sections | Published for opposition, registrations issued, renewed, cancelled and modified |

The gazette lists a mark when the USPTO publishes it for opposition and again when it registers, renews or cancels it. New applications reach the gazette after examination, usually some months after filing.

### USPTO trademark data you get

| Field | Meaning |
|---|---|
| `markText` | Words in the mark. Empty for design-only marks |
| `serialNumber`, `registrationNumber` | USPTO numbers. The registration number is empty before registration |
| `publicationDate`, `publicationReason` | Gazette issue and why the mark is in it |
| `oppositionDeadline`, `daysLeftToOppose` | Issue date plus 30 days, and the days left from the run date |
| `matchedTerm`, `matchType` | Which term matched and how: exact, phrase, contains, similar, related, goods-services or owner |
| `niceClasses`, `goodsServices` | International classes and the goods and services text per class |
| `markType`, `markDrawingType`, `register` | Trademark or service mark, drawing type, Principal or Supplemental register |
| `filingDate`, `filingBasis` | Filing date and basis, for example Currently ITU |
| `ownerType` | Legal entity type, for example CORPORATION or INDIVIDUAL |
| `ownerName`, `ownerCountry`, `ownerState` | Organisation owners only: name and place of incorporation |
| `ownerNameWithheld` | True when an owner is an individual or has an unclear entity type |
| `markDescription`, `disclaimer`, `translation` | Text from the gazette entry |
| `tsdrUrl` | Link to the case in USPTO TSDR |
| `designCodes` | USPTO design search codes with their text, for example `01.01.03` Star. Use them to watch logos. Empty when the mark has none |
| `colorClaimed` | The colour claim as the gazette states it |
| `standardCharacters` | True for a standard character (word) mark |
| `madridFiling` | True for a Madrid Protocol filing, section 66(a) |

#### Owner privacy

Many trademark owners are private persons. The Actor shows the owner name only when the owner is an organisation, such as a corporation, LLC or association. For individuals, sole proprietors, trusts and unclear entity types it gives the entity type only. It never returns owner addresses, attorney names, correspondent contacts or email addresses.

#### Match types

- `exact`: the mark has the same letters and digits as your term.
- `phrase`: your term appears as whole words in the mark.
- `contains`: your term sits inside a word, for example APPLE in GIGAPPLE.
- `similar`: the mark or one of its words starts with the same letter and is one or two letters away from your term. Only terms of 5 letters or more match this way: 1 letter for 5 to 8 letters, 2 letters from 9 letters.
- `related`: the USPTO search matched a word form, for example APPLE for the term APPL.
- `goods-services`: your term appears in the goods and services text only.
- `owner`: the organisation owner's name contains your owner term.

### USPTO trademark watch: how to use it

1. Keep the mode on **Watch the Official Gazette**.
2. Add your brand terms, for example your brand names.
3. Optional: add Nice classes, competitor names or more publication types.
4. Pick **Similar marks** under Matching to also catch near spellings and terms inside other words.
5. Turn on **Monitor mode** and schedule the Actor every Wednesday. Each run then returns only new entries.

For a number check, pick **Number check** and paste your serial or registration numbers, one per line.

### USPTO trademark watch input options

| Input | What it does |
|---|---|
| Mode | Watch the gazette, or check a list of numbers |
| Brand terms | Words to watch. Empty lists every entry that passes the other filters |
| Matching | USPTO search (fast), or Similar marks, which reads every entry of the newest 4 issues at most |
| Also search goods and services | Also find your terms in the goods and services text |
| Owner names | Organisations to watch, for example competitors |
| Nice classes | Keep only these international classes, 1 to 45 |
| Design codes | Keep only marks with these design codes, for example `01.01.03` or the prefix `01.01`. Watch mode only. Marks without them are skipped free. Without brand terms, every entry's details are read, about 1.3 seconds each |
| Publication types | Published for opposition (default), registered, renewed, cancelled, modified |
| Number of weekly issues | How many of the newest issues to read, 1 to 104 |
| Issue date | One issue date, for example 2026-10-20 |
| Serial or registration numbers | Number check only. 8 digits are serial numbers. Up to 7 digits are registration numbers |
| Monitor mode | Watch only. Return only entries that earlier runs with the same state key did not return |
| Maximum results | Stop after this many results. 0 means no limit. Left empty: 100, or 20 when you give no terms, owners or classes, so a first run takes about 30 seconds |

### USPTO trademark number check

The number check finds every gazette entry for each number since July 2016. It returns the latest gazette event, the opposition deadline, the registration date and the full list of events. A registration number is first matched to its serial number.

The gazette shows publication, registration, renewal and cancellation. It does not show office actions, abandonments or other file events. For those, open the `tsdrUrl` link. The live TSDR status needs the USPTO's own API key, which this Actor does not use.

A number without a gazette entry still returns a row, with `found` set to false and a short note.

### USPTO trademark watch pricing

This Actor uses pay-per-event pricing. These are the prices on 22 October 2026:

| Event | Price (USD) |
|---|---|
| Actor start, one per GB of memory (the default 256 MB counts as one) | $0.02 |
| Each gazette entry saved in watch mode | $0.006 ($6 per 1,000) |
| Each number checked in number check mode | $0.003 ($3 per 1,000) |
| Each weekly issue read in full by Similar marks matching | $0.03 |

Entries skipped by your terms, filters or monitor mode cost nothing. USPTO search matching has no issue fee. Check the Pricing tab for the current prices.

### USPTO trademark data source and use

- All data comes from the public USPTO Trademark Official Gazette. It needs no login and no key.
- USPTO records are US government works in the public domain. Credit the USPTO when you reuse them.
- The Actor asks the service to filter, so it reads only what it needs. It sends one request every 1.25 seconds, because the service blocks faster clients for some minutes.
- Each result needs one extra request for the owner details. Plan about 1.3 seconds per result: 100 results take about 2 to 3 minutes.
- If the service still blocks requests, the run waits, then stops early and keeps the results saved so far.
- The opposition deadline is the issue date plus 30 days, the period in 15 U.S.C. 1063. Extensions can move it. Check TSDR and TTAB before you act.
- This Actor is a screening aid. It is not legal advice and does not replace a full clearance search.

### USPTO trademark watch input and output example

Input (no brand terms, so every entry of the newest issue is listed):

```json
{
    "publicationTypes": ["opposition"],
    "issues": 1,
    "maxItems": 100
}
```

One watch result from that run:

```json
{
    "id": "50000071-2026-10-20-published-for-opposition",
    "recordType": "gazette-entry",
    "publicationDate": "2026-10-20",
    "publicationReason": "Published for Opposition",
    "oppositionDeadline": "2026-11-19",
    "daysLeftToOppose": 28,
    "matchedTerm": null,
    "matchType": null,
    "serialNumber": "50000071",
    "registrationNumber": null,
    "markText": "SKILL BUILDERS WORLD USA",
    "markType": "Trademark",
    "markDrawingType": "AN ILLUSTRATION DRAWING WHICH INCLUDES WORD(S)/ LETTER(S)",
    "register": "Principal",
    "filingDate": "2026-07-18",
    "filingBasis": "Currently ITU, Filed ITU",
    "niceClasses": [
        "14",
        "16",
        "28"
    ],
    "goodsServices": [
        {
            "niceClass": "14",
            "description": "Key chains; Charms for key rings or key chains"
        },
        {
            "niceClass": "16",
            "description": "Printed flash cards; Printed children's activity books; Printed children's books"
        },
        {
            "niceClass": "28",
            "description": "Toy figures; Stuffed toys; Plush toys; Toy modeling compounds"
        }
    ],
    "ownerType": "LIMITED LIABILITY COMPANY",
    "ownerName": "Skill Builders World USA LLC",
    "ownerCountry": "UNITED STATES",
    "ownerState": "Florida",
    "ownerNameWithheld": false,
    "tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=50000071&caseType=SERIAL_NO&searchType=statusSearch",
    "designCodes": [
        { "code": "01.01.03", "description": "Star - a single star with five points" },
        { "code": "01.01.08", "description": "Stars representing a human face or head of an animal" },
        { "code": "02.11.02", "description": "Eyes, human;Human eyes;Iris (eye)" },
        { "code": "05.05.25", "description": "Daffodils;Iris  (flower);Other flowers" }
    ],
    "colorClaimed": "Color is not claimed as a feature of the mark.",
    "standardCharacters": false,
    "madridFiling": false,
    "translation": null,
    "markDescription": "The mark consists of the wording SKILL BUILDERS WORLD USA on two lines. To the left of the wording is a design element consisting of an irregular outline with five rounded edges and two oval eyes inside.",
    "disclaimer": "\"SKILL BUILDERS\" as to Class 016 and \"USA\" as to all classes",
    "source": "USPTO Trademark Official Gazette",
    "scrapedAt": "2026-10-22T10:21:13.282Z"
}
```

One number check result for the input `Reg 6005882`:

```json
{
    "id": "check-Reg 6005882",
    "recordType": "number-check",
    "query": "Reg 6005882",
    "found": true,
    "serialNumber": "88488042",
    "registrationNumber": "6005882",
    "markText": "PINK APPLE BLACK PILOT",
    "markType": "Trademark",
    "markDrawingType": "STANDARD CHARACTER MARK",
    "register": "Principal",
    "filingDate": "2019-06-25",
    "filingBasis": "Currently Use, Filed Use",
    "niceClasses": [
        "25"
    ],
    "goodsServices": [
        {
            "niceClass": "25",
            "description": "Gloves; Hats; Hoodies; Jackets; Jeans; Pants; Shirts; Shoes; Shorts; Socks; Sweaters; Underwear; Tee shirts"
        }
    ],
    "ownerType": "LIMITED LIABILITY COMPANY",
    "ownerName": "Pink Apple Black Pilot LLC",
    "ownerCountry": "UNITED STATES",
    "ownerState": "FLORIDA",
    "ownerNameWithheld": false,
    "tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=88488042&caseType=SERIAL_NO&searchType=statusSearch",
    "designCodes": [],
    "colorClaimed": null,
    "standardCharacters": true,
    "madridFiling": false,
    "latestEvent": "Trademark Registration Cancelled",
    "latestEventDate": "2026-10-20",
    "publishedForOppositionDate": "2019-12-24",
    "oppositionDeadline": "2020-01-23",
    "daysLeftToOppose": null,
    "registrationIssuedDate": "2020-03-10",
    "events": [
        {
            "publicationDate": "2019-12-24",
            "publicationReason": "Published for Opposition"
        },
        {
            "publicationDate": "2020-03-10",
            "publicationReason": "Trademark Registration Issued"
        },
        {
            "publicationDate": "2026-10-20",
            "publicationReason": "Trademark Registration Cancelled"
        }
    ],
    "note": null,
    "source": "USPTO Trademark Official Gazette",
    "scrapedAt": "2026-10-22T10:06:38.996Z"
}
```

### USPTO trademark watch FAQ

#### How often should I run it?

Once a week, on Wednesday or later. The USPTO publishes the gazette every Tuesday.

#### Does it find new applications on the day they are filed?

No. The gazette lists marks when they are published for opposition, after examination. That is the moment when you can oppose. New filings appear only in the USPTO's bulk files, which need a USPTO API key.

#### Why is the owner name empty?

The owner is a private person or the entity type is unclear. The Actor gives the entity type only, to protect personal data.

#### Can I watch a competitor?

Yes. Put the company name in Owner names. Marks owned by individuals are left out.

#### Can an AI agent use it?

Yes. The input is plain JSON and every field is described in the dataset schema.

### Related Actors

- [Drug Approvals Monitor](https://apify.com/maliksaid/drug-approvals-monitor) tracks new drug approvals and label changes from the FDA, EMA and Health Canada.
- [Regulator Circulars Monitor](https://apify.com/maliksaid/regulator-circulars-monitor) tracks new circulars from bank and cybersecurity regulators.

### Support

Report a problem in the Issues tab. Include the run link.

# Actor input Schema

## `mode` (type: `string`):

Choose Watch to find gazette entries that match your brand terms, owners or classes. Choose Number check to look up serial or registration numbers.

## `brandTerms` (type: `array`):

Enter the words to watch, one per line, for example your brand names. Leave empty to list every entry that passes the other filters.

## `matching` (type: `string`):

Pick how terms match marks. USPTO search finds marks that contain the term as a word, plus word forms. Similar marks reads every entry in the newest 4 issues at most. It adds marks that contain the term inside a word or are spelled one or two letters differently. Each issue read this way has a small fee.

## `searchGoodsServices` (type: `boolean`):

Turn on to also find entries whose goods and services text contains a term. Works with USPTO search matching.

## `ownerNames` (type: `array`):

Enter company names to watch, for example a competitor. Only organisation owners are returned. Marks owned by individuals are left out.

## `niceClasses` (type: `array`):

Enter international (Nice) class numbers from 1 to 45 to keep only entries in those classes. Leave empty for all classes.

## `designCodes` (type: `array`):

Optional. Keep only marks with these USPTO design codes, for example 01.01.03 (a five-point star) or a prefix such as 01.01. It works together with your other filters. Watch mode only.

## `publicationTypes` (type: `array`):

Pick the gazette sections to read. Published for opposition opens the 30-day window to oppose a mark.

## `issues` (type: `integer`):

Set how many of the newest weekly gazette issues to read. The gazette comes out every Tuesday. Use 1 for a weekly schedule.

## `issueDate` (type: `string`):

Optional. Enter one issue date, for example 2026-10-20, to read only that issue. Overrides the number of issues.

## `numbers` (type: `array`):

Number check mode. Enter one number per line. 8 digits are read as a serial number and up to 7 digits as a registration number. Add SN or Reg in front to make it explicit.

## `monitorMode` (type: `boolean`):

Watch mode only. Return only entries that earlier monitor-mode runs with the same state key did not return. Schedule a weekly watch with this on to get alerts. Number checks always return every number.

## `stateKey` (type: `string`):

Name the memory that monitor mode uses. Use a different key for each separate watch list.

## `maxItems` (type: `integer`):

Stop after saving this many results. The default keeps test runs short and cheap. Set 0 for no limit. When left empty: 100 rows, or 20 rows when no brand terms, owner names or classes are given, so a first run is quick.

## Actor input object example

```json
{
  "mode": "watch",
  "brandTerms": [
    "coffee"
  ],
  "matching": "search",
  "searchGoodsServices": false,
  "ownerNames": [],
  "niceClasses": [],
  "designCodes": [],
  "publicationTypes": [
    "opposition"
  ],
  "issues": 1,
  "numbers": [
    "99476279",
    "Reg 6005882"
  ],
  "monitorMode": false,
  "stateKey": "default",
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `numberCheck` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "brandTerms": [
        "coffee"
    ],
    "numbers": [
        "99476279",
        "Reg 6005882"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maliksaid/uspto-trademark-watch").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "brandTerms": ["coffee"],
    "numbers": [
        "99476279",
        "Reg 6005882",
    ],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maliksaid/uspto-trademark-watch").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "brandTerms": [
    "coffee"
  ],
  "numbers": [
    "99476279",
    "Reg 6005882"
  ],
  "maxItems": 20
}' |
apify call maliksaid/uspto-trademark-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maliksaid/uspto-trademark-watch"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JiPopBQAzNl4fNt0l/builds/qqXDevA5qhbTaXXPT/openapi.json
