# EUIPO & TMview Trademark Scraper — 70+ Offices (`foxlabs/euipo-trademark-data`) Actor

Search trademarks across TMview (EUIPO + 70 national IP offices): mark name, applicant, application & registration numbers, status, filing/registration dates, Nice classes, office and mark image. No API key, no login.

- **URL**: https://apify.com/foxlabs/euipo-trademark-data.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 trademark delivereds

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

## EUIPO & TMview Trademark Scraper — 70+ Offices 🚀

**foXLabs registry data:** [SEC Form D](https://apify.com/foxlabs/sec-form-d-offerings) · [Y Combinator](https://apify.com/foxlabs/ycombinator-company-data) · [Company Enrichment](https://apify.com/foxlabs/company-enrichment)

🎉 Search trademarks across **TMview** — the official multi-office register run by EUIPO and 70+ national IP offices — and get one clean row per mark: name, applicant, application & registration numbers, status, filing/registration dates, Nice classes, the office it's filed in and the mark image. No API key, no login.

### 🔍 What is the EUIPO & TMview Trademark Scraper — and when should you use it?

Give this Actor a brand word or applicant name and it returns matching trademarks across EUIPO and national offices — the data an IP, brand-protection or legal team needs, and the applicant (company) behind each mark for lead-gen.

**Use it when you need:** a brand's trademarks across the EU and beyond; brand-protection monitoring (who's filing near your mark); or the applicant company behind filings for lead-gen.

**Use something else when:** you want US trademarks specifically (use our USPTO trademark actor) or you need the registrant's firmographics — join the applicant with [Company Enrichment](https://apify.com/foxlabs/company-enrichment).

### 🤖 Use with AI agents

**Already on the Apify MCP server?** Ask for this Actor by name: `foxlabs/euipo-trademark-data`.

**Your agent can pay for its own runs.** This Actor is pay-per-event with agentic payments, so an agent can discover it, run it and settle the bill over **x402 (USDC on Base)** or **Skyfire** — no Apify account or API token of its own. Billing is per delivered trademark, never for errors.

Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```
I want EU/global trademarks using the Apify Actor `foxlabs/euipo-trademark-data`.

Input: `queries` is a list of brand/applicant terms; `offices` optionally scopes to office codes
(EM = EUIPO, DE, FR, GB, WO); `maxResultsPerQuery` caps rows. Each row has tmName, applicant,
applicationNumber, status, office, niceClasses and applicationDate.

Start with:
{ "queries": ["nike"], "maxResultsPerQuery": 50 }

Ask me which brands to search, run the Actor, then summarise the trademarks as a table.
```

The machine-readable API, MCP config and OpenAPI definition live at `apify.com/foxlabs/euipo-trademark-data.md`.

### 📋 Overview

Everything you need to turn TMview into clean, structured trademark data — across 70+ offices — in one Actor, with no login or API key.

**Why teams pick this Actor:**

- ✅ **70+ offices in one search** — EUIPO plus national registers, via the official TMview search.
- 🏢 **Applicant on every row** — the company/person behind the mark, for legal & firmographic lead-gen.
- 🎯 **Clean, real fields** — status, Nice classes, filing/registration dates, office, mark image.
- 🔗 **Complements USPTO** — same applicant-first shape as our US trademark actor; concatenate for a global view.
- 💰 **Pay only for results** — one `trademark` event per delivered row; failed queries free.
- 🤖 **Agent-ready** — MCP + x402 agentic payments.

### ✨ Features

- 🔍 **Search by brand or applicant** — across all offices or a chosen subset.
- 📄 **Full record** — tmName, applicant, application & registration numbers, status, dates, Nice classes, office, mark feature.
- 🖼️ **Mark image** — the figurative mark's image URL where present.
- 🔗 **TMview link** — a direct link to each mark's TMview detail page.

### 🎬 Quick Start

```bash
curl -X POST "https://api.apify.com/v2/acts/foxlabs~euipo-trademark-data/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["nike"], "maxResultsPerQuery": 50}'
```

### 🚀 Getting Started (3 steps)

1. **Enter your search terms** — brand words or applicant names in `queries`.
2. **Scope it (optional)** — set `offices` (e.g. `EM`, `DE`) to limit to certain registers.
3. **Run and export** — get a clean dataset as JSON, CSV or Excel.

### 📥 Input

| Field | Default | What it does |
|---|---|---|
| `queries` | required | Brand words or applicant names to search. |
| `offices` | all | Office codes to limit to (`EM` = EUIPO, `DE`, `FR`, `GB`, `WO`). Empty = all 70+. |
| `maxResultsPerQuery` | 100 | Trademarks per search term. |
| `includeRaw` | false | Attach TMview's untouched record under `raw`. |
| `proxyConfiguration` | residential | TMview blocks datacenter IPs, so residential proxy is used by default. |

```json
{ "queries": ["nike", "acme"], "offices": ["EM", "DE"], "maxResultsPerQuery": 100 }
```

### 📤 Output

One row per trademark.

| Field | What it is |
|---|---|
| `tmName` | the mark's name / verbal element |
| `applicant` | the applicant (company or person) |
| `applicationNumber`, `registrationNumber` | the numbers |
| `status` | legal status (Registered, Ended, Filed…) |
| `office` | the IP office the mark is filed in (EM = EUIPO, DE, FR, WO…), from the ST13 id |
| `niceClasses` | the Nice classification classes |
| `applicationDate` | filing date (ISO) |
| `registrationDate`, `imageUrl` | where the office provides them in the search response |
| `st13`, `tmviewUrl` | TMview id and detail link |
| `query`, `source`, `scrapedAt` | your term; source; when read |

