# Leitor de Edital de Licitação com IA (PNCP) (`the_coder_senior/leitor-edital-licitacao`) Actor

Lê editais do PNCP ou em PDF (inclusive escaneados) e devolve checklist de habilitação, prazos, garantias e riscos com citação de página e cláusula.

- **URL**: https://apify.com/the_coder_senior/leitor-edital-licitacao.md
- **Developed by:** [Márcio Makoto Nakamura](https://apify.com/the_coder_senior) (community)
- **Categories:** AI, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Leitor de Edital de Licitação com IA (PNCP)

![Leitor de Edital de Licitação com IA](https://api.apify.com/v2/key-value-stores/9cRsq45DCVQSCooIt/records/cover.png?signature=1AGQTxWm2p3KSZo6Vo25t)

**Cole o link do edital no PNCP (ou a URL de um PDF) e receba o checklist pronto: documentos de habilitação, prazos, garantias, critério de julgamento, valor estimado e pontos de risco. Cada item traz a página e a cláusula de onde saiu.**

> ⚖️ **A análise é um apoio, não substitui a leitura jurídica do edital.** A IA pode errar ou deixar passar uma exigência. Use o checklist para ganhar tempo e confira as cláusulas citadas antes de decidir ou de assinar qualquer peça.

*English summary: reads Brazilian public tender notices (PNCP link, control number or PDF URL), including scanned PDFs, ZIP/RAR packages and multiple attachments, and returns a structured checklist (qualification requirements, deadlines, guarantees, award criteria, estimated value, legal risks and possible grounds for challenge) with the page and clause of every item. Pay per tender analysed, MCP- and agent-ready. The output is decision support and does not replace legal review.*

***

### Para quem é

- **Empresas que participam de licitações** e perdem horas lendo editais de 80 páginas para descobrir se podem entrar.
- **Escritórios de advocacia e consultorias** que montam checklist de habilitação para os clientes.
- **Equipes comerciais** que monitoram oportunidades e precisam filtrar rápido o que vale a pena.
- **Agentes de IA e automações** (n8n, Make, MCP) que precisam de editais em formato estruturado.

### O que você recebe

| Bloco | O que traz |
| --- | --- |
| **Resumo executivo** | Objeto, modalidade, valor, datas-chave e pontos de atenção em poucas frases. |
| **Prazos** | Sessão, propostas, impugnação, esclarecimentos, recurso, com data e hora quando o edital as informa. |
| **Habilitação** | Jurídica, fiscal/social/trabalhista, econômico-financeira e técnica, com índices, atestados e validades. |
| **Garantias** | Garantia de proposta e contratual, percentuais e modalidades aceitas. |
| **Identificação** | Critério de julgamento, modo de disputa, regime de execução, SRP, ME/EPP, consórcio, visita técnica, pagamento, reajuste. |
| **Riscos e impugnação** | Cláusulas possivelmente restritivas ou ilegais, riscos operacionais e financeiros, com gravidade, fundamento e o que fazer. |
| **Lacunas** | O que o edital **não** informa e você precisa perguntar. |
| **Citações conferidas** | Cada item traz documento, página, cláusula e um trecho copiado do texto. O actor confere o trecho contra o PDF e corrige a página quando o modelo erra. |

![Como funciona](https://api.apify.com/v2/key-value-stores/9cRsq45DCVQSCooIt/records/fluxo.png?signature=1fbhZlEI7OHsCWriD5KBP)

### Como usar

1. Em **Editais**, cole um ou mais identificadores, um por linha. Aceita:
   - link da página do PNCP: `https://pncp.gov.br/app/editais/83021808000182/2026/681`
   - número de controle PNCP: `83021808000182-1-000681/2026`
   - forma curta: `83021808000182/2026/681`
   - URL direta de um PDF (ou ZIP) de edital
2. Clique em **Start**. Leva de 1 a 5 minutos por edital, conforme o tamanho e o modelo escolhido.
3. Leia o resultado na aba **Output** (tabela) ou baixe o JSON. Para cada edital bem-sucedido há também um **checklist em Markdown** (link no campo `relatorioMarkdownUrl`), pronto para colar em e-mail ou documento.

#### O que o actor lê

- **PNCP:** busca o edital e todos os anexos pela API pública. Por padrão lê edital, termo de referência, minutas e anexos principais, e deixa de fora parecer jurídico, ETP, DFD, orçamento e planilhas (ligue **Incluir documentos de apoio** para lê-los).
- **PDFs longos:** documentos grandes são lidos por prioridade. Se não couber tudo, o resultado diz exatamente quais páginas foram lidas.
- **PDFs escaneados:** páginas sem texto passam por OCR automático (até 200 páginas por edital).
- **Vários anexos:** ZIP e RAR são abertos, e DOCX e ODT são lidos como texto. Planilhas não são analisadas.

### Entrada

| Campo | Para que serve |
| --- | --- |
| `editais` | Lista de links, números de controle PNCP ou URLs de PDF. |
| `anthropicApiKey` | **Opcional.** Sua chave da Anthropic. Se informada, a IA roda na sua conta e o preço por edital cai. Deixe em branco para usar a IA do actor. Guardada como segredo. |
| `modeloAnalise` | **Padrão** (mais completo, 3 a 5 minutos por edital) ou **Econômico** (mais rápido, cerca de 1 minuto, com menos itens e menos pontos de risco). O preço do actor é o mesmo. |
| `incluirDocumentosSecundarios` | Inclui pareceres, ETP, orçamento etc. na análise. |

### Saída (exemplo)

![Exemplo de saída real](https://api.apify.com/v2/key-value-stores/9cRsq45DCVQSCooIt/records/exemplo.png?signature=1pFye69xcaigWIaPnFT3T)

Trecho resumido do JSON de um **pregão eletrônico real** (Chapecó/SC, locação de britador, R$ 441.560,04). Nesse teste o actor devolveu 77 itens, e todas as citações foram confirmadas no texto do PDF:

```json
{
  "status": "ok",
  "edital": { "numeroControlePNCP": "83021808000182-1-000681/2026", "modalidade": "Pregão - Eletrônico", "valorTotalEstimado": 441560.04 },
  "prazos": [
    {
      "evento": "impugnacao",
      "data_hora": "",
      "descricao": "Até 3 dias úteis antes da abertura, via plataforma eletrônica.",
      "documento": "Edital", "pagina": 5, "clausula": "6.1",
      "trecho": "...",
      "citacao_conferida": "exata"
    }
  ],
  "habilitacao": {
    "tecnica": [
      {
        "requisito": "Atestado(s) de capacidade técnica de locação ou disponibilização de equipamentos",
        "documento": "Edital", "pagina": 11, "clausula": "14.4.1",
        "citacao_conferida": "exata"
      }
    ]
  },
  "riscos": [
    {
      "titulo": "Pagamento condicionado ao início efetivo de utilização pelo Município",
      "gravidade": "alta",
      "categoria": "possivel_impugnacao",
      "fundamento": "Lei 14.133/2021, arts. 92, V, e 124, II, d",
      "recomendacao": "Pedir esclarecimento sobre a forma de medição antes de propor preço.",
      "documento": "Termo de referência", "pagina": 17, "clausula": "21.1",
      "citacao_conferida": "exata"
    }
  ],
  "lacunas": ["A matriz de risco e o ETP são citados, mas não foram disponibilizados."],
  "conferenciaCitacoes": { "total": 77, "exata": 77, "nao_encontrada": 0, "taxaConfirmacao": 1 }
}
```

(O campo `trecho` traz a cópia literal do edital em cada item; foi omitido aqui para encurtar.)

### Preço

Você paga **por edital analisado**. O que dá errado não é cobrado: ID inválido, contratação inexistente, edital sem anexos, arquivo ilegível e falha da IA.

| Evento | Quando | Preço |
| --- | --- | --- |
| **Edital analisado** | A IA é a do actor (você não informa chave) | **US$ 2,00** |
| **Edital analisado, chave própria** | Você informa sua chave da Anthropic | **US$ 0,50** (a IA é paga por você, direto na Anthropic) |

Com a sua própria chave, a IA de um edital de 50 a 60 páginas custa na Anthropic cerca de US$ 0,80 a 1,00 no modelo padrão, ou cerca de US$ 0,25 no modelo econômico. Editais maiores e com OCR custam mais.

#### Limites do plano gratuito da Apify

No plano gratuito, cada execução analisa **até 2 editais, com até cerca de 150 páginas cada**. Se você enviar mais, o actor **não dá erro**: ele analisa os dois primeiros e, para os demais, devolve no resultado o status `limite_plano_gratuito` com a mensagem de como seguir (rodar de novo ou assinar um plano pago). Nada é cobrado pelos editais não analisados. Em plano pago, o limite é de 100 editais por execução e cerca de 170 páginas por edital (cerca de 800 com chave própria).

Use o **Max charge per run** (limite de gasto da execução) para travar o custo: o actor para antes de estourar o limite e avisa.

### Para agentes de IA e MCP

O actor funciona como ferramenta de agente: entrada simples (uma lista de textos), saída em JSON estável e mensagens de erro em texto claro no campo `mensagem`. Use pelo servidor MCP da Apify:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=the_coder_senior~leitor-edital-licitacao",
      "headers": { "Authorization": "Bearer SEU_TOKEN_APIFY" }
    }
  }
}
```

Pergunte ao seu agente: *"Analise o edital 83021808000182-1-000681/2026 e liste o que preciso para me habilitar."* Também funciona via API, n8n, Make e Zapier.

#### Chamada pela API

```bash
curl "https://api.apify.com/v2/acts/the_coder_senior~leitor-edital-licitacao/run-sync-get-dataset-items?token=SEU_TOKEN" \
  -X POST -H "Content-Type: application/json" \
  -d '{"editais": ["83021808000182-1-000681/2026"]}'
```

### Campos principais do resultado

- `status`: `ok`, `entrada_invalida`, `nao_encontrado`, `sem_documentos`, `sem_texto_legivel`, `limite_plano_gratuito`, `limite_de_gasto`, `recusado` ou `erro`.
- `mensagem`: explicação em português do que aconteceu.
- `edital`: dados do PNCP (órgão, modalidade, valor estimado, datas, link).
- `resumoExecutivo`, `prazos`, `habilitacao`, `garantias`, `identificacao`, `riscos`, `lacunas`.
- Cada item: `documento`, `pagina`, `clausula`, `trecho` e `citacao_conferida` (`exata`, `aproximada`, `pagina_corrigida` ou `nao_encontrada`).
- `conferenciaCitacoes`: quantas citações foram confirmadas no texto.
- `documentos`: o que foi lido, o que ficou de fora e por quê.

### Limites e boas práticas

- **Não é parecer jurídico.** Confira as cláusulas citadas. Itens com `citacao_conferida: "nao_encontrada"` merecem atenção redobrada.
- Os pontos de risco são indícios de possível irregularidade, não conclusões. A decisão de impugnar é sua e do seu advogado.
- Editais acima de cerca de 170 páginas (800 com chave própria) são lidos em parte, e o resultado informa quais páginas.
- Planilhas de custos, projetos e desenhos não são analisados.
- O actor usa só dados públicos do PNCP e os documentos que você indicar. Respeite os termos de uso do portal e a LGPD ao tratar dados pessoais que apareçam nos editais.

### Perguntas frequentes

**Preciso de chave da Anthropic?** Não. Sem chave, a IA é a do actor. Com a sua chave, o preço por edital é menor.

**Minha chave aparece nos logs?** Não. O campo é secreto e a chave nunca vai para o resultado.

**Funciona para dispensa e concorrência?** Sim. Foi testado com pregão, concorrência e dispensa.

**E se o edital for escaneado?** O OCR é automático nas páginas sem texto.

**Posso analisar um edital que não está no PNCP?** Sim, informe a URL direta do PDF.

# Actor input Schema

## `editais` (type: `array`):

Um por linha. Aceita: link da página do PNCP (https://pncp.gov.br/app/editais/CNPJ/ANO/SEQUENCIAL), número de controle PNCP (ex.: 83021808000182-1-000681/2026), forma curta CNPJ/ANO/SEQUENCIAL ou URL direta de um PDF/ZIP de edital.

## `anthropicApiKey` (type: `string`):

Deixe em branco para usar a IA do próprio actor (preço normal por edital). Se informar sua chave da Anthropic, o custo da IA passa a ser seu, direto na Anthropic, e o preço por edital cai. A chave é guardada como segredo, não aparece nos logs nem no resultado.

## `modeloAnalise` (type: `string`):

Padrão: o modelo mais capaz, para a análise jurídica mais completa. Econômico: um modelo mais barato e rápido, indicado para triagem de muitos editais. O preço por edital é o mesmo.

## `incluirDocumentosSecundarios` (type: `boolean`):

Por padrão o actor lê edital, termo de referência, minutas e anexos principais, e deixa de fora pareceres jurídicos, ETP, orçamento, DFD e planilhas. Ative para ler também esses documentos (a análise fica mais longa).

## Actor input object example

```json
{
  "editais": [
    "83021808000182-1-000681/2026",
    "https://pncp.gov.br/app/editais/87612982000150/2026/115"
  ],
  "modeloAnalise": "padrao",
  "incluirDocumentosSecundarios": false
}
```

# Actor output Schema

## `checklists` (type: `string`):

No description

## `tabela` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "editais": [
        "83021808000182-1-000681/2026"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("the_coder_senior/leitor-edital-licitacao").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "editais": ["83021808000182-1-000681/2026"] }

# Run the Actor and wait for it to finish
run = client.actor("the_coder_senior/leitor-edital-licitacao").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "editais": [
    "83021808000182-1-000681/2026"
  ]
}' |
apify call the_coder_senior/leitor-edital-licitacao --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,the_coder_senior/leitor-edital-licitacao"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/j6gZpMFYOUjQjSTqM/builds/gWd9GxlC86QWbp0Cm/openapi.json
