# USPTO Trademark Scraper - Brand-Owner & Attorney Leads (`scrapesage/uspto-trademark-scraper`) Actor

Scrape USPTO trademarks by keyword, owner, class or serial number. Get mark, status, Nice classes, owner name & address, goods & services, dates, plus the filing attorney's name & email. Export brand-owner and IP-attorney leads. Monitor new filings. No API key, no browser.

- **URL**: https://apify.com/scrapesage/uspto-trademark-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 7 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## USPTO Trademark Scraper — Brand-Owner & IP-Attorney Leads

Extract **complete US trademark records** — mark, status, Nice classes, owner name & address, goods & services, filing/registration dates — **and the data that turns a filing into a lead**: the prosecuting attorney's name and **e-mail**. Search by keyword, owner, class, serial or registration number, then export ready-to-contact **brand-owner** and **IP-attorney** leads with 0–100 lead scores.

No login, no cookies, no browser, no API key — fast keyless extraction.

### Why this trademark scraper?

Most trademark tools stop at a name search and return a thin record. This actor merges two public sources — the **TMview / TMDN network** (search across the USPTO register) and the official **USPTO TSDR** status pages (full US detail) — to ship the **richest dataset in the category**, including the contact fields nobody else exposes:

| Data | Typical scrapers | This actor |
|---|---|---|
| Mark, serial #, registration #, status | ✅ | ✅ |
| Nice classes + goods & services text | partial | ✅ |
| Owner / applicant name | ✅ | ✅ |
| Owner address + legal entity | ❌ | ✅ |
| Prosecuting **attorney name + e-mail** | ❌ | ✅ |
| Examining attorney (USPTO) | ❌ | ✅ |
| Deduplicated **brand-owner leads** + score | ❌ | ✅ opt-in |
| Deduplicated **IP-attorney / firm leads** + score | ❌ | ✅ opt-in |
| Firm website contact enrichment | ❌ | ✅ opt-in |
| New-filing **monitor** (only new marks) | ❌ | ✅ |
| API key required | often | **never** |

### Use cases

