Skip to content
Captura os dados de sócios das empresas brasileiras na Receita Federal e exporta para um formato legível por humanos
Branch: master
Clone or download
Pull request Compare This branch is even with turicas:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
headers
schema-full
schema
sql
.gitignore
LICENSE
README.md
extract_dump.py
extract_partner_companies.py
qualificacao-socio.csv
requirements-development.txt
requirements.txt
run.sh
test_parser.py

README.md

Sócios de Empresas Brasileiras

Script que baixa todos os dados de sócios das empresas brasileiras disponíveis no site da Receita Federal, extrai, limpa e converte para CSV. Veja mais detalhes.

Licença

A licença do código é LGPL3 e dos dados convertidos Creative Commons Attribution ShareAlike. Caso utilize os dados, cite a fonte original e quem tratou os dados, como: Fonte: Receita Federal do Brasil, dados tratados por Álvaro Justen/Brasil.IO. Caso compartilhe os dados, utilize a mesma licença.

Dados

Entrada

Os dados publicados pela Receita Federal do Brasil contemplam as seguintes tabelas:

  • Cadastro das empresas, incluindo CNPJ, razão social, nome fantasia, endereço, CNAE fiscal e outros;
  • Cadastro de sócios, contendo CNPJ da empresa, documento do sócio, nome do sócio e outros;
  • CNAEs secundários para cada CNPJ.

Os dados originalmente estão em um formato fixed-width file e cada linha possui um tipo diferente de registro (empresa, sócio, CNAE secundária, header ou trailler), que dificulta qualquer tipo de análise, sendo necessária a conversão para formatos mais amigáveis.

O campo de qualificação do sócio foi definido com base na tabela disponibilizada pela Receita Federal e está disponível no arquivo qualificacao-socio.csv. Em breve também teremos arquivos com os nomes dos CNAEs e situação cadastral (veja mais detalhes aqui).

Saída

Além de extrair os dados do arquivo origingal, o script gera uma nova tabela contendo as empresas que são sócias de outras empresas (para facilitar buscas de holdings).

Caso você não queira/possa rodar o script, acesse diretamente os dados convertidos no Brasil.IO.

Se esse programa e/ou os dados resultantes foram úteis a você ou à sua empresa, considere fazer uma doação ao projeto Brasil.IO, que é mantido voluntariamente.

Como resultado temos os seguintes arquivos:

  • empresa.csv.gz: cadastro das empresas;
  • socio.csv.gz: cadastro dos sócios;
  • cnae-secundaria.csv.gz: lista de CNAEs secundárias;
  • empresa-socia.csv.gz: cadastro das empresas que são sócias de outras empresas (é o arquivo socio.csv.gz filtrado por sócios do tipo PJ).

Além disso, os arquivos contidos nas pastas schema e schema-full podem te ajudar a importar os dados para um banco de dados (veja comandos para SQLite e PostgreSQL abaixo).

Nota 1: a extensão .gz quer dizer que o arquivo foi compactado usando gzip. Para descompactá-lo execute o comando gunzip arquivo.gz (não é necessário descompactá-los caso você siga as instruções de importação em SQLite e PostgreSQL).

Nota 2: a codificação de caracteres original é ISO-8859-15, mas o script gera os arquivos CSV em UTF-8.

Privacidade

Para garantir a privacidade, evitar SPAM e publicar apenas dados corretos, o script deleta/limpa algumas colunas com informações sensíveis. Essa será a forma padrão de funcionamento para não facilitar a exposição desses dados. Os dados censurados são:

  • empresa.csv.gz: deletadas as colunas "codigo_pais", "correio_eletronico" e "nome_pais" (nome/código do país incorreto);
  • socio.csv.gz: deletadas as colunas "codigo_pais" e "nome_pais" (incorretos) e, caso seja MEI, as colunas "complemento", "ddd_fax", "ddd_telefone_1", "ddd_telefone_2", "descricao_tipo_logradouro", "logradouro", "numero" terão seus valores em branco e na razão social não constará o CPF do dono.

