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. Para entender melhor sobre quais dados estão disponíveis, consulte a história desse dataset.
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.
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).
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;holding.csv.gz
: cadastro das empresas que são sócias de outras empresas (é o arquivosocio.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 comandogunzip 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.
Nota 3: se você estava usando os dados no formato anterior, veja como converter os novos para o padrão antigo no arquivo
sql/04-create-old-views.sql
.
Para garantir a privacidade, evitar SPAM e publicar apenas dados corretos, o script deleta/limpa algumas colunas com informações sensíveis ou incorretas. Essa é a forma padrão de funcionamento para não facilitar a exposição desses dados. Os dados censurados são:
- Na tabela
empresa
:- Deletadas as colunas
codigo_pais
enome_pais
, pois os dados contidos nelas estão incorretos; - Deletada a coluna
correio_eletronico
, para evitar SPAM;
- Deletadas as colunas
- Na tabela
socio
:- Deletadas as colunas
codigo_pais
enome_pais
, pois os dados contidos nelas estão incorretos; - As colunas
complemento
,ddd_fax
,ddd_telefone_1
,ddd_telefone_2
,descricao_tipo_logradouro
,logradouro
,numero
terão seus dados deletados (ficarão em branco) para empresas que são empreendedores individuais (MEI, EI, EIRELI etc.) e, provavelmente, correspondem aos dados do sócio (endereço residencial, por exemplo); - Para os casos de empresas individuais que constarem o CPF na razão social (como é comum no caso de MEIs), o CPF será deletado.
- Deletadas as colunas
Caso queira rodar o script sem o modo censura, altere o script run.sh
e
adicione a opção --no_censorship
para o script extract_dump.py
.
- Cadastro Nacional de Atividades Empresariais (CNAE): existe um spider que
baixa os metadados das atividades empresariais (CNAEs) do site do
IBGE. Veja a função
extract_cnae
no arquivorun.sh
, ela baixará os dados para as versões 1.0, 1.1, 2.0, 2.1, 2.2 e 2.3 e salvará emdata/output
. Nota: esse script será melhorado/alterado, veja a issue #36. - Natureza jurídica: o arquivo
data/natureza-juridica.csv
contém o cadsatro de naturezas jurídicas das empresas (colunacodigo_natureza_juridica
da tabelaempresa
). Esse arquivo é gerado pelo scriptnatureza_juridica.py
, que baixa os dados do site da Receita Federal.
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
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).
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.
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; veja também os outros arquivos da pastasql/
para criação de tabelas auxiliares, chaves primárias e estrangeiras e o arquivoimport-postgresql.sh
para automatizar o processo de importação e criação dos índices.
Nota 2: caso utilize a opção
--no_censorship
, utilize os arquivos da pastaschema-full
em vez da pastaschema
, pois a versão "sem censura" possui mais colunas.
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/holding.csv data/output/holding.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
. :)
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
. :)
Em R:
Em Python: