PLACSP — Licitaciones por contratante
Feed principal de licitaciones publicadas por los perfiles de contratante en la Plataforma de Contratacion del Sector Publico. Incluye todas las administraciones con perfil propio.
Ficha tecnica
- Formato
- Atom XML (CODICE 2.07)
- Registros
- ~4 millones
- Cobertura
- 2012–actualidad
- Actualizacion
- Diaria
- Licencia
- Datos abiertos
- Entidad
- Ministerio de Hacienda
Descripcion
La Plataforma de Contratacion del Sector Publico (PLACSP) es el portal oficial del Gobierno de Espana para la publicidad de licitaciones y contratos publicos. Gestionado por el Ministerio de Hacienda, centraliza la informacion de todas las administraciones publicas que tienen perfil de contratante propio.
El feed de sindicacion (sindicacion_643) proporciona los datos en formato Atom XML siguiendo la especificacion CODICE 2.07 (Componentes y Documentos Interoperables de Comercio Electronico). Cada entry del feed contiene un bloque ContractFolderStatus con toda la informacion estructurada del contrato.
Los archivos ZIP anuales contienen todos los ficheros .atom del ano, con un maximo de 500 entries por fichero, encadenados mediante links de paginacion. Se actualizan diariamente con los cambios del dia anterior.
Estructura de datos
- ContractFolderID — Numero de expediente
- ContractFolderStatusCode — Estado (PUB, ADJ, RES, FOR, ANU...)
- LocatedContractingParty — Organo contratante (NIF, DIR3, nombre)
- ProcurementProject/Name — Objeto del contrato
- ProcurementProject/TypeCode — Tipo (1=Suministros, 2=Servicios, 3=Obras)
- BudgetAmount/TaxExclusiveAmount — Importe licitacion sin IVA
- BudgetAmount/TotalAmount — Importe licitacion con IVA
- TenderingProcess/ProcedureCode — Procedimiento (1=Abierto, 2=Restringido...)
- RealizedLocation/CountrySubentityCode — Codigo NUTS del lugar de ejecucion
- TenderResult/WinningParty — Adjudicatario (NIF, nombre)
- TenderResult/AwardedTenderedProject/PayableAmount — Importe adjudicacion
- TenderResult/AwardDate — Fecha de adjudicacion
- RequiredCommodityClassification/ItemClassificationCode — Codigo CPV
Ejemplos de codigo
# Descargar licitaciones de 2025
curl -sLk -o licitaciones_2025.zip \
"https://contrataciondelsectorpublico.gob.es/sindicacion/sindicacion_643/licitacionesPerfilesContratanteCompleto3_2025.zip"
# Descomprimir
unzip licitaciones_2025.zip -d licitaciones_2025/
# Ver primer fichero
head -100 licitaciones_2025/licitacionesPerfilesContratanteCompleto3.atom import zipfile
import xml.etree.ElementTree as ET
# Namespaces CODICE
NS = {
'atom': 'http://www.w3.org/2005/Atom',
'cbc': 'urn:dgpe:names:draft:codice:schema:xsd:CommonBasicComponents-2',
'cac': 'urn:dgpe:names:draft:codice:schema:xsd:CommonAggregateComponents-2',
'cac-ext': 'urn:dgpe:names:draft:codice-place-ext:schema:xsd:CommonAggregateComponents-2',
}
with zipfile.ZipFile('licitaciones_2025.zip') as zf:
for name in zf.namelist():
if not name.endswith('.atom'):
continue
tree = ET.parse(zf.open(name))
root = tree.getroot()
for entry in root.findall('atom:entry', NS):
title = entry.findtext('atom:title', '', NS)
updated = entry.findtext('atom:updated', '', NS)
link = entry.find('atom:link', NS)
url = link.get('href', '') if link is not None else ''
# Datos del contrato (ContractFolderStatus)
cfs = entry.find('.//{urn:dgpe:names:draft:codice-place-ext:schema:xsd:CommonAggregateComponents-2}ContractFolderStatus')
if cfs is None:
continue
expediente = cfs.findtext('{urn:dgpe:names:draft:codice:schema:xsd:CommonBasicComponents-2}ContractFolderID', '')
objeto = cfs.findtext('.//{urn:dgpe:names:draft:codice:schema:xsd:CommonBasicComponents-2}Name', '')
print(f'{expediente}: {objeto[:80]}') <?php
// Leer un fichero .atom del ZIP
$xml = simplexml_load_file('licitaciones_2025/licitacionesPerfilesContratanteCompleto3.atom');
// Registrar namespaces CODICE
$namespaces = [
'cbc' => 'urn:dgpe:names:draft:codice:schema:xsd:CommonBasicComponents-2',
'cac' => 'urn:dgpe:names:draft:codice:schema:xsd:CommonAggregateComponents-2',
'cac-ext' => 'urn:dgpe:names:draft:codice-place-ext:schema:xsd:CommonAggregateComponents-2',
];
foreach ($xml->entry as $entry) {
$title = (string) $entry->title;
$link = (string) ($entry->link['href'] ?? '');
$updated = (string) $entry->updated;
// Buscar ContractFolderStatus
$entry->registerXPathNamespace('cac-ext', $namespaces['cac-ext']);
$entry->registerXPathNamespace('cbc', $namespaces['cbc']);
$cfs = $entry->xpath('.//cac-ext:ContractFolderStatus');
if (empty($cfs)) continue;
$cfs[0]->registerXPathNamespace('cbc', $namespaces['cbc']);
$expediente = (string) ($cfs[0]->xpath('cbc:ContractFolderID')[0] ?? '');
echo "$expediente: $title\n";
}