- **IP & legal lead generation** — every new trademark is filed by an attorney (name + e-mail on record) for a brand owner who is actively investing in their brand. Score and contact both sides: co-counsel networks, legal SaaS, brand-protection, docketing and renewal services.
- **Brand clearance & due diligence** — check whether a name is taken across classes, and pull full status history by serial/registration number.
- **Competitor portfolio mapping** — filter by `ownerName` to extract every mark a company owns, with classes, status and dates.
- **New-filing intent feed** — schedule a class- or keyword-scoped run with monitor mode to capture only newly filed marks — high-intent leads for branding agencies, domain/web, packaging, and business services.
- **Renewal & enforcement sourcing** — find marks by owner or class and target upcoming maintenance/renewal windows.
- **Market research** — measure filing activity by class, owner type, and time.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **USPTO Trademark Scraper**, enter search terms (and optionally an owner name, classes, or a status/date filter), and click **Start**.
3. Watch trademark records stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchTerms": ["coffee"],
    "niceClasses": ["30", "43"],
    "statusFilter": "live",
    "maxResults": 100,
    "includeFullDetail": true,
    "emitOwnerLeads": true,
    "emitAttorneyLeads": true
}
```

- **searchTerms** — keywords matched against the mark name (each searched separately).
- **ownerName** — keep only marks whose owner/applicant contains this text (competitor portfolio mapping).
- **serialNumbers / registrationNumbers** — look up specific US marks directly (full detail always fetched).
- **offices** — TMview office codes; default `US`. Full owner-address / attorney-email detail is US-only.
- **niceClasses** — international class numbers 1–45 (e.g. `9` software, `25` clothing, `35` business, `42` tech).
- **statusFilter** — `all`, `live`, `registered`, or `dead`.
- **filedAfter / filedBefore** — filing-date window (YYYY-MM-DD). New filings are the highest-intent leads.
- **includeFullDetail** *(default true)* — fetch the USPTO TSDR status page for owner address, attorney e-mail, goods & services, examining attorney and register.
- **emitOwnerLeads / emitAttorneyLeads** *(default false)* — deduplicated lead records per owner / per attorney with portfolio counts and lead scores.
- **enrichAttorneyContacts** *(default false)* — crawl the attorney firm website for extra emails, phones and socials.
- **monitorMode / monitorKey** — remember marks already seen (by serial) and emit only new ones on each run.

### Output

One record per trademark (`type: "trademark"`), plus optional `ownerLead` and `attorneyLead` records:

```json
{
    "type": "trademark",
    "mark": "PELOTON",
    "serialNumber": "86753385",
    "registrationNumber": "5260141",
    "status": "Registered. The registration date is used to determine when post-registration maintenance documents are due.",
    "isLive": true,
    "niceClasses": [28, 41],
    "ownerName": "Peloton Interactive, Inc.",
    "ownerAddress": "441 Ninth Avenue, Sixth Floor, New York, NEW YORK, UNITED STATES, 10001",
    "ownerLegalEntity": "CORPORATION",
    "ownerOrganizedIn": "DELAWARE",
    "goodsAndServices": [
        { "internationalClass": "28", "description": "Exercise equipment, namely, stationary bicycles" }
    ],
    "attorneyOfRecord": "Jane Q. Attorney",
    "correspondentName": "JANE Q. ATTORNEY, FENWICK & WEST LLP",
    "correspondentEmail": "trademarks@fenwick.com",
    "examiningAttorney": "SMITH, JOHN",
    "register": "Principal",
    "filingDate": "2015-09-11",
    "registrationDate": "2017-08-08",
    "markImageUrl": "https://www.tmdn.org/tmview/api/trademark/image/US...",
    "tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=86753385&caseType=SERIAL_NO&searchType=statusSearch",
    "leadScore": 78,
    "scrapedAt": "2026-06-24T12:00:00.000Z"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with `monitorMode` to capture only newly filed trademarks; perfect for a new-filing lead feed or brand-watch.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/uspto-trademark-scraper').call({
    searchTerms: ['fintech'],
    niceClasses: ['9', '36'],
    statusFilter: 'live',
    emitAttorneyLeads: true,
    emitOwnerLeads: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} trademarks & leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new owner/attorney leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new filings.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find live trademarks filed in class 9 this month and list the filing attorneys" and let it run this scraper.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete IP, legal and B2B lead-gen stack:

