Skip to content

CENDOJ Scraper – Spanish Case Law

Try for free

Search Spain's official case-law database CENDOJ (poderjudicial.es) by keyword, ECLI or ROJ with court, jurisdiction, region and date filters. Get ECLI, ROJ, court, date, judge, appeal number, summary and PDF link, plus optional full text. No login needed.

⚖️ CENDOJ Scraper – Spanish Case Law

Search CENDOJ, the official case-law database of Spain's judiciary (poderjudicial.es), and export every matching ruling with its ECLI, ROJ number, court, date, reporting judge, appeal number, summary and PDF link. Add the full text of each ruling, or only the key passages, in the same run. No login, no browser: 20 rulings usually arrive in 10–20 seconds.

✨ Why use CENDOJ Scraper?

  • ⚡ Fast — plain HTTP against the site's own search: in our tests 20 rulings took 7–20 seconds, 1,000 about 75 seconds and 10,000 about 6 minutes.
  • 🔎 Every search option of the site — free text with AND / OR / NOT / NEAR operators, ECLI or ROJ lookups, jurisdiction, court and chamber, type of ruling, region, province, court section, judge, language and date range.
  • 📈 Past the 200-result wall — the site shows at most 200 rulings per query; the actor walks date windows to collect every ruling of a search term, without repeats.
  • 📄 Full text on demand — download each ruling's PDF and get clean text plus chamber, seat, section and procedure, or just the passages that mention your words.
  • 🆔 Exact lookups — paste an ECLI (ECLI:ES:TS:2019:102) or ROJ (STS 102/2019) and get that one ruling.
  • 💸 Cheap — a small start fee plus $0.90 per 1,000 rulings.

🎯 Use cases

  • ⚖️ Legal research — collect every Supreme Court judgment on a doctrine, a statute article or a contract clause.
  • 📊 Litigation analytics — count rulings per court, region, judge or year for a topic such as mortgage fees or unfair dismissal.
  • 🔔 Monitoring — schedule a daily run sorted by "Recently added to CENDOJ" to catch new rulings on your topics.
  • 🤖 AI and search pipelines — feed full texts or key passages into your own retrieval or summarisation system.
  • 🏢 Compliance and due diligence — find case law that mentions a company, a sector or a regulation.

🚀 How to use

  1. Enter one or more search terms (one per line), or an ECLI / ROJ number per line.
  2. Set Max rulings per search term (20 by default).
  3. Optionally narrow the search with the Filters (jurisdiction, court, type, dates, region, province, judge, language) and choose the sort order.
  4. Tick Add the full text of each ruling if you need the text, or paste PDF links from an earlier run into Ruling PDF links.
  5. Run the actor and export the results as JSON, CSV, Excel or HTML, or read them through the API.

📥 Input

