CURIA EU Court of Justice Judgment Scraper
Pricing
Pay per event
CURIA EU Court of Justice Judgment Scraper
Scrapes CJEU case law from the official CURIA juris search — judgments, Advocate-General opinions, and orders with ECLI/CELEX identifiers, parties, subject matter, and full-text/PDF links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
The Court of Justice of the EU publishes thousands of judgments, AG opinions, and orders on curia.europa.eu — but there's no bulk download, no public API, and the search UI returns one page at a time. This actor scrapes the official CURIA juris search interface and returns structured records with ECLI identifiers, CELEX numbers, parties, dates, document types, and links to full text and PDFs on EUR-Lex.
Features
- Case-number mode — look up specific cases (e.g.
C-311/18) and get every judgment, opinion, and order in the dossier - Broad-search mode — filter by court, year, and document type to collect large batches across the dossier
- Returns ECLI and CELEX identifiers for unambiguous cross-referencing with EUR-Lex, EUR-Lex SPARQL, and other legal databases
- Direct links to full-text HTML and PDF versions of each document on EUR-Lex
- Handles the Angular SPA with fingerprint-matched Chrome requests — no CAPTCHAs, no manual intervention
Use Cases
- Legal research & LegalTech — build annotated case law corpora, citation graphs, or case chronologies for briefs and analysis
- Academic research — systematic study of EU case law trends, subject-matter frequency, or AG opinion uptake rates
- Compliance & regulatory monitoring — track decisions in specific areas (data protection, competition, state aid) by year and court
- Data journalism — quantitative analysis of CJEU output, parties, and subject matter over time
- RAG / AI legal assistants — index CJEU judgments as structured chunks with reliable identifiers for retrieval
How It Works
CURIA's search frontend is an Angular SPA hosted on infocuria.curia.europa.eu. When you enter a case number, the site redirects to a per-case affair page that expands the full document list inline. The actor uses a Playwright-based renderer with real Chrome fingerprinting (so the backend's headless-browser guard doesn't fire) and extracts case metadata and every document entry directly from the rendered DOM.
In broad-search mode, the actor loads the case listing filtered by court, year, and document type, returning one compact record per case row.
No proxy is required. The site does not use Cloudflare or any third-party bot-management service.
Input
Case-number mode (recommended for targeted lookups)
{"caseNumbers": ["C-311/18", "C-362/14"],"maxItems": 50}
Broad-search mode (batch collection by filter)
{"court": "C","year": "2023","documentType": "Judgment","maxItems": 200}
Input Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
caseNumbers | array of strings | No | CJEU case numbers to look up (e.g. C-311/18, T-125/22). Leave empty to use the filter parameters below. |
court | string | No | Filter by court. C = Court of Justice, T = General Court, F = Civil Service Tribunal (archived). Blank = all courts. |
year | string | No | Filter to a specific year, e.g. 2023. Used only when caseNumbers is empty. |
documentType | string | No | Filter by document type: Judgment, Opinion (AG opinions), Order. Blank = all types. |
maxItems | integer | Yes | Maximum number of records to return. Default: 100. |
Tip: caseNumbers and filter parameters can be combined. When caseNumbers is provided, the actor uses the direct per-case URL for each number and the court filter is applied as a URL hint; year and documentType are used for broad-search requests only.
Output
Each item in the dataset represents one document (judgment, opinion, or order). In broad-search mode, each item represents one case row with only the case number and parties populated.
Output Fields
| Field | Description |
|---|---|
caseNumber | Case number, e.g. C-311/18 |
ecli | European Case Law Identifier, e.g. ECLI:EU:C:2020:559 |
parties | Applicant and defendant parties, e.g. Facebook Ireland and Schrems |
court | Court name: Court of Justice or General Court |
documentType | Document type: Judgment, Opinion of AG, Order, or Abstract |
dateOfDocument | Date the document was issued (DD/MM/YYYY format as shown on CURIA) |
subjectMatter | Subject matter / keywords from the case title (when available) |
judgmentTextUrl | URL to the full HTML text on EUR-Lex |
judgmentPdfUrl | URL to the PDF version on EUR-Lex |
celexNumber | CELEX identifier, e.g. 62018CJ0311 — use this to look up the document in EUR-Lex APIs |
caseUrl | URL to the case listing page on CURIA |
scrapedAt | ISO-8601 timestamp of when the record was scraped |
Example Record
{"caseNumber": "C-311/18","ecli": "ECLI:EU:C:2020:559","parties": "Facebook Ireland and Schrems","court": "Court of Justice","documentType": "Judgment","dateOfDocument": "16/07/2020","subjectMatter": "","judgmentTextUrl": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:62018CJ0311","judgmentPdfUrl": "https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:62018CJ0311","celexNumber": "62018CJ0311","caseUrl": "https://infocuria.curia.europa.eu/tabs/affair?publishedId=C-311%2F18","scrapedAt": "2026-06-12T16:14:00.000Z"}
FAQ
Does this cover all three CJEU courts?
Yes — Court of Justice (C-series), General Court (T-series), and the archived Civil Service Tribunal (F-series). Use the court filter to narrow to one.
What's the difference between the ECLI and CELEX number?
ECLI (ECLI:EU:C:2020:559) is the pan-European case identifier used across legal databases. CELEX (62018CJ0311) is the EUR-Lex internal identifier used in that database's API and URLs. Both are returned when available.
How far back does the data go?
CURIA's juris search covers the full case law archive. The scraper does not impose a year floor. Use the year filter to target specific years.
Are AG opinions included?
Yes. Advocate-General opinions appear as separate document entries within a case dossier and are returned with documentType: "Opinion of AG".
What if a case has multiple documents (e.g. judgment + AG opinion + order)? Each document becomes a separate output record. A case like C-311/18 (Data Protection Commissioner v Facebook Ireland and Schrems II) has three document entries.
Is there a pagination limit?
Broad-search mode retrieves one page of the case list (up to ~20 rows). For systematic collection of large result sets, provide explicit caseNumbers lists or run multiple filtered batches by year.
Can I get the full text of the judgment?
The actor returns the EUR-Lex URL (judgmentTextUrl) and PDF URL (judgmentPdfUrl). It does not fetch or return the full document body — use the links to retrieve the text via EUR-Lex directly or with a separate HTTP request.
Need More Features?
Open a GitHub issue or contact us at orbtop.com. Common extension requests: full-text PDF extraction, pagination across multiple result pages, bulk case-number input from a spreadsheet URL, and filtering by subject-matter keyword.
Why Use This Actor?
CURIA's search is built for human browsers — there is no API, no sitemap, no bulk export. The Angular SPA requires JavaScript execution and browser fingerprint matching. This actor handles all of that and delivers clean structured output in one run. The ECLI and CELEX identifiers make it straightforward to join with EUR-Lex datasets, CrossRef citations, or your own legal research database.