Caso queira rodar o script sem o modo censura, altere o run.sh e adicione a opção --no_censorship na linha do extract_dump.py.

Rodando

Instalando as Dependências

Esse script depende de Python 3.7, de algumas bibliotecas e do software aria2. Depois de instalar o Python 3.7 e o aria2, instale as bibliotecas executando:

pip install -r requirements.txt

Executando

Então basta executar o script run.sh para baixar os arquivos necessários e fazer as conversões:

./run.sh

Você poderá rodar etapas separadamente também (leia o script run.sh para mais detalhes).

Agilizando o Download

O servidor da Receita Federal onde os dados estão hospedados é muito lento e, por isso, o Brasil.IO disponibiliza um mirror de onde o download pode ser feito mais rapidamente. Para executar o script baixando os dados do mirror, execute:

./run.sh --use-mirror

Nota: os mirrors do Brasil.IO ainda estão em fase de testes e não é garantido que estejam sempre atualizados.

Importando em Bancos de Dados

Depois de executar o script ou baixar os dados já convertidos, o ideal é importá-los em um banco de dados para facilitar consultas. Com a interface de linha de comando da rows é possível importá-los rapidamente em bancos SQLite e PostgreSQL.

Nota 1: depois de importar os dados em um banco de dados é recomendável a criação de índices para agilizar as consultas. Um índice bem comum é na coluna cnpj (de todas as tabelas), para facilitar encontrar uma determinada empresa, seus sócios e CNAEs secundários através do CNPJ. Exemplo: CREATE INDEX IF NOT EXISTS idx_empresa_cnpj ON empresa (cnpj);. Veja o arquivo sql/create-indexes.sql para uma lista de índices sugeridos.

Nota 2: caso utilize a opção --no_censorship, utilize os arquivos da pasta schema-full em vez da pasta schema, pois a versão "sem censura" possui mais colunas.

SQLite

Instale a CLI da rows e a versão de desenvolvimento da biblioteca rodando (requer Python 3.7+):

pip install rows[cli]
pip install -U https://github.com/turicas/rows/archive/develop.zip

Agora, com os arquivos na pasta data/output basta executar os seguintes comandos:

DB_NAME="data/output/socios-brasil.sqlite"
rows csv2sqlite --schemas=schema/empresa.csv data/output/empresa.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/socio.csv data/output/empresa-socia.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/socio.csv data/output/socio.csv.gz "$DB_NAME"
rows csv2sqlite --schemas=schema/cnae-secundaria.csv data/output/cnae-secundaria.csv.gz "$DB_NAME"

Pegue um café, aguarde alguns minutos e depois desfrute do banco de dados em data/output/socios-brasil.sqlite. :)

PostgreSQL

Instale a CLI da rows, as dependências do PostgreSQL e a versão de desenvolvimento da biblioteca rodando (requer Python 3.7+):

pip install rows[cli]
pip install rows[postgresql]
pip install -U https://github.com/turicas/rows/archive/develop.zip

Agora, com os arquivos na pasta data/output basta executar os seguintes comandos (não esqueça de preencher a variável POSTGRESQL_URI corretamente):

POSTGRESQL_URI="postgres://<user>:<pass>@<host>:<port>/<dbname>"  # PREENCHA!
rows pgimport --schema=schema/empresa.csv data/output/empresa.csv.gz $POSTGRESQL_URI empresa
rows pgimport --schema=schema/socio.csv data/output/empresa-socia.csv.gz $POSTGRESQL_URI empresa_socia
rows pgimport --schema=schema/socio.csv data/output/socio.csv.gz $POSTGRESQL_URI socio
rows pgimport --schema=schema/cnae-secundaria.csv data/output/cnae-secundaria.csv.gz $POSTGRESQL_URI cnae_secundaria

Pegue um café, aguarde alguns minutos e depois desfrute do banco de dados em $POSTGRESQL_URI. :)

Outras Implementações

Em R:

Em Python:

You can’t perform that action at this time.