# USPTO Trademark Search & Monitor: Names & Slogans (`quillstone-labs/uspto-trademark-search`) Actor

USPTO trademark search, checker, scraper and API: is a brand name or t-shirt slogan already taken? Sound-alikes included. Search marks by owner or by product, look up serial numbers with renewal dates, and monitor new filings and opposition deadlines.

- **URL**: https://apify.com/quillstone-labs/uspto-trademark-search.md
- **Developed by:** [Quillstone Labs](https://apify.com/quillstone-labs) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 name or slogan checks

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 Search & Monitor

Search and scrape the US trademark register in bulk. Paste in a list of brand names or t-shirt slogans and find out which ones run into a live trademark, pull every mark a company owns, or get a list of new filings that mention your brand every week.

Results come straight from the USPTO's own trademark search, so they're as current as the official site. Applications filed yesterday are already in there. You don't need a USPTO account or API key.

### What it can do

| Mode | Use it to |
|---|---|
| Check names | See whether a brand name is already taken, including sound-alikes and misspellings like NYKE for NIKE |
| Check slogans | Find trademarks hidden inside a longer phrase, like a merch design |
| Search by owner | List every mark held by a company or person, with when each one is next due for renewal |
| Search by products or services | Find live marks whose goods and services mention what you sell, like *dog shampoo*: who already holds trademarks in your niche |
| Watch new filings | Get new applications that mention your keywords, and a heads-up when one is published and can be opposed |
| Look up | Pull full records by serial or registration number |

Every record comes back with the mark, its status, owner, dates, classes, goods and services, the filing attorney, a link to the mark image and a link to the official USPTO record. Where they apply, it also gives the opposition deadline and the next renewal date, so you don't have to work them out. Each run also gives you a ready-made Excel report.

### Example inputs

Check brand names for clothing, with short answers:

```json
{ "mode": "check", "terms": ["nyke", "night owl apparel"], "products": ["apparel"], "shortAnswers": true }
```

Check t-shirt and mug slogans:

```json
{ "mode": "slogan", "terms": ["just do it for the pizza", "keep calm and game on"], "products": ["apparel", "mugs"] }
```

List every clothing mark a company owns:

```json
{ "mode": "owner", "terms": ["nike inc"], "classes": ["25"], "maxMarksPerOwner": 50 }
```

Who already holds trademarks for dog shampoo (live marks, best matches first):

```json
{ "mode": "goods", "terms": ["dog shampoo"], "maxMatchesPerTerm": 50 }
```

Watch for new filings and publications that mention your brand (run it on a schedule):

```json
{ "mode": "watch", "terms": ["my brand"], "watchName": "my-brand", "classes": ["25"] }
```

Every result line comes with an `explanation`, one plain sentence like *HIGH risk: NIKE (registered and renewed, class 025, owned by NIKE, INC.) sounds the same as "nyke".*

### Who uses it

- **Print-on-demand and merch sellers** checking slogans before they upload, so designs don't get pulled from Amazon Merch, Etsy, Redbubble or Teespring.
- **Founders and agencies** shortlisting brand names and checking which ones are already taken.
- **Brand owners** watching for anyone filing a name close to theirs, so they can oppose it in time.
- **Lawyers, researchers and investors** pulling every mark a company owns into a spreadsheet.
- **Developers** building trademark checks into their own upload tools or apps through the API.

### Checking slogans

This is the one most people come here for. A slogan can be fine as a whole and still contain someone else's mark. Nobody owns "just do it for the pizza", but Nike owns JUST DO IT for clothing, and that's enough to get a design pulled from Amazon Merch, Etsy or Redbubble.

Slogan mode looks at every run of words inside each phrase, tells you which of them are live marks, and rates how worried you should be. Here's what it says for t-shirts:

| Phrase | Risk | Biggest problem | Everything found inside |
|---|---|---|---|
| just do it for the pizza | HIGH | JUST DO IT | JUST DO IT, JUST |
| keep calm and game on | HIGH | GAME ON | GAME ON, CALM, KEEP |
| zorblax quintessa fun | CLEAR | | |

**HIGH** is a registered, multi-word mark in the product you're selling. That's the kind that gets designs removed. **MEDIUM** is a pending application, or a registered single word in your product. **LOW** is a common word, or a mark whose goods couldn't be compared because you didn't say what you're selling.

So tell it what you sell. Pick your products (t-shirts, mugs, stickers, phone cases and so on) and the right trademark classes are filled in for you. Most single words are registered by somebody for something, and this keeps the results down to what matters for your product.

### Checking brand names

Check mode looks for the name itself, the name inside longer marks, and marks that sound the same or are spelled a little differently. Each mark gets a similarity score:

| Score | Means | Example for "nyke" or "coffee club" |
|---|---|---|
| 100 | The same name | NYKE |
| 95 | Sounds the same | NIKE, NYK |
| 90 | Same words, different order | CLUB COFFEE |
| 80–95 | Your name inside a longer mark | THE COFFEE CLUB CO |
| 70–89 | Close spelling | PYKE |

A live mark that's identical or sounds the same rates **HIGH**. A close spelling or your name inside a longer mark rates **MEDIUM**. Anything further away rates **LOW**. Turn off **Catch sound-alikes and misspellings** if you only want exact wording.

### Tested against real cases

We run names and slogans with a known answer through the Actor: real brands spelled wrong, which it should catch, and made-up names, which it shouldn't. These are the results for clothing (class 25) from the live USPTO register on 21 October 2026, exactly as the Actor returned them.

**Brand names (check mode)**

| Name | Should find | Risk | What it found |
|---|---|---|---|
| nyke | NIKE | HIGH | NIKE, NYK |
| addidas | ADIDAS | HIGH | ADIDAS |
| reebock | REEBOK | HIGH | REEBOK, REBOCO |
| starbux | STARBUCKS | HIGH | STARBUCKS |
| kwiksilver | QUIKSILVER | HIGH | QUIKSILVER |
| mikrosoft | MICROSOFT | HIGH | MICROSOFT, MACROSOFT |
| gooogle | GOOGLE | HIGH | GOOGLE |
| lulu lemon | LULULEMON | HIGH | LULULEMON |
| zorblax quintessa | nothing (made up) | CLEAR | |
| velmora thistlewick | nothing (made up) | CLEAR | |

**Slogans (slogan mode)**

| Slogan | Should find | Risk | What it found |
|---|---|---|---|
| just do it for the pizza | JUST DO IT | HIGH | JUST DO IT |
| keep calm and game on | GAME ON | HIGH | GAME ON |
| life is good at the lake | LIFE IS GOOD | HIGH | LIFE IS GOOD |
| make america great again | MAKE AMERICA GREAT AGAIN | HIGH | MAKE AMERICA GREAT AGAIN |
| zorblax quintessa fun | nothing (made up) | CLEAR | |

**What it misses.** These cases show the limits, so you know where to look yourself:

- **A sound-alike with extra words.** "nyke shoes" comes back CLEAR, because check mode compares the whole name. Check the distinctive part on its own ("nyke"), and leave out words like *shoes*, *apparel* or *co*.
- **A name split or joined differently *and* spelled differently.** "kokakola" doesn't find COCA-COLA: that's two spelling changes plus a word break. Either one alone is caught ("lulu lemon" finds LULULEMON, "starbux" finds STARBUCKS).
- **Anything that isn't a registered or pending US word mark.** Logos, unregistered brands that are in use (they still have rights), state registrations and trademarks in other countries aren't in this register.

We don't publish an accuracy percentage. A meaningful one needs a large hand-checked test set, and a made-up figure would be worse than none. When a case comes out wrong, we fix the matching and add the case to this list.

### How to use it

#### Check a batch of t-shirt slogans

1. On the **Input** tab, set **What do you want to do?** to *Check slogans for trademarks inside them*.
2. Paste your slogans into **Your list**, one per line. A few hundred at a time is fine.
3. Under **What are you selling?**, pick your products, for example *T-shirts, hoodies & hats* and *Mugs & drinkware*.
4. Click **Start**. Most lists finish in under a minute.
5. Open the **Output** tab. The **Results** table has one line per slogan with its risk and the mark causing it. Switch to **All marks found** to see every mark, riskiest first, with its picture.
6. Click **Excel report** in the Output tab to download a formatted spreadsheet, or see the next section for other formats.

Anything rated HIGH is worth changing before you upload. MEDIUM is worth a look at what the mark actually covers (click **Open** next to it in the report). LOW means nothing close turned up in the classes searched. That's a screening result, not legal clearance: for a brand you'll put real money into, have a trademark attorney run a full search.

#### Watch for anyone filing your brand name

1. Set the mode to *Watch new filings* and enter your brand name and any close variants, one per line.
2. Give it a **Watch name**, like `my-brand`. Runs with the same watch name only return filings the last run didn't see.
3. Click **Save as a new task** (top right) so these settings are kept.
4. Go to **Schedules** in the left menu, create a schedule, and add your task. Daily or weekly both work.
5. Open the task's **Integrations** tab and add an email or Slack notification (see below).

The first run looks back seven days, so you'll see whether anything similar was filed recently. After that, you only hear about what's new.

You get two kinds of alert. **New filing** is an application that has just come in. **Published for opposition** means the USPTO has approved a mark and published it, and anyone who thinks it conflicts with theirs has 30 days to oppose it. That's usually the moment to act, so each one comes with its **opposition deadline**. Publications are often announced a week or two ahead, so you hear about them before the window opens.

#### See which of a company's marks are due for renewal

Set the mode to *Search by owner* and enter the owner's name. Every registered mark comes back with **Next renewal due** and what's due: a Section 8 declaration by the sixth anniversary of registration, then a Section 8 & 9 renewal every ten years. In the Excel report, renewals that can already be filed (within a year of the due date) are highlighted.

### Getting your results into Excel, Google Sheets or Word

- **Excel report:** every run saves `trademark-report.xlsx`, linked as **Excel report** on the Output tab. It has a **Summary** sheet (one line per name or slogan, colour-coded by risk) and a **Marks** sheet with every mark found, with filters, frozen headers and clickable links to each USPTO record. It opens in Excel, Google Sheets, LibreOffice and Numbers.
- **Other formats:** the **Export** button on the Output tab downloads the raw results as CSV, JSON, XML or HTML.
- **Google Sheets automatically:** add Apify's Google Sheets integration to a saved task and every run lands in a sheet without downloading anything.
- **Word or Google Docs:** open the Excel report, select the Summary sheet and paste it in. It keeps the table and the colours.

### Getting alerts

Watch mode is most useful when the results come to you. Once the task is on a schedule, open its **Integrations** tab and connect one of these:

- **Email:** sends you the run results when it finishes.
- **Slack:** posts new filings to a channel.
- **Zapier, Make or n8n:** pass new filings on to a spreadsheet, CRM or anything else.
- **Webhook:** calls your own URL when a run finishes.

A run with no new filings returns nothing and costs nothing, so a daily schedule is cheap.

### Using it from your own code

#### One call, results back

For a few names or slogans at a time, the run-sync endpoint starts a run, waits for it and returns the rows in one request, usually within a few seconds:

```bash
curl -X POST "https://api.apify.com/v2/acts/quillstone-labs~uspto-trademark-search/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "slogan", "terms": ["just do it for the pizza"], "products": ["apparel"]}'
```

```python
import os, requests

rows = requests.post(
    "https://api.apify.com/v2/acts/quillstone-labs~uspto-trademark-search/run-sync-get-dataset-items",
    headers={"Authorization": f"Bearer {os.environ['APIFY_TOKEN']}"},
    json={"mode": "owner", "terms": ["nike inc"], "classes": ["25"]},
).json()
```

The response is a JSON array of the same rows the dataset would contain.

#### Regular runs

For big batches or scheduled watches, start a normal run with the Apify API or one of the official clients and read the dataset when it finishes:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('quillstone-labs/uspto-trademark-search').call({
    mode: 'slogan',
    terms: ['just do it for the pizza', 'keep calm and game on'],
    products: ['apparel', 'mugs'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

### Use it from an AI assistant

Claude, Cursor, VS Code and other assistants that support MCP can run this Actor for you. Add this server to your assistant's MCP settings:

```
https://mcp.apify.com?tools=quillstone-labs/uspto-trademark-search
```

The first time it connects, a browser window opens so you can sign in to Apify. Then just ask, for example *"Is the name Brightloop free to trademark for a clothing brand?"* Each name or slogan check includes a plain-English `explanation` the assistant can pass straight on, and **Short answers only** keeps the answer short, and every output field is described, so it knows what each one means. To set up several Actors at once, use Apify's [MCP configurator](https://mcp.apify.com/).

### What a result looks like

Check and slogan modes return one row per line you entered. The verdict and the marks behind it are readable at a glance, and the full records sit under `marks`:

```json
{
    "type": "result",
    "term": "just do it for the pizza",
    "risk": "HIGH",
    "verdict": "CONTAINS_LIVE_MARK",
    "mainProblem": "JUST DO IT",
    "found": "JUST DO IT, JUST",
    "totalMatches": 4,
    "classesSearched": "25",
    "marks": [
        {
            "markRisk": "HIGH",
            "markInside": "JUST DO IT",
            "wordmark": "JUST DO IT",
            "live": true,
            "registered": true,
            "status": "REGISTERED AND RENEWED",
            "serialNumber": "86444421",
            "classes": "018, 025",
            "ownerName": "Nike, Inc. (CORPORATION; OREGON, USA)",
            "goodsAndServices": ["IC 025: Clothing, namely, ..."],
            "imageUrl": "https://tsdr.uspto.gov/img/86444421/large",
            "tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=86444421&caseType=SERIAL_NO&searchType=statusSearch"
        }
    ]
}
```

Owner, watch and look-up modes return one row per trademark, with the same fields as the entries under `marks` plus `term` (what you searched for).

On the Output tab, the results come in three tables: **Results** (one line per name or slogan), **All marks found** (every mark, one per line) and **Records** (for owner, watch and look-up runs).

### How much does it cost?

You pay for results, not run time, and Apify's platform costs are included:

- Each name or slogan checked, however many marks it turns up
- Each record returned in owner or look-up mode (numbers that don't exist are free)
- Each alert in watch mode, a new filing or a publication (a run that finds nothing new costs nothing)

Exact prices are on the **Pricing** tab. They're lower on Apify's paid plans. On the free plan, Apify's monthly $5 credit covers about 500 checks. To cap what a run can cost, set **Max total charge** in the run options before you start.

### FAQ

**Can I search trademarks by what they're used for?**
Yes. Pick **Search by products or services** and enter a description like `dog shampoo` or `coffee subscription`. You get the live marks whose goods and services mention every word, best matches first, with owner, classes and status. Add classes to narrow it down.

**Can I call it with the field names another trademark Actor uses?**
Yes. `names`, `keywords` and `queries` are read as well as `terms`, so existing code usually works by changing only the Actor name.

**Does CLEAR mean I can use the name?**
No. It means no matching word mark turned up in the classes you searched. It doesn't cover logos and design marks, unregistered (common-law) rights, or names that are confusingly similar without sharing the same words. If you're building a brand around a name, run it past a trademark attorney.

**Why does slogan mode flag single words like CALM?**
Because they're registered. Whether that's a problem depends on what the mark covers, which is why it helps to say what you're selling. Single words never rate higher than MEDIUM, and results are sorted riskiest first, so something like JUST DO IT always comes before CALM.

**Which product types can I pick?**
T-shirts and other apparel, mugs, stickers, posters and prints, phone cases, bags and totes, jewelry, pillows, blankets and towels, toys and games, and candles. For anything else, enter the class number under **Extra class numbers**.

**How current is the data?**
It's the same data the USPTO search shows. New applications usually appear the day after they're filed.

**Can I check thousands of names?**
Yes. The USPTO only allows so many searches from one address, so the Actor spreads requests across Apify Proxy and keeps going. If you turn the proxy off, it'll still finish, but it pauses for five minutes after every hundred or so searches (each name or slogan takes two).

**What are classes?**
The USPTO groups goods and services into 45 numbered classes. A mark only protects the classes it's registered in. Enter them as plain numbers, like `25` or `9`.

### More from Quillstone Labs

- **[App Store & Google Play Reviews Scraper](https://apify.com/quillstone-labs/app-store-google-play-reviews-scraper)**: reviews from both app stores in one run, with the top complaint words and rating trends by week and app version.
- **[TikTok Transcript Scraper](https://apify.com/quillstone-labs/tiktok-transcript-scraper)**: TikTok video to text: transcripts, subtitles with timestamps and English translations, from video links.

### Support

Found a bug, got a result that looks wrong, or need a field that isn't there? Open an issue on the **Issues** tab. Include the input you used if you can, and I'll take a look. Issues are public, so the next person with the same question finds the answer too.

For anything else, like a custom version, a bulk data job or a question you'd rather not post publicly, email QuillStoneLabs@yahoo.com.

### Data and fair use

Everything this Actor returns comes from the USPTO's public trademark register. Records can name individual people, such as owners who filed in their own name or the attorneys on file, so treat the output as personal data where your local law does. If you're in the EU or UK, you're responsible for having a lawful reason to use it, and for not using it for unsolicited marketing.

This Actor is an independent tool. It isn't affiliated with, endorsed by or sponsored by the United States Patent and Trademark Office. "USPTO" is used only to describe where the data comes from, and every trademark mentioned belongs to its owner.

# Actor input Schema

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

<strong>Check names:</strong> is a brand name already taken? Catches sound-alikes too.<br><strong>Check slogans:</strong> does a phrase contain someone's trademark? Best for t-shirt and merch designs.<br><strong>Search by owner:</strong> every mark a company or person holds, with renewal dates.<br><strong>Search by products or services:</strong> live marks whose goods and services mention every word you give, like <code>dog shampoo</code>: who already has trademarks for that kind of product.<br><strong>Watch new filings:</strong> new applications that mention your keywords, and marks newly published for opposition. Put it on a schedule.<br><strong>Look up:</strong> full records by serial or registration number.

## `terms` (type: `array`):

One per line. Brand names, slogans, owner names, product descriptions or watch keywords, depending on what you picked above. For look-ups, use the Serial or registration numbers field further down instead. Calls written for other trademark Actors also work: <code>names</code>, <code>keywords</code> and <code>queries</code> are read too.

## `products` (type: `array`):

Pick your products and the matching trademark classes are filled in for you. This keeps results to marks that could actually affect you. Leave empty to search every class.

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

Nice class numbers to search on top of the products above, e.g. 9 for software or 41 for entertainment. Leave empty if the product list covers you.

## `liveOnly` (type: `boolean`):

Skip dead marks (abandoned, cancelled or expired). Turn off to see a name's full history.

## `soundAlike` (type: `boolean`):

For name checks: also find marks that sound the same or are spelled a little differently, like NYKE for NIKE. Each gets a similarity score from 0 to 100.

## `shortAnswers` (type: `boolean`):

Return just the verdict and the top 3 marks behind it (name, status, classes, owner, link) for each line, without full records and goods-and-services text. Quicker to read for dashboards and automated tools. The Excel report still has everything.

## `maxMatchesPerTerm` (type: `integer`):

How many marks to show under each name or slogan. The verdict always looks further than this, so a low number won't hide an exact match. In products or services searches, it is how many marks to return per description.

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

For Look up. One per line. Serial numbers have 8 digits; registration numbers have 7 or fewer.

## `maxMarksPerOwner` (type: `integer`):

For Search by owner. How many marks to return for each owner, newest first.

## `watchName` (type: `string`):

Give each brand you watch its own name, like my-brand. Runs with the same watch name remember what they've already shown you and only return new alerts.

## `lookbackDays` (type: `integer`):

How far back the very first run of a watch looks. Later runs only show what's new.

## `proxyConfiguration` (type: `object`):

USPTO limits how many searches one IP address can make. With Apify Proxy the Actor switches IP when it reaches that limit; without it, large runs pause for five minutes each time.

## Actor input object example

```json
{
  "mode": "slogan",
  "terms": [
    "just do it for the pizza",
    "keep calm and game on",
    "coffee club"
  ],
  "products": [
    "apparel"
  ],
  "liveOnly": true,
  "soundAlike": true,
  "shortAnswers": false,
  "maxMatchesPerTerm": 20,
  "maxMarksPerOwner": 100,
  "watchName": "default",
  "lookbackDays": 7,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Summary rows (one per name or slogan) and the trademark records found for them.

## `report` (type: `string`):

The same results as a formatted Excel file, with a Summary sheet and a Marks sheet.

# 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 = {
    "mode": "slogan",
    "terms": [
        "just do it for the pizza",
        "keep calm and game on",
        "coffee club"
    ],
    "products": [
        "apparel"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quillstone-labs/uspto-trademark-search").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 = {
    "mode": "slogan",
    "terms": [
        "just do it for the pizza",
        "keep calm and game on",
        "coffee club",
    ],
    "products": ["apparel"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quillstone-labs/uspto-trademark-search").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 '{
  "mode": "slogan",
  "terms": [
    "just do it for the pizza",
    "keep calm and game on",
    "coffee club"
  ],
  "products": [
    "apparel"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quillstone-labs/uspto-trademark-search --silent --output-dataset

```

## MCP server setup

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

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/PFLGVcG8HjKbz2Iib/builds/gMx6zohPsfb2MuBx2/openapi.json
