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 problema

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.

Estratégia de busca

1

Dados cadastrais atuais

Endereços, telefones e emails vinculados ao CPF
2

Empresas vinculadas

Endereço da empresa onde trabalha ou é sócio
3

Parentes próximos

Endereço de cônjuge, pais ou filhos como alternativa
4

Busca reversa

Se tem telefone ou email antigo, resolver para CPF e buscar dados atuais

Implementação

Cenário 1 — Tem o CPF

import requests
from concurrent.futures import ThreadPoolExecutor

BASE = "https://221b-api.sherlocker.com.br/api/v1"
TOKEN = "SEU_TOKEN"

def get(endpoint, **params):
    params["token"] = TOKEN
    return requests.get(f"{BASE}{endpoint}", params=params).json()

cpf = "12345678901"

# Perfil completo com todos os contatos
perfil = get(f"/pessoas/cpf/{cpf}")

enderecos = perfil.get("enderecos", [])
telefones = perfil.get("telefones", [])
emails = perfil.get("emails", [])
parentes = perfil.get("parentes", [])

print(f"Nome: {perfil['pessoa']['nome']}")
print(f"Enderecos: {len(enderecos)}")
print(f"Telefones: {len(telefones)}")
print(f"Emails: {len(emails)}")

# Listar todos os enderecos
for end in enderecos:
    print(f"  {end.get('endereco')}, {end.get('numero')} - {end.get('cidade')}/{end.get('uf')}")

Cenário 2 — Endereço via empresa

# Onde a pessoa trabalha ou e socia
with 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 desligamento
emprego_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}")
    est = empresa.get("estabelecimento", {})
    print(f"Trabalha em: {est.get('razao_social')}")
    print(f"Endereco empresa: {est.get('logradouro')}, {est.get('numero')} - {est.get('municipio_nome')}/{est.get('uf')}")

Cenário 3 — Parentes como alternativa

# Conjuge ou pais — enderecos alternativos
parentes_proximos = [p for p in parentes
    if p.get("vinculo") in ("conjuge", "mae", "pai")]

for par in parentes_proximos:
    cpf_par = par.get("cpf_vinculo")
    if cpf_par:
        end_par = get(f"/pessoas/enderecos/cpf/{cpf_par}")
        enderecos_par = end_par.get("enderecos", [])
        if enderecos_par:
            e = enderecos_par[0]
            print(f"  {par['vinculo'].title()}: {e.get('endereco')}, {e.get('numero')} - {e.get('cidade')}/{e.get('uf')}")

Cenário 4 — Busca reversa (só tem telefone ou email)

# Partindo de um telefone antigo
telefone = "11987654321"
reverso = get(f"/pessoas/telefone/{telefone}")

for resultado in reverso.get("resultados", []):
    cpf_encontrado = resultado["cpf"]
    perfil = get(f"/pessoas/cpf/{cpf_encontrado}")
    print(f"CPF: {cpf_encontrado}{perfil['pessoa']['nome']}")
    for end in perfil.get("enderecos", []):
        print(f"  {end.get('endereco')}, {end.get('numero')} - {end.get('cidade')}/{end.get('uf')}")

Cenário 5 — Localização em lote

Para localizar varias pessoas de uma vez, use o endpoint de enriquecimento:
# 50 pessoas de uma vez
response = requests.post(
    f"{BASE}/leads/enriquecer",
    params={"token": TOKEN},
    json={
        "contatos": [{"cpf": cpf} for cpf in lista_de_cpfs],
        "campos": ["identidade", "contatos"]  # so endereco e contatos
    }
)

for r in response.json()["resultados"]:
    if r["status"] == "ok":
        print(f"{r['nome']}{r.get('endereco', {}).get('cidade')}/{r.get('endereco', {}).get('uf')}")
        print(f"  Tel: {r.get('contatos', {}).get('telefones', [])}")

APIs utilizadas

Pessoas

Endereços, telefones, emails, parentes

Busca por telefone

Busca reversa telefone → CPF

Empresas

Endereço do empregador/sociedade

Enriquecer

Localização em lote