PNCP Brazil Public Tenders Scraper | Licitações
Pricing
from $0.90 / 1,000 tenders
PNCP Brazil Public Tenders Scraper | Licitações
Search Brazilian public tenders (licitações) on PNCP by keyword, state, modality, sphere or buyer CNPJ. Get the subject, buyer, municipality, estimated value in BRL, proposal deadline in local time, edital documents and links. Export JSON, CSV or Excel; build daily tender alerts and feeds.
Pricing
from $0.90 / 1,000 tenders
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
PNCP Brazil Public Tenders Scraper
Find Brazilian government tenders on PNCP (Portal Nacional de Contratações Públicas, pncp.gov.br), the national portal where federal, state and municipal buyers publish their procurement notices. By default you get only tenders that are open for bids right now, newest first, one clean row per tender: subject, buyer and CNPJ, state and municipality, procurement method, status, estimated value in BRL, publication date and the proposal deadline with its time zone. Turn on details to add document links (edital, terms of reference, annexes), item category codes and a description excerpt.
Price: $0.90 per 1,000 tenders ($0.0009 per tender) plus a $0.005 run start. Twenty open tenders cost about $0.023. Searches that match nothing cost only the start.
Use cases
- Bid teams: every open pregão in your state and product category, with the deadline, estimated value and the edital link in one row.
- Tender-alert services: a scheduled daily run with
onlyNewSinceLastRunso each alert contains only new tenders and changes, with nothing to deduplicate. - Aggregators and marketplaces: a national feed by state, modality, sphere or buyer CNPJ, with the official notice link and the buyer's own submission link.
- Sales pipeline: follow specific ministries, state agencies or city halls by CNPJ and see what they buy and when.
- Market research: count tenders and estimated spend by method, state or government level.
Quick start
- Press Start. The form is already filled with this input, so the first run returns 20 open tenders in a few seconds:
{"maxItems": 20}
- Add your keywords, states or modalities, then run again or save the input as a task.
- Download the rows as JSON, CSV or Excel, or schedule the task for a daily feed.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | string | "" | Words searched in the tender subject, buyer and notice. Every word must match; accents and case do not matter. PNCP also matches related word forms (hospitalares finds hospitalar and hospital), so a row's title may not contain your exact words. |
status | string | open | open (deadline still ahead), closed (proposal period ended) or all. |
states | array | [] | Buyer states as UF codes, e.g. SP, RJ, DF. |
modalities | array | [] | Procurement methods by id, e.g. 6 Pregão - Eletrônico, 4 Concorrência - Eletrônica, 8 Dispensa. |
spheres | array | [] | Government level: F federal, E state, M municipal, D Federal District. |
buyerCnpjs | array | [] | Buyer CNPJs, with or without punctuation, up to 20. |
publishedSince | string | "" | Only tenders published or changed on or after this date (YYYY-MM-DD, Brasília time). |
includeDetails | boolean | false | Adds documents, item category codes, item count and a description excerpt, and confirms the deadline with the official record. Slower. |
maxItems | integer | 50 | Maximum tenders returned, newest first. Up to 10,000 (1,000 with details). |
All filters are optional and can be combined. There is no municipality or product-category search filter: PNCP's search does not offer one. Filter on municipality or, with details on, categoryCodes in the output instead.
Example queries
Open tenders, newest first:
{"maxItems": 20}
Open software pregões in São Paulo and Minas Gerais, with documents:
{"keywords": "software", "states": ["SP", "MG"], "modalities": ["6"], "includeDetails": true, "maxItems": 100}
Daily monitoring of everything a federal institute publishes or changes:
{"buyerCnpjs": ["08.829.974/0001-94"], "status": "all", "publishedSince": "2026-11-02"}
Use it as a daily feed
Turn on Only new or changed since the last run (onlyNewSinceLastRun) and run the
Actor on a schedule with the same input. It then returns only tenders this search has not
delivered before, or whose watched fields changed since the last run, so there is nothing
to deduplicate on your side.
- Every returned row carries
changeType(neworchanged) andchangedFields. - The first run has no saved history, so it returns everything and reports
feed.firstRunin the run's OUTPUT. - The history lives in the named key-value store
pncp-tenders-scraper-feed-state, one record per search. LeavestateKeyempty to name the record from the input, so different searches keep separate histories; set a name to share one or to start a fresh feed. - An entry leaves the history once its deadline is more than 90 days past and it has not been delivered in the last 90 days, so the history stays bounded.
- The watched fields are the title, the deadline, the status, the estimated value and the documents.
With the flag off (the default) the Actor returns every match, exactly as before.
What it returns
Every row has tenderId, noticeNumber, noticeType, title, buyerName, buyerId, buyerUnitName, buyerUnitCode, sphere, country, region, regionName, municipality, municipalityIbgeCode, procurementMethod, procurementMethodId, disputeMode, legalBasis, priceRegistration, status, statusLabel, isOpenForBids, categoryCodes, itemsCount, itemKinds, estimatedValue, currency, budgetConfidential, publishedAt, updatedAt, proposalsOpenAt, deadline, documents, url, submissionUrl, descriptionExcerpt, detailsFetched, detailsError, sourceQuery, source and scrapedAt.
statusisopen,closed,awarded,cancelledorsuspended;isOpenForBidsis true while the deadline is still ahead.- Dates are ISO 8601 with an offset, so they sort and compare correctly.
publishedAtandupdatedAtare Brasília time (-03:00).proposalsOpenAtanddeadlineare in the buyer's local time:-04:00for Amazonas, Roraima, Rondônia, Mato Grosso and Mato Grosso do Sul,-05:00for Acre,-02:00for Fernando de Noronha,-03:00elsewhere. estimatedValueis in BRL and only filled when the buyer published it; confidential budgets are marked withbudgetConfidentialand left empty.categoryCodes,itemsCount,itemKinds,documentsanddescriptionExcerptare filled when details are on and empty otherwise.urlis the official notice page;submissionUrlis the buyer's e-procurement page where proposals are sent, when given.
Output example
{"tenderId": "08829974000194-1-000080/2026", "noticeNumber": "10/2026", "noticeType": "Edital", "title": "Aquisição de bens destinados à implantação e/ou ampliação de sistemas de Circuito Fechado de Televisão – CFTV, organizados em 3 (três) grupos, e 3 (três) itens avulsos (racks de parede, nobreaks e monitores) visando atender às demandas das Unidades de Conservação Federais vinculadas à Gerência…", "buyerName": "INSTITUTO CHICO MENDES DE CONSERVACAO DA BIODIVERSIDADE", "buyerId": "08829974000194", "buyerUnitName": "UNID. AVANÇADA DE ADM. E FINAN.FOZ DO IGUAÇU", "buyerUnitCode": "443048", "sphere": "Federal", "country": "BR", "region": "PR", "regionName": "Paraná", "municipality": "Foz do Iguaçu", "municipalityIbgeCode": "4108304", "procurementMethod": "Pregão - Eletrônico", "procurementMethodId": "6", "disputeMode": "Aberto", "legalBasis": "Lei 14.133/2021, Art. 28, I", "priceRegistration": true, "status": "open", "statusLabel": "Divulgada no PNCP", "isOpenForBids": true, "categoryCodes": [{"scheme": "Catálogo do Compras.gov.br", "code": "623909"}, {"scheme": "NCM/NBS", "code": "852580"}, {"scheme": "Catálogo do Compras.gov.br", "code": "635156"}], "itemsCount": 14, "itemKinds": ["goods"], "estimatedValue": 635350.04, "currency": "BRL", "budgetConfidential": false, "publishedAt": "2026-11-03T13:52:34-03:00", "updatedAt": "2026-11-03T13:52:34-03:00", "proposalsOpenAt": "2026-11-04T08:00:00-03:00", "deadline": "2026-11-16T09:00:00-03:00", "documents": [{"title": "PE 90004_26 (2).zip", "type": "Edital", "url": "https://pncp.gov.br/pncp-api/v1/orgaos/08829974000194/compras/2026/80/arquivos/1", "publishedAt": "2026-11-03T13:52:35-03:00"}, {"title": "14/2026.pdf", "type": "Termo de Referência", "url": "https://pncp.gov.br/pncp-api/v1/orgaos/08829974000194/compras/2026/80/arquivos/2", "publishedAt": "2026-11-03T13:53:36-03:00"}], "url": "https://pncp.gov.br/app/editais/08829974000194/2026/80", "submissionUrl": "https://cnetmobile.estaleiro.serpro.gov.br/comprasnet-web/public/compras/acompanhamento-compra?compra=44304805000102026", "descriptionExcerpt": "Aquisição de bens destinados à implantação e/ou ampliação de sistemas de Circuito Fechado de Televisão – CFTV, organizados em 3 (três) grupos, e 3 (três) itens avulsos (racks de parede, nobreaks e monitores) visando atender às demandas das Unidades de Conservação Federais vinculadas à Gerência Regional 5 Sul (GR-5 Sul) do ICMBio,", "detailsFetched": true, "detailsError": null, "sourceQuery": "status=open states=PR modalities=6", "source": "pncp.gov.br", "scrapedAt": "2026-11-03T17:05:00+00:00"}
Limits and caveats
- Up to 10,000 tenders per run (1,000 with details). Narrow the filters to go further.
- Details take about 3 seconds per tender.
- A tender published in the last few minutes may not have its official record yet; its row then keeps the dates shown in the search.
- PNCP publishes proposal times without a time zone; they are read in the buyer's state time zone. The western tip of Amazonas uses
-05:00locally but is read as-04:00. - Titles and descriptions retain the text published by the buying body, including public contact information.
FAQ
How fresh is the data? Every run reads PNCP live; buyers publish new tenders all day.
How do I get only new tenders each day? Turn on onlyNewSinceLastRun, keep the same input and schedule it. The Actor keeps a history per search and returns only tenders it has not delivered before, or whose deadline, status, value, title or documents changed. The first run returns everything and marks feed.firstRun in the run's OUTPUT. You can still use publishedSince instead and deduplicate on tenderId; each run is then independent, so overlapping windows deliver the same tenders again.
What does a daily feed run cost? The start event ($0.005 at 512 MB) plus $0.0009 for each tender it actually delivers. A day with no new tenders costs $0.005. A first run over the 20-tender example costs about $0.023.
Do I need an account or a key on PNCP? No. The Actor reads the public PNCP consultation data.
Why did my category or municipality filter return fewer tenders than expected? PNCP's search has no municipality or product-category filter. Use states, modalities and keywords in the input, then filter on municipality or, with includeDetails on, categoryCodes in the output.
What happens when nothing matches? The run succeeds with an empty dataset and says so in its status. An invalid value (an unknown state code, a CNPJ without 14 digits) stops the run with a clear message.
Price
You pay per event through Apify's pay-per-event billing:
| Event | Price | When |
|---|---|---|
| Run start | $0.005 per started GB of memory (minimum one event) | Once per run, even when nothing matches |
| Tender | $0.0009 | Once per tender row stored in the dataset |
Worked costs:
- The 20-tender quick-start run: $0.005 start + 20 × $0.0009 = $0.023.
- 1,000 tenders: $0.005 + 1,000 × $0.0009 = $0.905.
- A daily feed run with no new tenders: $0.005.
With includeDetails on, the same per-tender price applies; the edital and item details do not add an event. See the Pricing tab for the prices that apply to your plan. The run-start event is charged per GB of memory; the default 512 MB run is one start event.
Support
For questions or issues, contact us from the Actor page.