FieldWhat it does
searchTermsWords, "exact phrases" and operators (AND, OR, NOT, NEAR5, or the site's Y, O, NO, PROX5), or an ECLI / ROJ number alone on a line
maxResultsRulings per search term
pdfUrlsCENDOJ PDF links (the pdfUrl field of earlier results) to turn into text
jurisdictions, organoTypes, resolutionTypesJurisdiction, court or chamber, judgment / order / agreement
dateFrom, dateToRuling date range (YYYY-MM-DD; a year also works)
locations, provinces, section, judge, languageRegion, province, court section, reporting judge, language of the ruling
sortOrderRelevance, ruling date (newest or oldest first), recently added, or court
includeFullText, paragraphs, paragraphTermsFull text, or only the N key passages
{
  "searchTerms": ["despido improcedente", "\"gastos hipotecarios\" NOT penal"],
  "maxResults": 50,
  "jurisdictions": ["SOCIAL"],
  "resolutionTypes": ["SENTENCIA"],
  "locations": ["MADRID"],
  "dateFrom": "2024-01-01",
  "sortOrder": "IN_FECHARESOLUCION:decreasing"
}

Leave searchTerms empty and set filters to list the newest rulings that match the filters alone.

📤 Output

One row per ruling.

FieldDescription
searchTermThe search term, ECLI or ROJ the row came from
titleRuling title as CENDOJ shows it
roj, ecli, referenceROJ number, European Case Law Identifier, CENDOJ document reference
organo, courtCodeCourt, read from the ROJ number
resolutionTypeSentencia, Auto or Auto aclaratorio
resolutionDate, resolutionDateISORuling date (YYYYMMDD and YYYY-MM-DD)
resolutionNumber, appealNumberRuling number and appeal number
municipalitySeat of the court
ponenteReporting judge
jurisdictionThe jurisdiction, when exactly one was selected as a filter
summaryCENDOJ's summary or the matching passage
pdfUrl, documentUrlPublic PDF link of the ruling (same link in both fields)
publishedDate, language, position, totalResults, scrapedAtPublication date on CENDOJ, language, rank in the search, total matches, time of the run
text, paragraphs, pageCount, organoFull, sede, sectionNumber, procedure, idCendojWith full text: the ruling's text or key passages, page count, court and chamber, seat, section, procedure and CENDOJ id
{
  "searchTerm": "despido improcedente",
  "title": "STSJ Madrid, a 02 de octubre de 2026 - ROJ: STSJ M 11817/2026",
  "roj": "STSJ M 11817/2026",
  "reference": "11892680",
  "ecli": "ECLI:ES:TSJM:2026:11817",
  "organo": "Tribunal Superior de Justicia",
  "courtCode": "TSJ",
  "resolutionType": "Sentencia",
  "resolutionDate": "20261002",
  "resolutionDateISO": "2026-10-02",
  "resolutionNumber": "803/2026",
  "municipality": "Madrid",
  "ponente": "LAURA MARTÍN GÓMEZ",
  "appealNumber": "449/2026",
  "summary": "… debe reconocerse a aquélla la indicada indemnización de 20 días de salario por año de servicio con un máximo de doce mensualidades …",
  "language": "es",
  "jurisdiction": "Social",
  "databasematch": "AN",
  "pdfUrl": "https://www.poderjudicial.es/search/contenidos.action?action=contentpdf&databasematch=AN&reference=11892680&optimize=20261020&publicinterface=true&tab=AN",
  "documentUrl": "https://www.poderjudicial.es/search/contenidos.action?action=contentpdf&databasematch=AN&reference=11892680&optimize=20261020&publicinterface=true&tab=AN",
  "publishedDate": "2026-10-20",
  "position": 2,
  "totalResults": 49810,
  "scrapedAt": "2026-10-21T00:24:21.878Z"
}

With full text, the row also carries fields like these:

{
  "organoFull": "Tribunal Supremo. Sala de lo Civil",
  "sede": "Madrid",
  "sectionNumber": "991",
  "procedure": "Civil",
  "idCendoj": "28079119912019100003",
  "pageCount": 14,
  "textLength": 61317,
  "text": "JURISPRUDENCIA\nRoj: STS 102/2019 - ECLI:ES:TS:2019:102\nId Cendoj: 28079119912019100003\nÓrgano: Tribunal Supremo. Sala de lo Civil …"
}

A run summary with the total matches per search term is saved as OUTPUT in the run's key-value store.

💰 Pricing

  • $0.07 per run (start fee) plus $0.90 per 1,000 rulings saved.
  • Full text adds $0.90 per 1,000 rulings that come back with text. Rulings from pdfUrls cost $0.90 per 1,000. A PDF that could not be read is listed free of charge.
  • Example: 20 rulings ≈ $0.09; 1,000 rulings ≈ $0.97; 1,000 rulings with full text ≈ $1.87.
  • Platform usage (compute and proxy traffic) is billed on top. Without full text it is small: well under $0.01 for a run of a few hundred rulings.
  • Full text downloads each ruling's PDF through Spanish residential proxies ($2/GB). PDFs range from a few hundred KB to several MB; in our tests the average was 0.24–2.4 MB per ruling depending on the topic (long rulings are bigger), so budget roughly $0.0005–$0.005 of proxy traffic per ruling with text.

❓ FAQ

Is it legal? CENDOJ publishes these rulings for public consultation and anonymises the parties' personal data. Its legal notice reserves commercial reuse and building databases from its content to its own reuse procedure, so check that your use fits before you collect at scale. This actor only reads what the public search shows.

Do I need a login or a proxy? No login. Searches go through datacenter proxies by default. PDF downloads for full text go through Spanish residential proxies, because the site asks datacenter visitors for an image check before a download.

How many rulings can I get? As many as the search has. The site itself lists at most 200 rulings per query; above that the actor collects rulings newest first in date windows. If more than 200 rulings share a single day, the site only shows 200 of that day and the run notes it.

Why is a field empty? Not every ruling has every field: older rulings may lack a ruling number, and jurisdiction is only set when you filtered by exactly one jurisdiction (CENDOJ does not show it in the list; with full text, procedure gives it for each ruling).

How do I write a good search? Keep it to one or two exact phrases per line and use separate lines for variants. Very common words alone (el, de) are not searchable. An ECLI or ROJ must be alone on its line.

Can I schedule it or use the API? Yes. Save your input as a task, schedule it daily with "Recently added to CENDOJ" sorting, or start runs from the API and read the dataset as JSON, CSV or Excel.

⚠️ Limits

  • Only what the public CENDOJ search shows: no paid legal databases, no annotations or related-case trees.
  • At most 200 rulings per day and query are reachable (a limit of the site).
  • Full text needs a PDF download per ruling: a few seconds for short rulings, up to a minute or more for rulings of several hundred pages. Text is kept up to 2,000,000 characters per ruling (textTruncated marks longer ones).
  • Relevance order applies to the first 200 rulings; larger limits come newest first (or oldest first if you choose that order).
  • If the site asks for an image check on a download, that PDF is reported with an error and not charged; the actor does not solve image checks.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.