# ICSID Investor-State Arbitration Scraper (`parseforge/icsid-arbitration-cases-scraper`) Actor

Scrape the ICSID case database: 1,150+ investor-state arbitration and conciliation cases since 1972 with parties and nationalities, treaty invoked, tribunal, counsel, procedural timeline and published decisions.

- **URL**: https://apify.com/parseforge/icsid-arbitration-cases-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.23 / 1,000 icsid cases

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### ICSID Cases Scraper - Investment Arbitration Database

**Download the ICSID case database as data: all 1,156 investor-state arbitrations and conciliations registered since 1972, with the parties and their nationalities, the treaty invoked, the tribunal, the counsel, the full procedural timeline and every published decision.** No login, no API key, no browser. Export to CSV, JSON, Excel, or XML.

ICSID publishes each case on its own page and offers no export. This Actor reads the case index in one request, applies your filters, then opens each case page and returns it as a flat row, so a question like "every claim against Mexico under USMCA, with the arbitrators and the procedural history" becomes a spreadsheet instead of an afternoon of clicking.

| Who uses it | What they use ICSID data for |
|---|---|
| Investment arbitration practices | Case history by state, treaty, sector and arbitrator before advising or drafting |
| Arbitrator selection and challenges | Who sat on what, who appointed them and how often, with nationalities |
| Litigation funders and claims buyers | Pipeline of pending claims by respondent state and sector, with the procedural stage |
| Governments and ministries of justice | Every claim filed against a state, its counsel and its current posture |
| Academics and NGOs | A 50-year ISDS panel with treaties, outcomes and published decisions |

### What it does

The database holds **1,156 cases**: 304 pending and 852 concluded, made up of 1,050 ICSID Convention arbitrations, 91 Additional Facility cases and 15 conciliations, registered between 1972 and this year. Every row carries:

- 🧾 **The case:** case number, full case title, type, status, ICSID case id and the case page URL.
- 🗓️ **The dates:** registration date and year, date the tribunal was constituted, days since registration, days from registration to the last published development.
- 👥 **The parties:** claimants and respondents as clean lists, with the nationalities ICSID reports and the respondent state on its own field.
- 📜 **The claim:** subject of dispute, economic sector, the instruments invoked (BIT, ECT, USMCA, investment law or contract) and the applicable rules.
- 🧑‍⚖️ **The tribunal** (optional): every arbitrator, president, conciliator or annulment committee member, with nationality and who appointed them.
- 🏛️ **The counsel** (optional): party representatives for each side with their city and country.
- 📆 **The procedural timeline** (optional): every dated step ICSID publishes, tagged with the proceeding it belongs to. A 250 case sample averaged 17 steps per case.
- 📄 **Published decisions** (optional): awards, decisions and procedural orders with date, language and PDF link, and optionally the extracted text of the documents themselves.
- ⚖️ **The outcome** (optional): award rendered, settlement or discontinuance, annulment decided, jurisdiction declined, or still pending.

Every row contains: `caseNumber`, `caseId`, `caseTitle`, `caseUrl`, `caseType`, `status`, `isPending`, `dateRegistered`, `registrationYear`, `daysSinceRegistration`, `daysRegistrationToLastActivity`, `dateOfConstitution`, `claimants`, `claimantsText`, `claimantNationalities`, `claimantCount`, `respondents`, `respondentsText`, `respondentState`, `subjectOfDispute`, `economicSector`, `instrumentsInvoked`, `instrumentsText`, `applicableRules`, `languages`, `proceedings`, `proceedingCount`, `latestDevelopmentDate`, `latestDevelopment`, `arbitratorCount`, `publishedDecisionCount`, `caseDetailRead` and `scrapedAt`.

### What you can do with ICSID case data

**Map the claims against a state.**

`respondentStateContains: "Mexico"` returns every case filed against Mexico with the treaty invoked, the sector, the tribunal and where each case stands. In a 250 case sample of registrations since 2010 the most sued states were Mexico (25), Honduras (15), Colombia (12), Peru (10) and Panama (10).

**Research an arbitrator.**

`arbitratorNameContains` keeps only the cases where that person sat, and the tribunal block says whether they presided and which side appointed them, which is the record you need for an appointment or a challenge.

**Track a treaty.**

`treatyContains: "Energy Charter"` or `"USMCA"` pulls every claim under that instrument, with the sector and the outcome.

**Build a pipeline of pending claims.**

