WIPO UDRP Decisions Scraper avatar

WIPO UDRP Decisions Scraper

Pricing

from $19.00 / 1,000 results

Go to Apify Store
WIPO UDRP Decisions Scraper

WIPO UDRP Decisions Scraper

Scrapes WIPO UDRP domain name arbitration decisions by case year and number range. Returns each decision as a flat row with full text, parties, disputed domain, panel members, and outcome.

Pricing

from $19.00 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

ParseForge

WIPO UDRP Decisions Scraper

Scrape WIPO UDRP domain name arbitration decisions by case year and number range, with the complete decision text of every ruling. Each row carries the parties, disputed domains, panelist, date and outcome from the case record, plus the full text and direct URL of the published decision document. Export to CSV, JSON, Excel, or XML.

WIPO's UDRP decisions are public but spread across thousands of individual case pages, each linking to a separate decision document, with no bulk download. This actor walks the case numbers of a year, reads every case page, follows the link to the ruling, and returns the whole decision as text in one consistent row. A full year is about 5,300 cases.

Who uses itWhat they scrape WIPO for
IP attorneysResearching how a panelist has reasoned about bad faith before filing a UDRP complaint.
Domain investorsReading how panels ruled on comparable domain names to assess reverse domain name hijacking risk.
Legal academicsBuilding a full-text corpus of UDRP decisions for empirical analysis of trademark law.
Brand protection managersTracking decisions naming a competitor as complainant to understand their enforcement posture.

What it does

  • ๐Ÿ“„ Full decision text. The complete ruling, extracted from the decision document WIPO publishes for each case: PDF for 2023 onwards, HTML for earlier years. Returned in the language of the proceeding.
  • ๐Ÿ”— Direct document URL. The resolved link to the PDF or HTML decision, so you can cite or archive the original.
  • ๐Ÿ“‹ Case record fields. Disputed domains, complainant, respondent, panelist, decision date and outcome as listed on the WIPO case page.
  • ๐Ÿ“… Year walk or case list. Walk a year from any case number, or hand it an explicit list of case IDs.
  • ๐Ÿ›ก๏ธ Built for long runs. Cases that WIPO temporarily fails to serve are retried and, if still unreachable, recorded as error rows you can re-fetch. Progress survives a platform migration, so a resumed run continues where it stopped instead of starting over.

What you can do with WIPO data

โš–๏ธ Prepare a UDRP complaint. An IP attorney pulls every 2024 decision by a specific panelist and searches the full text for how they weigh prior use of a mark.

๐Ÿ“Š Analyze decision trends. A legal researcher collects five years of rulings and measures grant rates by industry, complainant type and panel composition.

๐Ÿ›ก๏ธ Defend against a UDRP claim. A domain investor scrapes decisions involving their portfolio's keywords and reads the reasoning that found legitimate interest.

๐Ÿข Monitor competitor enforcement. A brand protection manager pulls the quarter's decisions naming a competitor as complainant and reads which arguments succeeded.

Output

One row per case. Fields in the order they appear:

FieldTypeWhat it holds
caseIdstringWIPO case number, for example D2024-0560
domainNamesstring[]Disputed domain name(s)
complainantstringComplainant as listed on the case page
respondentstringRespondent as listed on the case page
paneliststringPanelist name(s)
decisionDatestringDecision date as shown by WIPO, DD-MM-YYYY
decisionstringOutcome: Transfer, Complaint denied, Cancellation, Terminated
decisionUrlstringDirect URL of the decision document. Null when WIPO never published one.
decisionFormatstringpdf or html
decisionStatusstringok, not_published, failed, or skipped (see below)
decisionErrorstringWhy decisionStatus is failed, otherwise null
decisionPagesintegerPage count of the PDF, null for HTML decisions
decisionTextstringThe complete decision text
decisionTextUrlstringWIPO's stable redirect link for the decision
sourceUrlstringThe case page the row was read from
scrapedAtstringISO-8601 UTC timestamp
errorstringSet only on rows whose case page could not be loaded

