# USPTO TTAB Oppositions & Cancellations Scraper (TTABVUE) (`scrapers_lat/uspto-ttab-proceedings-scraper`) Actor

Search USPTO TTABVUE: trademark oppositions, cancellations, concurrent-use and appeals. Get both parties, counsel of record (name, firm, email, phone), every mark (serial + registration), the full prosecution-history docket and deadlines. Filter by type, party, mark, status and date.

- **URL**: https://apify.com/scrapers\_lat/uspto-ttab-proceedings-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.60 / 1,000 results

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?

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 TTAB Oppositions & Cancellations Scraper (TTABVUE)](https://scrapers.lat/banners/uspto-ttab-proceedings-scraper.png)](https://console.apify.com/actors/BMfsqSN9UYv3InEF9/input)

## USPTO TTAB Oppositions & Cancellations Scraper (TTABVUE)

Here is one real result, with every field the actor returns:

```json
{
  "source": "USPTO TTABVUE",
  "board": "USPTO TTAB",
  "country": "US",
  "proceedingNumber": "91234567",
  "proceedingType": "Opposition",
  "proceedingTypeCode": "OPP",
  "filingDate": "2017-05-16",
  "status": "Terminated",
  "statusDate": "2017-09-07",
  "interlocutoryAttorney": "ELIZABETH WINTER",
  "paralegalName": "MONIQUE HILL_TYSON",
  "plaintiffName": "Novecento Intellectual Property, LLC",
  "plaintiffCounselName": "JESUS SANCHELIMA",
  "plaintiffCounselFirm": "SANCHELIMA & ASSOCIATES P A",
  "plaintiffCounselEmail": "jesus@sanchelima.com",
  "plaintiffCounselPhone": "305-447-1617",
  "defendantName": "Plan Do See America, Inc.",
  "defendantCounselName": "PAUL A BOST",
  "defendantCounselFirm": "SHEPPARD MULLIN RICHTER & HAMPTON LLP",
  "defendantCounselEmail": "trademarkscc@sheppardmullin.com",
  "defendantCounselPhone": null,
  "plaintiffs": [
    {
      "role": "Plaintiff",
      "name": "Novecento Intellectual Property, LLC",
      "counselName": "JESUS SANCHELIMA",
      "firm": "SANCHELIMA & ASSOCIATES P A",
      "address": "235 SW LE JEUNE RD, MIAMI, FL 33134, UNITED STATES",
      "emails": ["jesus@sanchelima.com", "legal@sanchelima.com"],
      "primaryEmail": "jesus@sanchelima.com",
      "phone": "305-447-1617",
      "marks": [
        { "serialNumber": "76675600", "registrationNumber": "4177395", "status": "REGISTERED AND RENEWED", "mark": "NOVECENTO" }
      ]
    }
  ],
  "defendants": [
    {
      "role": "Defendant",
      "name": "Plan Do See America, Inc.",
      "counselName": "PAUL A BOST",
      "firm": "SHEPPARD MULLIN RICHTER & HAMPTON LLP",
      "address": "1901 AVENUE OF THE STARS, SUITE 1600, LOS ANGELES, CA 90067, UNITED STATES",
      "emails": ["trademarkscc@sheppardmullin.com", "PBost@sheppardmullin.com", "RWalsh@sheppardmullin.com", "MDanner@sheppardmullin.com"],
      "primaryEmail": "trademarkscc@sheppardmullin.com",
      "phone": null,
      "marks": [
        { "serialNumber": "87306702", "registrationNumber": null, "status": "ABANDONED - AFTER INTER-PARTES DECISION", "mark": "900" }
      ]
    }
  ],
  "marks": [
    { "serialNumber": "87306702", "registrationNumber": null, "status": "ABANDONED - AFTER INTER-PARTES DECISION", "mark": "900" },
    { "serialNumber": "76675600", "registrationNumber": "4177395", "status": "REGISTERED AND RENEWED", "mark": "NOVECENTO" }
  ],
  "markSerialNumbers": ["87306702", "76675600"],
  "markRegistrationNumbers": ["4177395"],
  "counselOfRecord": ["PAUL A BOST", "JESUS SANCHELIMA"],
  "contactEmails": ["trademarkscc@sheppardmullin.com", "PBost@sheppardmullin.com", "RWalsh@sheppardmullin.com", "MDanner@sheppardmullin.com", "jesus@sanchelima.com", "legal@sanchelima.com"],
  "hasCounselContact": true,
  "prosecutionHistory": [
    { "entryNumber": 13, "date": "2017-09-08", "historyText": "BD DECISION: DISMISSED W/O PREJ", "dueDate": null },
    { "entryNumber": 12, "date": "2017-09-06", "historyText": "TERMINATED", "dueDate": null },
    { "entryNumber": 3, "date": "2017-05-16", "historyText": "PENDING, INSTITUTED", "dueDate": null },
    { "entryNumber": 2, "date": "2017-05-16", "historyText": "NOTICE AND TRIAL DATES SENT; ANSWER DUE:", "dueDate": "2017-06-25" },
    { "entryNumber": 1, "date": "2017-05-16", "historyText": "FILED AND FEE", "dueDate": null }
  ],
  "prosecutionHistoryCount": 13,
  "firstFilingEntryDate": "2017-05-16",
  "lastActivityDate": "2017-09-08",
  "answerDueDate": "2017-06-25",
  "deadlines": [
    { "event": "NOTICE AND TRIAL DATES SENT; ANSWER DUE:", "dueDate": "2017-06-25" }
  ],
  "aiSummary": null,
  "aiExtract": null,
  "url": "https://ttabvue.uspto.gov/ttabvue/v?pno=91234567",
  "observedAt": "2026-08-15T03:29:26.814Z"
}
```

The most complete USPTO TTAB proceedings scraper available. It returns every field TTABVUE exposes for an opposition, cancellation, concurrent-use, interference or ex parte appeal, plus derived fields (counsel contacts as leads, both parties' marks with serial and registration, the full prosecution-history docket and computed deadlines), and gives you nine filters and six lookup modes to target exactly the proceedings you need.

**📥 [Input](https://apify.com/scrapers_lat/uspto-ttab-proceedings-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/uspto-ttab-proceedings-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/uspto-ttab-proceedings-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/uspto-ttab-proceedings-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-United%20States-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor searches USPTO TTABVUE (the Trademark Trial and Appeal Board inquiry system), opens each matching proceeding page, and writes one normalized record per proceeding to the run's dataset. For every proceeding it captures both sides of the case: the plaintiff and defendant, each party's counsel of record (attorney name, firm, email and phone), and every pleaded or involved mark with its serial number, registration number, status and mark text. It also parses the full prosecution-history docket timeline, computes deadlines (including the answer due date), and normalizes all dates to `YYYY-MM-DD`.

You can pull specific cases by proceeding number, or search by mark keyword, party name, mark owner, a trademark serial or registration number, or the correspondent (counsel) name. Client-side filters then narrow results by proceeding type, status text and filing-date range.

Coverage is US TTAB inter-partes and ex parte proceedings only. For trademark registrations themselves (not disputes), use the [USPTO Trademarks Scraper](https://apify.com/scrapers_lat/uspto-trademarks-scraper).

### Quickstart

Open the actor, paste this into the input, and press Run. It returns Nike oppositions and cancellations with counsel and docket.

```json
{
  "partyName": ["Nike, Inc."],
  "proceedingTypes": ["Opposition", "Cancellation"],
  "procStatus": "All",
  "withDetails": true,
  "maxProceedings": 10
}
```

To pull one exact case, use `proceedingNumbers`, for example `{ "proceedingNumbers": ["91234567"] }`. Every input field is optional except that you must provide at least one lookup value (a proceeding number or one of the search fields).

### Input reference

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `proceedingNumbers` | array | one lookup required | TTAB proceeding numbers to fetch directly (fastest, most exact). | `["91234567"]` |
| `searchQueries` | array | one lookup required | Free-text terms searched across TTABVUE (mark text and case content). | `["nike"]` |
| `partyName` | array | one lookup required | Search by plaintiff or defendant party name. | `["Nike, Inc."]` |
| `propertyOwnerName` | array | one lookup required | Search by the owner of a pleaded or involved mark. | `["Apple Inc."]` |
| `serialOrRegistrationNumber` | array | one lookup required | Find all proceedings involving a mark serial or registration number. | `["87306702"]` |
| `correspondent` | array | one lookup required | Search by correspondent (counsel of record) name or firm. | `["Sheppard Mullin"]` |
| `procStatus` | string | no | Search scope: `All`, `Pending` or `Terminated`. | `"All"` |
| `proceedingTypes` | array | no | Keep only these types: Opposition, Cancellation, Concurrent Use, Interference, Ex Parte Appeal. | `["Opposition"]` |
| `status` | array | no | Keep only proceedings whose status contains one of these terms. | `["Pending"]` |
| `filingDateFrom` | string | no | Keep proceedings filed on or after this date. | `"2020-01-01"` |
| `filingDateTo` | string | no | Keep proceedings filed on or before this date. | `"2024-12-31"` |
| `withDetails` | boolean | no | Attach the full prosecution-history docket timeline (default true). | `true` |
| `withSummary` | boolean | no | Add an AI plain-English summary of the dispute and docket (paid plans). | `false` |
| `withExtract` | boolean | no | Add AI structured claims, key events, motions and outcome (paid plans). | `false` |
| `maxProceedings` | integer | no | Max proceedings returned across all searches (free plans capped at 10). | `50` |

### Output reference

| Name | Type | Description |
| --- | --- | --- |
| `proceedingNumber` | string | TTAB proceeding number. |
| `proceedingType` | string | Opposition, Cancellation, Concurrent Use, Interference or Ex Parte Appeal. |
| `proceedingTypeCode` | string | Type code: OPP, CAN, CUP, INT, EXA. |
| `filingDate` | string | Filing date, `YYYY-MM-DD`. |
| `status` | string | Current status, e.g. Pending, Terminated. |
| `statusDate` | string | Date of the current status. |
| `interlocutoryAttorney` | string | Assigned Board interlocutory attorney. |
| `paralegalName` | string | Assigned Board paralegal. |
| `plaintiffName` | string | Plaintiff (opposer / petitioner) party name. |
| `plaintiffCounselName` | string | Plaintiff counsel of record name. |
| `plaintiffCounselFirm` | string | Plaintiff counsel firm. |
| `plaintiffCounselEmail` | string | Plaintiff counsel primary email. |
| `plaintiffCounselPhone` | string | Plaintiff counsel phone, when listed. |
| `defendantName` | string | Defendant (applicant / registrant) party name. |
| `defendantCounselName` | string | Defendant counsel of record name. |
| `defendantCounselFirm` | string | Defendant counsel firm. |
| `defendantCounselEmail` | string | Defendant counsel primary email. |
| `defendantCounselPhone` | string | Defendant counsel phone, when listed. |
| `plaintiffs` | array | Full plaintiff objects: name, counsel, firm, address, emails, phone, marks. |
| `defendants` | array | Full defendant objects: name, counsel, firm, address, emails, phone, marks. |
| `marks` | array | Every involved mark: `serialNumber`, `registrationNumber`, `status`, `mark`. |
| `markSerialNumbers` | array | All involved mark serial numbers. |
| `markRegistrationNumbers` | array | All involved mark registration numbers. |
| `counselOfRecord` | array | All counsel of record names across both parties. |
| `contactEmails` | array | All correspondence emails across both parties. |
| `hasCounselContact` | boolean | True when counsel contact was captured (billed as `result_lead`). |
| `prosecutionHistory` | array | Full docket timeline: `entryNumber`, `date`, `historyText`, `dueDate`. |
| `prosecutionHistoryCount` | integer | Number of docket entries. |
| `firstFilingEntryDate` | string | Date of the first docket entry. |
| `lastActivityDate` | string | Date of the most recent docket entry. |
| `answerDueDate` | string | Computed answer due date, when set. |
| `deadlines` | array | Docket entries that carry a due date, as `{ event, dueDate }`. |
| `aiSummary` | string | AI summary of the proceeding (when `withSummary` is on). |
| `aiExtract` | object | AI structured claims, key events, motions, outcome (when `withExtract` is on). |
| `url` | string | Canonical TTABVUE proceeding URL. |
| `observedAt` | string | ISO timestamp when the record was captured. |

### Example output record

See the JSON block at the top of this page for a complete real record (Opposition No. 91234567), including both parties, counsel of record for each side, both marks with serial and registration numbers, and the prosecution-history docket.

### Run via API and CLI

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~uspto-ttab-proceedings-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "partyName": ["Nike, Inc."], "proceedingTypes": ["Opposition","Cancellation"], "maxProceedings": 10 }'
```

Or with the Apify CLI:

```bash
apify call scrapers_lat/uspto-ttab-proceedings-scraper \
  --input '{ "proceedingNumbers": ["91234567"], "withDetails": true }'
```

### Fetch results

Read the run's dataset items:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json&token=YOUR_TOKEN"
```

Use `format=csv` or `format=xlsx` for spreadsheet exports. The `DATASET_ID` is returned in the run response as `defaultDatasetId`.

### Billing and limits

This actor is pay per result. Events:

| Event | Price (USD) | When charged |
| --- | --- | --- |
| `result` | 0.015 | Each proceeding record without a captured counsel contact. |
| `result_lead` | 0.020 | Each proceeding record that includes counsel contact (name, firm, email, phone). |
| `details` | 0.008 | When the full prosecution-history docket is attached. |
| `ai_summary` | 0.012 | When an AI summary is produced (paid plans, opt-in). |
| `ai_extract` | 0.012 | When AI structured extraction is produced (paid plans, opt-in). |

Every proceeding is billed as exactly one of `result` or `result_lead`, never both. Free Apify users are capped at 10 results per run, and the paid AI add-ons are disabled for free users. The actor never charges on a failed request: if a proceeding cannot be fetched or parsed, no billable event is emitted. A spend guard stops emitting and charging once your configured `maxTotalChargeUsd` is reached.

### FAQ and troubleshooting

**Which proceedings are covered?** All TTAB proceeding types on TTABVUE: oppositions (91), cancellations (92), interferences (93), concurrent-use (94) and ex parte appeals.

**Do I get counsel contact details?** Yes. When TTABVUE lists a correspondent, the actor captures the attorney name, firm, mailing address, emails and phone for each party. Some parties are self-represented, in which case the correspondent is the party itself.

**How do I find every case involving a mark?** Put the trademark serial or registration number in `serialOrRegistrationNumber`. The actor returns every proceeding where that mark is pleaded or involved.

**Nothing came back.** Confirm you provided at least one lookup value, and that your `proceedingTypes`, `status` or filing-date filters are not excluding all matches. Terminated cases require `procStatus` set to `All` or `Terminated`.

### More scrapers at scrapers.lat

- [USPTO Trademarks Scraper](https://apify.com/scrapers_lat/uspto-trademarks-scraper)
- [Canada CIPO Trademarks Scraper](https://apify.com/scrapers_lat/canada-cipo-ip-scraper)
- [EUIPO Trademarks Scraper](https://apify.com/scrapers_lat/euipo-trademarks-scraper)

# Actor input Schema

## `proceedingNumbers` (type: `array`):

One or more TTAB proceeding numbers to fetch directly, e.g. 91234567 (opposition) or 92012345 (cancellation). Fastest and most exact way to pull specific cases.

## `searchQueries` (type: `array`):

Free-text terms searched across TTABVUE (mark text and case content). Each value runs its own search.

## `partyName` (type: `array`):

Search by plaintiff or defendant party name, e.g. a company that files or defends oppositions.

## `propertyOwnerName` (type: `array`):

Search by the owner of a pleaded or involved mark (property owner).

## `serialOrRegistrationNumber` (type: `array`):

Find all proceedings that involve a given trademark application serial number or registration number.

## `correspondent` (type: `array`):

Search by correspondent (counsel of record) name or firm.

## `procStatus` (type: `string`):

Limit searches to pending (live), terminated (dead) or all proceedings.

## `proceedingTypes` (type: `array`):

Keep only these proceeding types. Accepts Opposition, Cancellation, Concurrent Use, Interference, Ex Parte Appeal (or codes OPP, CAN, CUP, INT, EXA).

## `status` (type: `array`):

Keep only proceedings whose status contains one of these terms (e.g. Pending, Terminated).

## `filingDateFrom` (type: `string`):

Keep only proceedings filed on or after this date (YYYY-MM-DD or MM/DD/YYYY).

## `filingDateTo` (type: `string`):

Keep only proceedings filed on or before this date (YYYY-MM-DD or MM/DD/YYYY).

## `withDetails` (type: `boolean`):

Attach the full prosecution-history docket timeline (every entry with date, text and due date). Billed as the 'details' event only when a docket is returned.

## `withSummary` (type: `boolean`):

Add a plain-English AI summary of the dispute and docket. Billed as 'ai\_summary' only on usable output. Disabled for free Apify users.

## `withExtract` (type: `boolean`):

Extract claims, key docket events, motions and outcome as structured JSON. Billed as 'ai\_extract' only on usable output. Disabled for free Apify users.

## `maxProceedings` (type: `integer`):

Maximum number of proceedings to return across all searches. Free Apify plans are capped at 10 per run.

## Actor input object example

```json
{
  "proceedingNumbers": [
    "91234567",
    "92080000"
  ],
  "searchQueries": [
    "nike",
    "coca cola"
  ],
  "partyName": [
    "Nike, Inc."
  ],
  "propertyOwnerName": [
    "Apple Inc."
  ],
  "serialOrRegistrationNumber": [
    "87306702",
    "4177395"
  ],
  "correspondent": [
    "Sheppard Mullin"
  ],
  "procStatus": "All",
  "proceedingTypes": [
    "Opposition",
    "Cancellation"
  ],
  "status": [
    "Pending"
  ],
  "filingDateFrom": "2020-01-01",
  "filingDateTo": "2024-12-31",
  "withDetails": true,
  "withSummary": false,
  "withExtract": false,
  "maxProceedings": 50
}
```

# Actor output Schema

## `results` (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 = {
    "proceedingNumbers": [
        "91234567"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/uspto-ttab-proceedings-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 = { "proceedingNumbers": ["91234567"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/uspto-ttab-proceedings-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 '{
  "proceedingNumbers": [
    "91234567"
  ]
}' |
apify call scrapers_lat/uspto-ttab-proceedings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/uspto-ttab-proceedings-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/BMfsqSN9UYv3InEF9/builds/DjN84dW1GZKKbeLd5/openapi.json
