Bosco Labs

Tools › Compliance & law

Dutch Case Law API (Rechtspraak): ECLI lookup, uitspraken

Coming soon to the Store

Look up Dutch court decisions (uitspraken) by ECLI, or search them by court, legal area, date and keywords: court, decision and publication dates, case numbers, legal areas, procedure, the court's own summary (inhoudsindicatie), appeal / cassation / Advocate-General relations, referenced laws, and optionally the full text. Built for AI agents doing legal and compliance research, and for people who want Rechtspraak data as clean JSON.

Price$0.005 per decision returned
DomainCompliance & law
Call itApify API or MCP

Pricing (pay per event): $0.005 per decision returned (decision). An unknown ECLI, bad input or an empty search costs nothing.

Coming soon to the Apify StoreAsk for early access

Questions agents ask

  • “Find Hoge Raad rulings on tenancy law (huurrecht) since 2024 and summarise what each one decided, with links.”

Example

Input

{ "query": "huurrecht", "courts": ["HR"], "dateFrom": "2024-01-01", "maxResults": 20 }

Output

{
  "schema_version": "1",
  "ecli": "ECLI:NL:HR:2014:952",
  "title": "ECLI:NL:HR:2014:952 Hoge Raad , 22-04-2014 / 12/05369",
  "court": "Hoge Raad",
  "court_code": "HR",
  "court_id": "http://standaarden.overheid.nl/owms/terms/Hoge_Raad_der_Nederlanden",
  "document_type": "uitspraak",
  "decision_date": "2014-04-22",
  "publication_date": "2014-04-22",
  "modified": "2025-03-22T08:54:18",
  "case_numbers": ["12/05369"],
  "seat": null,
  "legal_areas": ["Strafrecht"],
  "procedures": ["Cassatie"],
  "language": "nl",
  "summary": "Belediging. Art. 137c Sr. Onder “zich in het openbaar uitlaten” a.b.i. art. 137c, Sr, welke bepaling beoogt de openbare orde te beschermen, dient te worden verstaan “het ter kennis van het publiek brengen”. ...",
  "relations": [
    {
      "ecli": "ECLI:NL:PHR:2013:2630",
      "relation": "conclusie",
      "direction": "earlier",
      "outcome": "gevolgd",
      "label": "Conclusie: ECLI:NL:PHR:2013:2630, Gevolgd",
      "url": "https://uitspraken.rechtspraak.nl/details?id=ECLI:NL:PHR:2013:2630"
    },
    {
      "ecli": "ECLI:NL:GHAMS:2012:BY1475",
      "relation": "cassatie",
      "direction": "earlier",
      "outcome": "bekrachtiging/bevestiging",
      "label": "In cassatie op : ECLI:NL:GHAMS:2012:BY1475, Bekrachtiging/bevestiging",
      "url": "https://uitspraken.rechtspraak.nl/details?id=ECLI:NL:GHAMS:2012:BY1475"
    }
  ],
  "references": [
    {
      "type": "law",
      "label": "Wetboek van Strafrecht 137c",
      "identifier": "jci1.31:c:BWBR0001854&artikel=137c",
      "bwb_id": "BWBR0001854",
      "article": "137c",
      "url": "https://wetten.overheid.nl/jci1.31:c:BWBR0001854&artikel=137c"
    }
  ],
  "published_in": ["Rechtspraak.nl", "NJB 2014/985", "RvdW 2014/698", "NJ 2014/336 met annotatie van N. Keijzer", "SR-Updates.nl 2014-0195", "NbSr 2014/185"],
  "replaces": [],
  "replaced_by": null,
  "has_text": true,
  "text_chars": 24215,
  "text": null,
  "text_truncated": null,
  "source_url": "https://uitspraken.rechtspraak.nl/details?id=ECLI:NL:HR:2014:952",
  "data_url": "https://data.rechtspraak.nl/uitspraken/content?id=ECLI:NL:HR:2014:952",
  "warnings": [],
  "retrieved_at": "2026-11-05T22:45:19+00:00",
  "duration_seconds": 0.11
}

