WIPO Madrid International Trademark Scraper avatar

WIPO Madrid International Trademark Scraper

Pricing

from $12.75 / 1,000 results

Go to Apify Store
WIPO Madrid International Trademark Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

WIPO Madrid International Trademark Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
maxTrademarksintegerno10Maximum registrations to collect. The register holds about 1.4 million; for large pulls narrow with the filters.
brandNamesstring[]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*.
holderNamesstring[]no(empty)One or more owner names, for example Nestle, Siemens. Each entry runs as its own search.
internationalRegNumbersstring[]no(empty)Look up specific registrations by number, for example 1323866.
goodsServicesstringno(empty)Keyword matched against the goods and services wording, for example software, footwear, pharmaceutical.
statusenumnoACTRegistration status: ACT (in force), INA (no longer in force), PEND (not yet in force), or ALL.
niceClassesstring[]no(all)Nice classification class numbers, for example 9, 35, 42.
holderCountriesstring[]no(all)Two-letter ISO country codes of the owner's address, for example DE, US, CN.
originOfficesstring[]no(all)Two-letter codes of the office the registration originated from, for example US, DE, EM (EU).
designatedCountriesstring[]no(all)Only return registrations seeking protection in these territories, for example BR, MX, JP.
expiringFromstringno(empty)Only return registrations that expire on or after this date (YYYY-MM-DD).
expiringTostringno(empty)Only return registrations that expire on or before this date (YYYY-MM-DD).
registeredFromstringno(empty)Only return registrations dated on or after this date (YYYY-MM-DD).
registeredTostringno(empty)Only return registrations dated on or before this date (YYYY-MM-DD).
fetchDetailsbooleannotrueWhen 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.

FieldTypeDescription
internationalRegistrationNumberstringWIPO international registration number (unique per mark).
markTextstringThe trademark text.
statusstringStatus code: ACT, INA or PEND.
statusLabelstringHuman label: In force, No longer in force, Not yet in force.
registrationDatestringInternational registration date (YYYY-MM-DD).
expiryDatestringDate protection expires (YYYY-MM-DD).
monthsToExpiryintegerWhole months from the run time to expiryDate.
holderNamestringRegistered owner (holder) name.
holderAddressstringHolder full postal address.
holderCountrystringTwo-letter ISO country code of the holder.
representativeNamestringIP law firm or attorney of record, or null if none.
representativeAddressstringRepresentative postal address.
representativeCountrystringTwo-letter ISO country code of the representative.
originOfficestringOffice of origin the registration was filed from.
designatedCountriesstring[]Territories where protection is sought.
designatedCountriesCountintegerCount of designated territories.
niceClassesinteger[]Nice classification class numbers covered.
niceClassCountintegerCount of Nice classes.
basicApplicationNumberstringNational basic application number, or null (enrichment).
basicRegistrationNumberstringNational basic registration number, or null (enrichment).
hasContactEmailOnFilebooleanWhether the register holds a contact email for the mark.
holderNationalitystringHolder nationality, or null (enrichment).
holderLegalNaturestringCorporate form and jurisdiction, for example Corporation, California, United States (enrichment).
goodsServicesstringGoods and services wording per Nice class, in English (enrichment).
goodsServicesClassCountintegerNumber of classes with goods and services wording (enrichment).
useRequirementCountriesstring[]Territories that carry a declaration-of-use requirement (enrichment).
protectedCountriesstring[]Territories that granted protection (enrichment).
protectedCountriesCountintegerCount of territories that granted protection (enrichment).
refusedCountriesstring[]Territories that issued a refusal (enrichment).
refusedCountriesCountintegerCount of refusing territories (enrichment).
opposedCountriesstring[]Territories where the mark was opposed (enrichment).
renewalCountintegerNumber of renewals recorded (enrichment).
transactionCountintegerNumber of transactions in the registration ledger (enrichment).
lastTransactionCodestringCode of the latest recorded transaction (enrichment).
lastTransactionDatestringDate of the latest recorded transaction (enrichment).
basicApplicationCountrystringCountry of the basic application, or null (enrichment).
basicApplicationDatestringDate of the basic application, or null (enrichment).
basicRegistrationCountrystringCountry of the basic registration (enrichment).
basicRegistrationDatestringDate of the basic registration (enrichment).
languageOfApplicationstringFiling language (English, French or Spanish).
gazetteNumberstringWIPO Gazette issue the registration was published in.
matchedQuerystringWhich search or filter matched this record.
detailUrlstringLink to the registration on the WIPO Madrid Monitor.
sourcestringConstant source label.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringPresent 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.

EventPrice (USD)When it is charged
result0.015Once per international trademark registration written to the dataset.
  • No charge on failure. If a run errors, a single item with a populated error field 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 maxTotalChargeUsd on the run to stop once a budget is reached.
  • Set maxTrademarks to 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.