WIPO Madrid International Trademark Scraper
Pricing
from $12.75 / 1,000 results
WIPO Madrid International Trademark Scraper
Search 1.4M international trademark registrations: mark text, holder name and address, IP representative firm, designated countries, Nice classes, goods and services, refusals, oppositions and expiry dates. JSON, CSV, Excel.
Pricing
from $12.75 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
WIPO Madrid International Trademark Scraper
Here is one real result, with every field the actor returns:
{"internationalRegistrationNumber": "1336632","markText": "social sweethearts","status": "ACT","statusLabel": "In force","registrationDate": "2016-12-31","expiryDate": "2026-12-31","monthsToExpiry": 4,"holderName": "social sweethearts GmbH","holderAddress": "Karl-Valentin-Straße 17, 82031 Grünwald","holderCountry": "DE","representativeName": "Osborne Clarke","representativeAddress": "Reeperbahn 1, 20359 Hamburg","representativeCountry": "DE","originOffice": "DE","designatedCountries": ["AU","EM","IN","JP","NO","US","CH","CN","RU"],"designatedCountriesCount": 9,"niceClasses": [9,35,38,41,42],"niceClassCount": 5,"basicApplicationNumber": null,"basicRegistrationNumber": "30 2011 067 198","hasContactEmailOnFile": true,"holderNationality": null,"holderLegalNature": "Limited Liability Company (GmbH), Germany","goodsServices": "9: Electronic publications, downloadable. | 35: Publication of printed matter (including downloadable) for commercial purposes; advertising agencies; marketing; presentation of companies on the internet and other media; communication agencies, namely, advertising and public relations services; business consultancy and advisory services, namely, communication advisory firm services and media consul …","goodsServicesClassCount": 5,"useRequirementCountries": ["IN","US"],"protectedCountries": ["CH","CN","EM","JP","NO"],"protectedCountriesCount": 5,"refusedCountries": ["AU","IN","RU","US"],"refusedCountriesCount": 4,"opposedCountries": ["AU"],"renewalCount": 0,"transactionCount": 23,"lastTransactionCode": "INNP","lastTransactionDate": "2026-03-30","basicApplicationCountry": null,"basicApplicationDate": null,"basicRegistrationCountry": "DE","basicRegistrationDate": "2012-05-15","languageOfApplication": "English","gazetteNumber": "2017/11","matchedQuery": "filters","detailUrl": "https://www3.wipo.int/madrid/monitor/en/showData.jsp?ID=ROM.1336632","source": "WIPO Madrid international trademark register","observedAt": "2026-08-19T21:30:21.004Z"}
The most complete WIPO Madrid trademark scraper available. Search the international trademark register (about 1.4 million registrations filed under the Madrid System, covering protection in 130+ territories from a single filing) and get the full public record for each mark, plus derived fields, and 14 filters to target exactly the registrations you need. Export as JSON, CSV or Excel.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Use cases
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
Give it trademark words, owner names or registration numbers (or no search at all and just filters) and it returns the matching international registrations with the full public record attached: who owns the mark, which IP firm represents them, where protection was sought, where it was granted, where it was refused or opposed, what goods and services it covers, and when it expires.
Every search field accepts a list, so one run can cover many brands or many owners at once. Results are merged and de-duplicated across searches. Fields with no value in the source are returned as null, never guessed.
With enrichment on (the default) each registration is expanded from its full public record: goods and services wording per Nice class, holder legal nature and nationality, basic application and registration details, and the per-territory outcome (granted, refused, opposed) derived from the registration's own transaction ledger.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 100 German-owned marks in Nice class 9 that expire in Q4 2026.
{"holderCountries": ["DE"],"niceClasses": ["9"],"expiringFrom": "2026-10-01","expiringTo": "2026-12-31","maxTrademarks": 100,"fetchDetails": true}
Leave every search field empty to browse purely by filter (newest registrations first). All filters combine with AND; multi-value fields match any of the listed values.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxTrademarks | integer | no | 10 | Maximum registrations to collect. The register holds about 1.4 million; for large pulls narrow with the filters. |
brandNames | string[] | no | (empty) | One or more trademark words to search. Each entry runs as its own search; results are merged and de-duplicated. Wildcards supported, for example nova*. |
holderNames | string[] | no | (empty) | One or more owner names, for example Nestle, Siemens. Each entry runs as its own search. |
internationalRegNumbers | string[] | no | (empty) | Look up specific registrations by number, for example 1323866. |
goodsServices | string | no | (empty) | Keyword matched against the goods and services wording, for example software, footwear, pharmaceutical. |
status | enum | no | ACT | Registration status: ACT (in force), INA (no longer in force), PEND (not yet in force), or ALL. |
niceClasses | string[] | no | (all) | Nice classification class numbers, for example 9, 35, 42. |
holderCountries | string[] | no | (all) | Two-letter ISO country codes of the owner's address, for example DE, US, CN. |
originOffices | string[] | no | (all) | Two-letter codes of the office the registration originated from, for example US, DE, EM (EU). |
designatedCountries | string[] | no | (all) | Only return registrations seeking protection in these territories, for example BR, MX, JP. |
expiringFrom | string | no | (empty) | Only return registrations that expire on or after this date (YYYY-MM-DD). |
expiringTo | string | no | (empty) | Only return registrations that expire on or before this date (YYYY-MM-DD). |
registeredFrom | string | no | (empty) | Only return registrations dated on or after this date (YYYY-MM-DD). |
registeredTo | string | no | (empty) | Only return registrations dated on or before this date (YYYY-MM-DD). |
fetchDetails | boolean | no | true | When on (recommended), enrich each registration with goods and services, legal nature, basic-filing details, refusals, oppositions and renewals. Turn off for a faster, lighter run. |
Output reference
One dataset item per international registration. Types: string, integer, boolean, string[], integer[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
internationalRegistrationNumber | string | WIPO international registration number (unique per mark). |
markText | string | The trademark text. |
status | string | Status code: ACT, INA or PEND. |
statusLabel | string | Human label: In force, No longer in force, Not yet in force. |
registrationDate | string | International registration date (YYYY-MM-DD). |
expiryDate | string | Date protection expires (YYYY-MM-DD). |
monthsToExpiry | integer | Whole months from the run time to expiryDate. |
holderName | string | Registered owner (holder) name. |
holderAddress | string | Holder full postal address. |
holderCountry | string | Two-letter ISO country code of the holder. |
representativeName | string | IP law firm or attorney of record, or null if none. |
representativeAddress | string | Representative postal address. |
representativeCountry | string | Two-letter ISO country code of the representative. |
originOffice | string | Office of origin the registration was filed from. |
designatedCountries | string[] | Territories where protection is sought. |
designatedCountriesCount | integer | Count of designated territories. |
niceClasses | integer[] | Nice classification class numbers covered. |
niceClassCount | integer | Count of Nice classes. |
basicApplicationNumber | string | National basic application number, or null (enrichment). |
basicRegistrationNumber | string | National basic registration number, or null (enrichment). |
hasContactEmailOnFile | boolean | Whether the register holds a contact email for the mark. |
holderNationality | string | Holder nationality, or null (enrichment). |
holderLegalNature | string | Corporate form and jurisdiction, for example Corporation, California, United States (enrichment). |
goodsServices | string | Goods and services wording per Nice class, in English (enrichment). |
goodsServicesClassCount | integer | Number of classes with goods and services wording (enrichment). |
useRequirementCountries | string[] | Territories that carry a declaration-of-use requirement (enrichment). |
protectedCountries | string[] | Territories that granted protection (enrichment). |
protectedCountriesCount | integer | Count of territories that granted protection (enrichment). |
refusedCountries | string[] | Territories that issued a refusal (enrichment). |
refusedCountriesCount | integer | Count of refusing territories (enrichment). |
opposedCountries | string[] | Territories where the mark was opposed (enrichment). |
renewalCount | integer | Number of renewals recorded (enrichment). |
transactionCount | integer | Number of transactions in the registration ledger (enrichment). |
lastTransactionCode | string | Code of the latest recorded transaction (enrichment). |
lastTransactionDate | string | Date of the latest recorded transaction (enrichment). |
basicApplicationCountry | string | Country of the basic application, or null (enrichment). |
basicApplicationDate | string | Date of the basic application, or null (enrichment). |
basicRegistrationCountry | string | Country of the basic registration (enrichment). |
basicRegistrationDate | string | Date of the basic registration (enrichment). |
languageOfApplication | string | Filing language (English, French or Spanish). |
gazetteNumber | string | WIPO Gazette issue the registration was published in. |
matchedQuery | string | Which search or filter matched this record. |
detailUrl | string | Link to the registration on the WIPO Madrid Monitor. |
source | string | Constant source label. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | Present only on a failed run, where a single item with a populated error field is written instead of results. |
Enrichment fields are populated when fetchDetails is on (the default). Fields marked null are genuinely absent for that mark in the source.
Use cases
- Renewal-deadline pipelines. Set an expiry window plus a holder country to get every mark coming up for renewal, with the responsible IP firm already attached.
- Trademark watch and clearance. Monitor new registrations in your Nice classes and territories with a registration-date window.
- Competitive and M&A intelligence. Pull an owner's entire international portfolio, including where protection failed.
- IP firm business development. Find owners filing into your jurisdiction, and see who currently represents them.
- Refusal and opposition analysis. Study which territories refuse or oppose marks in a given class.
Run via API and CLI
Start a run via the REST API. Replace YOUR_TOKEN with your Apify API token.
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~wipo-madrid-trademarks-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"holderCountries":["DE"],"niceClasses":["9"],"expiringFrom":"2026-10-01","expiringTo":"2026-12-31","maxTrademarks":100}'
Apify CLI:
apify call scrapers_lat/wipo-madrid-trademarks-scraper \--input '{"brandNames":["apple"],"maxTrademarks":25}'
Fetch results
Results land in the run's dataset and can be exported as JSON, CSV or Excel from the Apify console or the API:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=csv&token=YOUR_TOKEN"
Billing and limits
This actor uses pay-per-event pricing. You are only charged on a successful result.
| Event | Price (USD) | When it is charged |
|---|---|---|
result | 0.015 | Once per international trademark registration written to the dataset. |
- No charge on failure. If a run errors, a single item with a populated
errorfield is written and is not charged. Empty runs cost nothing. - Free Apify plans are capped at 10 results per run; upgrade for larger pulls.
- Spend cap respected. Set
maxTotalChargeUsdon the run to stop once a budget is reached. - Set
maxTrademarksto control run size and cost. The register holds about 1.4 million registrations, so use the filters to target the exact segment you need. Deep result sets page through in full.
FAQ and troubleshooting
Which trademarks are covered? Every international registration in the Madrid System register: marks filed through WIPO that seek protection across the 130+ member territories. National-only marks that were never filed internationally are not part of this register.
How fresh is the data? It is read live from the public register on each run, and every record carries observedAt plus the registration's own lastTransactionDate.
Why is representativeName sometimes null? Not every holder appoints a representative; many file directly. The field is null when the register has no representative on record.
What do protectedCountries and refusedCountries mean? They are derived from the registration's own transaction history: territories that issued a statement of grant of protection, and territories that issued a refusal. A refusal later overturned by a grant is reported only as protected.
Why is goodsServices shorter than the record page? The register publishes the same wording in English, French and Spanish. This actor returns the English text (falling back to the filing language when no English version exists) so exports stay readable.
Can I get more than the count I set? No. maxTrademarks is a hard cap; the actor stops once it is reached.
Do I need a proxy or an API key? No. The source is a public register and needs neither.
Not affiliated with, endorsed by or sponsored by the World Intellectual Property Organization. All data is read from publicly available records.
