# Preços do Governo — Pesquisa de Preços CATMAT (Brasil) (`kodama-data/precos-governo-pesquisa-precos`) Actor

Quanto o governo paga por item: preços homologados do Compras.gov.br com mediana, média saneada e fornecedores. Pesquisa de preços Lei 14.133.

- **URL**: https://apify.com/kodama-data/precos-governo-pesquisa-precos.md
- **Developed by:** [Guilherme Kodama](https://apify.com/kodama-data) (community)
- **Categories:** Business, Lead generation, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 linha de preços

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

## Preços Praticados pelo Governo — Pesquisa de Preços CATMAT (Compras.gov.br)

> Desenvolvido e mantido por **Guilherme Kodama** · GitHub: [github.com/guilhermeKodama](https://github.com/guilhermeKodama)

> 📬 **Vai dar lance em café, água ou snack?** O **Radar Vending Público** manda todo dia as licitações abertas do setor com preço de referência do governo. [Ver amostra e planos](https://guilhermekodama.github.io/radar-vending/) · [Plano Fundador — R$ 29/mês](https://pay.kiwify.com.br/caNaoiF)

**Quanto o governo realmente paga por cada item?** Este actor consulta a API oficial de Dados Abertos do
Compras.gov.br e devolve os **preços homologados em compras públicas**, item a item do catálogo CATMAT,
com **estatística pronta para pesquisa de preços**: mínimo, mediana, média, **média saneada** (sem
outliers), faixa aceitável e principais fornecedores.

### Para quem

- **Servidores e agentes de contratação**: pesquisa de preços da Lei 14.133/2021 (art. 23) e IN SEGES/ME 65/2021
  (mínimo de 3 preços, desconsiderar inexequíveis e excessivamente elevados) em minutos, por UF, esfera e período.
- **Fornecedores que vendem ao governo**: saber o preço de referência antes de dar lance; ver quem vence e onde.
- **Consultorias, assessorias de licitação e analistas**: séries de preço por item, região e período, via API.

### O que entrega

Duas visões no mesmo dataset (`tipoLinha`):

1. **resumo** — uma linha por item CATMAT + unidade de comparação: `amostras`, `minimo`, `p25`, `mediana`, `media`,
   `mediaSaneada` (Tukey 1,5×IQR), `faixaAceitavel`, `outliersExcluidos`, `coefVariacaoSaneado`, `compras`,
   `topFornecedores`, `porUf`, `periodo`.
2. **preco** — cada preço: item, preço unitário, **preço por kg/litro/unidade normalizado** (ex.: pacote de 500 g → R$/kg),
   quantidade, marca, fornecedor (CNPJ), órgão, UASG, município, UF, esfera, datas, objeto da compra e link da fonte.

### Como usar

- `searchTerms`: nomes como no CATMAT (`café`, `açúcar`, `copo descartável`). Cada termo vira as famílias (PDM) mais próximas.
- `preset`: listas prontas com códigos conferidos — `copa-cozinha-vending`, `limpeza`, `escritorio`, `alimentacao-escolar`.
- `catalogCodes`: códigos exatos (`pdm:19766`, `item:463587`).
- Filtros: `dateFrom`/`dateTo` (data da compra; ex. `-180d`), `ufs`, `codigoMunicipio` (IBGE), `esferas` (F/E/M),
  `descriptionContains`, `excludeDescription`.
- `outputMode`: `ambos` | `resumo` (barato) | `precos`.
- **Modo alerta**: `onlyNew: true` + `stateKey` e agende semanal → só preços novos.

Exemplo: `{"preset":"copa-cozinha-vending","ufs":["SP"],"dateFrom":"-90d","outputMode":"resumo"}`

### Observações honestas

- O período filtra pela **data da compra**; o resultado (homologação) sai dias ou semanas depois. Para alertas,
  use janela de 60–120 dias com `onlyNew`.
- Os preços são publicados como o órgão registrou. Há erros de cadastro (unidade trocada, preço do lote no lugar do
  unitário) — por isso a média saneada e a faixa aceitável. Confira o registro original no `linkFonte`.
- Cobertura: compras registradas no Compras.gov.br (federal e entes que usam a plataforma). Não cobre todos os municípios.
- Catálogo CATMAT: o índice de PDMs (~15 mil) é baixado e guardado em cache por 7 dias.

### Privacidade (LGPD)

Fornecedor pessoa física (CPF) tem nome e documento omitidos. Só dados de pessoa jurídica e de órgãos públicos.

### Fonte

Compras.gov.br — API de Dados Abertos (módulos `pesquisa-preco` e `material`), https://dadosabertos.compras.gov.br. Dado público oficial, sem chave e sem login.

***

#### English summary

**Brazil government purchase prices (Compras.gov.br / CATMAT).** Official awarded unit prices from Brazilian public
procurement by item, keyword, state and date range, with ready-made price-research statistics (median, trimmed mean,
acceptable range, top suppliers) and unit-normalized prices (per kg / liter / unit). Alert mode (`onlyNew`).
Individual (CPF) suppliers are anonymized.

# Actor input Schema

## `searchTerms` (type: `array`):

Nome do material como no catálogo CATMAT (sem acento também funciona). Cada termo vira os PDMs (famílias de itens) mais próximos. Ex.: \["café", "açúcar", "papel a4"].

## `preset` (type: `string`):

Soma uma lista pronta de itens aos seus termos.

## `catalogCodes` (type: `array`):

Códigos exatos: pdm:19766 (família) ou item:463594 (item). Números só com até 5 dígitos são tratados como PDM; com 6+ como item.

## `dateFrom` (type: `string`):

AAAA-MM-DD ou relativo (ex.: -90d). Padrão: 180 dias antes da data final. A IN 65/2021 aceita preços de até 1 ano.

## `dateTo` (type: `string`):

AAAA-MM-DD. Padrão: hoje.

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

Siglas, ex.: \["SP", "MG"]. Vazio = Brasil todo.

## `codigoMunicipio` (type: `integer`):

Ex.: 3556701 (Vinhedo/SP).

## `esferas` (type: `array`):

F = federal, E = estadual, M = municipal. Vazio = todas.

## `descriptionContains` (type: `array`):

Mantém só itens cuja descrição tenha um destes termos. Ex.: \["torrado moído", "500 g"].

## `excludeDescription` (type: `array`):

Ex.: \["solúvel", "cápsula"].

## `outputMode` (type: `string`):

"ambos" = linhas de resumo estatístico por item + cada preço; "resumo" = só estatística (barato); "precos" = só preços.

## `minSamplesForSummary` (type: `integer`):

A IN 65/2021 pede no mínimo 3 preços.

## `maxPdmsPerTerm` (type: `integer`):

Quantas famílias de itens (PDMs) do CATMAT usar por termo pesquisado.

## `catalogGroups` (type: `array`):

Ex.: \["89"] = alimentos (subsistência); \["75"] = escritório; \["79"] = limpeza.

## `maxPagesPerCode` (type: `integer`):

Limite de páginas (500 preços cada) por código CATMAT e UF.

## `maxResults` (type: `integer`):

Limite de linhas de preço entregues no dataset.

## `onlyNew` (type: `boolean`):

Entrega só preços ainda não entregues em execuções anteriores com o mesmo stateKey. Agende diário/semanal.

## `stateKey` (type: `string`):

Nome do monitor para o modo só-novidades (um por cliente/tema).

## `delaySeconds` (type: `number`):

Pausa em segundos entre chamadas à API pública (rate limit educado).

## Actor input object example

```json
{
  "searchTerms": [
    "café",
    "açúcar"
  ],
  "preset": "nenhum",
  "dateFrom": "-90d",
  "outputMode": "ambos",
  "minSamplesForSummary": 3,
  "maxPdmsPerTerm": 2,
  "maxPagesPerCode": 6,
  "maxResults": 5000,
  "onlyNew": false,
  "stateKey": "padrao",
  "delaySeconds": 0.8
}
```

# Actor output Schema

## `results` (type: `string`):

Linhas de dois tipos (campo tipoLinha): 'resumo' (estatística por item/unidade) e 'preco' (preço individual homologado).

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

JSON com contadores da execução.

# 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 = {
    "searchTerms": [
        "café",
        "açúcar"
    ],
    "dateFrom": "-90d"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kodama-data/precos-governo-pesquisa-precos").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 = {
    "searchTerms": [
        "café",
        "açúcar",
    ],
    "dateFrom": "-90d",
}

# Run the Actor and wait for it to finish
run = client.actor("kodama-data/precos-governo-pesquisa-precos").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 '{
  "searchTerms": [
    "café",
    "açúcar"
  ],
  "dateFrom": "-90d"
}' |
apify call kodama-data/precos-governo-pesquisa-precos --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kodama-data/precos-governo-pesquisa-precos"
        }
    }
}
```

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/0mCZDanrZtpA5RhiX/builds/1Mg69vjwPF5DEUhV0/openapi.json
