Todos os artigos
Tecnologia e IA

Como usar a API de dados abertos do PNCP para criar seu radar de licitações

Aprenda a integrar a API do PNCP para monitorar editais automaticamente. Guia prático com endpoints, paginação e desafios técnicos para PMEs e MEIs.

O Portal Nacional de Contratações Públicas (PNCP), instituído pela Lei nº 14.133/2021, centraliza todos os editais, atas e contratos da Administração Pública brasileira. Sua API de dados abertos disponibiliza esse acervo de forma gratuita e programática, em formato JSON, sem exigir cadastro ou chave de acesso. Isso significa que qualquer empresa – inclusive MEIs e PMEs – pode montar seu próprio radar de licitações, consumindo os dados diretamente da fonte oficial.

O que é a API de Dados Abertos do PNCP e como funciona?

A API do PNCP segue o padrão REST e opera sobre o conjunto de dados públicos do portal. A base de dados inclui licitações, contratos, atas de registro de preços e notas de empenho de todos os entes federativos (União, estados e municípios) que utilizam o sistema. Cada registro contém informações como órgão contratante, objeto, modalidade, valor, data de abertura e situação.

O acesso é feito por chamadas HTTP GET. O endpoint principal para monitorar novas publicações é /v1/contratacoes/publicacao. A documentação técnica completa está disponível via Swagger UI, onde é possível testar requisições diretamente no navegador. A resposta é paginada – cada página retorna no máximo 50 registros – exigindo que o desenvolvedor implemente lógica de navegação entre páginas para obter lotes completos.

Exemplo prático: Para obter as últimas 10 páginas de licitações publicadas, faça uma requisição GET /v1/contratacoes/publicacao?pagina=1&tamanhoPagina=50 e repita incrementando o parâmetro pagina até que a resposta venha vazia.

Armadilha comum: Muitas integrações falham por não tratar corretamente a paginação. Se seu script não iterar até a última página, você perde editais recentes. Inclua um loop que verifique se totalPages (presente no cabeçalho da resposta) é maior que a página atual.

Como acessar e integrar a API no seu radar de licitações?

A integração básica requer apenas um cliente HTTP (como curl, requests em Python ou fetch em JavaScript) e conhecimento de JSON. Siga o passo a passo:

  1. Identifique o endpoint de interesse. Para radar de editais, o endpoint /v1/contratacoes/publicacao é o mais adequado. Se quiser acompanhar contratos já firmados, use /v1/contratacoes.

  2. Faça a primeira requisição. Exemplo com curl:

    curl -X GET "https://pncp.gov.br/api/pncp/v1/contratacoes/publicacao?pagina=1&tamanhoPagina=50" -H "accept: application/json"
    
  3. Processe a resposta. Cada registro contém campos como numeroContratacao, objeto, dataAbertura, valorEstimado, cnpjOrgao, orgaoNome, modalidadeNome, etc. Extraia os que interessam ao seu radar.

  4. Implemente a paginação. Leia o cabeçalho x-total-pages ou x-total-count para saber quantas páginas existem. Percorra todas elas, armazenando os dados.

  5. Programe a execução periódica. Como a API não possui webhook, a melhor estratégia é executar o script em intervalos fixos (ex.: a cada 30 minutos) para capturar novas publicações. Armazene um timestamp da última execução e filtre apenas registros com dataPublicacao posterior a ele.

Filtragem local: A API não oferece filtros por palavra-chave, CNAE ou CATMAT. Se você precisa monitorar apenas licitações de um setor específico, baixe os dados brutos e aplique o filtro localmente. Uma prática comum é baixar diariamente a lista completa de licitações do dia e cruzar com uma base local de CNAEs de interesse.

Quais os principais desafios técnicos ao usar a API do PNCP?

Dados dispersos em múltiplos endpoints

Uma única contratação pode ter informações distribuídas entre os endpoints de licitação, contrato, ata e empenho. Para reconstituir o histórico completo, seu script precisa agregar dados de várias chamadas. Por exemplo, para obter o valor final de um contrato, você consulta /v1/contratacoes/{id} e depois /v1/contratos/{id}.

Paginação e volume de dados

O volume de dados é grande – o PNCP registra milhares de publicações por dia. Sem uma lógica de paginação eficiente, seu radar pode ficar incompleto ou consumir tempo excessivo. Recomenda-se usar requisições concorrentes (com limites de paralelismo) e armazenar os dados em um banco local (SQLite, PostgreSQL) para consultas rápidas.

Inconsistências e dados faltantes

Dados públicos podem conter campos vazios ou valores inconsistentes. Por exemplo, valorEstimado pode ser nulo em alguns registros. Seu script deve tratar esses casos sem quebrar. Uma boa prática é registrar logs de erros e, em caso de falha, tentar novamente com backoff exponencial.

Ausência de filtros avançados

A API não permite filtrar por município, valor ou modalidade diretamente na URL. Se você precisa de filtros complexos, precisa extrair os dados completos e aplicar condições localmente. Para PMEs que atuam em uma região específica, uma alternativa é consultar apenas os órgãos daquele estado usando o campo cnpjOrgao (que contém os 6 primeiros dígitos do CNPJ, correspondentes à raiz do órgão).

Recomendação: Utilize scripts de monitoramento periódico (cron jobs ou serviços em nuvem) para manter seu radar atualizado sem sobrecarregar o servidor. O Manual de Integração do PNCP sugere intervalos mínimos de 5 minutos entre requisições para evitar bloqueios.

Perguntas frequentes

É necessário cadastro para usar a API?

Não. A API de dados abertos do PNCP é pública e gratuita, sem necessidade de login, token ou credenciais. Basta fazer requisições HTTP GET para os endpoints documentados.

Como monitorar apenas licitações do meu estado?

A API não filtra por estado, mas você pode usar o campo cnpjOrgao para identificar a Unidade Federativa. Os 6 primeiros dígitos do CNPJ do órgão correspondem à raiz e indicam a localização (ex.: 00.000.000 para federal, 10.000.000 para estados, etc.). Extraia e filtre localmente.

Qual o limite de requisições da API?

O Manual de Integração não especifica um limite rígido, mas recomenda-se não exceder uma requisição a cada 5 segundos. Para grandes volumes, utilize mecanismos de cache e dormência entre chamadas.

Como tratar dados inconsistentes, como valores vazios?

Sempre valide os campos antes de usá-los. Em Python, por exemplo, use valor.get('valorEstimado') or 0 para evitar erros de tipo. Registre logs de registros com dados faltantes para auditoria posterior.

Posso usar a API para fins comerciais?

Sim. Os dados do PNCP são públicos e de livre utilização, inclusive para produtos comerciais. Basta respeitar a licença de dados abertos e não sobrecarregar o serviço.


Quer automatizar todo o processo de monitoramento, filtragem e análise das licitações que interessam ao seu negócio? O Max, da Lisix, já integra a API do PNCP e outras fontes em um único painel, com alertas em tempo real e inteligência competitiva. Conheça o Max e ganhe tempo para focar no que realmente importa: vencer licitações.