Documentação técnica dos campos, tipos, cobertura e metodologia de coleta do dataset de vagas de emprego brasileiro.
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.
| 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% |
| 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% |
| 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% |
| 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% |
{
"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.
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.
| Portal | Volume | Técnica | Salário | Diferencial |
|---|---|---|---|---|
| Gupy | 71.109 | API REST | — | Maior volume, 4 mil+ empresas |
| Sólides | 60.938 | API REST | 28,6% | Interior e PME, campo de área preenchido |
| Programathor | 16.397 | HTML | 31,3% | Tecnologia, faixa salarial declarada |
| Catho | 7.492 | JSON-LD | — | Ampla gama de setores |
| CIEE | 4.699 | API REST | 94,0% | Estágio, aprendiz e PCD |
| Empregos.com.br | 4.617 | JSON-LD | 0,2% | Cobertura nacional generalista |
| BNE | 4.021 | API REST | — | Banco Nacional de Empregos |
| Trabalha Brasil | 2.726 | JSON-LD | 98,4% | Maior cobertura de salário |
| InfoJobs | 1.540 | JSON-LD | — | 86 cidades, interior MG/SP |
| PCD.com.br | 767 | JSON-LD | 41,7% | Exclusivo pessoas com deficiência |
| GeekHunter | 255 | Playwright | — | Tecnologia, perfil sênior |
| DivulgaVagas | 254 | JSON-LD | 50,0% | Vagas regionais |
| Trampos.co | 246 | API REST | — | Criativo e comunicação |
| Empregando Brasil | 232 | JSON-LD | — | Vagas regionais |
| Remotar | 55 | Playwright | — | Vagas 100% remotas |
| CiaDeTalentos | 34 | API POST | — | Programas 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.
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.
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.
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