Licitaciones públicas de España - open data (no oficial) avatar

Licitaciones públicas de España - open data (no oficial)

Pricing

from $20.00 / 1,000 licitacións

Go to Apify Store
Licitaciones públicas de España - open data (no oficial)

Licitaciones públicas de España - open data (no oficial)

Licitaciones públicas de España desde el feed oficial de la PLACSP: registros tipados con objeto, estado, tipo de contrato, valor estimado, CPV, órgano de contratación, fechas y adjudicatario. CSV/Excel listos. No oficial: actor no afiliado a la PLACSP.

Pricing

from $20.00 / 1,000 licitacións

Rating

0.0

(0)

Developer

Riccardo Pongetti

Riccardo Pongetti

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Spain Public Tenders — PLACSP open data (Apify Actor)

Public tenders published on Spain's Public Sector Procurement Platform (PLACSP), from the official open-data syndication feed sindicacion_643"Licitaciones publicadas en los perfiles del contratante ubicados en la Plataforma de Contratación del Sector Público, excluyendo los contratos menores".

  • 100% legal / no scraping: official Atom feed published by the Dirección General del Patrimonio del Estado (Ministerio de Hacienda), reusable under Ley 19/2013 and Ley 37/2007. No key, no login, no cookies, no captcha.
  • Clean, typed records: object, status, contract type, estimated value, CPV codes, contracting authority (name + NIF + DIR3), place of performance (region/NUTS), dates, and — when awarded — the awardee (name + NIF) and award amount.
  • Ready-to-open CSV and Excel exports (RFC-4180 CSV, styled XLSX with real numeric cells, autofilter and a provenance sheet).
  • Unofficial: not affiliated with, endorsed by or sponsored by the PLACSP or the Ministry of Finance.

How it works

The Actor fetches the live feed https://contrataciondelsectorpublico.gob.es/sindicacion/sindicacion_643/licitacionesPerfilesContratanteCompleto3.atom, parses each Atom <entry> (CODICE 2.07 ContractFolderStatus), normalises it into a flat typed record, applies the requested filters, and pushes one dataset item per returned tender. The payload is cached in the key-value store for cacheMinutes (default 60) so repeated runs do not hammer the endpoint.

Inputs

FieldTypeDefaultDescription
statusesarray[] (all)Filter by tender status: PUB, EV, ADJ, RES, PRE.
keywordsarray[]Partial match on object / ID / authority (accents optional).
cpvCodesarray[]Filter by CPV code (prefix match, e.g. 4523 = construction).
contractTypesarray[]Filter by contract type: 1=Suministros, 2=Servicios, 3=Obras, 8/22/50=concesiones/otros.
contractingAuthoritiesarray[]Partial match on authority name or NIF.
regionsarray[]Partial match on region / NUTS (e.g. Madrid, ES521).
minValueEur / maxValueEurnumberFilter on estimated value.
awardedOnlybooleanfalseOnly tenders that already have an awardee.
maxResultsinteger0 (no limit)Caps the run (and its cost). The feed holds the most recent updates, up to ~500 entries.
exportFilesarray["csv","xlsx"]Also write ready-to-open files (free, no events).
exportLanguagestringesExport language: es / en.
chargeReportbooleantrueAdd the aggregate run-report event.
cacheMinutesinteger60Cache the source payload this long (0 = always fetch fresh).

Output

Dataset items (one per tender):

tenderId, object, status, statusCode, contractType, contractTypeCode, link,
estimatedValueEur, budgetEur, budgetNetEur, cpvCodes[],
contractingAuthority, contractingAuthorityNif, contractingAuthorityDir3,
region, regionNuts, countryCode, publishedAt, submissionDeadline,
awardDate, awardeeName, awardeeNif, awardAmountEur, awardAmountNetEur,
source, sourceUrl, sourceLicence, sourceUpdatedAt

Key-value store: SUMMARY (run metadata + statistics) and, when enabled, the export files licitaciones-es.csv / licitaciones-es.xlsx (or -en.).

Pay-per-event pricing

EventPriceWhen
tender-charged$0.02Once per returned tender.
run-report$0.01Once per run (optional aggregate statistics).

Examples (cost to the customer):

  • Latest 20 tenders → 20 × $0.02 + $0.01 = $0.41
  • Awarded construction tenders (say 40 match) → 40 × $0.02 + $0.01 = $0.81
  • Full feed (~284 entries) → 284 × $0.02 + $0.01 = $5.69

maxResults is the cost guardrail: a "give me everything" run on a busy day costs a few dollars, never surprises the customer.

Coste real (créditos + tokens) vs ingreso esperado

Estimates to validate in Apify Console before/after first payout:

  • Compute (créditos): one GET of ~8 MB + parse of ~284 XML entries runs in a couple of seconds of a small container. Estimated ~$0.01–0.05/run in compute credits.
  • Tokens (LLM): zero at runtime (the Actor is deterministic Python; no LLM calls). The only token spend was one-time, building the Actor.
  • Ingreso bruto por run completo (284 licitaciones): ~$5.69.
  • Apify platform fee (pay-per-event revenue share): budget ~20–30% (confirm in Console). Net per full run ≈ $4.0–4.5, against ~$0.03 compute ⇒ margin ≈ 99% of revenue.

Bottom line: the marginal cost of serving a run is negligible; the value is the data. The real question is demand (B2B tender alerts), not unit economics. Do not run un-capped automations against the full feed for yourself — that is what maxResults and the cache are for.

Local testing (no Apify token)

uv venv .venv --python 3.13
uv pip install --python .venv/bin/python 'apify>=2.0.0' openpyxl pytest
.venv/bin/python -m pytest tests -q # logic
.venv/bin/python -m src.main --local examples/input-latest.json # real end-to-end

Publication checklist (account owner — NOT done here)

  1. Create/verify the Apify account and complete KYC.
  2. apify push (or connect the repo in Apify Console and build).
  3. In Console → Monetization, enable pay-per-event with the two events above.
  4. Verify the charge path end-to-end with a real paid run (one item) before marketing.
  5. Confirm the exact platform fee and compute-credit cost; update this README.

This repo has been built and tested locally; it is not published.