decisionStatus tells you what happened to the document:

  • ok: the text was extracted. Most rows.
  • not_published: the case has a record but no decision document. These are cases that were terminated, withdrawn or settled before a panel ruled. Their decision field usually reads Terminated. Roughly one case in six in 2024.
  • failed: the document exists but could not be fetched or parsed after five attempts. decisionError says why. Re-fetch these with the caseIds input.
  • skipped: you turned includeDecisionText off.

A real row, trimmed:

{
"caseId": "D2024-0560",
"domainNames": ["resourcex.com"],
"complainant": "Hannes Schmutterer Schmutterer & Partner Information Technology GmbH",
"respondent": "Ross McIntosh",
"panelist": "Maier, Steven A.",
"decisionDate": "28-03-2024",
"decision": "Complaint denied",
"decisionUrl": "https://www.wipo.int/amc/en/domains/decisions/pdf/2024/d2024-0560.pdf",
"decisionFormat": "pdf",
"decisionStatus": "ok",
"decisionError": null,
"decisionPages": 5,
"decisionText": "ARBITRATION\nAND\nMEDIATION CENTER\nADMINISTRATIVE PANEL DECISION\nHannes Schmutterer Schmutterer & Partner Information Technology GmbH v.\nRoss McIntosh\nCase No. D2024-0560\n1. The Parties\n ... 2,047 words ... \n8. Decision\nFor the foregoing reasons, the Complaint is denied.\n/Steven A. Maier/\nSteven A. Maier\nSole Panelist\nDate: March 28, 2024",
"decisionTextUrl": "https://www.wipo.int/amc/en/domains/search/text.jsp?case=D2024-0560",
"sourceUrl": "https://www.wipo.int/amc/en/domains/search/case.jsp?case=D2024-0560",
"scrapedAt": "2026-08-21T15:21:04.118Z",
"error": null
}

A 2024 decision PDF runs four to seven pages and about 13,000 characters of text.

Why choose this scraper

What you get
The ruling itselfThe full decision text, not the case summary. Searchable and citable.
Every format WIPO usesPDF decisions from 2023 onwards and both HTML layouts WIPO used before, in the language of the proceeding.
Honest about gapsA case without a published decision is labelled not_published, not silently dropped and not returned empty.
Survives a long runRetries with backoff, a pause when WIPO throttles, error rows you can re-fetch, and progress that resumes after a platform migration.
Rows in orderCases are fetched in parallel and written in case-number order.

How it compares

WIPO UDRP Decisions ScraperBuild it in-houseBy hand
SetupRun it now, zero configDays of engineeringNone, but minutes per case
Decision textExtracted from PDF and HTMLYou write the parsersCopy and paste from 5,000 PDFs
When WIPO changesMaintained for youYou fix itYou re-learn the page
Retries, throttling, resumeBuilt inYour problemNot applicable
OutputFixed JSON schema, CSV/Excel exportWhatever you buildA folder of PDFs

Configure the run

Pick a year and a start case number, or list the cases you want. The Input tab lists every parameter.

One case, the quickest way to see the output:

{
"caseIds": ["D2024-0560"]
}

A full year with decision text:

{
"year": "2024",
"startCase": 1,
"maxItems": 10000,
"includeDecisionText": true,
"concurrency": 4
}

The actor stops on its own at the end of the year, after twenty consecutive case numbers with no record. Set maxItems above the year's size and let it run out.

Before a full-year run: check the run's cost limit

A full year is over five thousand paid results. Apify stops any run that reaches the Maximum cost per run set in its run options, and the default is whatever is left of your monthly limit. Set it above what a full year costs at the per-result price shown on the Pricing tab, or the run ends part-way with the message "aborted because it reached its maximum cost". If that happens, raise the limit and resurrect the run: progress is saved, and it continues from the case where it stopped without re-delivering or re-charging anything.

How long a full year takes

Each case needs one request for the case page and one for the decision document, which is a PDF of 100 to 200 KB for recent years. At the default concurrency of 4 the actor delivers roughly 100 to 180 rows per minute, so a full year of about 5,300 cases with text takes on the order of an hour. Set the run timeout to at least two hours so a slow patch at WIPO cannot end it early. Metadata only (includeDecisionText: false) is several times faster.