- **[Google Patents Scraper](https://apify.com/scrapesage/google-patents-scraper)** — patents, assignees, inventors and citations.
- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** — attorney and law-firm leads by practice area and city.
- **[Avvo Scraper](https://apify.com/scrapesage/avvo-scraper)** — lawyer leads, ratings and reviews.
- **[Martindale Scraper](https://apify.com/scrapesage/martindale-scraper)** — lawyer and firm profiles and peer ratings.
- **[Super Lawyers Scraper](https://apify.com/scrapesage/superlawyers-scraper)** — top-rated attorney leads.
- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — company filings and disclosures.
- **[US Business Formation Scraper](https://apify.com/scrapesage/us-business-formation-scraper)** — new business registrations as buying signals.
- **[LinkedIn Company Scraper](https://apify.com/scrapesage/linkedin-company-scraper)** — firmographics and B2B company data.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** — emails, phones and socials from any domain list.

### Tips

- **Owner portfolio**: set `ownerName` to a company name to keep only that owner's marks. The TMview search matches the mark name, so combine `ownerName` with a brand keyword for the cleanest portfolio.
- **High-intent leads**: combine `filedAfter` with `monitorMode` to surface only newly filed marks — owners who are actively investing in a brand right now.
- **Cost control**: turn off `includeFullDetail` for a fast, cheap name search; turn it on for full owner + attorney lead data.
- **Proxies**: keep the default residential proxy — the TMview search API blocks datacenter IPs.

### FAQ

**Do I need a USPTO API key?** No. This actor uses the public TMview search network and the public USPTO TSDR status pages — no key, no account, no browser.

**Where do attorney emails come from?** From the public USPTO TSDR record's correspondent e-mail field — the address the applicant designated for correspondence (usually their attorney/firm). It is published on the public status page; this actor reads the same thing a human visitor would.

**Can I search non-US trademarks?** Yes — set `offices` to other TMview codes (e.g. `EM` EUIPO, `GB`, `CA`, `AU`, `WO` WIPO). Full owner-address and attorney-email detail enrichment is available for `US` marks only.

**Why is a field empty?** Some fields only exist for certain marks: a registration number/date only for *registered* marks, a correspondent e-mail only when one was filed, an owner address that USPTO masks for some individuals, and a design image only for stylized (non-text) marks. Fields are empty only when the data genuinely doesn't exist.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping this data legal?** This actor collects publicly available US government trademark data and public register information. You are responsible for using the data in compliance with applicable laws and the source sites' terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

Keywords matched against the trademark name, e.g. <code>coffee</code>, <code>blockchain</code>, <code>peloton</code>. Each term is searched separately. Combine with the class / status / date filters below.

## `ownerName` (type: `string`):

Map a competitor's trademark portfolio: keep only marks whose owner/applicant name contains this text (e.g. <code>Nike</code>). Used together with the search terms above (or on its own as a search term).

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

Look up specific US applications directly by serial number (e.g. <code>97123456</code>). Full detail is always fetched for these.

## `registrationNumbers` (type: `array`):

Look up specific US registrations directly by registration number (e.g. <code>1092517</code>).

## `offices` (type: `array`):

Office codes to search (TMview network). Default <code>US</code> (USPTO). Other examples: <code>EM</code> (EUIPO), <code>GB</code>, <code>CA</code>, <code>AU</code>, <code>WO</code> (WIPO). Full owner-address / attorney-email detail enrichment is available for <code>US</code> only.

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

Filter by international (Nice) class numbers 1–45, e.g. <code>9</code> (software), <code>25</code> (clothing), <code>35</code> (advertising/business), <code>42</code> (technology services).

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

Restrict by registration status.

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

Only include marks with a filing date on or after this date (YYYY-MM-DD). New filings are high-intent leads — a brand owner who just filed is actively investing in their brand.

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

Only include marks with a filing date on or before this date (YYYY-MM-DD).

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

Maximum number of trademark records to emit across all search terms.

## `includeFullDetail` (type: `boolean`):

For each US mark, fetch the USPTO TSDR status page to add owner name + address, legal entity, the prosecuting attorney's name + e-mail, examining attorney, goods & services and register. This is the lead data — leave on for lead generation.

## `emitOwnerLeads` (type: `boolean`):

In addition to trademark records, push one deduplicated lead per owner/applicant (type = "ownerLead") with their full portfolio count, address, legal entity and a 0–100 lead score.

## `emitAttorneyLeads` (type: `boolean`):

Push one deduplicated lead per prosecuting attorney / correspondent (type = "attorneyLead") with their e-mail, firm website, the marks they handle and a 0–100 lead score.

## `enrichAttorneyContacts` (type: `boolean`):

For each attorney lead, crawl the firm website (home + contact/about) for additional emails, phone numbers and social links. Only runs when 'Emit IP-attorney leads' is on.

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

Remember trademarks already seen (by serial number) in a named store and emit only NEW ones on each run. Perfect for a scheduled brand-watch or new-filing lead feed. Works independently of Apify Schedules.

## `monitorKey` (type: `string`):

Names the monitor store so different searches keep separate memory (e.g. <code>fintech-class-9</code>).

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

Proxies to use. Residential is required — the TMview search API blocks datacenter IPs.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee"
  ],
  "offices": [
    "US"
  ],
  "statusFilter": "all",
  "maxResults": 100,
  "includeFullDetail": true,
  "emitOwnerLeads": false,
  "emitAttorneyLeads": false,
  "enrichAttorneyContacts": false,
  "monitorMode": false,
  "monitorKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

All scraped trademark records and optional owner / attorney lead records as JSON items in the default dataset.

# 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": [
        "coffee"
    ],
    "offices": [
        "US"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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": ["coffee"],
    "offices": ["US"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "coffee"
  ],
  "offices": [
    "US"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapesage/uspto-trademark-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/uspto-trademark-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/43FCdCZLVqqUQ5ZXu/builds/AhQWaevZbf1iwlxG5/openapi.json