What you get

FieldTypeMeaning
schema_versionstringOutput schema version.
eclistringEuropean Case Law Identifier of the decision, e.g. ECLI:NL:HR:2024:123.
titlestring | nullRechtspraak's display title: ECLI, court, decision date and case numbers.
courtstring | nullCourt (instantie) name, e.g. Hoge Raad, Raad van State, Rechtbank Amsterdam.
court_codestring | nullCourt code from the ECLI, e.g. HR, RVS, CRVB, GHAMS, RBAMS.
court_idstring | nullThe court's identifier URI in the Rechtspraak value list.
document_typestring | null"uitspraak" (decision) or "conclusie" (Advocate-General's opinion).
decision_datestring | nullDate of the decision or opinion (uitspraakdatum), YYYY-MM-DD.
publication_datestring | nullDate the text was published on rechtspraak.nl, YYYY-MM-DD.
modifiedstring | nullLast change to the metadata or text, ISO 8601 (Rechtspraak local time).
case_numbersarrayCase numbers (zaaknummers) as published, e.g. ["22/01066"].
seatstring | nullPlace of session (zittingsplaats), when given.
legal_areasarrayLegal areas (rechtsgebieden), e.g. ["Strafrecht"].
proceduresarrayProcedure types, e.g. ["Cassatie"], ["Hoger beroep"].
languagestring | nullLanguage code of the metadata record (nl); English translations say so in the summary.
summarystring | nullThe court's own summary (inhoudsindicatie) as plain text; null when none.
relationsarrayFormal relations to other decisions: {ecli, relation (hogerBeroep, cassatie, conclusie, ...), direction (earlier = the other decision is from an earlier instance, later = a later one), outcome (e.g. bekrachtiging/bevestiging, vernietiging, contrair), label, url}.
referencesarrayReferences to legislation and case law: {type (law, case_law, eu_law, local_regulation), label, identifier (BWB jci or ECLI), bwb_id, article, url}.
published_inarrayWhere the decision is published (vindplaatsen), e.g. ["Rechtspraak.nl", "NJ 2014/336"].
replacesarrayOld identifiers (LJN) this ECLI replaces.
replaced_bystring | nullECLI that replaces this one, if it was withdrawn.
has_textbooleanWhether rechtspraak.nl publishes the decision text (false = metadata only).
text_charsinteger | nullLength of the full plain text in characters (null without text).
textstring | nullThe decision as plain text (includeText only): '## ' section headings, numbering kept, footnotes at the end; cut at maxTextChars.
text_truncatedboolean | nullTrue when text was cut at maxTextChars; null without includeText.
source_urlstringThe decision on uitspraken.rechtspraak.nl.
data_urlstringThe official Open Data XML this row was read from.
warningsarrayCaveats in plain words: text cut, metadata only, replaced ECLI, keyword scan limit.
retrieved_atstringWhen the row was made (ISO 8601, UTC).
duration_secondsnumberHow long fetching this decision took.

Use with AI agents (MCP)

Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>. It works once the Actor is live on the Apify Store.

https://mcp.apify.com?tools=bosco_labs/dutch-case-law

For “Find Hoge Raad rulings on tenancy law (huurrecht) since 2024 and summarise what each one decided, with links.” the agent passes:

{ "query": "huurrecht", "courts": ["HR"], "dateFrom": "2024-01-01", "maxResults": 20 }

stable snake_case fields, ISO dates, null for unknown, a rechtspraak.nl link per decision and per related decision. warnings says in plain words when text was cut, an ECLI has metadata only or was replaced, or a keyword scan hit its limit. An empty search ends with a status message saying why and what to try.

Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~dutch-case-law/run-sync-get-dataset-items with the input as JSON body. Cost: $0.005 per decision returned.

Input fields

FieldTypeMeaning
eclistringOne or more Dutch ECLIs, separated by commas or spaces, e.g. "ECLI:NL:HR:2024:123" or "ECLI:NL:HR:2024:123, ECLI:NL:RVS:2024:1000" (max 100). Lower case and uitspraken.rechtspraak.nl links also work. One row per ECLI; an unknown ECLI fails at no charge. Empty = search with the fields below (both can be combined: ECLI rows come first).
querystringWords to find in the decision's title and summary (inhoudsindicatie), case-insensitive. Commas separate alternatives, words within one alternative must all appear: "huur, pacht" = huur OR pacht; "ontslag op staande voet" = all four words. Summaries are in Dutch, so use Dutch words. The official API has no full-text search: this filters the newest-updated decisions that match the other filters (up to 10,000 scanned). Empty = no keyword filter.
courtsarrayCourt codes as used in the ECLI, e.g. ["HR"] for the Hoge Raad (Supreme Court); others: PHR (Procureur-Generaal/AG opinions), RVS (Raad van State), CRVB, CBB, GHAMS, GHARL, GHDHA, GHSHE (courts of appeal), RBAMS, RBDHA, RBROT, RBMNE ... (district courts). Full Dutch names also work. Empty = all courts.
legalAreasarrayRechtsgebied names, e.g. ["Strafrecht"], ["Belastingrecht", "Arbeidsrecht"]; English also works: criminal, civil, administrative, tax, employment, immigration, insolvency, family, competition, environmental. A main area includes its sub-areas. Empty = all areas.
dateFromstringEarliest decision date (uitspraakdatum), YYYY-MM-DD, e.g. "2024-01-01". Empty = no lower limit (to today if dateTo is empty).
dateTostringLatest decision date, inclusive, YYYY-MM-DD, e.g. "2024-12-31". Empty = today when dateFrom is set, else no limit.
documentTypestring"uitspraak" = court decisions only, "conclusie" = opinions of the Advocate-General at the Hoge Raad only. Empty = both.
maxResultsintegerMost decisions to return from a search, most recently published or updated first, e.g. 20 (default). One charge per decision returned.
includeTextbooleantrue = add the full decision as plain text (section headings as '## ', numbered paragraphs kept), cut at maxTextChars. Default false: metadata and summary only (small rows). Same price.
maxTextCharsintegerWith includeText: cap on the text per decision in characters, e.g. 20000 (default). Longer text is cut and flagged (text_truncated, text_chars gives the full length).

Sources, licence and limits

Where does the data come from? Only from the Open Data service of the Dutch judiciary (Rechtspraak, data.rechtspraak.nl): the ECLI index and the decision XML. Nothing is added, rewritten or summarised; the summary is the court's own inhoudsindicatie.

Which courts? Everything Rechtspraak publishes: Hoge Raad and its Procureur-Generaal (PHR), Raad van State, Centrale Raad van Beroep, College van Beroep voor het bedrijfsleven, the four courts of appeal, the eleven district courts, the Caribbean courts and several disciplinary tribunals, from the 1990s on. Courts publish only a selection of their decisions, so absence from Rechtspraak does not mean a case does not exist.

Personal data? Courts pseudonymise decisions before publishing them: parties and other private persons appear as [eiser], [verdachte], [adres] and so on. This Actor returns the published text as is, adds nothing, links nothing to other sources and offers no search by person. Do not use it to try to re-identify anyone.

How current is it? Live: every run reads data.rechtspraak.nl. New decisions appear the day Rechtspraak publishes them, usually days to weeks after the decision date.

Is this legal advice? No. It returns published decisions and their metadata; it does not interpret them. English translations of some landmark decisions are unofficial (the courts say so in the summary); the Dutch text is authentic.

Limits: 100 ECLIs or 200 search results per run; no full-text search (see above); no filter by procedure type (the API has none; procedures is in every row); text cut at maxTextChars. Rechtspraak asks users to stay under 10 requests per second, so this Actor reads one decision at a time.

Content: decisions of the Dutch courts via Rechtspraak Open Data, https://www.rechtspraak.nl/uitspraken/open-data (court decisions carry no copyright, art. 11 Auteurswet). Text is converted from XML to plain text and long texts are cut where maxTextChars says; nothing else is changed.

Coming soon to the Apify StoreAsk for early access