Tjue avatar

Tjue

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Tjue

Tjue

Automatiza la búsqueda de jurisprudencia del Tribunal de Justicia de la Unión Europea (juris.curia.europa.eu). Permite buscar documentos (sentencias, autos, conclusiones, peticiones de decisión prejudicial…) por texto libre y filtrarlos por órgano jurisdiccional, idioma y rango de fechas.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Miguel González

Miguel González

Maintained by Community

Actor stats

1

Bookmarked

23

Total users

5

Monthly active users

a day ago

Last modified

Categories

Share

🏛️ TJUE — Buscador de jurisprudencia (CURIA)

Actor de Apify que automatiza la búsqueda de jurisprudencia del Tribunal de Justicia de la Unión Europea (https://juris.curia.europa.eu). Permite buscar documentos (sentencias, autos, conclusiones, dictámenes…) por texto libre y filtrarlos por tipo de documento, órgano jurisdiccional, idioma y rango de fechas.

Para cada documento encontrado, el actor extrae sus metadatos (número de asunto, órgano, tipo de documento, ECLI, fecha, partes y materia) y el enlace al documento. Además puede extraer el texto íntegro, bien de todos los resultados (extractText), bien de documentos concretos en una segunda ejecución (documentUrls).

✨ Características

  • 🔎 Búsqueda por múltiples términos en una sola ejecución (hasta 50).
  • ⚖️ Filtros aplicados en el servidor de CURIA: tipo de documento, órgano jurisdiccional, idioma y rango de fechas.
  • 📄 Metadatos completos (asunto, órgano, tipo de documento, ECLI, fecha, partes, materia).
  • 🔗 Enlace estable al documento, reutilizable como entrada de la segunda fase.
  • 📝 Extracción del texto íntegro, de todos los resultados o de documentos concretos.
  • 🧩 Modo "párrafos" para devolver solo los pasajes relevantes (útil con LLMs).
  • 🏷️ Referencias por número de asunto: C-261/25 se resuelve a su sentencia.

📥 Entrada (Input)

Debes indicar al menos uno de estos campos: searchTerms (para buscar), documentUrls (para extraer texto de documentos concretos) o un filtro (courts, dateFrom/dateTo).

CampoTipoDescripción
searchTermsarray<string>Términos a buscar (máx. 50). Cada término se busca por separado. Si se deja vacío con filtros, devuelve todos los documentos que los cumplan.
documentUrlsarray<string>Documentos de los que extraer el texto íntegro (máx. 50): documentUrl de un resultado previo, un docid suelto o un número de asunto (C-261/25). Si se rellena, el actor omite la búsqueda en esa ejecución.
extractTextbooleanExtrae el texto de cada resultado de la búsqueda. Por defecto false: ralentiza mucho el run.
documentTypestringarret (Sentencia, por defecto), ord (Auto), concl (Conclusiones), avis (Dictamen), ALL.
courtsarray<string>Órganos: C (Tribunal de Justicia), T (Tribunal General), F (Función Pública). Por defecto, los tres.
languagestringIdioma de los documentos: es, en, fr, de, it, pt. Por defecto, es.
dateTypestringFecha sobre la que se filtra: pro (resolución), con (conclusiones), aud (vista), dep (presentación). Por defecto, pro.
dateFromstringFecha mínima (YYYY-MM-DD o DD/MM/YYYY).
dateTostringFecha máxima (YYYY-MM-DD o DD/MM/YYYY).
paragraphsintegerSi > 0, devuelve solo los N pasajes más relevantes (modo párrafos). Máx. 20.
paragraphTermsstringTérminos con los que localizar los pasajes (por defecto, el término de búsqueda).
anonymizebooleanAnonimiza nombres de persona en los textos extraídos. Por defecto true. Ver más abajo.
maxResultsintegerMáximo de documentos por término. Por defecto 20, máx. 500.

Un input inválido (fecha inexistente, rango invertido, valor fuera de rango, idioma desconocido) detiene el run con un mensaje que dice qué campo está mal y qué valores se admiten, en vez de devolver resultados mal filtrados.

Ejemplo de input

{
"searchTerms": ["gastos hipotecarios"],
"documentType": "arret",
"courts": ["C"],
"language": "es",
"dateFrom": "2020-01-01",
"maxResults": 20
}

📤 Salida (Output)

Cada documento se guarda en el dataset con esta forma:

{
"searchTerm": "cláusulas abusivas",
"caseNumber": "C-261/25",
"court": "Tribunal de Justicia",
"documentType": "Sentencia",
"ecli": "ECLI:EU:C:2026:537",
"date": "02/07/2026",
"dateISO": "2026-07-02",
"parties": "Ścierbek",
"subjectMatter": ["Protección de los consumidores"],
"docid": "313156",
"documentUrl": "https://juris.curia.europa.eu/juris/document/document.jsf?docid=313156&doclang=es&mode=req&pageIndex=0&dir=&occ=first&part=1&text=",
"pdfUrl": null
}

Sobre pdfUrl: CURIA no publica PDF de las sentencias, que sirve en HTML. El campo trae enlace en los documentos que sí lo tienen (peticiones de decisión prejudicial, anuncios del Diario Oficial) y null en el resto.

Sobre el filtro de fechas: CURIA lo aplica a nivel de asunto, de modo que un asunto en rango puede traer documentos fechados fuera de él. El actor los descarta en cliente, así que todos los resultados devueltos caen dentro del rango pedido.

📝 Extracción del texto íntegro

El texto no se extrae por defecto, para que la búsqueda sea rápida. Hay dos formas de obtenerlo:

  • extractText: true — extrae el texto de todos los resultados de la búsqueda. Abre los documentos uno a uno, así que conviene acotar maxResults.
  • Segunda ejecución selectiva — copia en documentUrls los documentos que te interesen. Admite el documentUrl de un resultado previo, un docid o un número de asunto (C-261/25).

No todos los documentos de CURIA tienen texto en HTML: las peticiones de decisión prejudicial y los anuncios del Diario Oficial solo existen en PDF. Esos registros salen con text: null y un campo error que lo explica, en vez de un texto vacío o inventado.

Modo "párrafos"

Para reducir el volumen de texto (útil con LLMs), usa paragraphs (número de pasajes) y, opcionalmente, paragraphTerms. En vez del texto íntegro se devuelven solo los pasajes relevantes en el campo paragraphs. La selección prioriza el razonamiento jurídico de la resolución (los epígrafes «Sobre el fondo», «Sobre la admisibilidad»…) frente al encabezado, la relación de hechos y el bloque de costas.

🔒 Anonimización de datos

Con anonymize: true (por defecto), los nombres de persona precedidos de tratamiento (Sr., Sra., D., D.ª, M., Mme, Herr, Frau…) se sustituyen por sus iniciales en los textos extraídos: «D.ª Justa López» → «D.ª J.L.». Se reconocen los alfabetos de todas las lenguas oficiales de la UE.

Alcance y límites — conviene conocerlos antes de apoyarse en esta función:

  • El propio Tribunal de Justicia ya anonimiza a las personas físicas en origen desde 2018: en una sentencia actual las partes aparecen como iniciales («Bank BPH S.A. contra AS, NS»). Esta función es una red de seguridad para documentos antiguos, no la primera línea de protección.
  • Solo se detectan nombres precedidos de tratamiento. Un nombre suelto en mitad de una frase no se sustituye. No se intenta la detección sin tratamiento a propósito: sobre estos textos produciría falsos positivos masivos («Banco Santander», «Sala Novena», «Reino de España») que destruirían el documento.
  • No se anonimizan los cargos públicos ni la representación profesional: miembros del Tribunal, abogados generales, secretarios, letrados y agentes de los Estados conservan su nombre, porque forma parte de la cita jurídica.

En consecuencia, la anonimización reduce la presencia de datos personales pero no la garantiza. Si tu caso de uso exige una garantía, revisa la salida.

🧪 Pruebas

npm test # 154 pruebas unitarias contra fixtures HTML reales de CURIA (sin red)
npm run test:live # 21 pruebas contra juris.curia.europa.eu (~55 s)
npm run test:all

Las pruebas en vivo son la alarma temprana del actor: verifican el contrato con CURIA (parámetros de filtrado, estructura de la lista de resultados, extracción de texto) y saltan si el sitio cambia, antes de que el actor empiece a devolver datasets vacíos en producción.