When WIPO pushes back

WIPO serves individual pages with a gateway timeout now and then, for a few minutes at a time. The actor retries each one five times over half a minute. A case that still fails is parked and retried once more at the end of the run, after the burst has passed, and only then recorded as an error row if it is still unreachable. Failures never count toward the end of the year, so a wobbly hour at WIPO cannot cut a run short.

WIPO also throttles a single address after roughly a hundred cases with their documents. That is why Apify Proxy is on by default: requests spread across addresses, each worker keeps its own session, and a throttled session is rotated away. If you turn the proxy off, the actor still copes: every worker pauses for a minute when WIPO refuses it, and the run summary says how often that happened.

Re-fetching the rows that failed

Filter your dataset for rows with an error field or decisionStatus: "failed", collect their caseId values, and run again with only those:

{
"caseIds": ["D2024-0563", "D2024-1290"]
}

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the WIPO UDRP Decisions Scraper.
  3. Set your inputs, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to WIPO through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/wipo-arbitration-decisions-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

A row has decisionStatus: "not_published" and no text.

That case has no decision document on WIPO's site. It was terminated, withdrawn or settled before a panel ruled; its decision field usually says so. There is nothing to fetch.

A row has decisionStatus: "failed".

The document exists but could not be fetched or parsed after five attempts. decisionError carries the reason, almost always a gateway timeout at WIPO. Re-run those cases with the caseIds input.

A row has an error field and nothing else.

WIPO did not serve that case page after five attempts. Re-run it with caseIds. These rows are not charged.

The run stopped before reaching my maxItems.

The actor stops at the end of the year: twenty consecutive case numbers with no record. 2024 ends at D2024-5360. If you started at 1 with a maximum of 10,000, stopping around 5,360 is the actor finishing, not failing.

The log says WIPO throttled the run.

WIPO refused requests from the run's address for a while, and the actor paused. This only happens with Apify Proxy turned off. Turn it back on, or lower concurrency.

I need decisions from a year range, not one year.

Run the actor once per year and merge the datasets, or chain runs with an Apify task.

FAQ

QuestionAnswer
Does this actor require a WIPO account or API key?No. It reads the public WIPO case pages and decision documents. No registration, API key or authentication is needed.
What is a WIPO UDRP decision?A ruling under the Uniform Domain Name Dispute Resolution Policy, issued by a WIPO-appointed panel, on whether a domain name was registered and used in bad faith and should be transferred or cancelled.
How are WIPO case IDs formatted?D{year}-{number}, for example D2024-0001. The actor builds these from the year and start number you give, or takes them as a list.
Where does the decision text come from?From the decision document WIPO links on each case page. Since 2023 that is a PDF; earlier years are HTML pages. The actor downloads it and extracts the text.
In which language is the text?The language of the proceeding as WIPO published it: mostly English, also Spanish, French, Italian, German and others.
Why do some cases have no decision text?Cases that end without a panel ruling have a case record but no decision document. The row says not_published. In 2024 about one case in six is like that.
Can I scrape decisions from multiple years in one run?One run covers one year, or any list of case IDs across years. To walk several years, run once per year and merge.
What happens if a case number does not exist?It is skipped. Twenty consecutive missing numbers end the run, which is how the actor detects the end of a year.
Can I filter by complainant, respondent or domain name?The actor collects the range or list you specify. Filter afterwards in your dataset tool or the exported file. The full text is there to search.
How many decisions can I scrape in one run?Up to 1,000,000. WIPO publishes roughly 4,000 to 5,400 UDRP decisions per year, so a full year fits in one run.
Is this actor suitable for WIPO cases outside the UDRP system?It is built for UDRP cases with D-prefix IDs. Other WIPO case types use different numbering and are not supported.
What export formats are supported?CSV, JSON, Excel, or XML from the dataset tab after the run completes.

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by the World Intellectual Property Organization. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.