PNCP Brazil Public Tenders Scraper | Licitações avatar

PNCP Brazil Public Tenders Scraper | Licitações

Pricing

from $0.90 / 1,000 tenders

Go to Apify Store
PNCP Brazil Public Tenders Scraper | Licitações

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

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

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 onlyNewSinceLastRun so 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

  1. Press Start. The form is already filled with this input, so the first run returns 20 open tenders in a few seconds:
{"maxItems": 20}
  1. Add your keywords, states or modalities, then run again or save the input as a task.
  2. Download the rows as JSON, CSV or Excel, or schedule the task for a daily feed.

Input

FieldTypeDefaultWhat it does
keywordsstring""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.
statusstringopenopen (deadline still ahead), closed (proposal period ended) or all.
statesarray[]Buyer states as UF codes, e.g. SP, RJ, DF.
modalitiesarray[]Procurement methods by id, e.g. 6 Pregão - Eletrônico, 4 Concorrência - Eletrônica, 8 Dispensa.
spheresarray[]Government level: F federal, E state, M municipal, D Federal District.
buyerCnpjsarray[]Buyer CNPJs, with or without punctuation, up to 20.
publishedSincestring""Only tenders published or changed on or after this date (YYYY-MM-DD, Brasília time).
includeDetailsbooleanfalseAdds documents, item category codes, item count and a description excerpt, and confirms the deadline with the official record. Slower.
maxItemsinteger50Maximum 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 (new or changed) and changedFields.
  • The first run has no saved history, so it returns everything and reports feed.firstRun in the run's OUTPUT.
  • The history lives in the named key-value store pncp-tenders-scraper-feed-state, one record per search. Leave stateKey empty 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.

  • status is open, closed, awarded, cancelled or suspended; isOpenForBids is true while the deadline is still ahead.
  • Dates are ISO 8601 with an offset, so they sort and compare correctly. publishedAt and updatedAt are Brasília time (-03:00). proposalsOpenAt and deadline are in the buyer's local time: -04:00 for Amazonas, Roraima, Rondônia, Mato Grosso and Mato Grosso do Sul, -05:00 for Acre, -02:00 for Fernando de Noronha, -03:00 elsewhere.
  • estimatedValue is in BRL and only filled when the buyer published it; confidential budgets are marked with budgetConfidential and left empty.
  • categoryCodes, itemsCount, itemKinds, documents and descriptionExcerpt are filled when details are on and empty otherwise.
  • url is the official notice page; submissionUrl is 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:00 locally 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:

EventPriceWhen
Run start$0.005 per started GB of memory (minimum one event)Once per run, even when nothing matches
Tender$0.0009Once 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.