Romanian Public Contracts Scraper (e-licitatie.ro / SEAP)
Pricing
from $20.00 / 1,000 results
Romanian Public Contracts Scraper (e-licitatie.ro / SEAP)
Scrape Romanian public procurement from e-licitatie.ro (SEAP/ANAP): tender notices and awarded contracts. Filter by keyword, CPV code, date range and contracting authority. Includes contract values in RON, deadlines and winners.
Pricing
from $20.00 / 1,000 results
Rating
0.0
(0)
Developer
Oaida Adrian
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Scrape Romanian public procurement — tenders and awarded contracts — from e-licitatie.ro, the official national platform run by ANAP (Agenția Națională pentru Achiziții Publice), the successor to SEAP. Filter by keyword, CPV code, publication date and contracting authority. Get contract values in RON, deadlines, statuses and winners for awarded contracts.
All data comes from the platform's own public JSON API — no login, no cookies, no browser required.
Why scrape Romanian public procurement?
Romania publishes every public tender and every awarded contract on e-licitatie.ro. That is a massive, structured stream of business intelligence:
- Sales intelligence — find authorities buying exactly what you sell, with deadlines and budget ceilings, weeks before the award.
- Competitive analysis — see who wins contracts in your niche, at what price (winner + awarded value in RON for every published award).
- Market research — track CPV categories over time, estimate market size, watch infrastructure, IT, health, agriculture spending.
- Journalism & research — monitor public money flows, detect award patterns, build datasets for analysis.
The native-language advantage: titles and descriptions are in Romanian, and the CPV classification matches EU-wide coding, so you can join with EU TED data.
How it works
- Build a filter: free-text keyword (Romanian), CPV code/prefix, publication date range (YYYY-MM-DD), contracting authority (partial name), and mode.
- The actor queries the public search API
(
POST /api-pub/NoticeCommon/GetCNoticeListFiltered/for tenders,POST /api-pub/NoticeCommon/GetCANoticeList/for awarded contracts) with the same headers the web app sends (Referer + Origin + X-Requested-With — the API rejects hotlink requests without them). - With
fetchDetailson (default), each result is enriched from the notice view endpoints: full description, authority contact details, CPV name, and — for awarded contracts — the winner and awarded value viaC_PUBLIC_CANotice+GetCANoticeContracts. - Results are pushed to the default dataset as JSON.
Input
| Field | Type | Description |
|---|---|---|
keyword | string | Free text in the contract title/object (e.g. infrastructura, drumuri, medicamente). Empty = latest notices. |
cpvCode | string | CPV code or prefix (e.g. 45233140-2 or 45233100). |
dateFrom / dateTo | string | Publication date range, YYYY-MM-DD. |
authority | string | Contracting authority partial name (e.g. Primaria, Consiliul Local). |
mode | string | tenders (participation notices, default), awarded (contract awards with winners), or both. |
fetchDetails | bool | Enrich each notice with description, authority contact and winners. Default true. |
maxItems | int | Max results to return (default 50, max 500). |
Example input:
{"keyword": "drumuri","cpvCode": "45233140-2","dateFrom": "2026-01-01","mode": "both","maxItems": 100}
Output
One dataset item per notice. Key fields:
| Field | Description |
|---|---|
contractId | Internal notice/contract ID (cNoticeId / caNoticeId). |
noticeNo | Public notice number (e.g. CN1047952, SCNA1135873). |
title | Contract title (Romanian). |
description | Short description of the object (when fetchDetails). |
authority | Contracting authority name (with CUI/fiscal prefix). |
authorityCui | Authority fiscal number (CUI). |
cpvCode | CPV code + name (e.g. 45233140-2 - Lucrari de drumuri). |
acquisitionType | Furnizare / Servicii / Lucrari. |
procedureType | Licitatie deschisa, Procedura simplificata, etc. |
estimatedValueRon | Estimated value in RON (tenders). |
contractValueRon | Awarded value in RON (awarded contracts). |
publicationDate | Notice publication timestamp. |
deadline | Tender receipt deadline (tenders). |
awardDate | Award date (awarded contracts). |
status | Procedure/notice state (Publicat, Atribuita, Anulata...). |
winner / winnerCui | Winning supplier name + fiscal number (awarded contracts). |
sourceUrl | Link to the notice on e-licitatie.ro. |
scrapedAt | Extraction timestamp (UTC). |
Use cases
- Bid pipeline: keyword + CPV + dateFrom for this month → a fresh list of relevant tenders with deadlines every morning.
- Award monitoring:
mode: awarded+ your CPV → track winners and prices for competitive intelligence. - Research: pull 500 notices per run into a dataset for analysis.
Run it from your code
Call it on a schedule or from a pipeline — every run appends fresh notices to its own dataset:
curl -X POST "https://api.apify.com/v2/acts/darknezz~ro-public-contracts-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "infrastructura", "dateFrom": "2026-08-01", "mode": "tenders", "maxItems": 100}'
From Python with the official SDK:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("darknezz/ro-public-contracts-scraper").call(run_input={"keyword": "infrastructura", "dateFrom": "2026-08-01","mode": "tenders", "maxItems": 100})for notice in client.dataset(run["defaultDatasetId"]).iterate_items():print(notice["title"], notice["authority"], notice["deadline"])
FAQ
Which data source is this? e-licitatie.ro — the official national procurement platform run by ANAP (successor to SEAP). All data comes from its public JSON API.
Does it include winners? Yes, in mode: awarded (or both) — every awarded contract returns winner, winnerCui and contractValueRon.
What does an empty search mean? A genuinely empty result set. Hard API failures (403 anti-hotlink, 400, invalid responses) fail the run loudly with a clear error — a zero-item run is never a swallowed error.
Why are some awarded values 0.0? The authority did not publish a value for that award; status (e.g. Anulata) clarifies the notice state.
How do I join with EU TED data? Match on cpvCode — the CPV classification is EU-wide, so Romanian notices join cleanly to TED's European dataset.
Is a login or proxy required? No — the public API works from any IP with the same headers the web app sends.
Pricing
Pay per event — you only pay for what you extract:
- apify-actor-start — one-time charge per run.
- result — per notice returned (default primary event).
No monthly fee, no hidden costs.
Limitations
- The platform caps a single unauthenticated search at ~3,000 results
(
searchTooLong); for wider windows, narrow by date range or CPV. - Titles/descriptions are as published by authorities — Romanian diacritics vary (some notices use ASCII transliteration).
- Awarded-value fields are
0.0when the authority did not publish a value. - The API is a live government service; occasional 5xx retries are handled automatically with backoff.
- Hard API failures are loud, not silent: if e-licitatie.ro answers 403 (the anti-hotlink "Referrer cannot be null"), 400, or an empty/invalid response, the run FAILS with a clear error instead of exiting successfully with zero items. A zero-item run therefore means a genuinely empty search, never a swallowed error.