# API de Cadastro Nacional de Obras Civis (CNO) por CNPJ (`brasildados/cno-cadastro-nacional-de-obras-api`) Actor

Consulte obras civis vinculadas a empresas pelo CNPJ.

- **URL**: https://apify.com/brasildados/cno-cadastro-nacional-de-obras-api.md
- **Developed by:** [BrasilDados.org](https://apify.com/brasildados) (community)
- **Categories:** Real estate, AI, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 por obra encontradas

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🏗️ Consulta CNO e Dados de Obras Civis por CNPJ

Consulte o **CNO — Cadastro Nacional de Obras** e encontre obras civis vinculadas a empresas brasileiras pelo CNPJ. Informe de 1 a 20 CNPJs, filtre por uma ou várias UFs e receba uma linha por obra com número CNO, empresa responsável, situação cadastral, área, datas, endereço completo, CNAEs e composição das áreas.

Esta **API de obras por CNPJ** entrega dados estruturados para construtoras, incorporadoras, fornecedores da construção civil, seguradoras, escritórios contábeis, compliance, prospecção B2B e inteligência de mercado. Os resultados podem ser exportados em **JSON, CSV, Excel, XML** e outros formatos oferecidos pela Apify.

### 🔎 O que é o Cadastro Nacional de Obras?

O Cadastro Nacional de Obras identifica construções civis e registra informações relacionadas à obra e ao seu responsável. A consulta CNO pode ajudar a localizar empreendimentos, validar registros, analisar a atuação de uma empresa no setor e mapear oportunidades comerciais ligadas à construção civil.

Este Actor organiza registros obtidos em tempo de execução a partir de fontes legítimas e auditáveis. Ele não emite certidão nem substitui uma consulta oficial, parecer jurídico, fiscal ou técnico.

### O que este Actor faz?

- Consulta obras de **um ou vários CNPJs** no mesmo campo.
- Aceita CNPJ com pontuação ou somente números.
- Remove CNPJs duplicados antes da consulta.
- Processa até 20 empresas em paralelo com concorrência controlada.
- Filtra localmente por uma ou várias UFs sem gerar consultas adicionais.
- Retorna uma linha independente para cada obra encontrada.
- Mantém endereço público da obra completo.
- Preserva relações 1:N em `cnaes[]` e `areas[]`.
- Exporta o Dataset para JSON, CSV, Excel e XML.
- Funciona em lote pelo modo **Batch** e em tempo real pela **API Standby**.

### 💼 Casos de uso

- **Prospecção B2B:** encontre obras ligadas a construtoras e incorporadoras conhecidas.
- **Fornecedores da construção civil:** identifique oportunidades para materiais, equipamentos e serviços.
- **Inteligência de mercado:** analise cidades, estados, áreas, destinações e situações das obras.
- **Compliance e due diligence:** complemente a análise cadastral de empresas e empreendimentos.
- **Contabilidade e regularização:** organize registros CNO relacionados a uma carteira de CNPJs.
- **Seguros e crédito:** apoie análises de exposição e atividade no setor de construção.
- **CRM e automação:** integre obras encontradas a fluxos comerciais e operacionais.

### 📥 Entrada

O input possui somente dois campos simples. Para consultar um único CNPJ, envie uma lista com um item. O filtro `ufs` é opcional e vem com todos os estados selecionados no formulário.

| Campo | Obrigatório | Limite | Descrição |
|---|---:|---:|---|
| `cnpjs` | Sim | 1 a 20 | Lista de CNPJs com ou sem pontuação. Valores repetidos são consultados uma única vez. |
| `ufs` | Não | 27 UFs | Multiselect para filtrar as obras por um ou vários estados. Omitido ou vazio retorna todas as UFs. |

```json
{
  "cnpjs": ["73.178.600/0001-18","73178600000118"],
  "ufs": ["SP","RJ"]
}
```

Os dois formatos abaixo são aceitos e normalizados internamente:

| Valor enviado | Valor normalizado |
|---|---|
| `73.178.600/0001-18` | `73178600000118` |
| `73178600000118` | `73178600000118` |

### 📤 Dados retornados

Cada linha do Dataset representa uma obra encontrada. Isso facilita filtros, planilhas, bancos de dados e cobrança por resultado, mesmo quando um único CNPJ possui centenas de obras.

| Grupo | Campos disponíveis |
|---|---|
| Empresa | `cnpj`, `cnpjFormatado`, `empresa` |
| Totais por CNPJ | `totalObrasEmpresa`, `totalObrasAtivasEmpresa`, `totalObrasEncerradasEmpresa`, `totalObrasFiltradas` |
| Identificação da obra | `cno`, `nomeObra`, `situacao`, `qualificacaoResponsavel` |
| Área e datas | `areaMetrosQuadrados`, `inicioEm`, `responsabilidadeInicioEm`, `cadastradoEm` |
| Endereço da obra | `pais`, `cep`, `tipoLogradouro`, `logradouro`, `numero`, `complemento`, `bairro`, `municipio`, `uf` |
| Atividades | `cnaes[].codigo`, `cnaes[].cadastradoEm` |
| Composição da área | categoria, destinação, tipo construtivo, tipo da área, complemento e metros quadrados em `areas[]` |

#### Exemplo completo do resultado JSON

O exemplo abaixo contém todos os campos públicos e reproduz os mesmos nomes, tipos e níveis do retorno real. Os valores são ilustrativos.

```json
{
  "cnpj": "73178600000118",
  "cnpjFormatado": "73.178.600/0001-18",
  "empresa": "CONSTRUTORA BRASIL S.A.",
  "totalObrasEmpresa": 2,
  "totalObrasAtivasEmpresa": 2,
  "totalObrasEncerradasEmpresa": 0,
  "totalObrasFiltradas": 2,
  "cno": "900030410574",
  "nomeObra": "RESIDENCIAL JARDINS",
  "situacao": "ATIVA",
  "areaMetrosQuadrados": 9656,
  "inicioEm": "2020-03-11",
  "responsabilidadeInicioEm": "2020-03-11",
  "cadastradoEm": "2020-03-11",
  "qualificacaoResponsavel": "Dono da Obra",
  "pais": "BRASIL",
  "cep": "05414-020",
  "tipoLogradouro": "RUA",
  "logradouro": "FRANCISCO LEITAO",
  "numero": "416",
  "complemento": "BLOCO A",
  "bairro": "PINHEIROS",
  "municipio": "SÃO PAULO",
  "uf": "SP",
  "cnaes": [
    {
      "codigo": "4311-8/01",
      "cadastradoEm": "2020-03-11"
    }
  ],
  "areas": [
    {
      "categoria": "Obra Nova",
      "destinacao": "Residencial multifamiliar",
      "tipoConstrucao": "Alvenaria",
      "tipoArea": "Principal",
      "complementoTipoArea": null,
      "metrosQuadrados": 9656
    }
  ]
}
```

Campos não informados são retornados como `null`; listas sem registros são retornadas como `[]`.

### ⚡ Como usar pela API

Você precisa apenas do token da sua conta Apify. Use o header `Authorization: Bearer` para evitar que o token apareça em URLs e logs.

#### Batch — executar e receber o Dataset

Use Batch para lotes, empresas com muitas obras, exportações, agendamentos e automações. O parâmetro `maxTotalChargeUsd` limita o valor máximo da execução; ajuste-o conforme a quantidade de resultados desejada e o preço vigente na aba **Pricing**.

```bash
curl -X POST "https://api.apify.com/v2/acts/brasildados~cno-cadastro-nacional-de-obras-api/run-sync-get-dataset-items?maxTotalChargeUsd=1" \
  -H "Authorization: Bearer SEU_TOKEN_APIFY" \
  -H "Content-Type: application/json" \
  --compressed \
  -d '{"cnpjs":["73.178.600/0001-18","73178600000118"],"ufs":["SP","RJ"]}'
```

#### Standby — resposta HTTP em tempo real

Use o endpoint único `POST /obras` quando sua integração precisar receber o JSON imediatamente:

```bash
curl -X POST "https://brasildados--cno-cadastro-nacional-de-obras-api.apify.actor/obras" \
  -H "Authorization: Bearer SEU_TOKEN_APIFY" \
  -H "Content-Type: application/json" \
  --compressed \
  -d '{"cnpjs":["73.178.600/0001-18","73178600000118"],"ufs":["SP","RJ"]}'
```

O Standby aceita corpo JSON de até 5 MB. Entrada inválida retorna status `400` com `{ "error": "mensagem" }`; falhas temporárias tratadas retornam status `500` no mesmo formato. Para empresas com muitas obras ou operações que possam levar vários minutos, prefira Batch.

A aba **Endpoints** oferece um Playground com input preenchido e um **Example Value** completo, compatível com o resultado real.

### 💳 Cobrança Pay per event

O evento utilizado é **`obra-encontrada`**. Cada obra efetivamente entregue gera uma cobrança independente.

- Um CNPJ com 8 obras entregues = 8 eventos.
- Dois CNPJs com 3 e 5 obras = 8 eventos.
- CNPJ sem obra = nenhuma cobrança de resultado.
- CNPJ duplicado = consultado uma única vez.
- Obra que não puder ser cobrada = não é entregue.
- Limite de gastos atingido = somente os resultados cobrados são disponibilizados.

O preço atualizado por obra aparece na aba **Pricing** da página do Actor.

### 🔐 Privacidade e qualidade

- Endereços de obras são registros públicos e permanecem completos.
- CNPJ e nome de pessoa jurídica permanecem completos.
- O Actor não publica CPF completo; qualquer documento pessoal eventualmente recebido é omitido ou mascarado.
- Credenciais internas nunca aparecem no input, Dataset, resposta HTTP ou logs públicos.
- Datas são normalizadas para `AAAA-MM-DD`, CEP para `00000-000` e CNAE para `0000-0/00` quando possível.

### Como interpretar os principais campos?

- `cno`: número que identifica a obra no Cadastro Nacional de Obras.
- `situacao`: situação disponível para o registro, como ativa, encerrada ou paralisada.
- `areaMetrosQuadrados`: área principal informada para a obra; consulte `areas[]` para a composição detalhada.
- `totalObrasEmpresa`: total nacional de registros associado ao CNPJ, antes do filtro por UF.
- `totalObrasAtivasEmpresa` e `totalObrasEncerradasEmpresa`: totais nacionais informados para a empresa.
- `totalObrasFiltradas`: quantidade de obras do CNPJ que corresponde às UFs selecionadas.
- `cnaes[]`: atividades econômicas vinculadas ao registro da obra.
- `areas[]`: parcelas de área com categoria, destinação, tipo construtivo e metragem.

### Limitações

- São aceitos até 20 CNPJs por execução ou requisição.
- O filtro de UF é aplicado depois da consulta do CNPJ; portanto, não reduz o custo interno da consulta, mas somente obras filtradas e entregues geram PPE.
- A quantidade de obras varia conforme os registros disponíveis para cada empresa.
- Um CNPJ pode retornar centenas de linhas; configure seu limite de gastos antes de executar.
- A disponibilidade e a atualização dependem das fontes consultadas em tempo de execução.
- A ausência de resultado indica que nenhuma obra foi encontrada nos registros disponíveis naquele momento.

### Actors relacionados da BrasilDados

- [Enriquecimento de empresas por CNPJ](https://apify.com/brasildados/enriquecimento-lista-empresas-por-cnpj?fpr=t5lwzq) para enriquecer uma lista conhecida de empresas.
- [Consulta de contratos do Governo por CNPJ](https://apify.com/brasildados/consulta-contratos-governo-cnpj?fpr=t5lwzq) para localizar contratos públicos de empresas.
- [Gerador de leads por CNAE](https://apify.com/brasildados/gerador-de-leads-scraper-cnae?fpr=t5lwzq) para criar listas comerciais por atividade econômica.
- [Todos os Actors da BrasilDados](https://apify.com/brasildados?fpr=t5lwzq) para outras consultas empresariais no Brasil.

### Perguntas frequentes

#### Posso consultar somente um CNPJ?

Sim. Use o mesmo campo com um item: `{"cnpjs":["73178600000118"]}`.

#### Posso enviar CNPJ com pontuação?

Sim. O Actor aceita `73.178.600/0001-18` e `73178600000118` e normaliza os valores internamente.

#### Posso selecionar mais de um estado?

Sim. O campo `ufs` é um multiselect opcional. Use, por exemplo, `"ufs":["SP","RJ","MG"]`. Se o campo for omitido ou enviado como lista vazia, todas as UFs serão consideradas.

#### O Actor aceita CPF?

Não. Esta API é voltada exclusivamente à consulta de obras vinculadas a empresas por CNPJ.

#### Cada CNPJ gera somente uma linha?

Não. Cada obra gera uma linha independente. Um CNPJ com 50 obras pode gerar até 50 resultados e 50 eventos cobrados, respeitando o limite de gastos da execução.

#### O endereço da obra é completo?

Sim. Como o endereço pertence ao registro público da obra, podem ser retornados logradouro, número, complemento, bairro, município, UF e CEP.

#### Posso exportar para Excel?

Sim. No Dataset da execução, escolha XLSX, CSV, JSON, XML ou outro formato disponível na Apify.

#### Quando devo usar Batch ou Standby?

Use Batch para volumes maiores, exportações e agendamentos. Use Standby para integrações HTTP que precisam da resposta imediatamente.

#### Os dados são atuais?

A consulta é feita em tempo de execução. A atualização e a disponibilidade dependem dos registros auditáveis consultados naquele momento.

### Suporte

Para dúvidas ou sugestões, abra a aba **Issues** deste Actor. Conheça também a [loja BrasilDados](https://apify.com/brasildados?fpr=t5lwzq).

# Actor input Schema

## `cnpjs` (type: `array`):

Lista com até 20 CNPJs, com ou sem pontuação. Duplicados são consultados somente uma vez.

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

Selecione um ou mais estados. O filtro é aplicado aos resultados sem gerar consultas adicionais. Se omitido ou vazio, retorna todas as UFs.

## Actor input object example

```json
{
  "cnpjs": [
    "73.178.600/0001-18",
    "73178600000118"
  ],
  "ufs": [
    "SP",
    "RJ"
  ]
}
```

# Actor output Schema

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

Dataset com uma linha para cada obra civil encontrada.

# 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 = {
    "cnpjs": [
        "73.178.600/0001-18",
        "73178600000118"
    ],
    "ufs": [
        "AC",
        "AL",
        "AP",
        "AM",
        "BA",
        "CE",
        "DF",
        "ES",
        "GO",
        "MA",
        "MT",
        "MS",
        "MG",
        "PA",
        "PB",
        "PR",
        "PE",
        "PI",
        "RJ",
        "RN",
        "RS",
        "RO",
        "RR",
        "SC",
        "SP",
        "SE",
        "TO"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("brasildados/cno-cadastro-nacional-de-obras-api").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 = {
    "cnpjs": [
        "73.178.600/0001-18",
        "73178600000118",
    ],
    "ufs": [
        "AC",
        "AL",
        "AP",
        "AM",
        "BA",
        "CE",
        "DF",
        "ES",
        "GO",
        "MA",
        "MT",
        "MS",
        "MG",
        "PA",
        "PB",
        "PR",
        "PE",
        "PI",
        "RJ",
        "RN",
        "RS",
        "RO",
        "RR",
        "SC",
        "SP",
        "SE",
        "TO",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("brasildados/cno-cadastro-nacional-de-obras-api").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 '{
  "cnpjs": [
    "73.178.600/0001-18",
    "73178600000118"
  ],
  "ufs": [
    "AC",
    "AL",
    "AP",
    "AM",
    "BA",
    "CE",
    "DF",
    "ES",
    "GO",
    "MA",
    "MT",
    "MS",
    "MG",
    "PA",
    "PB",
    "PR",
    "PE",
    "PI",
    "RJ",
    "RN",
    "RS",
    "RO",
    "RR",
    "SC",
    "SP",
    "SE",
    "TO"
  ]
}' |
apify call brasildados/cno-cadastro-nacional-de-obras-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brasildados/cno-cadastro-nacional-de-obras-api"
        }
    }
}

```

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/N54NqZUSIpg6c72R7/builds/3x5CJlEewQu83ags6/openapi.json