`caseStatuses: ["Pending"]` with the timeline block gives each live case with its latest procedural step, so you can see which claims are at jurisdiction, at hearing or awaiting an award.

### Why choose this scraper

|  | What you get |
|---|---|
| **The whole database** | 1,156 cases in one run instead of one case page at a time |
| **Parties parsed properly** | Claimant lists split on the nationality, so "Glenfarne Asset Company, LLC (U.S.)" survives intact instead of breaking at its own comma |
| **The tribunal with appointments** | Arbitrator, nationality and the party who appointed them, on 78% of the cases in a 250 case sample |
| **The full procedural record** | Every dated development, tagged by proceeding, averaging 17 steps per case |
| **The documents** | 833 published decisions across those 250 cases, with links and optional text extraction |
| **Filters that cost one request** | State, claimant, status, type and registration date are applied to the index before any case page is opened |

### How it compares

No other Apify Actor covers ICSID. Against the ICSID website the difference is export, filters and the parsed tribunal; against commercial ISDS databases the difference is that this reads only what ICSID publishes for free.

| Feature | ParseForge | icsid.worldbank.org | Commercial ISDS databases |
|---|---|---|---|
| Bulk export (CSV, JSON, Excel) | Yes | No | Paid |
| All 1,156 cases with parties and treaty | Yes | Yes, one page at a time | Yes |
| Tribunal with nationality and appointer | Yes | Yes, on the page | Yes |
| Procedural timeline as rows | Yes | As prose | Sometimes |
| Decision PDFs with extracted text | Yes | Links only | Paid |
| Filter by arbitrator, treaty or sector | Yes | Sign-in free search form | Yes |
| Price | $0.007 per case | Free, manual | Subscription |

### What a case looks like

```json
{
  "caseNumber": "ARB/26/33",
  "caseId": "6",
  "caseTitle": "Access Business Group LLC v. United Mexican States",
  "caseUrl": "https://icsid.worldbank.org/cases/case-database/case-detail?CaseNo=ARB%2F26%2F33",
  "caseType": "Arbitration",
  "status": "Pending",
  "isPending": "Yes",
  "dateRegistered": "2026-07-15",
  "registrationYear": 2026,
  "daysSinceRegistration": 44,
  "daysRegistrationToLastActivity": 10,
  "dateOfConstitution": "Not Disclosed",
  "claimants": ["Access Business Group LLC"],
  "claimantsText": "Access Business Group LLC",
  "claimantNationalities": ["U.S."],
  "claimantCount": 1,
  "respondents": ["United Mexican States"],
  "respondentsText": "United Mexican States",
  "respondentState": "United Mexican States",
  "subjectOfDispute": "Food products enterprise",
  "economicSector": "Agriculture, Fishing & Forestry",
  "instrumentsInvoked": ["USMCA (United States-Mexico-Canada Agreement)"],
  "instrumentsText": "USMCA (United States-Mexico-Canada Agreement)",
  "applicableRules": "ICSID Convention - Arbitration Rules",
  "languages": [],
  "proceedings": ["Original Proceeding"],
  "proceedingCount": 1,
  "latestDevelopmentDate": "2026-07-25",
  "latestDevelopment": "Following appointment by the Claimant, D. Brian King (U.S.) accepts his appointment as arbitrator.",
  "arbitratorCount": 0,
  "publishedDecisionCount": 0,
  "caseDetailRead": "Yes",
  "scrapedAt": "2026-08-27T17:27:11.491Z"
}
```

A case whose tribunal is not yet constituted has no composition to publish, which is why `arbitratorCount` is 0 and `dateOfConstitution` is `Not Disclosed` on a claim registered six weeks ago.

### Configure the run

Run it with no input for the newest registrations. Filters on status, type, parties and dates are applied to the index, so they cost nothing; sector, arbitrator and treaty filters are applied as each case page is read.

The 50 most recent cases:

```json
{ "maxItems": 50 }
```

Every pending claim against a state, with the tribunal and where the case stands:

```json
{
  "respondentStateContains": "Spain",
  "caseStatuses": ["Pending"],
  "includeTribunal": true,
  "includeProceduralTimeline": true,
  "maxItems": 100
}
```

Energy claims since 2015 with the counsel and the outcome:

```json
{
  "registeredFrom": "2015-01-01",
  "economicSectors": ["Oil, Gas & Mining", "Electric Power & Other Energy"],
  "includeRepresentatives": true,
  "includeCaseOutcome": true,
  "maxItems": 300
}
```

