Simples Nacional Lib
Biblioteca e CLI em Python para consulta e atualização da base de dados pública do Simples Nacional (CNPJs).
Instalação
Do PyPI:
pip install simplesnacional
Ou a partir do código-fonte:
pip install .
Para desenvolvimento (inclui o pytest):
pip install -e ".[dev]"
pytest
Uso via Linha de Comando (CLI)
Após a instalação, o comando simplesnacional estará disponível no seu terminal.
Também funciona via python -m simplesnacional.
1. Atualizar a Base de Dados
Antes de realizar consultas, é necessário baixar e atualizar a base de dados local. O comando abaixo verifica se existe uma nova versão no site da Receita Federal e realiza o download e importação se necessário.
simplesnacional atualizar
Este processo pode demorar alguns minutos dependendo da velocidade da internet e do processamento, pois a base é volumosa.
2. Verificar Status
Para ver informações sobre a base de dados local, como a data de referência e o total de registros importados:
simplesnacional info
3. Consultar um CNPJ
Para consultar os dados do Simples Nacional de um CNPJ específico:
simplesnacional consultar 00000000000191
Ou com formatação:
simplesnacional consultar 00.000.000/0001-91
Saída Exemplo:
Dados do CNPJ: 00000000
+-----------------------+------------+
| Campo | Valor |
+-----------------------+------------+
| Opção Simples | S |
| Data Opção Simples | 20070701 |
| Data Exclusão Simples | |
| Opção MEI | N |
| Data Opção MEI | |
| Data Exclusão MEI | |
+-----------------------+------------+
4. Subir a API HTTP
Sobe um servidor local (somente leitura, sem dependências extras) para consultar a base por HTTP — útil para integrar com outros sistemas ou com o navegador:
simplesnacional serve # http://127.0.0.1:5000
simplesnacional serve --port 8080 # outra porta
simplesnacional serve --host 0.0.0.0 # expõe na rede local
simplesnacional serve --cors # libera CORS para chamadas do navegador
simplesnacional serve --strict-404 # 404 para CNPJ ausente
simplesnacional server continua funcionando como alias.
Rotas:
| Método | Rota | Descrição |
|---|---|---|
| GET | / |
Índice da API (HTML no navegador, JSON fora) |
| GET | /health |
Estado do servidor e da base local |
| GET | /campos |
Lista os campos disponíveis |
| GET | /api/{cnpj} |
Dados do CNPJ em JSON |
| GET | /api/{cnpj}/{campo} |
Valor de um único campo (texto puro) |
| GET | /api/{cnpj}?fields=a,b |
Vários campos separados por ; |
| GET | /api/{cnpj}?format=csv |
Dados em CSV |
| GET | /json/{cnpj} |
Alias de /api/{cnpj} |
O CNPJ pode ir com ou sem pontuação, e ?format=text devolve o resumo em texto puro.
curl http://127.0.0.1:5000/api/00.000.000/0001-91
{
"status": "sucesso",
"cnpj": "00000000",
"opcao_simples": "S",
"data_opcao_simples": "01/07/2007",
"data_exclusao_simples": "",
"opcao_mei": "N",
"data_opcao_mei": "",
"data_exclusao_mei": ""
}
Códigos de status:
| Status | Quando acontece |
|---|---|
200 |
Consulta respondida — inclusive status: "nao_encontrado" |
400 |
CNPJ com menos de 8 dígitos |
404 |
Rota desconhecida (ou CNPJ ausente, com --strict-404) |
503 |
Base local ausente (rode simplesnacional atualizar) |
O arquivo da Receita lista apenas optantes, então um CNPJ sem linha na base
significa não optante — por isso o padrão é 200 com
"status": "nao_encontrado" e "opcao_simples": "N". Use --strict-404 se
preferir semântica REST estrita.
{
"status": "nao_encontrado",
"cnpj": "99999999",
"opcao_simples": "N",
"data_opcao_simples": "",
"data_exclusao_simples": "",
"opcao_mei": "N",
"data_opcao_mei": "",
"data_exclusao_mei": ""
}
Usando no Excel
WEBSERVICE() — um campo por célula
O WEBSERVICE() devolve texto puro (não entende JSON), então use a rota de
campo único — ela responde só o valor, sem aspas nem quebra de linha:
=WEBSERVICE("http://127.0.0.1:5000/api/81099491003863/opcao_simples")
Resultado na célula: N
Campos disponíveis (veja também GET /campos):
| Campo | Exemplo |
|---|---|
cnpj |
81099491 |
opcao_simples |
S / N |
data_opcao_simples |
01/07/2007 |
data_exclusao_simples |
`` |
opcao_mei |
S / N |
data_opcao_mei |
`` |
data_exclusao_mei |
`` |
Uma fórmula por campo, referenciando o CNPJ da própria planilha:
=WEBSERVICE("http://127.0.0.1:5000/api/" & $A2 & "/opcao_simples")
Para vários campos numa célula só (Excel 365, com TEXTSPLIT):
=TEXTSPLIT(WEBSERVICE("http://127.0.0.1:5000/api/" & $A2 & "?fields=opcao_simples,opcao_mei"), ";")
O
WEBSERVICE()limita a URL a 255 caracteres e devolve#VALUE!em respostas que não sejam2xx— por isso CNPJ ausente da base responde200comN(não optante) em vez de404. Evite máscara no CNPJ: use só os dígitos.
Power Query — a ficha inteira
Dados → Obter Dados → De Outras Fontes → Da Web e cole a URL. Para virar tabela:
let
Json = Json.Document(Web.Contents("http://127.0.0.1:5000/api/81099491003863")),
Tabela = Record.ToTable(Json)
in
Tabela
Ou consuma direto o CSV, que o Power Query já lê como tabela:
let
Fonte = Csv.Document(
Web.Contents("http://127.0.0.1:5000/api/81099491003863?format=csv"),
[Delimiter = ";", Encoding = 65001]
),
ComCabecalho = Table.PromoteHeaders(Fonte, [PromoteAllScalars = true])
in
ComCabecalho
Uso como Biblioteca Python
Você pode utilizar a biblioteca diretamente em seu código Python para realizar consultas.
from simplesnacional import consulta
# Realizar a consulta
# O CNPJ pode ser passado como string (com ou sem pontuação) ou inteiro
dados = consulta("00.000.000/0001-91")
if dados:
print(f"CNPJ Base: {dados.cnpj_base}")
print(f"Optante Simples: {dados.opcao_simples}")
print(f"Data Opção: {dados.data_opcao_simples}")
print(f"Optante MEI: {dados.opcao_mei}")
else:
print("CNPJ não encontrado na base local.")
Estrutura do Objeto Retornado
A função consulta retorna um objeto DadosSimples com os seguintes atributos:
cnpj_base: Os 8 primeiros dígitos do CNPJopcao_simples: Indicador de opção pelo Simples ('S' ou 'N')data_opcao_simples: Data da opção pelo Simplesdata_exclusao_simples: Data da exclusão do Simples (se houver)opcao_mei: Indicador de opção pelo MEI ('S' ou 'N')data_opcao_mei: Data da opção pelo MEIdata_exclusao_mei: Data da exclusão do MEI (se houver)
O método to_dict() devolve todos esses campos em um dicionário pronto para
serializar em JSON.
Servidor embutido
O servidor HTTP também pode ser iniciado por código:
from simplesnacional.server import run_server
run_server(host="127.0.0.1", port=5000, cors=False)
Licença
MIT License
Aviso Legal e Isenção de Responsabilidade
Este software é um projeto independente e de código aberto.
Esta biblioteca e CLI não possuem qualquer vínculo, afiliação, endosso ou parceria com a Receita Federal do Brasil ou qualquer outra entidade governamental.
O objetivo deste projeto é estritamente facilitar o acesso técnico e a consulta automatizada à base de dados pública do Simples Nacional. Embora a ferramenta utilize dados públicos oficiais, ela não substitui os canais oficiais de consulta para fins legais, fiscais ou tributários.
Metadata
Release files for simplesnacional 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simplesnacional-0.1.5.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simplesnacional-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.6 kB
Release files / simplesnacional-0.1.5.tar.gz
| Download URL | simplesnacional-0.1.5.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
09525442f1058e46dae2650bc8fa968df7aa1fea38bd8b4f64784a7cd31608c6
|
|
BLAKE2b-256 checksum How to use checksums |
6bd401d424eebb85a8eb480166ef4e7aa7402810d1b2b359fc75d2a15af0165a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / simplesnacional-0.1.5-py3-none-any.whl
| Download URL | simplesnacional-0.1.5-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a5a657a3beb634d5350c4e528fe548e73866146b5d3098d36d68cd91033742af
|
|
BLAKE2b-256 checksum How to use checksums |
c36c88693d0ea02ec2e4fc91aab2cf1b4532f6f6bfef17f5e47dbf50e7c8b7c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|