# 🇮🇳 India Trademark Search — WIPO Brand DB (`nexgendata/india-trademark-search`) Actor

Search Indian trademark records via the WIPO Global Brand Database — mark, owner, status, Nice class, filing & registration dates. Watch-check for status changes.

- **URL**: https://apify.com/nexgendata/india-trademark-search.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Developer tools
- **Stats:** 1 total users, 1 monthly users, 94.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.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

## 🇮🇳 India Trademark Search — Brand Clearance & Watch API

**Search Indian trademarks by mark name or owner** for knockout, clearance screening, and brand monitoring. This Actor returns clean, structured JSON — mark text, owner, status, Nice classes, application/registration numbers, and filing/registration dates — for records on the **Indian register (office = IN)**. Built for trademark attorneys, brand strategists, IP-monitoring teams, startup founders, and AI agents that need Indian trademark data without a CAPTCHA-gated portal.

> **Source: the WIPO Global Brand Database (Indian records).** This Actor reads the Indian slice (`office = IN`) of WIPO's **Global Brand Database** (branddb.wipo.int) — the official WIPO aggregation that includes the IP India national collection. It does **not** scrape the IP India / ipindia.gov.in portal directly (that register is human-CAPTCHA and login gated). Every record is labelled `source = "WIPO Global Brand Database"` and `office = "IN"`.

> **⚖️ Screening signal, not a legal opinion (rule #10).** Results — including `similarity_score` and `clearance_risk` — are a string/phonetic **screening** signal and a **candidate filter** to help you triage. They are **not** a legal clearance determination, a freedom-to-operate opinion, or a similarity ruling. Confirm anything material with qualified Indian trademark counsel.

### 📊 What you get

One flat record per Indian trademark:

- `mark` — the mark / brand verbal element
- `owner` — holder / applicant name
- `status` — India-native normalised status (Registered, Pending, Accepted, Opposition, Published, Abandoned, Cancelled, Expired, Refused…)
- `status_raw` — the raw WIPO status before normalisation
- `serial_number` — Indian application number
- `registration_number` — registration number (when registered)
- `filing_date`, `registration_date` — ISO `YYYY-MM-DD`
- `class` — Nice class number(s)
- `goods_services` — goods & services text (when present)
- `office` — always `IN`
- `trademark_type` — mark feature (Word / Combined / Figurative…)
- `key_field` / `st13` — WIPO **ST13** stable id (dedup + watch-diff key)
- `detail_url` — link to the WIPO GBD record
- `similarity_score` — composite text+token+phonetic screening score (0-1)
- `clearance_risk` — coarse Low / Medium / High screening band
- `source` — `WIPO Global Brand Database`

### 💵 Pricing — pay per result

Pay-per-event, no subscription, no minimum:

| Event | Price |
|---|---|
| Actor start | $0.00005 per run |
| **Trademark record** | **$0.05 each** (primary event) |
| Watch check (watch mode only) | $0.05 per run (non-primary) |

**About 20 Indian trademark records per $1.**

#### Worked example

A brand team screening a candidate name pulls the top 20 Indian marks:

- 1 × actor start = $0.00005
- 20 × trademark record × $0.05 = **$1.00**
- **Total ≈ $1.00** for a full India knockout screen.

A quiet weekly **watch** run that finds no changes costs only the actor start + one **watch check** = **$0.05**.

### 🧪 Sample output

```json
{
  "mark": "TATA",
  "owner": "TATA SONS PRIVATE LIMITED",
  "status": "Registered",
  "status_raw": "Registered",
  "serial_number": "450770",
  "registration_number": "450770",
  "filing_date": "1986-03-10",
  "registration_date": "1986-03-10",
  "class": ["6"],
  "office": "IN",
  "trademark_type": "Word",
  "st13": "IN501986000450770",
  "key_field": "IN501986000450770",
  "detail_url": "https://branddb.wipo.int/en/similarname/brand/IN501986000450770",
  "similarity_score": 1.0,
  "clearance_risk": "High",
  "source": "WIPO Global Brand Database"
}
```

*(Real record returned by a live `office=IN` query for "Tata".)*

### ⏰ Watch mode — monitor Indian filings on a schedule

Set **Mode = Watch** (or `watchMode: true`) and run this Actor on a schedule to turn a one-off Indian clearance search into ongoing monitoring:

- Remembers the Indian marks it has already seen for each query (per optional **Watch label**), persisted across runs.
- On the **first run** it seeds a baseline silently — no alerts.
- On **every later run** it returns **only the deltas**: newly-filed Indian marks and marks whose status changed (e.g. Pending → Accepted → Registered, or → Abandoned). Quiet runs return an empty dataset.
- `status_change` deltas carry the India-native `previous_status` and `status`; every record carries `similarity_score` + `clearance_risk`.
- **Fail-loud:** if WIPO is blocked or unreachable, the watch run **fails before any watch-check is charged** — it never emits a false "all clear" or bills for a check it could not make.

#### Set up a recurring watch

1. **Save a Task:** `Mode = Watch`, your brand in **Search Query**, an optional **Watch label**, then **Save as a new task** (e.g. `Watch: <brand> — India`).
2. **Schedule it:** Schedules → Create schedule → add the task → daily/weekly cron. First run baselines; later runs return only changes.
3. **Wire an alert:** on the task's **Integrations** tab add email/Slack/webhook triggered **on run success with a non-empty dataset** — so you're notified only when an Indian mark actually changes.

### 🤖 Use with AI agents · API · CLI

**AI agents (MCP / Claude / OpenAI / n8n):** point any MCP-aware client at this Actor and run Indian trademark clearance on demand.

> Sample prompt: *"Watch for new Indian trademark filings matching my brand weekly and alert me on conflicts."*

**Apify API (Python):**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgendata/india-trademark-search").call(run_input={
    "query": "Tata",
    "searchType": "name",
    "maxResults": 20
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["mark"], item["status"], item["owner"])
```

**CLI:**

```bash
apify call nexgendata/india-trademark-search \
  --input='{"query":"Reliance","searchType":"owner","maxResults":20}'
