Nacional Ministerio de Hacienda

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 ZIP anual curl
# 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
Parsear entries del feed Atom python
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]}')
Leer feed Atom con SimpleXML php
<?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";
}

Archivos disponibles