# USPTO Trademark Checker for Bulk Phrases (Safe / Risky) (`reaperoak/uspto-trademark-checker-bulk`) Actor

Check hundreds of slogans and names against live US trademarks before you print them. One verdict per phrase (blocked, risky, caution, clear), by product class, with the closest matches and owners.

- **URL**: https://apify.com/reaperoak/uspto-trademark-checker-bulk.md
- **Developed by:** [Owais Khan](https://apify.com/reaperoak) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.00 / 1,000 phrase checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Checker for Bulk Phrases (Safe / Risky)

### What is the USPTO Trademark Checker?

It is an Apify Actor that checks slogans, names and keywords against live US trademarks and returns one verdict per phrase. Check hundreds of slogans, names and keywords against live US trademarks **before** you print them. You get one clear verdict per phrase, so you don't have to read raw search results.

Built for print-on-demand sellers on Amazon Merch, Etsy, Redbubble, Printful, TeePublic and Shopify, and for anyone naming a product.

### The verdicts

| Verdict | Meaning |
|---|---|
| **BLOCKED** | A live trademark has exactly this wording in a class you sell in. Don't print it. |
| **RISKY** | A live mark contains your phrase, or sits inside it (two or more words), in your classes. Read the listed matches. |
| **CAUTION** | An identical live mark exists, but only in classes you didn't select. |
| **CLEAR** | No live mark with this wording in your classes. |

Every row lists the closest live marks: wording, how it relates to your phrase, status, registered or pending, owner, serial and registration numbers, classes, filing date, goods, and a link to the USPTO record.

### What makes it useful

- **Sub-phrase detection.** "Dog Mom Est 2020" is checked against marks like "DOG MOM" and "EST 2020", not just the full string. Most checkers only look for the exact text.
- **Your classes only.** Trademarks only conflict inside the classes they were filed for. Pick apparel, mugs, bags, phone cases and so on, and an identical mark in an unrelated class is shown as CAUTION instead of BLOCKED.
- **Forgiving about punctuation.** "dont stop believing" finds the mark "DON'T STOP BELIEVING". The USPTO index misses it without the apostrophe, so this Actor searches both spellings.
- **Live and pending marks, not dead ones.** Abandoned and cancelled marks are ignored, so you aren't warned off phrases that are free.
- **One charge per distinct phrase.** Capitalisation, punctuation and duplicates are collapsed before anything is billed.

### How to check phrases for trademarks before you print them

1. Paste your slogans or keywords into **Phrases to check**, one per line.
2. Pick the product classes you sell in: 25 for clothing, 21 for mugs, 9 for phone cases, and so on.
3. Click **Start**.
4. Sort the results by verdict. Print the CLEAR ones, read the matches for the RISKY ones, and drop the BLOCKED ones.
5. Download JSON, CSV or Excel, or call the Actor through the API from your listing tools.

### Input

```json
{
    "phrases": ["just do it", "dog mom", "coffee before talkie"],
    "classes": ["25", "21"],
    "includeOwners": true
}
```

- **phrases**: up to 10,000 per run, 120 characters each.
- **classes**: the product classes you sell in. 25 is clothing. Leave empty to check every class.
- **maxMatchesPerPhrase**: how many closest marks to list.
- **includeOwners**: owner names are public USPTO records. Turn off if you only want the verdict.

### Output

One dataset row per phrase with `verdict`, `reason`, `exactMatchesInClasses`, `relatedMatchesInClasses`, `exactMatchesOtherClasses`, `liveMarksFound` and `matches`. A `SUMMARY` record gives the verdict counts for the run.

### How much does a trademark check cost?

You pay per distinct phrase checked, plus a tiny start fee. There is no subscription, and duplicates are only charged once.

| Phrases | Approximate cost |
|---|---|
| 10 | $0.20 |
| 100 | $2 |
| 1,000 | $20 |

Paid Apify plans get tiered discounts, and you can set a maximum cost per run. You can try it on Apify's free plan without a card.

### Who is it for?

Print-on-demand sellers on Amazon Merch, Etsy, Redbubble, Printful, TeePublic and Shopify; designers who sell slogans; founders and agencies naming products.

### Frequently asked questions

**Is a CLEAR result safe to print?** Not guaranteed. It means no live US federal mark with this wording was found in your classes. See the notes below.

**Why does "dog mom" come back RISKY?** Because live marks such as "CERTIFIED DOG MOM" in clothing contain it. The match list shows which ones, who owns them, and whether they are registered or pending.

**Which classes should I pick?** Class 25 covers shirts, hoodies and hats. Use 21 for mugs, 18 for bags, 9 for phone cases, 16 for stickers and posters. Leave it empty to check every class.

**Does it work offline of USPTO?** No. It queries the public USPTO trademark search, so results are as current as USPTO's records, which are loaded daily.

### Read this

- **This is a screening aid, not legal advice.** A CLEAR verdict does not guarantee you are safe.
- It covers live **US federal** records only. It does not cover state marks, other countries, unregistered "common-law" use, or look-alike wording such as misspellings and sound-alikes.
- Famous names and slogans can be protected even where no identical mark is registered in your class (dilution). Be careful with well-known brands.
- If a phrase matters to your business, have a trademark attorney or the USPTO's own search confirm it.
- Data comes from the public USPTO trademark search. If USPTO changes its response format the run **fails with an error** instead of returning empty results, and the Actor is health-checked every night.

# Actor input Schema

## `phrases` (type: `array`):

One slogan, name or keyword per line, up to 120 characters each. Capitalisation and punctuation do not matter. Duplicates are checked and charged once.

## `classes` (type: `array`):

Trademarks only conflict inside the classes they were filed for. Pick the products you sell. Leave empty to check every class.

## `maxPhrases` (type: `integer`):

Safety cap. Phrases beyond this are skipped.

## `maxMatchesPerPhrase` (type: `integer`):

How many of the closest live marks to include in each result.

## `includeOwners` (type: `boolean`):

Owner names come from public USPTO records and show who holds a mark. Turn off if you only need the verdict.

## Actor input object example

```json
{
  "phrases": [
    "just do it",
    "dog mom",
    "zqxjvk blorptastic"
  ],
  "classes": [
    "25"
  ],
  "maxPhrases": 1000,
  "maxMatchesPerPhrase": 10,
  "includeOwners": true
}
```

# Actor output Schema

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

One row per phrase: verdict (BLOCKED, RISKY, CAUTION, CLEAR), reason, counts, and the closest live marks.

## `summary` (type: `string`):

How many phrases got each verdict, the classes checked, and the screening disclaimer.

# 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 = {
    "phrases": [
        "just do it",
        "dog mom",
        "zqxjvk blorptastic"
    ],
    "classes": [
        "25"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("reaperoak/uspto-trademark-checker-bulk").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 = {
    "phrases": [
        "just do it",
        "dog mom",
        "zqxjvk blorptastic",
    ],
    "classes": ["25"],
}

# Run the Actor and wait for it to finish
run = client.actor("reaperoak/uspto-trademark-checker-bulk").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 '{
  "phrases": [
    "just do it",
    "dog mom",
    "zqxjvk blorptastic"
  ],
  "classes": [
    "25"
  ]
}' |
apify call reaperoak/uspto-trademark-checker-bulk --silent --output-dataset

```

## MCP server setup

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

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/NlPfJI1IQfwwvLzof/builds/9G0rC7Er7LREeiZMz/openapi.json