One case with its decisions read in full:

```json
{
  "caseNumbers": ["ARB/24/1"],
  "includePublishedDecisions": true,
  "includeDecisionText": true,
  "maxDecisionDocuments": 5
}
```

### Pricing

Pay-per-event. **$7 per 1,000 cases** plus $0.02 per run start and $0.004 for the one index request. The blocks below are opt-in and charged only when the case actually has them.

| Event | Price | When |
|---|---|---|
| `case-record` | $0.007 | Every case written, with its case page read |
| `case-index` | $0.004 | The single index request, once per run |
| `tribunal-composition` | $0.005 | The tribunal is published for that case |
| `party-representatives` | $0.005 | Counsel are published |
| `procedural-timeline` | $0.006 | The case has dated procedural steps |
| `published-decisions` | $0.005 | The case has published documents |
| `case-outcome` | $0.006 | The record says how it ended |
| `decision-document` | $0.010 | Each decision PDF downloaded and its text extracted |

| Run | Approximate cost |
|---|---|
| 50 newest cases | $0.38 |
| 250 cases with tribunal, counsel, timeline and outcome | $6.87 |
| All 1,156 cases, index fields only | $8.12 |
| 100 cases with 3 decision documents each | $4.72 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 cases as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to pull the whole database.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [ICSID Investor-State Arbitration Scraper](https://apify.com/parseforge/icsid-arbitration-cases-scraper?fpr=vmoqkp).
3. Set a state, a treaty or a date range, tick the blocks you want, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab, or schedule a weekly run to catch new registrations.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent the ICSID case database through the Model Context Protocol:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/icsid-arbitration-cases-scraper"
```

Then ask: *"Which claims against Colombia are still pending and under which treaty?"*, *"List the cases where Bernard Hanotiau presided"* or *"How many mining cases were registered since 2020?"*

### Troubleshooting

**Why is the tribunal empty?**

Because it is not constituted yet, or ICSID has not published it. In a 250 case sample the composition was published for 78% of cases; the missing ones are mostly claims registered in the last few months. You are not charged for a block that returned nothing.

**Why are `economicSector` or `subjectOfDispute` filters slower than the others?**

The case index carries only the case number, parties, status and registration date. Sector, subject, treaty and arbitrator live on the case page, so those filters are applied after each page is read while status, state, claimant, type and date filters are applied to the index first.

**Why fewer rows than I asked for?**

Your filters matched fewer cases. The log prints how many cases matched the index filters before any page was opened.

**Why is a decision document missing its text?**

Some ICSID PDFs are scans without a text layer, and a few older documents are not online at all. Those are skipped and not charged.

**Why is the run slow with decision text on?**

Each document is a separate download of a full arbitral award, often hundreds of pages. Keep `maxDecisionDocuments` at 3 or less for bulk runs; 250 cases with the four page-level blocks and no documents take 90 seconds.

### FAQ

| Question | Answer |
|---|---|
| What is ICSID? | The International Centre for Settlement of Investment Disputes, part of the World Bank Group, is the main forum for investor-state arbitration under investment treaties and contracts. |
| How many cases are there? | 1,156 registered between 1972 and today: 304 pending, 852 concluded. |
| Is the data public? | Yes. Every field comes from ICSID's public case index and case pages, and the decision PDFs it publishes itself. |
| Does it include the awards? | It includes every decision ICSID has published, with links, and optionally their extracted text. Awards that the parties have not consented to publish are not on the site at all. |
| Can I filter by treaty? | Yes, with `treatyContains`. Instruments are written as ICSID writes them, for example "BIT Colombia - Spain 2005" or "Energy Charter Treaty". |
| Can I find every case an arbitrator sat on? | Yes, with `arbitratorNameContains`. It matches presidents, arbitrators, conciliators and annulment committee members. |
| Does it cover UNCITRAL or SCC cases? | Only the ones ICSID administers, which the applicable rules field marks as UNCITRAL. Cases administered elsewhere are not in this database. |
| How current is it? | The index is live. During testing it carried a case registered five weeks earlier and developments from the previous month. |
| How many cases per run? | Free plan: 10. Paid: the whole database. |
| Is this an official ICSID or World Bank product? | No. It is unofficial and reads only public pages. |

### Related actors

- [WIPO Arbitration Decisions Scraper](https://apify.com/parseforge/wipo-arbitration-decisions-scraper?fpr=vmoqkp): domain name arbitration decisions with panellists and outcomes.
- [GAO Bid Protest Docket Scraper](https://apify.com/parseforge/gao-bid-protest-docket-scraper?fpr=vmoqkp): federal bid protests with parties, decisions and filing dates.
- [CourtListener Dockets Scraper](https://apify.com/parseforge/courtlistener-dockets-scraper?fpr=vmoqkp): federal and state docket entries by court and party.
- [World Bank Projects Scraper](https://apify.com/parseforge/worldbank-projects-scraper?fpr=vmoqkp): World Bank lending projects with sectors, countries and commitments.
- [SEC Litigation Releases Scraper](https://apify.com/parseforge/sec-litigation-releases-scraper?fpr=vmoqkp): SEC enforcement actions with defendants and case links.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) 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 ICSID or the World Bank Group. It collects only publicly available data from the ICSID case database. Case records name real people and companies, so you are responsible for using the data in compliance with applicable laws, including GDPR, CCPA, and PIPL, and with ICSID's terms. Do not use it to identify, profile, or target individuals.

# Actor input Schema

## `caseNumbers` (type: `array`):

ICSID case numbers to fetch directly, for example ARB/24/1, ARB(AF)/20/3 or CONC/21/1.

## `startUrls` (type: `array`):

Paste ICSID case detail URLs such as https://icsid.worldbank.org/cases/case-database/case-detail?CaseNo=ARB/24/1.

## `maxItems` (type: `integer`):

Free users: limited to 10 items (preview). Paid users: up to 1,000,000.

## `caseStatuses` (type: `array`):

Keep only cases in these states. The database holds 304 pending and 852 concluded cases.

## `caseTypes` (type: `array`):

Keep only these proceeding types, read from the case number: 1,050 ICSID Convention arbitrations, 91 Additional Facility cases and 15 conciliations.

## `economicSectors` (type: `array`):

Keep only cases in these sectors, as ICSID classifies them on the case page.

## `respondentStateContains` (type: `string`):

Keep only cases against this state, for example "Spain", "Venezuela" or "Egypt".

## `claimantContains` (type: `string`):

Keep only cases brought by a claimant whose name contains this text.

## `arbitratorNameContains` (type: `string`):

Keep only cases where an arbitrator, president or committee member matches this text. Applied after the case page is read.

## `treatyContains` (type: `string`):

Keep only cases invoking a matching instrument, for example "Energy Charter", "NAFTA" or a country name in a BIT.

## `registeredFrom` (type: `string`):

Earliest registration date, as YYYY-MM-DD. The database starts in 1972.

## `registeredTo` (type: `string`):

Latest registration date, as YYYY-MM-DD.

## `sortBy` (type: `string`):

Order the cases before reading them.

## `includeTribunal` (type: `boolean`):

Add every arbitrator, president or committee member with their nationality and who appointed them.

## `includeRepresentatives` (type: `boolean`):

Add counsel and law firms for each side with their city and country.

## `includeProceduralTimeline` (type: `boolean`):

Add every dated procedural step ICSID publishes for the case, from registration to the latest filing.

## `includePublishedDecisions` (type: `boolean`):

Add the published awards, decisions and procedural orders with their dates, languages and PDF links.

## `includeCaseOutcome` (type: `boolean`):

Classify how the case ended from its procedural record: award rendered, discontinued, settled, annulment decided or jurisdiction declined.

## `includeDecisionText` (type: `boolean`):

Download the published decision PDFs and extract their text. Slow and charged per document, so keep the document limit low.

## `maxDecisionDocuments` (type: `integer`):

How many published decisions to download per case when decision text is on. Maximum 20.

## Actor input object example

```json
{
  "maxItems": 10,
  "sortBy": "newest",
  "includeTribunal": false,
  "includeRepresentatives": false,
  "includeProceduralTimeline": false,
  "includePublishedDecisions": false,
  "includeCaseOutcome": false,
  "includeDecisionText": false,
  "maxDecisionDocuments": 3
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `cases` (type: `string`):

No description

## `csv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10,
    "maxDecisionDocuments": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/icsid-arbitration-cases-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 10,
    "maxDecisionDocuments": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/icsid-arbitration-cases-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "maxDecisionDocuments": 3
}' |
apify call parseforge/icsid-arbitration-cases-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/icsid-arbitration-cases-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5VfSyEWANWsiD9KDY/builds/qQUp7zArhVCGTi6fV/openapi.json
