# USPTO Trademark Scraper - Status, Owners & New Filings (`topapi/uspto-trademark-scraper`) Actor

Scrape US trademarks from the USPTO register by brand name, owner, goods, class or serial number: status, filing and registration dates, Nice classes, goods & services, owner and address, attorney. Add TSDR e-mails and history. Monitor new filings. No API key.

- **URL**: https://apify.com/topapi/uspto-trademark-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 trademark records

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

### What does USPTO Trademark Scraper do?

**USPTO Trademark Scraper** extracts US trademark applications and registrations from the USPTO trademark register (the index behind tmsearch.uspto.gov, 13.3 million filings) and turns a brand name, owner, goods description, class or serial number into structured rows: one trademark with its status, dates, classes, goods & services, owner and attorney. Built for brand-clearance and print-on-demand checks, IP law firms and brand-protection teams.

USPTO trademark search API · TESS alternative · TSDR status lookup · trademark monitoring

<a href="https://console.apify.com/actors/h459cz0dcRu6UkqEG"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/uspto-trademark-scraper-source.png" alt="USPTO trademark search results page that USPTO Trademark Scraper turns into rows" style="width:70%"></a>

- **Search the way USPTO does:** wordmark (contains or exact), sounds-like (phonetic), owner name, goods & services text or any text, filtered by live / pending / registered / dead status, Nice class and filing date
- **Bulk in one run:** 25 phrases in 4 seconds, 14,397 records of one search in 4 minutes (measured on the platform)
- **Exact lookups:** serial numbers, registration numbers or TSDR links, 100 per request
- **Owner and attorney on every row:** owner name, entity type, address, attorney of record; add the TSDR record for attorney and correspondent e-mail, prosecution history, assignments and the renewal window
- **Monitor mode:** a scheduled run returns only new filings and marks whose USPTO status changed
- **No login, cookies or USPTO API key**
- **Export anywhere:** JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets, API and MCP

### What data can you get from USPTO trademarks?

<table>
<tr><td>🔢 Serial number <code>serialNumber</code></td><td>📜 Registration number</td><td>™️ Wordmark</td></tr>
<tr><td>🔊 Pseudo mark (phonetic spelling)</td><td>🚦 Status: LIVE / DEAD + <code>statusCategory</code></td><td>📝 USPTO status code and description</td></tr>
<tr><td>📅 Filing date</td><td>📅 Registration date</td><td>📅 Published for opposition, abandoned, cancelled</td></tr>
<tr><td>🏷️ Nice classes <code>internationalClasses</code></td><td>🇺🇸 US classes</td><td>📦 Goods & services text</td></tr>
<tr><td>🏢 Owner name + entity type</td><td>📍 Owner address, city, state</td><td>🌐 Owner citizenship / organized in</td></tr>
<tr><td>⚖️ Attorney of record</td><td>📧 Attorney + correspondent e-mail (TSDR)</td><td>🗂️ Docket number (TSDR)</td></tr>
<tr><td>🖼️ Mark image URL</td><td>🎨 Design codes + descriptions</td><td>✍️ Disclaimer, description, transliteration</td></tr>
<tr><td>📚 Prosecution history (TSDR)</td><td>🔁 Assignments + TTAB cases (TSDR)</td><td>⏰ Renewal window + grace deadline (TSDR)</td></tr>
<tr><td>🔗 TSDR and Trademark Search links</td><td>🎯 Similarity score to your phrase</td><td>🆕 Change type in monitor mode</td></tr>
</table>

