Data Dictionary

Dataset — Vagas de Emprego Brasil

Documentação técnica dos campos, tipos, cobertura e metodologia de coleta do dataset de vagas de emprego brasileiro.

Versão 6 · Atualização semanal · Cobertura medida em 15/09/2026

178.685
Vagas únicas
16
Portais
27
Estados + DF
18
Campos

Todos os percentuais de cobertura desta página foram medidos diretamente sobre o dataset completo em 9 de setembro de 2026. Os valores oscilam entre ciclos de coleta conforme a composição das vagas publicadas; variações de poucos pontos percentuais são esperadas.

Campos do Dataset

Identificação

Campo Tipo Descrição Cobertura
id_global string Hash MD5 de titulo|empresa|cidade|fonte em minúsculas, separados por barra vertical. Chave primária do dataset. Ver a seção Deduplicação para a nota sobre reprodutibilidade."a3f7bc1d2e8f9a4b6c3d5e7f8a9b0c1d" 100%
id_original string Identificador da vaga no portal de origem, preservado sem alteração. Único apenas dentro de cada fonte."36780542" 100%
url string URL canônica da vaga no portal de origem."https://empresa.gupy.io/jobs/12345" 100%
fonte string Identificador do portal de origem. Valores: gupy, programathor, catho, ciee, empregos, trabalhabrasil, solides, infojobs, pcd, geekhunter, bne, divulgavagas, trampos, empregando, remotar, ciatalentos 100%

Vaga

Campo Tipo Descrição Cobertura
titulo string Título da vaga como publicado pelo empregador. Preservado sem normalização para manter fidelidade ao dado original."Analista de Dados Sênior" 100%
descricao string Descrição da vaga, truncada em 500 caracteres. Cerca de 79% dos registros atingem esse limite — para o texto completo, use a url. String vazia quando o portal não publica descrição. 99,5%
tipo_contrato string Regime de contratação, normalizado entre portais. Valores: CLT, PJ, Estágio, Aprendiz, Temporário, Banco de Talentos, Autônomo, Associado, Trainee, Freelancer, Terceirizado, Parceiro, Cooperado, Intermitente, Voluntário. String vazia quando o portal não informa. 83,2%
modalidade string Modalidade de trabalho. Valores restritos a Presencial, Remoto e Hibrido. Valores não reconhecidos são descartados em vez de propagados, o que reduz a cobertura mas garante que todo valor presente é semanticamente válido. 87,6%
empresa string Nome da empresa empregadora, como publicado. Não normalizado entre portais — o mesmo grupo pode aparecer com grafias diferentes. String vazia em vagas confidenciais ou quando o portal oculta o empregador."Grupo Fleury" 72,3%
area string Área de atuação conforme categorização do portal de origem. A cobertura saltou de menos de 1% para 24,5% com a entrada da Sólides, que publica o campo de forma consistente. Ainda não há normalização entre portais: a mesma área pode aparecer com nomes diferentes conforme a fonte. 24,8%
salario float | null Valor de salário em BRL, normalizado para número. Aceito apenas na faixa de R$ 300 a R$ 30.000; valores fora dela são tratados como null. Ver a Nota sobre Salário antes de usar.2472.72 14,1%
salario_min float | null Limite inferior da faixa salarial. Atualmente idêntico a salario, pois nenhuma fonte publica faixa — o campo existe para compatibilidade com fontes futuras que a forneçam.2472.72 14,3%
salario_max float | null Limite superior da faixa salarial. Atualmente idêntico a salario. Ver observação em salario_min.2472.72 16,9%
tipo_empregador enum Distingue quem contrata para si (direto) de quem intermedeia (agencia). Agências de RH publicam vagas de clientes: sem essa separação, o saldo de contratação por empregador fica distorcido. A lista de agências é curada, não derivada de palavra-chave — nome ambíguo é classificado como direto."direto" 82,0%
cnpj string · 8 dígitos CNPJ básico do empregador, obtido por correspondência com a base pública da Receita Federal. São os 8 primeiros dígitos, que identificam a empresa independentemente da filial."77941490" 54,3%
cnae string · 7 dígitos Código CNAE da atividade principal do estabelecimento. Permite cruzar com o CAGED, que também é organizado por CNAE."4753900" 54,3%
cnae_descricao string Descrição oficial do código CNAE, conforme a tabela da Receita."Comércio varejista especializado de eletrodomésticos" 54,3%
porte_empresa enum Porte declarado à Receita: Micro empresa, Empresa de pequeno porte ou Demais. Note que "Demais" agrupa tudo acima de pequeno porte, sem distinguir média de grande."Demais" 54,3%
uf_sede UF · 2 chars UF do estabelecimento correspondente na Receita. Pode diferir de estado, que é onde a vaga está — uma empresa sediada em SP contrata em MG."PR" 54,2%
confianca_cnpj enum alta: nome idêntico ao registro da Receita, candidato único. media: correspondência por prefixo ou nome truncado, desempatada pela UF onde a empresa publica. media_llm: vários candidatos plausíveis, desempatados por modelo de linguagem a partir dos cargos anunciados e da distribuição geográfica. Filtre por alta se precisar de certeza."alta" 54,3%

