Use this file to discover all available pages before exploring further.
Escritórios de advocacia frequentemente precisam localizar pessoas para citação judicial, intimação ou cobrança. O Sherlocker permite encontrar endereços atualizados, telefones e emails a partir de CPF, telefone antigo ou email — e expandir a busca via parentes e empresas.
O endereço do processo está desatualizado. O oficial de justiça retorna com “mudou-se”. O telefone não atende. O email volta. Sem dados atualizados, o processo fica parado por meses.
# Onde a pessoa trabalha ou e sociawith ThreadPoolExecutor(max_workers=2) as pool: fut_soc = pool.submit(get, f"/empresas/cpf/{cpf}") fut_emp = pool.submit(get, f"/empresas/empregos/cpf/{cpf}")sociedades = fut_soc.result().get("socios", [])empregos = fut_emp.result().get("empregos", [])# Emprego atual = sem data de desligamentoemprego_atual = next( (e for e in empregos if not e.get("data_desligamento")), None)if emprego_atual: cnpj = emprego_atual["cnpj_empregador"] empresa = get(f"/empresas/cnpj/{cnpj}") end_emp = empresa.get("endereco", {}) print(f"Trabalha em: {empresa.get('razao_social')}") print(f"Endereco empresa: {end_emp.get('logradouro')}, {end_emp.get('numero')} - {end_emp.get('cidade')}/{end_emp.get('uf')}")
# Conjuge ou pais — enderecos alternativosparentes_proximos = [p for p in parentes if p.get("vinculo_nome") in ("Cônjuge", "Mãe", "Pai")]for par in parentes_proximos: cpf_par = par.get("cpf") if cpf_par: end_par = get(f"/pessoas/cpf/{cpf_par}/enderecos") enderecos_par = end_par.get("enderecos", []) if enderecos_par: e = enderecos_par[0] print(f" {par['vinculo_nome']}: {e.get('logradouro')}, {e.get('numero')} - {e.get('cidade')}/{e.get('uf')}")
Para localizar várias pessoas em paralelo, use ThreadPoolExecutor sobre o endpoint de perfil:
from concurrent.futures import ThreadPoolExecutor, as_completeddef localizar(cpf): perfil = get(f"/pessoas/cpf/{cpf}") if "nome_completo" not in perfil: return None enderecos = perfil.get("enderecos", []) telefones = perfil.get("telefones", []) return { "cpf": cpf, "nome": perfil["nome_completo"], "cidade": enderecos[0].get("cidade") if enderecos else None, "uf": enderecos[0].get("uf") if enderecos else None, "telefones": [t.get("numero_completo") for t in telefones], }with ThreadPoolExecutor(max_workers=10) as pool: futures = {pool.submit(localizar, cpf): cpf for cpf in lista_de_cpfs} for fut in as_completed(futures): r = fut.result() if r: print(f"{r['nome']} — {r['cidade']}/{r['uf']}") print(f" Tel: {r['telefones']}")