Pricing
Pay per usage
EUIPO Trademark Search
Search EU trademark filings via the official EUIPO API. Supports multi-word brand names, combined keyword searches in a single run, date range and Nice class filtering, and automatic token caching.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 months ago
Last modified
Categories
Share
Search the official EUIPO Trademark Search API for EU trademark filings matching one or more brand keywords. Built by DoppelSpotter and published at doppelspotter/euipo-trademark-search.
Key features
- Multi-keyword OR queries in a single run โ accepts a
keywordsarray and compiles all terms into one RSQL OR group, so your entire brand vocabulary is covered in a single actor invocation:(verbalElement=="*sparx*",verbalElement=="*sparx maths*"). - Full support for multi-word brand names โ all search values are correctly quoted in RSQL so terms containing spaces work exactly as expected:
verbalElement=="*sparx maths*". - Expiry-aware token caching โ the EUIPO OAuth2 response includes an 8-hour
expires_in. The actor caches the access token in an Apify Key-Value Store and reuses it until it is within 5 minutes of expiry, so most runs start immediately without re-authenticating. - Refresh-token grant โ when a token nears expiry, the actor uses the
refresh_tokenreturned by EUIPO to silently extend the session rather than re-sending full credentials. - 429 rate-limit handling โ respects the EUIPO
Retry-Afterheader and retries automatically. - Optional trademark filters โ filter results by Nice class, trademark status, and mark type directly from the input schema.
- Demo mode โ runs without credentials and outputs registration instructions rather than failing the run, so the Apify Store healthcheck works out of the box.
Authentication
- Register a free account at dev.euipo.europa.eu
- Create an app to receive a Client ID and Client Secret
- Subscribe to the Trademark search API plan
The actor uses the OAuth2 client_credentials flow and caches the resulting access token in an Apify Key-Value Store named euipo-token-cache so subsequent runs in the same Apify account can reuse it without round-tripping to the auth server on every invocation.
Input
| Field | Type | Required | Description |
|---|---|---|---|
clientId | string (secret) | yes | EUIPO developer portal Client ID |
clientSecret | string (secret) | yes | EUIPO developer portal Client Secret |
keywords | string[] | yes | Brand keywords; multi-word terms with spaces are fully supported |
dateFrom | string (YYYY-MM-DD) | no | Lower bound for the trademark application date |
dateTo | string (YYYY-MM-DD) | no | Upper bound for the trademark application date |
maxResults | integer 1โ500 | no | Default: 50 |
niceClass | string | no | Comma-separated class numbers, e.g. 9,42 |
status | enum | no | REGISTERED, APPLICATION_PUBLISHED, etc. |
markFeature | enum | no | WORD, FIGURATIVE, etc. |
useSandbox | boolean | no | Default: false. Use EUIPO sandbox for testing |
Output
One dataset item per matching trademark application:
{"applicationNumber":"019301286","markName":"SparX Wallet","applicantName":"BROXUS HOLDINGS LTD","niceClasses":"9, 42","filingDate":"2026-01-09","registrationDate":"","expiryDate":"","status":"APPLICATION_PUBLISHED","markType":"Word Mark","markKind":"Individual","markBasis":"EU Trademark","representativeName":"","goodsAndServicesDescription":"Class 9: ...","renewalStatus":"","markImageUrl":"","euipoUrl":"https://euipo.europa.eu/eSearch/#basic/1+1+1+1/50+50+50+50/019301286","extractedAt":"2026-03-16T12:00:00.000Z","requestMetadata":{"keywords":["sparx","sparx maths"],"dateFrom":"2025-03-15","dateTo":"2026-03-16","maxResults":50,"filter":"(wordMarkSpecification.verbalElement==\"*sparx*\",wordMarkSpecification.verbalElement==\"*sparx maths*\");applicationDate>=\"2025-03-15\";applicationDate<=\"2026-03-16\"","page":0,"useSandbox":false}}
Demo mode
If no credentials are provided, the actor runs in demo mode and emits a single diagnostic dataset item explaining how to register for EUIPO API access, rather than failing the run. This lets the Apify Store healthcheck work without secrets.