```json
{
  "tmName": "NIKE",
  "applicant": "Navipol sp. z o.o.",
  "applicationNumber": "006655302",
  "registrationNumber": "006655302",
  "status": "Ended",
  "office": "EM",
  "niceClasses": ["21"],
  "applicationDate": "2008-02-08",
  "st13": "EM500000006655302",
  "tmviewUrl": "https://www.tmdn.org/tmview/#/tmview/detail/EM500000006655302",
  "source": "TMview (EUIPO)"
}
```

### 💼 Use cases

**1. Brand protection** — monitor new filings near your brand across the EU and beyond.
*Input:* your brand terms, scheduled. *Output:* matching marks + applicant + status. *Use:* spot conflicting filings early.

**2. IP portfolio / due diligence** — all of an applicant's marks in one table.
*Input:* the applicant name. *Output:* their trademarks across offices. *Use:* map a portfolio.

**3. Legal lead-gen** — companies actively filing trademarks are buying legal/IP services.
*Input:* a sector's brand terms. *Output:* applicants + filing dates. *Use:* a fresh IP-services pipeline.

### 🔗 Integration

**JavaScript / Node.js**

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('foxlabs/euipo-trademark-data').call({ queries: ['nike'], maxResultsPerQuery: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('foxlabs/euipo-trademark-data').call(run_input={'queries': ['nike'], 'maxResultsPerQuery': 50})
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)
```

Written for `apify-client` 3 for Python, where `call()` returns a run object; with version 1 or 2 it returns a dict — write `run['defaultDatasetId']` there.

**Automation (n8n / Zapier / Make):** schedule → HTTP request to the Actor API with your `queries` → handle the JSON dataset → push to a sheet, CRM or dashboard.

### 📊 Pricing

Pay per event, one event per delivered row: **`trademark`**. Failed or empty queries are never charged. [View current pricing.](https://apify.com/foxlabs/euipo-trademark-data)

### ❓ FAQ

**Do I need an EUIPO or TMview API key?** No. This uses TMview's public search, which needs no key or login.

**Which offices are covered?** EUIPO plus 70+ national and regional IP offices that feed TMview; scope with `offices` or search them all.

**Why a residential proxy?** TMview blocks datacenter IPs, so the Actor routes through a residential proxy by default (no browser needed).

**Does it include the applicant?** Yes — the applicant (company or person) is on every row, the key field for legal and firmographic lead-gen.

**Can I export to CSV / Excel / JSON?** Yes — directly from the Apify dataset.

### 🐛 Troubleshooting

- **A query returns an error row** — TMview may be rate-limiting; re-run. The Actor rotates residential exit IPs and retries.
- **Some fields vary by office** — TMview's per-office data differs; a value is returned only when the office provides it, never faked.
- **No results** — broaden the term or clear the `offices` filter.

### ⚠️ Trademark

Independent, third-party tool. Not affiliated with, endorsed by or connected to EUIPO or TMview. "EUIPO", "TMview" and related marks belong to their owners and are used here for identification only.

### ⚖️ Is it legal to scrape this data?

TMview is a public trademark search. Records can contain personal data (an individual applicant's name); personal data is protected by the GDPR and similar laws, so only process it with a legitimate basis. See Apify's blog post on the legality of web scraping.

### 🤝 Support & contact

- 🌐 **Website:** [data.foxlabs.com.tr](https://data.foxlabs.com.tr)
- 📧 **Email:** info@foxlabs.com.tr
- 🐛 **Issues:** open a ticket in the Actor's **Issues** tab — the run's `SOURCE_REPORT` record holds what was asked and why the run stopped.
- 🧰 **More clean data actors:** [Fox Labs on Apify](https://apify.com/foxlabs)

### Changelog

#### 0.1.0 — 2026-10-12

- Initial release: trademark search across TMview (EUIPO + 70 national offices) via its public API; per mark the name, applicant, application/registration numbers, status, dates, Nice classes, office and image; residential proxy + mandatory User-Agent; pay-per-event (`trademark`).

# Changelog

This Actor's version history is a separate document: https://apify.com/foxlabs/euipo-trademark-data/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Trademark names, brand words or applicant names to search for across TMview.

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

Limit to these IP offices by code (e.g. `EM` for EUIPO, `DE`, `FR`, `GB`, `WO`). Empty = all 70+ offices.

## `maxResultsPerQuery` (type: `integer`):

How many trademarks to deliver per search term.

## `includeRaw` (type: `boolean`):

Attach TMview's untouched record under `raw`.

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

TMview blocks datacenter IPs, so residential proxy is used by default.

## Actor input object example

```json
{
  "queries": [
    "nike"
  ],
  "offices": [],
  "maxResultsPerQuery": 100,
  "includeRaw": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `report` (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 = {
    "queries": [
        "nike"
    ],
    "offices": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/euipo-trademark-data").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 = {
    "queries": ["nike"],
    "offices": [],
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/euipo-trademark-data").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 '{
  "queries": [
    "nike"
  ],
  "offices": []
}' |
apify call foxlabs/euipo-trademark-data --silent --output-dataset

```

## MCP server setup

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

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/5hG29y1VTFUYTL2O6/builds/HJowFwYQY8AoeddP0/openapi.json
