Licitações Brasil | PNCP Public Tenders
Pricing
$2.00 / 1,000 tender found / licitação encontradas
Licitações Brasil | PNCP Public Tenders
Busque licitações por palavra-chave, órgão, UF, modalidade e publicação. Search Brazilian tenders from the official public PNCP API.
Pricing
$2.00 / 1,000 tender found / licitação encontradas
Rating
0.0
(0)
Developer
prized rainstorm
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Licitações Brasil — PNCP Public Tenders
Português
Encontre oportunidades de fornecimento no Portal Nacional de Contratações Públicas (PNCP) por palavra-chave, órgão, UF, modalidade e data de publicação. Retorna uma linha por licitação, com objeto, valores em BRL, prazos e link oficial. Usa a API pública oficial: não exige conta PNCP, chave, proxy ou cadastro extra.
Entrada
{"startDate": "2026-10-14","endDate": "2026-10-14","keywords": ["equipamentos agrícolas"],"agencyName": "Ampére","agencyCnpj": "77817054000179","state": "PR","modalities": [6],"maxResults": 100,"maxRequests": 20}
As datas do exemplo são fixas e foram consultadas no smoke de 15/10/2026. Troque-as para buscar outras publicações.
| Campo | Comportamento |
|---|---|
startDate, endDate | Obrigatórios, YYYY-MM-DD; em published/updated: intervalo inclusivo de publicação/atualização global, até 31 dias. Em open, só endDate é obrigatório e startDate é ignorado; não filtra publicação. |
keywords | Opcional, até 20 termos de até 200 caracteres. OU entre termos, busca literal de trecho sem distinguir acentos/maiúsculas, no objeto e informação complementar. Vazio busca todos. Sem regex ou IA. |
agencyName | Trecho do nome do órgão, sem acentos/maiúsculas; até 200 caracteres. |
agencyCnpj | CNPJ exato de 14 dígitos, com ou sem pontuação. Valida formato, não situação cadastral. |
state | Uma UF brasileira; omitir para todas. Runtime aceita minúsculas e normaliza. |
modalities | IDs ativos do catálogo oficial versionado de 2026-10-15 (veja snapshot abaixo); padrão [6] = Pregão Eletrônico. Use os códigos das tabelas oficiais. A busca padrão cobre somente modalidade 6. |
maxResults | 1–1.000; padrão 100, teto de resultados únicos correspondentes. |
maxRequests | 1–100; padrão 20. Orçamento GLOBAL de páginas, compartilhado entre modalidades, com até 50 registros por página. Retries podem gerar até 3 tentativas HTTP por página. |
O formulário de modalidades usa uma lista de números e mostra os IDs ativos com seus nomes na ajuda. O padrão continua [6]; IDs ausentes ou inativos são rejeitados pelo runtime.
Todos os filtros são combinados por E, exceto o OU entre palavras-chave e modalidades. Datas, UF, CNPJ e modalidade são enviados ao PNCP e conferidos localmente; nome e palavras-chave são filtros locais. A API não oferece busca por palavra-chave nesse endpoint. Filtros locais seletivos podem consumir o orçamento sem entregar resultados; aumente maxRequests ou reduza o intervalo. Campos desconhecidos e valores inválidos rejeitam a execução antes da coleta/cobrança. Duplicatas de termos/modalidades são removidas.
Saída
Uma linha por ID PNCP distinto nesta execução; estado opcional entre execuções descrito abaixo. Exemplo reduzido do smoke real:
{"id": "77817054000179-1-000110/2026","object": "Aquisição de equipamentos agrícolas, proposta nº 002606/2026 e convênio nº 992649/2026 - mapa.","agencyName": "MUNICIPIO DE AMPERE","agencyCnpj": "77817054000179","state": "PR","municipality": "Ampére","modalityId": 6,"modality": "Pregão - Eletrônico","estimatedValue": 196000,"awardedValue": null,"currency": "BRL","publishedAt": "2026-10-14T00:00:06","proposalClosingAt": "2026-11-05T08:30:01","source": "PNCP","url": "https://pncp.gov.br/app/editais/77817054000179/2026/110"}
Também retorna additionalInformation, unitName, statusId, status, updatedAt, proposalOpeningAt, sourceUrl (GET original) e collectedAt (instante UTC da coleta). Valores ausentes são null; zero continua zero. Datas da fonte são preservadas literalmente: quando não têm fuso, não são convertidas para UTC. collectedAt tem sufixo Z.
O registro SUMMARY no key-value store padrão informa pagesFetched, recordsScanned, matched, delivered, filtros e truncated. stopReason pode ser complete, maxResults, maxRequests ou spendingLimit; collectionStopReason mantém o motivo original da coleta. Ao atingir exatamente o teto de resultados, a marcação é conservadora: truncated=true. complete significa que as páginas selecionadas foram percorridas, não uma garantia de completude de toda a base pública.
Um GET 204 é vazio válido. Erros HTTP, avisos/erros explícitos ou estrutura inválida não viram sucesso vazio. A coleta termina antes da cobrança: falha de coleta descarta o lote, não entrega nem cobra evento. Se uma falha ocorrer durante a entrega, o dataset pode conter resultados anteriores e SUMMARY indicará erro.
Preço
US$2 por 1.000 licitações únicas correspondentes: evento tender-found, US$0,002 por resultado. Não cobramos evento por registros descartados, duplicatas, zero correspondências ou erros de coleta. Sem assinatura ou taxa própria de início. Custos da plataforma Apify, quando aplicáveis, são separados.
O preço efetivo exibido na Store é a referência comercial. O pacote local não configura preço nem publica automaticamente.
Em modo pay-per-event, cobra antes de gravar cada resultado. Se o teto de cobrança impedir o evento, o resultado não é entregue; se o último evento for autorizado, ele é entregue e a execução para. Cobrança e dataset são operações separadas: uma falha de gravação após cobrar pode exigir reconciliação pelo operador. Sem estado, reexecutar pode cobrar novamente. Com estado, versões já entregues são suprimidas antes da cobrança. Em execução local fora de PPE, não chama Actor.charge.
Limites e fonte
- Modalidades em ordem de entrada, páginas em ordem da fonte; não ordena por relevância, valor ou prazo. O teto global pode encerrar antes das modalidades seguintes.
- Chamadas sequenciais, intervalo mínimo de 1 segundo entre tentativas; timeout de 20 segundos, resposta de até 4 MiB e até 3 tentativas para HTTP 429/5xx.
Retry-Afteré respeitado até 60 segundos; acima disso, falha para tentar mais tarde. Falhas de rede e autenticação falham sem contorno. - Conexões somente aos quatro endpoints HTTPS oficiais enumerados abaixo, sem redirecionamentos; não visita links de sistemas de origem ou anexos. Não resolve desafios, logins ou bloqueios.
- Publicação recente pode se referir a edital cujo prazo já encerrou. Consulte o documento oficial antes de participar. Não presume que todo resultado aceita propostas.
- Sem anexos, itens detalhados, alertas, cadastro de fornecedores ou análise jurídica. Não cobre portais que ainda não enviaram dados ao PNCP. A base muda durante a paginação e não oferece snapshot atômico.
Fonte: API PNCP Consulta, PNCP em Dados Abertos. Ferramenta independente, sem vínculo ou endosso do governo. A cobrança remunera filtragem e estruturação; os dados públicos continuam acessíveis gratuitamente na fonte. Nenhuma marca ou anexo de terceiros é redistribuído.
Modos e estado entre execuções
mode aceita published (padrão, publicação), updated (atualização global) e open (recebimento de propostas aberto). updated consulta /api/consulta/v1/contratacoes/atualizacao com dataInicial, dataFinal, modalidade e paginação; seleciona por dataAtualizacaoGlobal, mesmo com publicação antiga. Acrescenta sourceGlobalUpdatedAt sem alterar updatedAt (dataAtualizacao) ou publishedAt.
open consulta /api/consulta/v1/contratacoes/proposta com dataFinal=endDate em yyyyMMdd, modalidade, UF/CNPJ opcionais e paginação; não envia dataInicial nem aplica janela de publicação. O PNCP determina quais propostas estão abertas no momento da consulta; endDate é o horizonte enviado à fonte, não uma data histórica de retrato. Não calcula um novo filtro de prazo local. Exemplos: {"mode":"updated","startDate":"2026-10-15","endDate":"2026-10-15"}; {"mode":"open","endDate":"2026-11-15"}. Fonte: OpenAPI oficial, GET 200 salvo em reports/melhoria/openapi.json.
O padrão de modalidades é somente [6], não todas. O ../src/data/modalities-2026-10-15.json vem do GET oficial /api/pncp/v1/modalidades. Entrada e schema aceitam somente IDs presentes com statusAtivo=true; IDs ausentes/inativos são rejeitados. Todos os IDs do snapshot atual estão ativos. Atualizar o snapshot e schema juntos após conferir o catálogo, sem presumir intervalos ou disponibilidade de resultados para cada ID.
Forneça stateStoreName, por exemplo supplier-monitor, para habilitar um key-value store nomeado Apify compartilhado entre execuções deste monitor. Omitir mantém o comportamento anterior. O store guarda uma entrada por id (chave SHA-256) com a última versão entregue: hash SHA-256 de todos os campos normalizados, exceto collectedAt, sourceUrl e os próprios marcadores de versão. Assim mudar janela/URL ou horário de coleta não reentrega; mudar proposalClosingAt ou outro campo relevante reentrega com changeType="changed"; primeira entrega tem changeType="new". Ambas incluem versionHash.
A versão é gravada depois de entregar no dataset, nunca após cobrança recusada ou falha de entrega. Dataset, cobrança e estado não formam uma transação: falha após entregar e antes de persistir pode repetir/cobrar novamente. Use um store por monitor/consumidor e uma execução por vez; concorrência não oferece exclusão mútua. Não reutilize o nome entre projetos. Os tetos de coleta continuam antes da supressão: matched conta correspondências coletadas e delivered conta versões entregues; o teto pode ocultar páginas seguintes. Não há watermark/retomada ou promessa de exatamente uma entrega.
Usa armazenamento nativo nomeado disponível no Free da Apify, sem banco ou serviço pago adicional; consumo continua sujeito aos limites/créditos da plataforma. Store nomeado persiste entre runs; localmente persiste em storage/key_value_stores/<nome>. Dados crescem por ID, sem descarte automático; mantenha o mesmo nome para continuidade. Nenhum serviço foi contratado ou conta modificada nesta tarefa.
Allowlist exata: /api/consulta/v1/contratacoes/publicacao, /api/consulta/v1/contratacoes/atualizacao, /api/consulta/v1/contratacoes/proposta, /api/pncp/v1/modalidades, somente em https://pncp.gov.br. Catálogo é snapshot local durante runs; não há GET extra por execução.
English
Find Brazilian supplier opportunities from the official PNCP public API by keyword, agency, state, modality and publication date. Each dataset row contains one tender with structured BRL values, dates and its official link. No PNCP account, API key, paid proxy or additional registration is required.
Input
Use the same JSON example above. In published/updated, startDate and endDate are required inclusive publication/global-update dates in YYYY-MM-DD format, covering at most 31 days. In open, only endDate is required and startDate is ignored; publication dates are not filtered.
keywords: optional list of up to 20 terms, each at most 200 characters. Literal substring matching across object and additional information, case/accent insensitive, OR between terms. Empty means all. No regex or AI.agencyName: optional agency-name substring, case/accent insensitive, at most 200 characters.agencyCnpj: optional exact agency CNPJ, 14 digits with optional standard punctuation; format validation only.state: optional Brazilian two-letter state; omit for all. Runtime normalizes lowercase.modalities: Active PNCP IDs from the versioned 2026-10-15 official catalog (snapshot below), deduplicated; default[6]means electronic reverse auctions only. See the official domain tables.maxResults: 1–1,000 unique matching tenders, default 100.maxRequests: 1–100 logical page requests, default 20, shared across all modalities. Each page requests 50 records and may involve up to three HTTP attempts.
Filters combine with AND, except OR across keywords and modalities. Date, state, CNPJ and modality filters are sent upstream and checked locally. Agency-name and keyword filters run locally because this endpoint does not expose keyword search. Selective filters can exhaust the page budget with no matches: narrow the dates or raise the budget. Unknown fields and invalid values fail before collection or billing.
Output and coverage
The reduced real smoke example above illustrates the stable field names. Full rows also include additionalInformation, unitName, statusId, status, updatedAt, proposalOpeningAt, sourceUrl and collectedAt. Missing optional fields are null; zero is preserved. Source timestamps remain unchanged, including timestamps without a timezone. Only collectedAt is a UTC collection timestamp.
IDs are deduplicated within a run. The default key-value store's SUMMARY record provides pagesFetched, recordsScanned, matched, delivered, normalized input, truncated and stopReason: complete, maxResults, maxRequests, or spendingLimit. collectionStopReason preserves the original collection outcome. Exactly reaching the result ceiling conservatively marks truncation. Complete means traversal of the selected pages, not guaranteed coverage of every Brazilian tender.
Modalities follow input order, with upstream page ordering; there is no relevance or deadline sort. A global limit may stop before later modalities. The source can change between pages, so the query is not an atomic snapshot. Recent publication does not necessarily mean proposals are still open.
HTTP 204 is a valid empty response. HTTP failures, explicit warnings/errors and malformed payloads fail the run instead of being silently treated as empty success. Collection finishes before billing; a collection failure discards the batch without event charges or delivery. Delivery errors may leave earlier rows in the dataset, with an error summary.
Pricing
US$2 per 1,000 unique matching tenders, charged through the tender-found event at US$0.002 each. No result-event charge for rejected records, duplicates, empty searches or collection errors. No subscription or own startup fee. Apify platform costs, if applicable, are separate.
The Store's actual displayed pricing governs. This package does not publish or configure remote pricing.
In PPE mode, charging precedes dataset delivery. Uncharged rows are not delivered when a spending limit is reached; an authorized last row is delivered before stopping. Billing and dataset writes are separate: failure after charging may require operator reconciliation. Without state, repeated runs may charge again. With state, previously delivered versions are suppressed before charging. Local/non-PPE runs do not call Actor.charge.
Operational limits and attribution
Sequential requests with at least one second between attempts, a 20-second deadline, 4 MiB response cap and up to three attempts for HTTP 429/5xx. Retry-After is honored up to 60 seconds; longer delays fail for a later run. Network and authentication failures are not bypassed. Only the four enumerated official HTTPS endpoints below are allowed; redirects, source-system links, documents, login challenges and arbitrary URLs are not followed.
This actor returns tender metadata, not attachments, item details, supplier registration, alerts or legal analysis. Missing source submissions are outside its coverage. Verify official notices and deadlines before bidding.
Data source: PNCP Query API, official open-data explanation. Independent tool, not affiliated with or endorsed by the Brazilian government. The service charges for filtering and structuring; the public source remains free. No third-party attachments or official branding are redistributed.
Modes and cross-run state
mode is published (default publication behavior), updated (global-update window) or open (currently open proposals). updated queries /api/consulta/v1/contratacoes/atualizacao, selecting dataAtualizacaoGlobal within the supplied dates even for older publications. sourceGlobalUpdatedAt is additive; publishedAt and updatedAt retain their meanings.
open queries /api/consulta/v1/contratacoes/proposta with dataFinal=endDate in yyyyMMdd, modality, optional UF/CNPJ and pagination. It sends no dataInicial, ignores startDate and applies no publication filter. PNCP selects currently open proposals; endDate is the upstream horizon, not a historical snapshot date. No extra local deadline filter is inferred. Examples: {"mode":"updated","startDate":"2026-10-15","endDate":"2026-10-15"} and {"mode":"open","endDate":"2026-11-15"}. Parameters follow the official OpenAPI, saved with HTTP 200 in reports/melhoria/openapi.json.
Default modalities are only [6]. The ../src/data/modalities-2026-10-15.json, fetched from /api/pncp/v1/modalidades, drives validation: only present IDs with statusAtivo=true are accepted. All current snapshot IDs are active. Refresh snapshot and schema together after checking the source; an official ID does not guarantee available tenders.
Set optional stateStoreName (e.g. supplier-monitor) to use the same named Apify key-value store across runs. Omit it for the original behavior. One record per tender id (SHA-256 key) stores the last delivered version. The version hashes all normalized fields except observation time collectedAt, query sourceUrl, and version markers. Identical versions are skipped before billing; a changed proposalClosingAt or other relevant field is delivered with changeType="changed", first deliveries with changeType="new", both with versionHash.
State is saved after dataset delivery, never after a refused charge or failed push. Billing, dataset and state are separate operations: failure after delivery but before saving state may cause repeats and repeat charges. Use one store per monitor/consumer and run serially; there is no concurrent-run lock. Do not share names across projects. Collection ceilings apply before suppression: matched counts collected matches and delivered counts delivered versions, so the ceiling can hide later pages. No watermark/resume or exactly-once guarantee is added.
Native named key-value storage is available on Apify Free without an extra paid database/service; platform usage limits/credits still apply. Local storage persists under storage/key_value_stores/<name>. State grows per ID without automatic removal. Keep the same name for continuity. No paid service or account change was made.
Exact allowlist on https://pncp.gov.br: /api/consulta/v1/contratacoes/publicacao, /api/consulta/v1/contratacoes/atualizacao, /api/consulta/v1/contratacoes/proposta, /api/pncp/v1/modalidades. Production runs read the bundled catalog, avoiding an extra network request.
The modalities form uses a numeric array and lists the active IDs and names in its help text. The default remains [6]; runtime validation rejects missing or inactive IDs.
Exemplo rápido e limite de tempo / Quick example and time budget
O botão de restaurar exemplo usa publicação em 2026-10-14, modalidade [6], até 5 resultados e 1 página, sem filtros ou estado persistente. Entrada vazia ou composta apenas pelos defaults da plataforma usa esse mesmo exemplo histórico; forneça datas explícitas para monitorar outros períodos. Limites omitidos em entradas explícitas continuam em 100 resultados/20 páginas.
A coleta para em 180 s, novas entregas param em 210 s e o Actor solicita encerramento bem-sucedido em até 221 s (saída forçada com código 0 aos 230 s se o SDK travar). Resultados parciais ficam no dataset; SUMMARY.truncated e stopReason=timeBudget|upstreamError indicam cobertura incompleta. HTTP 429/5xx e falhas de rede têm até 3 tentativas com backoff; erros HTTP permanentes encerram a coleta sem repetir. Falhas de validação ou dados malformados continuam falhando. Indisponibilidade total do PNCP pode deixar o dataset vazio e reprovar o QA.
Restore example uses 2026-10-14, modality [6], at most 5 results and 1 page, without filters or persistent state. Empty input or input containing only platform defaults uses the same historical example; supply explicit dates for other periods. Omitted limits on explicit inputs remain 100 results/20 pages.
Collection stops at 180 s, new deliveries at 210 s, and the Actor requests successful shutdown by 221 s (forced exit code 0 at 230 s if SDK shutdown stalls). Partial data remains in the dataset; SUMMARY.truncated and stopReason=timeBudget|upstreamError signal incomplete coverage. HTTP 429/5xx and network failures retry up to 3 attempts with backoff; permanent HTTP failures stop collection without retry. Invalid input and malformed data still fail. A complete PNCP outage may leave the dataset empty and fail QA.