Portugal Public Contracts (Portal BASE)
Pricing
from $3.00 / 1,000 contract results
Portugal Public Contracts (Portal BASE)
Search and export Portuguese public contracts from the official Portal BASE open data (IMPIC, dados.gov.pt). Filter by contracting authority or supplier (name or NIF), CPV, procedure type, dates, value and year. Clean JSON/CSV/Excel with ISO dates, euro amounts and separate NIFs.
Pricing
from $3.00 / 1,000 contract results
Rating
0.0
(0)
Developer
João Ferreira
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Search and export Portuguese public contracts from the official Portal BASE open data, published weekly by IMPIC on dados.gov.pt. Filter by contracting authority, winning company (name or NIF), CPV code, procedure type, dates, contract value and year, and get clean, ready-to-use records in JSON, CSV or Excel.
- Coverage: contracts from 2012 to the current year (one official file per year, about 180,000 contracts in 2026 up to September).
- Clean output: English field names, ISO dates (
2026-07-08), amounts as numbers in euros, NIF and name in separate fields, CPV and NUTS split into code and description. - Official open data only: the Actor downloads the files IMPIC publishes on dados.gov.pt. It does not scrape base.gov.pt and does not use the restricted Portal BASE API.
- Source attribution in every record.
Who is it for
- Journalists and researchers: which companies win contracts from a given municipality or ministry, how much was awarded by direct award, contracts above a value in a period.
- Companies that bid for public contracts: see who wins in your CPV sector, at what prices, which authorities buy what, and who the competing bidders were.
- Compliance and due diligence: list every public contract awarded to a supplier NIF.
- Data teams and AI agents: a structured, documented feed of Portuguese procurement data without parsing 300 MB files yourself.
How to use
- Choose the years to scan (or a date range). Without either, the most recent year is used.
- Add any filters. All filters are combined with AND; several values inside one filter are combined with OR.
- Set Maximum results and run. Download the results from the Output tab in JSON, CSV, Excel or via the API.
Input fields
| Field | What it does |
|---|---|
years | Year files to scan, e.g. ["2025", "2026"]. Files are grouped by the Portal BASE contract year (normally the signing year). |
contractingAuthorities | Public body: 9-digit NIF (most reliable) or part of the name. Case and accents are ignored. |
suppliers | Winning company: 9-digit NIF or part of the name. |
cpvCodes | CPV prefix: "72" = all IT services, "45" = all construction work, "72210000-0" = that code and its sub-codes. |
procedureTypes | Part of the procedure name in Portuguese, e.g. "Ajuste Direto", "Consulta Prévia", "Concurso público". |
contractTypes | Part of the contract type, e.g. "Aquisição de serviços", "Empreitadas de obras públicas". |
keywords | Words in the contract title or description (Portuguese). |
dateFrom, dateTo, dateField | Date range (YYYY-MM-DD) on the publication date (default) or the signing date. |
minPrice, maxPrice | Contract price range in euros. |
maxResults | The run stops after this many saved contracts (default 1,000). |
Tip: the same authority is often written in several ways. In our test sample, NIF 506361438 matched 30 contracts, while the name fragment "oncologia de coimbra" matched only 25 of them. Use NIFs when you can.
Examples from real test runs
Both runs below were made on 2026-10-03 against the real 2026 file (published 2026-09-27), on a local PC with the Node.js heap limited to 200 MB. Times on the Apify platform may differ.
1. All IT services contracts of 2026
{ "years": ["2026"], "cpvCodes": ["72"], "maxResults": 1000000 }
Result: 180,386 contracts read, 6,329 saved. 60 seconds in total, including the 42 MB download. Peak memory 122 MB.
2. Large construction tenders published in July 2026
{"years": ["2026"],"cpvCodes": ["45"],"procedureTypes": ["Concurso público"],"minPrice": 1000000,"dateFrom": "2026-07-01","dateTo": "2026-07-31","maxResults": 20}
Result: 20 contracts saved, after reading 127,320 records (the run stops as soon as maxResults is reached). First rows:
| contractId | Published | Contracting authority | Supplier | Price (EUR) |
|---|---|---|---|---|
| 15227015 | 2026-07-01 | Município das Caldas da Rainha | Sunever Engenharia, Lda. | 1,748,980.07 |
| 15231469 | 2026-07-02 | Município de Oliveira de Azeméis | MANUEL FRANCISCO DE ALMEIDA,SA | 2,929,068.00 |
| 15253476 | 2026-07-07 | Infraestruturas de Portugal | Teixeira Duarte - Engenharia e Construções… | 75,996,030.36 |
Output record (real, from example 2, shortened)
{"contractId": "15253951","procedureId": "9274750","year": 2026,"title": "Centro de Educação Especial de Bragança do Centro Distrital de Bragança","contractTypes": ["Empreitadas de obras públicas"],"procedureType": "Concurso público","contractingAuthorities": [{ "nif": "505305500", "name": "Instituto da Segurança Social, IP" }],"suppliers": [{ "nif": "500006334", "name": "Abel Luís Nogueiro & Irmãos Lda", "isSme": true }],"competitors": [{ "nif": "500006334", "name": "Abel Luís Nogueiro & Irmãos Lda" },{ "nif": "507689127", "name": "Samuel Augusto, lda." }],"cpv": [{ "code": "45113000-2", "description": "Obras no local" }],"publicationDate": "2026-07-08","signingDate": "2026-07-07","awardDecisionDate": "2026-06-11","contractPrice": 1439616.86,"basePrice": 1500000,"currency": "EUR","executionDeadlineDays": 240,"executionPlaces": ["Portugal, Braganca, Bragança"],"nuts": [{ "code": "PT11E", "name": "Terras de Trás-os-Montes" }],"legalBasis": "Artigo 19.º, alínea b) do Código dos Contratos Públicos","announcementNumber": "5015/2026","tenderDocumentsUrl": "https://www.acingov.pt/acingovprod/2/zonaPublica/zona_publica_c/donwloadProcedurePiece/MTA1MDUwOA","source": "IMPIC – Portal BASE (Contratos Públicos), via dados.gov.pt","sourceFile": "https://dados.gov.pt/s/resources/contratos-publicos-portal-base-impic-contratos-de-2012-a-2026/20260927-090427-eb50032c/contratos2026.zip","license": "Outra (Domínio Público) — as declared on dados.gov.pt"}
Output fields
| Group | Fields |
|---|---|
| Identification | contractId, procedureId, year, announcementNumber, announcementType, incmId |
| What | title, description, contractTypes, procedureType, cpv (code + description), cpvCodes, lots |
| Who | contractingAuthorities (nif, name), contractingAuthorityNifs, contractingAuthorityNames, suppliers (nif, name, isSme), supplierNifs, supplierNames, competitors (nif, name) |
| When | publicationDate, signingDate, awardDecisionDate, closeDate (ISO 8601 or null), executionDeadlineDays |
| How much | contractPrice, basePrice, effectiveTotalPrice (numbers, EUR), currency |
| Where | executionPlaces, nuts (code, name) |
| Legal | legalBasis, directAwardGrounds, legalRegime, awardCriterion, centralizedProcedure, frameworkAgreementNumber, frameworkAgreementDescription, greenContract, materialCriteria, contractEndReason, writtenContractExemptionReasons |
| Links and notes | tenderDocumentsUrl (e-procurement platform, when published), notes |
| Source | source, sourceDatasetUrl, sourceFile, license, attribution |
Each run also saves a summary in the key-value store (OUTPUT): years scanned, records read, matches, saved results, duration, peak memory and the exact source files used.
Ready-made searches
Copy one of these into the JSON input and change the values.
| Question | Input |
|---|---|
| Every contract a company won (by NIF) | { "years": ["2025", "2026"], "suppliers": ["500006334"], "maxResults": 5000 } |
| Direct awards by one municipality | { "years": ["2026"], "contractingAuthorities": ["Município de Coimbra"], "procedureTypes": ["Ajuste Direto"] } |
| Who wins IT services contracts above 100,000 € | { "years": ["2026"], "cpvCodes": ["72"], "minPrice": 100000 } |
| Cleaning or security services contracts signed last quarter | { "years": ["2026"], "cpvCodes": ["90910000", "79710000"], "dateField": "signingDate", "dateFrom": "2026-07-01", "dateTo": "2026-09-30" } |
| Contracts that mention a word in the title | { "years": ["2026"], "keywords": ["software"], "maxResults": 500 } |
Use it from n8n, Make, Python or the API
- API: run the Actor and get the results in one call with Apify's
run-sync-get-dataset-itemsendpoint:POST https://api.apify.com/v2/acts/fluxopronto~portugal-public-contracts/run-sync-get-dataset-itemswith your Apify token and the input as the JSON body. See the API tab of this Actor for ready-made code. - Python or JavaScript: use the official
apify-clientpackage: call the Actorfluxopronto/portugal-public-contractswith your input and read the items of its default dataset. - n8n, Make, Zapier: use Apify's official integration for your tool, choose this Actor and map the output fields.
- AI agents: the Actor can be used as a tool through Apify's MCP server.
A weekly scheduled run (Apify Schedules) with a supplier NIF or a CPV prefix gives you a simple alert for new contracts in your sector.
FAQ
Is this data public and legal to use? Yes. It is the open data IMPIC publishes on dados.gov.pt with the licence «Outra (Domínio Público)». Every record says where it came from. Check the GDPR if you process records about individuals (see Limitations).
Does it include contracts that are still open for bids? No. This Actor covers contracts that were already awarded and published. Tender announcements are a different dataset.
How current is the data? IMPIC updates the files weekly. The Actor always downloads the newest file, so a run gives you the latest published week.
Why does a search by name find fewer contracts than a search by NIF? The same body is often written in several ways in the source. The NIF is the same in every record.
How much does a run cost?
You pay per saved contract and a tiny fee per run start (see the Pricing tab), nothing for the contracts that are read and filtered out. Set maxResults or a maximum cost per run to cap it.
Pricing
Pay per result: you pay for each contract saved to the dataset, not for the contracts that are read and filtered out. The current price is shown in the Pricing tab of this Actor. You can cap the cost of a run with the Apify "maximum cost per run" setting; the Actor stops when the cap is reached.
Limitations (please read)
- Data is as published by IMPIC. Names are not standardised (one authority can appear under several spellings), some fields are empty, and
basePrice/effectiveTotalPriceare often0when they were not filled in. The Actor does not correct or enrich the data. - Update frequency: the source files are updated weekly by IMPIC; the newest contracts can take days to appear.
- Year files: files are grouped by the Portal BASE contract year (normally the signing year). A date filter on the publication date also scans the following year's file to catch late publications; contracts outside that window are not found.
- Speed: each year file must be read in full unless
maxResultsis reached first. One year takes about one minute in our local test; scanning many years takes proportionally longer. - No sorting: results come in the order of the source file, newest year first.
- Personal data: IMPIC publishes some suppliers that are individuals by name only, without NIF. The Actor never outputs a NIF in the ranges reserved for natural persons. If you process records about individuals, the GDPR applies to you.
- Only contracts: tender announcements and contract modifications (also published by IMPIC) are not included yet.
Source and licence
Data: IMPIC – Instituto dos Mercados Públicos, do Imobiliário e da Construção, dataset «Contratos Públicos - Portal Base - IMPIC - Contratos de 2012 a 2026» on dados.gov.pt, licence declared as «Outra (Domínio Público)». Every record carries the source, the exact source file and the licence. This Actor is not affiliated with or endorsed by IMPIC, the Portal BASE or dados.gov.pt.
Em português
Este Actor pesquisa os contratos públicos portugueses registados no Portal BASE, a partir dos dados abertos que o IMPIC publica todas as semanas no dados.gov.pt (licença «Outra (Domínio Público)»). Pode filtrar por entidade adjudicante ou adjudicatária (nome ou NIF), código CPV, tipo de procedimento, tipo de contrato, palavras do objeto, datas, preço contratual e ano. Os resultados saem com datas ISO, valores em euros e NIF separado do nome, e podem ser descarregados em JSON, CSV ou Excel. Não usa a API do Portal BASE nem o site base.gov.pt. Os nomes das entidades aparecem escritos de várias formas: pesquise pelo NIF sempre que puder.