```

### 🔗 Related NexGenData IP actors — clear a mark across every register

- **[USPTO Trademark Search (US)](https://apify.com/nexgendata/uspto-trademark-search?fpr=2ayu9b)** — US brand clearance + watch, same output shape.
- **[EUIPO Trademark Search (EU)](https://apify.com/nexgendata/euipo-trademark-search?fpr=2ayu9b)** — EUIPO + TMview across 35+ EU/EEA registries.
- **[WIPO PATENTSCOPE (Global patents)](https://apify.com/nexgendata/wipo-patentscope-search?fpr=2ayu9b)** — worldwide PCT & national patents.

**India Six — the NexGenData India data suite:**
[NSE/BSE Company Announcements](https://apify.com/nexgendata/nse-bse-announcements?fpr=2ayu9b) ·
[MCA Company Master Data](https://apify.com/nexgendata/india-mca-company-search?fpr=2ayu9b) ·
[GST Taxpayer Lookup](https://apify.com/nexgendata/india-gst-search?fpr=2ayu9b) ·
[MagicBricks Real Estate](https://apify.com/nexgendata/india-magicbricks-real-estate?fpr=2ayu9b) ·
[Indian Court Records](https://apify.com/nexgendata/india-court-records?fpr=2ayu9b) ·
**India Trademark Search ← you are here**

### ❓ FAQ

**Where does the data come from?**
The **WIPO Global Brand Database** (branddb.wipo.int), filtered to Indian records (`office = IN`). WIPO aggregates the IP India national collection into its Global Brand Database; this Actor reads that Indian slice.

**Does this scrape the IP India (ipindia.gov.in) website directly?**
No. The IP India public search portal is human-CAPTCHA and login gated. This Actor uses the WIPO Global Brand Database instead, which exposes the same Indian records through a machine-readable interface. Records are explicitly labelled `source = "WIPO Global Brand Database"`.

**Is this a legal clearance or freedom-to-operate opinion?**
No. It is a **screening / knockout** tool. `similarity_score` and `clearance_risk` are candidate filters, not legal opinions. Confirm anything material with Indian trademark counsel.

**Can I search by owner?**
Yes — set `searchType = owner` and pass the holder/applicant name.

**What if WIPO is temporarily blocked or rate-limited?**
The Actor is **fail-loud**: a block returns an explicit `SOURCE BLOCKED` failure (nothing charged), never a misleading empty "no conflicts" result. It retries with a fresh CAPTCHA solve and can route through a residential proxy.

**Output formats?**
JSON, CSV, Excel, and the Apify dataset API.

### About NexGenData

NexGenData publishes buyer-intent and public-record actors across IP registries, financial filings, company data, and more — all pay-per-result. Browse the catalog at [apify.com/nexgendata](https://apify.com/nexgendata?fpr=2ayu9b).

***

*Data sourced from the WIPO Global Brand Database (public intellectual-property records, Indian collection). Provided as-is for information and screening purposes; not legal advice.*

# Actor input Schema

## `query` (type: `string`):

Trademark mark name (default) or owner/applicant name (when searchType=owner). Searched against the Indian records (office=IN) of the WIPO Global Brand Database.

## `searchType` (type: `string`):

name = search by mark / brand name; owner = search by owner / applicant name.

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

Maximum number of Indian trademark records to return (1-50).

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

'Search' = one-off India clearance search. 'Watch' = monitor this query on a schedule and return ONLY new or changed Indian filings since the last run (first run just seeds the baseline).

## `watchLabel` (type: `string`):

Optional. Names this watch so multiple watches stay independent -- each label keeps its own memory of previously-seen Indian marks.

## `similarityThresholdPct` (type: `integer`):

Only alert on marks at least this similar to your query. String/phonetic SCREENING signal (candidate filter), NOT a legal similarity opinion. Default 80.

## `alertOnNewFilings` (type: `boolean`):

Alert when an Indian mark appears that was not seen on the previous run.

## `alertOnStatusChange` (type: `boolean`):

Alert when a previously-seen Indian mark changes status (e.g. Pending -> Accepted -> Registered, or -> Abandoned).

## `watchMode` (type: `boolean`):

Fleet-standard alias for mode='watch'. Save this query and, on every later run, return ONLY items new since the last run. Billed $0.05 per check.

## Actor input object example

```json
{
  "query": "Tata",
  "searchType": "name",
  "maxResults": 20,
  "mode": "search",
  "similarityThresholdPct": 80,
  "alertOnNewFilings": true,
  "alertOnStatusChange": true,
  "watchMode": false
}
```

# Actor output Schema

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

Indian trademark records -- full matches in search mode, or only new/changed filings in watch mode.

# 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": "search",
    "watchLabel": "",
    "similarityThresholdPct": 80,
    "alertOnNewFilings": true,
    "alertOnStatusChange": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/india-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": "search",
    "watchLabel": "",
    "similarityThresholdPct": 80,
    "alertOnNewFilings": True,
    "alertOnStatusChange": True,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/india-trademark-search").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 '{
  "mode": "search",
  "watchLabel": "",
  "similarityThresholdPct": 80,
  "alertOnNewFilings": true,
  "alertOnStatusChange": true
}' |
apify call nexgendata/india-trademark-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4C97AsMwR4EqlIKOf/builds/whN09mCaSECmMF4sz/openapi.json
