# Mapa de Preços BR: pesquisa de preços (PNCP, IN 65/2021) (`peposimao/mapa-precos-br`) Actor

Lista de itens → mapa de preços pronto: preços homologados no PNCP, análise crítica, média, mediana, preço estimado, memória de cálculo e planilha XLSX.

- **URL**: https://apify.com/peposimao/mapa-precos-br.md
- **Developed by:** [João Pedro Simão Laragnoit](https://apify.com/peposimao) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 item analisado com preço estimados

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

## Mapa de Preços BR: pesquisa de preços para licitações (PNCP · IN 65/2021)

![Mapa de Preços BR: cole a lista de itens e receba o mapa de preços pronto](https://raw.githubusercontent.com/joaolaragnoit/apify-imagens/main/mapa-precos-br-banner.jpg)

**Envie a lista de itens do seu processo e receba o mapa de preços pronto.** Para cada item, o Actor busca preços **homologados** em compras públicas recentes no **PNCP** (Portal Nacional de Contratações Públicas), faz a **análise crítica** (descarta preços inexequíveis e excessivamente elevados), calcula **média, mediana, menor preço e coeficiente de variação**, escolhe o método e entrega:

- 📊 **Planilha XLSX do mapa de preços**, com abas de resumo, evidências (cada preço com link para a fonte) e memória de cálculo;
- 📝 **Memória de cálculo pronta para o processo**, cobrindo fonte, critério de exclusão, método e preço estimado;
- 🌐 **Relatório HTML** para ler, imprimir ou compartilhar;
- 🔌 **Dados estruturados (JSON/CSV/Excel)** via API, webhooks e MCP.

Você paga **só pelos itens com preço estimado conclusivo** (3 ou mais preços válidos, por padrão).

### Para quem é

- 🏛️ **Prefeituras, câmaras, autarquias e consórcios:** a pesquisa de preços exigida pela Lei 14.133/2021 (art. 23) e pela IN SEGES/ME nº 65/2021, com 20 ou 30 itens de uma vez, e não um termo por vez.
- 💼 **Empresas que vendem para o governo:** saiba quanto os órgãos realmente pagaram antes de montar a proposta.
- 🧑‍💼 **Consultorias e assessorias de licitação:** gere o mapa de preços de vários clientes em minutos.
- 🤖 **Agentes de IA:** um agente pode chamar o Actor via MCP e devolver o preço estimado com memória de cálculo.

### Como usar

![Como funciona: informe os itens, coleta e análise crítica no PNCP, mapa de preços pronto](https://raw.githubusercontent.com/joaolaragnoit/apify-imagens/main/mapa-precos-br-como-funciona.jpg)

1. Abra o Actor no Console da Apify (dá para testar no plano gratuito).
2. Informe os itens de um destes dois jeitos, **sem precisar escrever código**:
   - **Formulário:** em *Itens do processo*, clique em adicionar e preencha descrição, unidade e quantidade. Só a descrição é obrigatória.
   - **Colar do Excel:** em *Ou cole a lista do Excel*, cole as colunas direto da sua planilha, uma linha por item, na ordem **descrição · unidade · quantidade · palavras para excluir · unidades equivalentes**. Cabeçalho e numeração dos itens são ignorados. Também dá para digitar separando por ponto e vírgula:

```text
papel A4; RESMA; 100; colorido, kraft; UN
caneta esferográfica azul; UN; 500
café torrado e moído; KG; 120; solúvel, cápsula
```

**Unidades equivalentes** servem para quando os órgãos registram o mesmo produto em outra unidade. Por exemplo, papel A4 muitas vezes aparece como "UN" querendo dizer uma resma. Se o Actor deixar preços de fora por unidade, ele avisa no campo `avisos` e sugere qual unidade informar.

3. Escolha os estados (ou deixe Brasil todo) e o período (padrão: 12 meses).
4. Clique em **Start**. Ao final, abra a aba **Output**: lá estão o mapa de preços, a planilha `MAPA_DE_PRECOS.xlsx` e o relatório `RELATORIO.html`.

Por API, envie `itens` como lista de objetos (`excluir` e `unidadesEquivalentes` aceitam texto separado por vírgula ou lista) ou `itensColados` como texto.

### O que acontece com cada item

1. **Busca** compras no PNCP com o termo do item, das mais recentes para as mais antigas.
2. **Filtra** os itens licitados que correspondem à descrição. Por padrão, as palavras pesquisadas precisam aparecer no começo da descrição, o que evita que serviços com textos longos ("terceirização de impressão... papel A4...") entrem na pesquisa de "papel A4". Depois aplica as palavras de exclusão.
3. **Lê o resultado homologado** de cada item: preço unitário do vencedor, fornecedor, quantidade e desconto. Resultados cancelados e cadastro reserva ficam de fora, e cada licitação contribui com no máximo 3 preços (ajustável), para um único pregão com muitos lotes não dominar a amostra.
4. **Converte unidades** quando o conteúdo está explícito na unidade ou na descrição: "CX C/ 12", "CAIXA (24 x 1)" ou "PAPEL A4 (CAIXA COM 10 UN)" → preço por unidade; "PCT 500G" ou "CAFÉ ... EMBALAGEM DE 500 GRAMAS" → preço por KG; "FARDO ... 250G C/20 UND" → 5 kg; "10 PACOTES COM 500 FOLHAS" → 10 resmas. Fardos e caixas só são convertidos quando a descrição diz quantas embalagens contêm. Sem informação segura, o preço fica marcado como *unidade incompatível* e não entra no cálculo.
5. **Análise crítica em duas etapas:**
   - Valores abaixo de 1/3 ou acima de 3× a mediana são *inconsistentes*, diferença típica de outro produto ou unidade (ex.: preço por folha no meio de preços por resma).
   - Depois, cada preço é comparado com a média dos demais, retirando um valor extremo por vez: abaixo de 70% é *inexequível* e acima de 130% é *excessivo* (limites ajustáveis). Também é possível usar o critério do intervalo interquartil.
6. **Método:** com coeficiente de variação até 25% (amostra homogênea), usa a **média**. Acima disso, a **mediana**. Também dá para fixar média, mediana ou menor preço.
7. **Trava de qualidade:** se, mesmo após a análise crítica, o coeficiente de variação passar de 50%, o item sai como **"revisar"** e não é cobrado. O Actor nunca entrega como conclusivo um preço tirado de uma amostra misturada.
8. **Memória de cálculo** gerada em texto corrido, pronta para colar no processo.

### Saída

Uma linha por item no dataset:

| Campo | Descrição |
|---|---|
| `item`, `descricao`, `unidade`, `quantidade` | O item pedido |
| `situacao` | `concluido` (preço estimado com 3+ preços válidos), `revisar` (preços dispersos demais), `insuficiente`, `sem_resultados` ou `erro` |
| `precosColetados`, `precosValidos` | Quantos preços foram achados e quantos sobraram após a análise crítica |
| `excluidosInexequiveis`, `excluidosExcessivos`, `unidadeIncompativel` | Quantos foram descartados e por quê |
| `media`, `mediana`, `menorPreco`, `desvioPadrao`, `coeficienteVariacaoPct` | Medidas dos preços válidos |
| `metodo`, `precoEstimado`, `valorTotalEstimado` | Método aplicado, preço unitário estimado e total (preço × quantidade) |
| `memoriaDeCalculo` | Texto pronto para o processo |
| `precos[]` | Cada preço: valor original e convertido, status, órgão, UF, data, fornecedor, desconto e link do PNCP |

Exemplo de memória de cálculo (dados ilustrativos):

> Item 1 – notebook core i5 (UN). Fonte: preços homologados em contratações similares da Administração Pública publicadas no PNCP, parâmetro do art. 5º, II, da IN SEGES/ME nº 65/2021, nos últimos 12 meses, abrangência: todo o Brasil. Foram coletados 5 preço(s)… Análise crítica: … 1 inexequível(is), 1 excessivo(s) … 3 preço(s) válido(s). Medidas dos preços válidos: média R$ 4.600,00, mediana R$ 4.600,00, menor preço R$ 4.500,00, coeficiente de variação 2,17%. Método (art. 6º): coeficiente de variação de 2,17% (até 25,00%) indica amostra homogênea; adotada a média. Preço estimado: R$ 4.600,00 por UN; quantidade 10; valor total estimado R$ 46.000,00.

Exemplo do relatório entregue (dados reais do PNCP):

![Exemplo do relatório com 5 itens e memória de cálculo](https://raw.githubusercontent.com/joaolaragnoit/apify-imagens/main/mapa-precos-br-exemplo-relatorio.jpg)

Arquivos no key-value store da execução:

- `MAPA_DE_PRECOS.xlsx`: abas *Mapa de preços*, *Preços coletados* e *Memória de cálculo*, configuradas para impressão em A4 paisagem;
- `RELATORIO.html`: relatório legível em qualquer navegador;
- `OUTPUT`: resumo com total estimado e links públicos dos arquivos.

### Quanto custa

Cobrança por evento, **sem custo de plataforma à parte**:

| Evento | Preço |
|---|---|
| Item analisado com preço estimado conclusivo | **US$ 0,25** |
| Item para revisar, com preços insuficientes, sem resultados ou com erro | grátis |
| Início da execução | taxa padrão da Apify (centavos de centavo) |

Um processo com 20 itens custa no máximo **US$ 5**. Defina o *custo máximo por execução* no Console para nunca passar do seu orçamento.

### Usar por API, automação ou agente de IA

```python
from apify_client import ApifyClient

client = ApifyClient("<SEU_TOKEN_APIFY>")
run = client.actor("peposimao/mapa-precos-br").call(run_input={
    "itens": [{"descricao": "papel A4", "unidade": "RESMA", "quantidade": 200}],
    "ufs": ["SP"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["descricao"], item["precoEstimado"], item["situacao"])
```

**MCP:** adicione `https://mcp.apify.com/?tools=peposimao/mapa-precos-br` ao Claude, ChatGPT, Cursor ou outro cliente MCP e peça, por exemplo: *"Faça a pesquisa de preços destes 10 itens em SP e me dê o valor total estimado."*

### Limites e cuidados

- **Os dados são os publicados pelos órgãos.** Descrições e unidades são digitadas livremente. Por isso o Actor mostra cada preço com link para conferência.
- **Nem todo órgão publica o resultado por item.** Compras recentes podem ainda não ter resultado homologado.
- **A busca usa a mesma pesquisa do site do PNCP**, que não é uma API oficial documentada e pode mudar. Avisos e falhas aparecem no log e no campo `avisos`.
- **Ferramenta de apoio:** a responsabilidade pela pesquisa de preços é do agente público que a assina. Os limites de 70%/130% e de 25% de coeficiente de variação são práticas difundidas em manuais de pesquisa de preços, não números fixados pela IN 65/2021. Ajuste-os ao regulamento do seu órgão.
- **Privacidade:** quando o fornecedor é pessoa física, o CPF sai mascarado (`***.456.789-**`).

### Perguntas frequentes

**Serve para estados e municípios?** A IN 65/2021 é federal, mas muitos entes a adotam ou têm norma parecida. O Actor deixa os critérios ajustáveis para seguir a regra local.

**E obras e serviços de engenharia?** A IN 65/2021 não se aplica a eles. Use com cautela e confira a regra própria (ex.: SINAPI).

**Posso usar outras palavras na busca do que na descrição?** Sim: informe `termoBusca` no item.

**Encontrei um erro ou quero um campo novo.** Abra uma *issue* na aba Issues. Respondemos em até 24h.

***

#### 🇺🇸 English summary

**Brazilian public procurement price research, done for you.** Send the list of items of a procurement process and get a ready price map: awarded unit prices from Brazil's official PNCP portal, outlier removal (unfeasibly low and excessive prices), mean, median, lowest price, coefficient of variation, estimated price per item, a calculation memo following Brazil's IN SEGES/ME 65/2021 and an XLSX spreadsheet. You are only charged (US$ 0.25) for items with a conclusive estimate (3+ valid prices by default). Works through the Apify API and MCP for AI agents.

# Actor input Schema

## `itens` (type: `array`):

Clique em <b>+ Add</b> para incluir um item por vez. Só a descrição é obrigatória. Para muitos itens, use o campo abaixo e cole a lista direto do Excel. Os itens do formulário e da lista colada se somam.

## `itensColados` (type: `string`):

<b>Substitua o exemplo pela sua lista.</b> Uma linha por item, nas colunas: <b>descrição · unidade · quantidade · palavras para excluir · unidades equivalentes</b>. Só a descrição é obrigatória. Copie as colunas direto do Excel ou do Google Planilhas, ou separe por ponto e vírgula. Ex.:<br><code>papel A4; RESMA; 100; colorido, kraft; UN</code><br><code>caneta esferográfica azul; UN; 500</code><br>Cada linha é um item e é cobrada se tiver preço estimado conclusivo.

## `nomeProcesso` (type: `string`):

Aparece na planilha e no relatório. Ex.: "Processo 123/2026 – Material de escritório".

## `orgaoSolicitante` (type: `string`):

Opcional. Aparece no cabeçalho da planilha e do relatório.

## `ufs` (type: `array`):

Siglas dos estados a considerar, ex.: SP, MG. Vazio = Brasil todo.

## `mesesAtras` (type: `integer`):

Considera compras publicadas nos últimos N meses. O padrão de 12 meses acompanha o parâmetro de contratações similares do art. 5º, II, da IN 65/2021.

## `correspondencia` (type: `string`):

"Começa com o produto" (recomendado): a descrição do item licitado começa pelo produto pesquisado (ignorando prefixos como '\[COTA RESERVADA] -' e aberturas como 'Aquisição de'), o que corta 'Envelope para papel A4' e 'Suporte para notebook'. "Nas primeiras palavras": as palavras aparecem no começo da descrição, em qualquer ordem. "Em qualquer ponto": mais resultados, mas entram itens que só citam o termo.

## `analiseCritica` (type: `string`):

Como descartar preços inexequíveis e excessivamente elevados (art. 6º da IN 65/2021).

## `limiteInexequivelPct` (type: `integer`):

Preço abaixo deste percentual da média dos demais é considerado inexequível. Padrão: 70.

## `limiteExcessivoPct` (type: `integer`):

Preço acima deste percentual da média dos demais é considerado excessivamente elevado. Padrão: 130.

## `metodo` (type: `string`):

"Automático" usa a média quando a amostra é homogênea (coeficiente de variação até o limite abaixo) e a mediana quando não é.

## `cvLimitePct` (type: `integer`):

Usado no método automático. Padrão: 25.

## `cvMaximoPct` (type: `integer`):

Se, após a análise crítica, o coeficiente de variação dos preços válidos passar deste valor, o item sai como 'revisar' e não é cobrado: provavelmente há produtos ou unidades misturados. Padrão: 50.

## `minPrecos` (type: `integer`):

Abaixo disso o item sai como 'preços insuficientes' e não é cobrado. O art. 6º da IN 65/2021 pede 3 ou mais.

## `maxPrecosPorItem` (type: `integer`):

Para a coleta quando atingir este número de preços. Compras mais recentes vêm primeiro.

## `maxPrecosPorCompra` (type: `integer`):

Quantos preços uma mesma licitação pode contribuir para um item. Evita que um único pregão com vários lotes domine a amostra. Padrão: 3.

## `maxComprasPorItem` (type: `integer`):

Limite de segurança do tempo de execução. Cada compra leva alguns segundos para ser lida no PNCP.

## `proxyConfiguration` (type: `object`):

Opcional. Use apenas se o PNCP começar a bloquear as requisições.

## Actor input object example

```json
{
  "itensColados": "papel A4; RESMA; 100; colorido, kraft, reciclado; UN",
  "nomeProcesso": "Pesquisa de preços – exemplo",
  "mesesAtras": 12,
  "correspondencia": "inicio",
  "analiseCritica": "media_dos_demais",
  "limiteInexequivelPct": 70,
  "limiteExcessivoPct": 130,
  "metodo": "automatico",
  "cvLimitePct": 25,
  "cvMaximoPct": 50,
  "minPrecos": 3,
  "maxPrecosPorItem": 30,
  "maxPrecosPorCompra": 3,
  "maxComprasPorItem": 60,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `mapa` (type: `string`):

Uma linha por item: situação (concluido, revisar, insuficiente, sem_resultados, erro), preço estimado, média, mediana, coeficiente de variação, método, valor total, avisos, memória de cálculo e a lista 'precos' com cada preço coletado e o link do PNCP.

## `planilha` (type: `string`):

Abas Mapa de preços, Preços coletados e Memória de cálculo, prontas para imprimir e anexar ao processo.

## `relatorio` (type: `string`):

Relatório legível em qualquer navegador, com resumo, memória de cálculo e evidências de cada item.

## `resumo` (type: `string`):

Total estimado dos itens concluídos, quantidade de itens concluídos e cobrados, e links públicos da planilha e do relatório.

# 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 = {
    "itensColados": "papel A4; RESMA; 100; colorido, kraft, reciclado; UN",
    "nomeProcesso": "Pesquisa de preços – exemplo"
};

// Run the Actor and wait for it to finish
const run = await client.actor("peposimao/mapa-precos-br").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 = {
    "itensColados": "papel A4; RESMA; 100; colorido, kraft, reciclado; UN",
    "nomeProcesso": "Pesquisa de preços – exemplo",
}

# Run the Actor and wait for it to finish
run = client.actor("peposimao/mapa-precos-br").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 '{
  "itensColados": "papel A4; RESMA; 100; colorido, kraft, reciclado; UN",
  "nomeProcesso": "Pesquisa de preços – exemplo"
}' |
apify call peposimao/mapa-precos-br --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,peposimao/mapa-precos-br"
        }
    }
}
```

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/Ce7QCoeUyB5OM6t7w/builds/o0W23a2yT5uHRHONQ/openapi.json
