EUIPO Trademark Search Scraper
Pricing
Pay per event
EUIPO Trademark Search Scraper
Search EUIPO and TMview trademarks by word: mark name, owner, status, Nice classes, application, registration and expiry dates, office and record URL. Filter by office, match mode and page depth, as clean deduplicated rows.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
EUIPO Trademark Search Scraper
💰 $2.20 / 1 000 results · pay only for results · no credit card to try
The devil's in the data. 😈
Search EUIPO and TMview trademarks by word and get clean, deduplicated rows: mark name, owner, status, Nice classes, application, registration and expiry dates, the registering office, and the record URL. EUIPO (the EU trademark office) is the default; add national offices when you want them.
🎯 What this scrapes
TMview is the joint trademark search of EUIPO and national offices, and
it has no bulk export. This Actor runs each word you give it, walks the
result pages thirty marks at a time, and returns one row per trademark:
the stable TMview st13 id, mark name, office, application and
registration numbers, status, mark type, Nice classes, applicant names,
application / registration / expiry dates, opposition window, designated
territories, Vienna codes, and image links for figurative marks.
Office scope. By default the search is limited to the EUIPO office
(EM), and every row carries its office code so you can check it.
Pass other codes in offices (for example DE, FR, ES) to search
national registers too, or leave the list empty to search every office
TMview covers.
🔥 Features
- 🛡️ We rotate browser fingerprints (curl-cffi Chrome, Firefox and Safari impersonation) so the source sees a real browser's TLS handshake, not a Python script.
- 🔁 We retry with exponential backoff on rate limits and server
errors, honouring
Retry-After. Up to 5 attempts per page. - 🌐 We rotate proxy sessions through Apify Proxy on every block, with a fresh session and exit IP each time.
- 🧊 Run-wide deduplication. The same
st13never appears twice in your dataset, across pages or across queries in one run. - 🎚️ Match mode and office filters. Contains, exact word, or fuzzy matching, over the offices you choose.
- 🧱 Fault isolation. One query that gets blocked doesn't end the others; we log it and keep going.
- 💰 You pay only for results that land. No data, no charge (only
the small
actor-startwarm-up fee).
💡 Use cases
- Brand protection teams: watch for new filings that contain your brand name across the EU register.
- Law firms and IP agents: run clearance searches and export the hits with owners, classes and dates.
- Naming and product teams: check whether a candidate name is already taken in the classes you care about.
- Data and analytics: build trademark datasets by owner, class or filing date for dashboards.
⚙️ How to use it
- Add one or more words to
queries, for examplenikeoradidas. - Keep
officesatEMfor EUIPO, or add national office codes. - Set
maxPagesandmaxItemsto bound how much you pull. - Run it, then export to JSON, CSV, or Excel, or pull the dataset straight from the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
queries | array<string> | yes | nike | Words to search for in trademark names. |
offices | array<string> | no | ["EM"] | Office codes. EM is EUIPO. Empty searches every office. |
criteria | string | no | C | C contains, W exact word, F fuzzy. |
maxPages | integer | no | 3 | Pages fetched per query, 30 marks each (1-500). |
maxItems | integer | no | 100 | Hard cap on total rows across the run (1-15000). |
proxyConfiguration | object | yes | Apify Proxy | Apify Proxy configuration. |
Example input
{"queries": ["nike", "adidas"],"offices": ["EM"],"criteria": "C","maxPages": 2,"maxItems": 100,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
One row per deduplicated trademark.
| Field | Type | Notes |
|---|---|---|
st13 | string | TMview ST13 id, the stable dedupe key. |
trademarkName | string | null | Word mark text. |
office | string | Registering office code, for example EM. |
officeUrl | string | null | The office's own record URL. |
applicationNumber / registrationNumber | string | null | Office numbers. |
status | string | null | Registered, Filed, Expired, Ended and so on. |
trademarkType | string | null | Word, Figurative, Combined and so on. |
niceClasses | array<integer> | Nice classification classes. |
applicants | array<string> | Applicant / owner names. |
applicationDate / registrationDate / expirationDate | string | null | ISO-8601 dates. |
oppositionPeriodStart / oppositionPeriodEnd | string | null | Opposition window. |
designatedOffices | array<string> | Territories the mark protects. |
viennaCodes | array<string> | Vienna figurative-element codes. |
imageUrl / thumbnailUrl | string | null | Mark image links, figurative marks only. |
searchQuery | string | Input query that produced this row. |
pageNumber | integer | 1-based result page. |
scrapedAt | string | UTC ISO-8601 run timestamp. |
Example output record
{"st13": "EM500000006655302","trademarkName": "NIKE","office": "EM","officeUrl": "http://euipo.europa.eu/trademark/data/EM500000006655302","applicationNumber": "006655302","registrationNumber": "006655302","status": "Ended","trademarkType": "Word","niceClasses": [21],"applicants": ["Navipol sp. z o.o."],"applicationDate": "2008-02-08T12:00:00.000Z","searchQuery": "nike","pageNumber": 1,"scrapedAt": "2026-10-12T08:00:00Z"}
💰 Pricing
Pay-Per-Event: you pay only when these events fire.
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result-emitted | $0.002 | Per deduplicated trademark row written to the dataset |
Example: 1 000 rows = $2.20 per run ($0.20 start + 1000 x $0.002). No subscription, no minimum, no card required to try it.
🚧 Limitations
- Search-listing fields only. This returns what the TMview results list publishes. Goods and services text and full owner addresses sit on the office record pages and are out of scope.
- Office scope is yours to set. The default is EUIPO only (
EM). Emptyofficessearches every office, so check theofficecolumn. - Result depth. Each query pages thirty marks at a time; set
maxPageshigh enough for the depth you need. - A query with no matches is a success. It finishes with zero rows and a status message naming what was searched.
❓ FAQ
Do I need an EUIPO account or API key? No. This reads the public TMview search.
Is this EUIPO only?
By default, yes: offices defaults to ["EM"] and every row carries
its office so you can verify it. Add other office codes or empty the
list to widen the search.
What do the match modes do?
C finds marks containing your word, W finds the exact word, and F
adds fuzzy matches.
Can I search several words in one run?
Yes. Pass an array to queries; every row carries searchQuery so you
can tell which search found it.
What happens if a search is blocked? We retry up to 5 times with a fresh browser fingerprint and proxy session each time. If a query still can't be read, the others carry on and the status message says so. The run ends as failed only when a query was blocked and nothing at all could be collected.
Can I run this on a schedule? Yes. Use Apify Schedules to re-run your watch list and catch new filings.
💬 Your feedback
Found a bug, or need a field we don't return yet? Open an issue on the Actor's Issues tab. We read every one.