Localização

Campo Tipo Descrição Cobertura
cidade string Nome do município como informado pelo portal de origem. Não normalizado — podem ocorrer variações ortográficas. O dataset cobre 4.405 municípios distintos."São Paulo", "Belo Horizonte" 89,1%
estado string Sigla da unidade federativa em maiúsculas. Inferida por correspondência com a base de municípios do IBGE quando o portal não a fornece diretamente. As 27 UFs estão representadas. String vazia quando não foi possível determinar."SP", "MG", "RJ" 89,5%

Metadados temporais

Campo Tipo Descrição Cobertura
coletado_em string (YYYY-MM-DD) Data em que a vaga foi coletada pela primeira vez. Formato de data, sem componente de hora."2026-08-31" 100%
ultima_vez_visto string (YYYY-MM-DD) Data do ciclo de coleta mais recente em que a vaga foi processada."2026-08-31" 100%
status string Status de atividade da vaga. Valores: ativa, inativa. Uma vaga é marcada como inativa após 3 dias sem aparecer em nenhum portal. Na entrega atual, todos os registros do dataset são ativa. 100%

Exemplo de Registro

{
  "id_global": "d425be13f2f775cba859f132115d8eb6",
  "id_original": "36780542",
  "titulo": "Analista de Dados Sênior",
  "empresa": "Grupo Fleury",
  "cidade": "São Paulo",
  "estado": "SP",
  "area": "",
  "tipo_contrato": "CLT",
  "modalidade": "Hibrido",
  "salario": null,
  "descricao": "Buscamos profissional com experiência em Python, SQL e ferramentas de BI...",
  "url": "https://grupofleury.gupy.io/jobs/12345",
  "fonte": "gupy",
  "coletado_em": "2026-08-31",
  "ultima_vez_visto": "2026-08-31",
  "status": "ativa",
  "salario_min": null,
  "salario_max": null
}

Todos os 25 campos estão sempre presentes em todo registro. Campos de texto sem valor são entregues como string vazia (""); campos numéricos sem valor, como null. Nenhuma chave é omitida.

Deduplicação

A deduplicação é realizada de forma global entre todos os portais, não apenas dentro de cada fonte. O dataset entregue não contém id_global repetido.

Chave primária: MD5( titulo + "|" + empresa + "|" + cidade + "|" + fonte ), com a string inteira convertida para minúsculas.

Chave secundária: ( fonte, url ). Alguns portais permitem que unidades de um mesmo grupo mantenham cadastros distintos apontando para o mesmo anúncio. Nesses casos o nome da empresa varia entre as cópias e a chave primária não as reconhece como duplicatas — a URL, que carrega o identificador da vaga na origem, resolve.

O campo fonte integra a chave para preservar a procedência quando a mesma vaga é publicada em portais diferentes.

Nota de reprodutibilidade. O id_global é calculado antes da etapa de inferência geográfica, que pode reescrever o campo cidade a partir da base do IBGE. Por isso, recalcular o hash usando o valor de cidade presente no registro entregue nem sempre reproduz o id_global original. Trate o campo como identificador opaco: ele é estável e único, mas não deve ser recomputado a partir do registro final.