### How to scrape USPTO trademarks with USPTO Trademark Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) (it comes with monthly free credit).
2. Open [USPTO Trademark Scraper](https://console.apify.com/actors/h459cz0dcRu6UkqEG) and go to the Input tab.
3. Type brand names or phrases into **Brand names or phrases**, or paste serial numbers into **Serial or registration numbers**.
4. Pick a **Status**, add **Nice classes** or a filing-date window if you need them.
5. Click **Start** and watch the trademarks arrive in the Output tab.
6. Export the USPTO trademark data as JSON, CSV or Excel, or read it through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `searchTerms` | array | Words or phrases, one search each, e.g. `"star wars"`. USPTO field tags work too: `"WM:coffee AND IC:030"`. Prefill `["star wars"]`. |
| `searchField` | select | `wordmark` (contains the phrase, default), `wordmarkExact`, `soundsLike` (phonetic), `owner`, `goodsAndServices`, `anyText`. |
| `serialNumbers` | array | 8-digit serials, registration numbers (`2239077`, `RN 2239077`) or TSDR / Trademark Search URLs. Filters do not apply. |
| **🎯 Filters** (sent to USPTO) | | |
| `statusFilter` | select | `all` (empty), `live`, `pending`, `registered`, `dead`. Prefill `live`. |
| `niceClasses` | array | Nice classes 1-45, A, B or 200, e.g. `"25"`. Any listed class matches. |
| `filedAfter` / `filedBefore` | date | Filing-date window, absolute (`2026-09-01`) or relative (`30 days`). |
| `sortBy` | select | `relevance` (default), `newest`, `oldest` filing first. |
| **✂️ Refine results** | | |
| `excludeKeywords` | array | Drop marks whose wordmark contains any of these words. |
| `withAttorneyOnly` | boolean | Keep only filings that name an attorney. Default `false`. |
| **➕ Extra data** | | |
| `includeDetails` | boolean | Add the TSDR case record (e-mails, history, assignments, renewal window). Default `false`. |
| **🔁 Monitoring** | | |
| `monitorMode` | boolean | Only marks not delivered before, plus marks whose status changed. Default `false`. |
| `monitorStoreName` | string | Named store that remembers each watch. Default `uspto-trademark-monitor`. |
| **📦 Output** | | |
| `maxResultsPerSearch` | integer | Most trademarks per search term. Default 100, prefill 10, `0` = every match. |
| `maxResults` | integer | Most trademarks for the run. Default 1,000, prefill 50, `0` = no limit. |
| `compact` | boolean | Core fields only, for AI agents and spreadsheets. Default `false`. |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | object | Default Apify proxy (the run starts direct and moves to a fresh proxy IP when USPTO refuses one). |
| `maxConcurrency` | integer | Requests in flight, 1-10. Default 4. |

#### Input JSON

```json
{
  "searchTerms": ["star wars", "just do it", "mama bear"],
  "searchField": "wordmark",
  "statusFilter": "live",
  "niceClasses": ["25"],
  "maxResultsPerSearch": 20
}
```

#### Check a list of phrases before you print them

Paste up to 1,000 phrases into `searchTerms`, set `statusFilter` to `live` and `niceClasses` to the classes you sell in (25 for apparel). Every phrase is its own search; `matchCountForQuery` on each row says how many marks USPTO found for it, and a phrase with no live mark simply returns no rows (nothing is charged for it). `similarityScore` (0-100) tells an exact `STAR WARS` (100) from `STAR WARS RESISTANCE`. Set `maxResultsPerSearch` to `1` for one best match per phrase, or raise it to see every conflicting mark.

#### Use "contains", "exact" or "sounds like" on purpose

`wordmark` returns marks that contain your phrase (`"mama bear"` finds `MAMA BEAR BY DEARFOAMS`), plus the foreign equivalents USPTO indexes with them (`"tea"` also finds `OCHA` and `TÉ DELUXE`; a low `similarityScore` marks them). USPTO's index ignores words like "not" and "be", so for a phrase containing one the actor keeps only marks that really contain it (`"not today"` returned 9 marks, not the 185 `TODAY` marks). `wordmarkExact` returns only the exact wordmark. `soundsLike` uses USPTO's phonetic copy of each mark: `"lululemon"` also returns `LULULUMIN` and `LALALOOM`.

#### Watch new filings with a date window and monitor mode

For a weekly watch, set `filedAfter` to `"14 days"`, turn on `monitorMode` and give the watch its own `monitorStoreName`. The first run delivers every match; later runs read only records USPTO reloaded since the previous run and deliver new marks plus status changes (`changeType`: `new` or `statusChanged`, with `previousStatusCode`).

### ⬆️ Output

<a href="https://console.apify.com/actors/h459cz0dcRu6UkqEG"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/uspto-trademark-scraper-output.png" alt="USPTO Trademark Scraper output: USPTO trademarks with status, dates, classes, owner and attorney" style="width:70%"></a>

One row per USPTO trademark (a real row from the 25-phrase class-25 run, shortened):

```json
{
  "searchTerm": "just do it",
  "serialNumber": "86444421",
  "registrationNumber": "4764071",
  "wordmark": "JUST DO IT",
  "statusCategory": "REGISTERED",
  "statusDescription": "REGISTERED AND RENEWED",
  "filingDate": "2014-11-04",
  "registrationDate": "2015-06-30",
  "internationalClasses": ["018", "025"],
  "goodsAndServices": ["IC 018: All purpose sport bags; Backpacks.", "IC 025: Footwear; Headbands; ..."],
  "ownerName": "Nike, Inc.",
  "ownerEntity": "CORPORATION",
  "ownerAddress": "One Bowerman Drive, Beaverton, OREGON 970056453, UNITED STATES",
  "attorney": "Jennifer Martin Reynolds",
  "markImageUrl": "https://tmcms-docs.uspto.gov/cases/86444421/mark/large.png",
  "tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=86444421&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=statusSearch",
  "similarityScore": 100,
  "matchCountForQuery": 4
}
```

With `includeDetails` on, the same row also carries the TSDR record (a real row from the details run):

```json
{
  "serialNumber": "50081566",
  "wordmark": "COFFEE RUSH",
  "attorneyEmail": "docketing@khpatent.com",
  "correspondentEmail": "docketing@khpatent.com",
  "correspondentAddress": "Owen W. Dukelow, Kolisch Hartwell, P.C., 900 SW 5th Ave., Ste. 2300, Portland, Oregon 97204, United States",
  "docketNumber": "YST401",
  "tm5Status": "LIVE/APPLICATION/Awaiting Examination",
  "prosecutionHistory": [{ "date": "2026-09-04", "description": "NEW APPLICATION ENTERED" }],
  "detailsStatus": "ok"
}
```

#### USPTO trademark fields

Fill measured on a live run of 14,397 records ("coffee" in class 30, every status) and, for TSDR fields, a 150-record details run of new coffee filings.

| Field | Meaning | Filled |
|---|---|---:|
| `serialNumber`, `wordmark`, `status`, `statusCategory`, `statusDescription` | Identity and current USPTO status | 100% (wordmark 99.9%: design-only marks have none) |
| `filingDate` / `registrationDate` | Filed / registered | 99.7% / 50.9% (registered marks) |
| `internationalClasses`, `usClasses`, `goodsAndServices` | Classes and goods & services as filed | 100% |
| `ownerName`, `ownerEntity`, `ownerAddress`, `ownerCitizenship` | Owner of record | 100% |
| `attorney` | Attorney of record | 64.3% |
| `markImageUrl` | Mark drawing (none for pre-2003 typed drawings) | 93.1% |
| `disclaimer`, `designCodes`, `markDescription` | Mark details | 73.8% / 38.3% / 35.8% |
| `firstUseAnyDate`, `firstUseCommerceDate` | First use dates | 64.8% |
| `correspondentEmail`, `correspondentAddress` (TSDR) | Who receives USPTO mail | 100% |
| `attorneyEmail` (TSDR) | Attorney's e-mail | 48.7% (= rows with an attorney) |
| `prosecutionHistory` (TSDR) | Every docket event, with document links | 100% |
| `maintenanceWindowOpens`, `maintenanceDueBy`, `maintenanceGraceDeadline` (TSDR) | Next Section 8/9 filing window | registered marks only |

### How can I use USPTO trademark data?

- 👕 **Print-on-demand and Merch sellers:** check slogans against live marks in class 25 before listing.
- ⚖️ **IP law firms:** pull new filings with the attorney and correspondent e-mail to offer prosecution, opposition or renewal work.
- 🛡️ **Brand-protection teams:** watch for new applications that contain or sound like your brand.
- 🏢 **Competitive intelligence:** map a competitor's portfolio by owner name, classes and filing dates.
- 🔁 **Renewal and docketing services:** find registrations whose Section 8/9 window opens soon.
- 🤖 **Legal-tech and AI agents:** feed structured USPTO records into clearance tools and LLM pipelines.

### How much does it cost to scrape USPTO trademarks?

USPTO Trademark Scraper is pay-per-result: **$2.80 per 1,000 USPTO trademarks**, no start fee. The TSDR details add-on costs **$1.90 per 1,000 trademarks** that receive them. You only pay for trademarks written to your dataset.

| Trademarks | Records only | With TSDR details |
|---:|---:|---:|
| 100 | $0.28 | $0.47 |
| 1,000 | $2.80 | $4.70 |
| 10,000 | $28.00 | $47.00 |

Apify platform usage is included in the price. Measured on the platform: 10 trademarks in 3 seconds, 108 trademarks for 25 phrases in 4 seconds, 150 trademarks with TSDR details in 74 seconds, all on 256 MB with a memory peak under 85 MB.

### USPTO trademarks in your tools: integrations, API, scheduling & MCP

- **Schedule it:** a daily or weekly [Apify schedule](https://docs.apify.com/platform/schedules) with `monitorMode` turns a search into a new-filings feed.
- **Webhooks:** get a call when the run finishes and pull the new rows into your CRM or docketing system.
- **Make, Zapier, n8n, Google Sheets, Slack:** send USPTO trademarks wherever your team works.
- **API:** run it from code with [Python](https://console.apify.com/actors/h459cz0dcRu6UkqEG/api/python) or [JavaScript](https://console.apify.com/actors/h459cz0dcRu6UkqEG/api/javascript); rival input names such as `terms` + `classes` are accepted too.
- **MCP:** connect AI assistants through the [Apify MCP server](https://mcp.apify.com) and ask for "live class 25 marks containing 'mama bear'".

### More scrapers by TopApi

- [Similarweb Scraper](https://apify.com/topapi/similarweb-scraper) - use it when you need the traffic behind a brand's website.
- [Instagram Contact Scraper](https://apify.com/topapi/instagram-contact-scraper) - use it to reach a brand owner through its Instagram account.
- [Google Maps Reviews Scraper](https://apify.com/topapi/google-maps-reviews-scraper) - use it to watch what customers say about a brand's locations.
- [Facebook Page Posts Scraper](https://apify.com/topapi/facebook-page-posts-scraper) - use it to follow a brand's own posts.
- [X Profile Scraper](https://apify.com/topapi/x-profile-scraper) - use it to check whether a brand name is taken on X.
- [Google Geocoding Scraper](https://apify.com/topapi/google-geocoding-scraper) - use it to put owner addresses on a map.

All TopApi actors: [apify.com/topapi](https://apify.com/topapi).

### Limits & empty runs

- **Source:** the USPTO trademark search index; it is reloaded daily, and new applications usually appear one to two days after filing.
- **Rate limit:** USPTO allows each IP about 100-150 requests in 5 minutes. A search page carries up to 500 trademarks, so searches rarely reach it; TSDR details are one request each, and a large details run moves to fresh Apify proxy IPs (measured: 150 details, one refusal, finished on the proxy).
- **Depth:** the index pages any search to the end; 14,397 of 14,397 records of one search were delivered in a test run.
- **TSDR details** are slower (1-4 seconds each); a TSDR record that does not answer leaves the row without details and the add-on is not charged.
- **Empty run:** no matching marks, or every match already delivered in monitor mode. Nothing is charged; `RUN_SUMMARY` in the key-value store lists the USPTO count per search.

### FAQ

#### How many trademarks can USPTO Trademark Scraper return?

Every match of a search: set `maxResultsPerSearch` and `maxResults` to `0`. A test run returned all 14,397 trademarks USPTO counts for "coffee" in class 30.

#### Can USPTO Trademark Scraper check if a brand name is available?

It returns the live and dead US marks that contain, match or sound like your name in the classes you choose. Whether a name is available is a legal judgment; use the rows as research.

#### Can I monitor new USPTO trademark filings with USPTO Trademark Scraper?

Yes. Turn on `monitorMode`, add a `filedAfter` window and schedule the run. Each run delivers only new marks and status changes.

#### Does USPTO Trademark Scraper give the attorney's e-mail?

Yes, with `includeDetails`: `attorneyEmail` and `correspondentEmail` come from the public TSDR case record, with the correspondent's postal address and docket number.

#### Can I look up trademarks by serial or registration number with USPTO Trademark Scraper?

Yes. Paste serial numbers, registration numbers or TSDR links into `serialNumbers`; 100 numbers go to USPTO in one request, and unknown numbers are listed in `RUN_SUMMARY`.

#### Do I need a USPTO account or API key for USPTO Trademark Scraper?

No. It reads the same public search index and TSDR records as USPTO's Trademark Search website, with no login, cookies or key.

#### Can I use USPTO Trademark Scraper with the Apify API or MCP?

Yes. Start runs from the API in any language and read the dataset, or call it from an AI assistant through the Apify MCP server.

#### Why did my USPTO Trademark Scraper run return no trademarks?

USPTO found no mark for that phrase, status and class, or monitor mode had already delivered every match. Check `matchCountForQuery` and `RUN_SUMMARY`; nothing is charged for an empty search.

#### Is USPTO Trademark Scraper affiliated with the USPTO, and is it legal advice?

No. It is an independent tool that reads public USPTO records, and its output is not legal advice.

#### Your feedback

We keep improving USPTO Trademark Scraper. Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/topapi/uspto-trademark-scraper/issues/open).

# Actor input Schema

## `searchTerms` (type: `array`):

Words or phrases to search, one per line, e.g. "star wars", "just do it". Where they are matched is set by Search in. Field tags work too: "WM:coffee AND IC:030".

## `searchField` (type: `string`):

Where the search terms are matched. Wordmark (contains) finds the phrase inside a mark, so "star wars" also returns "LANDO STAR WARS".

## `serialNumbers` (type: `array`):

Exact lookups, one per line: 8-digit serials (97509558), registration numbers (2239077 or RN 2239077), or TSDR / Trademark Search URLs. Filters below do not apply.

## `statusFilter` (type: `string`):

Live = pending + registered. Dead = abandoned, cancelled or expired. Empty = all statuses.

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

International (Nice) classes 1-45, A, B or 200, e.g. "25" (clothing), "9" (software). A mark in any listed class matches. Empty = all classes.

## `filedAfter` (type: `string`):

Only applications filed on or after this date, e.g. 2026-09-01 or "30 days". Pairs with monitor mode for a new-filings watch.

## `filedBefore` (type: `string`):

Only applications filed on or before this date, e.g. 2026-09-30. Empty = up to today.

## `sortBy` (type: `string`):

Order of the results; matters when a cap stops the search early.

## `excludeKeywords` (type: `array`):

Drop marks whose wordmark contains any of these words, e.g. "LANDO". Case-insensitive.

## `withAttorneyOnly` (type: `boolean`):

Keep only filings that name an attorney (law-firm and IP-service lead lists).

## `includeDetails` (type: `boolean`):

Adds attorney and correspondent e-mail, correspondent address, docket number, prosecution history, assignments, TTAB cases and the renewal window. Billed per trademark that gets them.

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

Deliver only marks not delivered by earlier runs, plus marks whose USPTO status changed since then (changeType). Pairs with a daily schedule.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers what earlier runs delivered. Use one name per watch, e.g. "acme-brand-watch".

## `maxResultsPerSearch` (type: `integer`):

Most trademarks per search term. 0 = every match (USPTO counts 285 marks for "star wars", 23,837 for "coffee").

## `maxResults` (type: `integer`):

Most trademarks for the whole run, across all searches. 0 = no limit.

## `compact` (type: `boolean`):

Core fields only (mark, serial, status, dates, classes, owner, attorney, link): smaller rows for AI agents, MCP and spreadsheets.

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

USPTO allows each IP ~100 requests in 5 minutes. With the Apify proxy (default) the run starts direct and moves to a fresh proxy IP whenever USPTO refuses one.

## `maxConcurrency` (type: `integer`):

Requests in flight at once. 4 is fast and gentle; raise it for large TSDR-detail runs.

## Actor input object example

```json
{
  "searchTerms": [
    "star wars"
  ],
  "searchField": "wordmark",
  "statusFilter": "live",
  "sortBy": "relevance",
  "withAttorneyOnly": false,
  "includeDetails": false,
  "monitorMode": false,
  "monitorStoreName": "uspto-trademark-monitor",
  "maxResultsPerSearch": 10,
  "maxResults": 50,
  "compact": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4
}
```

# Actor output Schema

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

One item per US trademark application or registration: mark, status, dates, classes, goods & services, owner, attorney, links.

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

Per search: USPTO match count, fetched, delivered, filtered and duplicate records; numbers not found; requests and egress used.

# 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 = {
    "searchTerms": [
        "star wars"
    ],
    "statusFilter": "live",
    "maxResultsPerSearch": 10,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/uspto-trademark-scraper").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 = {
    "searchTerms": ["star wars"],
    "statusFilter": "live",
    "maxResultsPerSearch": 10,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/uspto-trademark-scraper").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 '{
  "searchTerms": [
    "star wars"
  ],
  "statusFilter": "live",
  "maxResultsPerSearch": 10,
  "maxResults": 50
}' |
apify call topapi/uspto-trademark-scraper --silent --output-dataset

```

## MCP server setup

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

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/h459cz0dcRu6UkqEG/builds/EO8NmdTjaUf65D01P/openapi.json
