Government — entry 005 of 90

Brazil Receita WS

Verified Aug 2026

ReceitaWS looks up registered Brazilian companies by CNPJ (tax ID) and returns name, address, share capital, and partner (QSA) data sourced from the Receita Federal. The free tier is keyless but capped at 3 requests/minute and omits Simples Nacional and state (Estadual) registration status; a paid token starting around R$149/month lifts the rate limit and unlocks the fuller record.

ReceitaWS is a keyless CNPJ (Brazilian company tax ID) lookup service, mirroring registration data from the Receita Federal. A live GET this run against /cnpj/27865757000102 (Globo's CNPJ, a stable public company) returned a genuine 200, 5,093 B JSON record at content-type: application/json; charset=utf-8, with no access-control-allow-origin header on any probe — confirming the stored cors: no; browser code needs a server-side proxy. The free tier is capped at 3 requests/minute (x-ratelimit-limit: 3), live-confirmed this run, and omits Simples Nacional/Estadual registration status; a paid token via https://developers.receitaws.com.br/ lifts the limit and adds those fields.

cnpjbrazilcompany-lookupgovernment-data
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSDisabledBrowser calls need a server-side proxy.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score85out of 100
Authentication25/25No authentication required
Pricing17/20Freemium tier available
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 85 on greatapis.com
<a href="https://greatapis.com/api/brazil-receita-ws/"><img src="https://greatapis.com/badge/brazil-receita-ws.svg" alt="Scored 85 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required for the free tier — a live GET this run against /cnpj/27865757000102 returned a full company record on the first anonymous try. Only the rate limit (3 requests/minute) gates the free tier; a paid token removes it.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Look up a company by CNPJ

GEThttps://receitaws.com.br/v1/cnpj/27865757000102

200 application/json; charset=utf-8

{
  "abertura": "31/01/1986",
  "situacao": "ATIVA",
  "tipo": "MATRIZ",
  "nome": "GLOBO COMUNICACAO E PARTICIPACOES S/A",
  "fantasia": "TV/REDE/GLOBO.COM/CANAIS GLOBO/GLOBOPLAY/ELETROMIDIA",
  "porte": "DEMAIS",
  "natureza_juridica": "205-4 - Sociedade Anônima Fechada",
  "atividade_principal": [
    { "code": "60.21-7-00", "text": "Atividades de televisão aberta" }
  ],
  "logradouro": "R LOPES QUINTAS",
  "numero": "303",
  "municipio": "RIO DE JANEIRO",
  "uf": "RJ",
  "cep": "22.460-901",
  "data_situacao": "03/11/2005",
  "cnpj": "27.865.757/0001-02",
  "ultima_atualizacao": "2026-07-28T19:34:19.864Z",
  "status": "OK",
  "capital_social": "6983568523.86",
  "simples": { "optante": false, "data_opcao": null, "data_exclusao": null },
  "simei": { "optante": false, "data_opcao": null, "data_exclusao": null },
  "billing": { "free": true, "database": true }
}

Trimmed of the full atividades_secundarias (26 entries) and qsa (6 partners) arrays for length — the full live response above is 5,093 B. capital_social ("6983568523.86") and every other numeric-looking field are quoted strings, not JSON numbers; status: "OK" here is a field inside the body, distinct from the HTTP status code.

Try it

Developer reference

Base URLhttps://receitaws.com.br/v1
Rate limit

3 requests/minute on the free public API -- documented in the live OpenAPI spec at developers.receitaws.com.br/receitaws.yaml ('Esta API permite 3 consultas por minuto'); exceeding it returns HTTP 429. A paid token removes the cap.

Key endpoints
  • GET/cnpj/{cnpj}

Gotchas & limits

  • The free tier enforces 3 requests/minute via x-ratelimit-limit/x-ratelimit-remaining headers, and live-confirmed this run, the very next call once x-ratelimit-remaining hit 0 returned HTTP 429 with a 42 B, plain-text body — Too many requests, please try again later. — served as content-type: text/html; charset=UTF-8, not JSON, and with no Retry-After header to say when to retry. Code that expects a JSON error envelope on every failure path will throw parsing this one.
  • An invalid CNPJ, live-confirmed this run (/cnpj/00000000000000), returns HTTP 400 with a real JSON body, 54 B, {"status": "ERROR", "message": "CNPJ inválido"} — note status here is a string field inside the JSON, unrelated to the HTTP status code; the success path above also carries its own "status": "OK" field.
  • capital_social (share capital) is a quoted string ("6983568523.86") rather than a JSON number, confirmed live above — code that sums or compares it directly without parseFloat first will concatenate instead of adding.
  • Both https://receitaws.com.br/v1/... (this quickstart's baseUrl) and https://www.receitaws.com.br/v1/... answer identically live, with no redirect either way — even though the stored url field points at www., this quickstart pins the bare host since that's what the API itself resolves without a hop.