Portais e Cobertura

Portal Volume Técnica Salário Diferencial
Gupy71.109API RESTMaior volume, 4 mil+ empresas
Sólides60.938API REST28,6%Interior e PME, campo de área preenchido
Programathor16.397HTML31,3%Tecnologia, faixa salarial declarada
Catho7.492JSON-LDAmpla gama de setores
CIEE4.699API REST94,0%Estágio, aprendiz e PCD
Empregos.com.br4.617JSON-LD0,2%Cobertura nacional generalista
BNE4.021API RESTBanco Nacional de Empregos
Trabalha Brasil2.726JSON-LD98,4%Maior cobertura de salário
InfoJobs1.540JSON-LD86 cidades, interior MG/SP
PCD.com.br767JSON-LD41,7%Exclusivo pessoas com deficiência
GeekHunter255PlaywrightTecnologia, perfil sênior
DivulgaVagas254JSON-LD50,0%Vagas regionais
Trampos.co246API RESTCriativo e comunicação
Empregando Brasil232JSON-LDVagas regionais
Remotar55PlaywrightVagas 100% remotas
CiaDeTalentos34API POSTProgramas trainee e estágio

Volumes medidos em 15/09/2026, após deduplicação global por identificador e por URL. A composição por portal varia a cada ciclo semanal. Novas fontes são incorporadas periodicamente — a lista atualizada e os volumes correntes estão disponíveis no endpoint /stats da API.

Nota sobre Salário

Leia antes de usar o campo salário para análise. A cobertura de 14,2% não é uma amostra aleatória do dataset: concentra-se em seis fontes — Trabalha Brasil (98,4%), CIEE (94,0%), DivulgaVagas (50,0%), PCD.com.br (41,7%), Programathor (31,3%) e Sólides (28,6%) — enquanto o Gupy, responsável por 41% do volume, não publica remuneração em nenhum registro. A distribuição resultante tem mediana de R$ 1.958, primeiro quartil em R$ 1.525 e terceiro em R$ 2.541. Esses valores descrevem as fontes que publicam salário, não o mercado de trabalho brasileiro como um todo.

Essa limitação reflete a prática do mercado: a maioria dos portais brasileiros não exige a divulgação de remuneração, e ampliar o volume de vagas coletadas não corrige o viés.

Para análise salarial representativa, recomendamos o endpoint /analises/caged/movimentacao, que fornece salário médio de admissão por UF e por setor com base no CAGED/MTE — dado oficial, censitário e sem o viés de composição descrito acima.

Atualização

O dataset é atualizado toda segunda-feira, com coleta completa de todos os portais. O ciclo leva aproximadamente 7 horas e inclui:

Formatos de entrega: JSON e CSV, ambos com os 25 campos descritos acima, e API REST para consulta programática.

Contato Técnico

Correspondência com a base de CNPJ

Os campos cnpj, cnae, porte_empresa e uf_sede vêm dos dados abertos da Receita Federal, na cópia de agosto de 2026 — 69,5 milhões de empresas e 28,1 milhões de estabelecimentos ativos.

O portal de vagas publica o nome comercial ("Gazin"); a Receita registra a razão social ("GAZIN INDÚSTRIA E COMÉRCIO DE MÓVEIS E ELETRODOMÉSTICOS LTDA"). A correspondência entre os dois é feita em camadas: nome fantasia idêntico, razão social idêntica, razão que começa com o nome, e — para os casos com vários candidatos plausíveis — desempate por modelo de linguagem, que recebe os candidatos, os cargos anunciados e a distribuição geográfica das vagas.

Quando há ambiguidade que nenhum critério resolve, o campo fica vazio. Não atribuímos CNPJ por aproximação sem declará-lo: o campo confianca_cnpj existe para que você possa filtrar apenas as correspondências exatas.

Limitações conhecidas: empresas registradas sob razão social que não contém o nome comercial (Rede D'Or, Sicredi) não são encontradas por busca de nome. Homônimos genuínos — empresas distintas com o mesmo nome fantasia — ficam sem correspondência em vez de receber a errada.

Dúvidas sobre o schema, campos ou metodologia: contato@datumbr.com