LinkedIn Profile Details
Enriqueça qualquer URL de perfil do LinkedIn. Headline, experiência, formação. JSON limpo em uma chamada.
Rode como Apify Actor. Envie até 5.000 URLs por run, pague só pelos perfis encontrados.
Início rápido (Apify API)
# Trigger the actor with the Apify APIcurl -X POST "https://api.apify.com/v2/acts/atomus~linkedin-profile-scraper/runs?token=YOUR_APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ }'O que faz
Mande até 100 URLs públicas de perfil do LinkedIn por chamada. Recebe JSON limpo e normalizado com nome, cargo, headline, summary, empresa, localização e skills. Cada URL custa 1 crédito; erros por URL são estornados automaticamente. Nenhuma conta do LinkedIn no seu lado.
Endpoint
POST https://api.atomusapi.dev/v1/linkedin-profile-enrichment/enrichAutenticação
Mande sua API key como Bearer token no header Authorization. As chaves são escopadas por tenant.
Authorization: Bearer atm_live_xxxxxxxxxxxxxxIdempotency
Send Idempotency-Key: <uuid> to make a request safely retryable. Atomus stores the response for 24h and replays it on retries with the same key.
Entrada
Request body
| Field | Type | Description | |
|---|---|---|---|
| url | string | obrigatório | Uma única URL de perfil do LinkedIn para enriquecer. Deve corresponder a https://www.linkedin.com/in/<handle>/. Para enriquecer vários perfis, envie uma requisição por URL; o rate limit (4 req/s) permite paralelizar no cliente. |
Saída
Response object
| Field | Type | Description | |
|---|---|---|---|
| data.url | string | obrigatório | Repete a URL enviada na requisição. |
| data.status | string | obrigatório | Um de: success, not_found, error. |
| data.profile.full_name | string | null | opcional | Nome completo exibido. Presente apenas quando status = success. |
| data.profile.title | string | null | opcional | Cargo atual. Apenas em success. |
| data.profile.headline | string | null | opcional | Headline do perfil (a frase curta abaixo do nome no LinkedIn). Apenas em success. |
| data.profile.summary | string | null | opcional | Resumo do perfil / seção sobre. Apenas em success. |
| data.profile.company.name | string | null | opcional | Nome da empresa atual. Apenas em success. |
| data.profile.location.country | string | opcional | Código do país (ISO 3166-1 alpha-2). Apenas em success. |
| data.profile.location.state | string | opcional | Estado ou região. Apenas em success. |
| data.profile.location.city | string | opcional | Cidade. Apenas em success. |
| data.profile.skills | string[] | opcional | Skills listadas. Apenas em success. |
| data.profile.educations | object[] | opcional | Histórico educacional; formato upstream opaco, trate cada entrada como unknown por enquanto. Apenas em success. |
| data.profile.position_groups | object[] | opcional | Histórico profissional agrupado por empresa; formato upstream opaco, trate cada entrada como unknown por enquanto. Apenas em success. |
| data.code | string | opcional | Código do erro. Presente apenas quando status = error. |
| data.message | string | opcional | Mensagem do erro. Presente apenas quando status = error. |
| meta.request_id | string | obrigatório | ID de rastreio opaco. Inclua ao abrir um chamado de suporte. |
| meta.api | string | obrigatório | Identificador da API: linkedin-profile-enrichment. |
| meta.version | string | obrigatório | Versão da API. |
| meta.mode | string | obrigatório | Modo de ambiente em que a requisição foi executada. |
| meta.credits_used | number | obrigatório | Créditos cobrados nesta requisição (1 apenas quando status=success; 0 em not_found e error — ambos reservam e estornam). |
| meta.credits_remaining | number | obrigatório | Saldo de créditos do tenant após esta requisição. |
| meta.duration_ms | number | obrigatório | Duração do processamento no servidor em milissegundos. |
Exemplo de request
curl
curl -X POST "https://api.atomusapi.dev/v1/linkedin-profile-enrichment/enrich" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.linkedin.com/in/example-1" }'JavaScript
const res = await fetch( "https://api.atomusapi.dev/v1/linkedin-profile-enrichment/enrich", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ url: "https://www.linkedin.com/in/example-1", }), });
if (!res.ok) { const { error } = await res.json(); throw new Error(`${error.code}: ${error.message}`);}
const { data, meta } = await res.json();if (data.status === "success") console.log(data.profile.full_name);else if (data.status === "not_found") console.log("profile not found");else console.error(data.code, data.message);Python
import requests
res = requests.post( "https://api.atomusapi.dev/v1/linkedin-profile-enrichment/enrich", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={"url": "https://www.linkedin.com/in/example-1"}, timeout=10,)
if not res.ok: err = res.json()["error"] raise RuntimeError(f"{err['code']}: {err['message']}")
data = res.json()["data"]if data["status"] == "success": print(data["profile"]["full_name"])elif data["status"] == "not_found": print("profile not found")else: print(data["code"], data["message"])Erros e limites
{ "error": { "code": "rate_limit_exceeded", "message": "Human-readable explanation.", "retryable": true, "request_id": "req_01HXXX..." }}unauthenticatedHTTP 401 : Header Authorization ausente ou mal formado. (não retente)invalid_api_keyHTTP 401 : API key não reconhecida ou revogada. (não retente)insufficient_creditsHTTP 402 : Saldo de créditos do tenant abaixo do custo da chamada. Recarregue e tente de novo. (não retente)invalid_inputHTTP 400 : Corpo da requisição não é JSON válido ou o campo url está faltando. (não retente)validation_failedHTTP 422 : A url não é uma URL válida de perfil linkedin.com/in/<handle>. (não retente)rate_limit_exceededHTTP 429 : Taxa sustentada de requisições excedeu o limite do tenant. (pode retentar)upstream_errorHTTP 502 : Provedor upstream retornou uma resposta de erro. (pode retentar)upstream_timeoutHTTP 504 : Provedor upstream não respondeu dentro do tempo limite. (pode retentar)internal_errorHTTP 500 : Erro inesperado no servidor. (pode retentar)
Limites de taxa
4 requests/segundo por conta (compartilhado entre todas as API keys da mesma conta). Cada chamada enriquece uma URL de perfil do LinkedIn. Para enriquecer várias, paralelize as chamadas no cliente até o limite. Picos acima do limite retornam 429 rate_limit_exceeded; faça backoff usando os response headers. A janela por segundo é enforced no servidor; as linhas por minuto, hora, dia, semana e mês são derivações de throughput sustentado.
| Janela | Máx. requests |
|---|---|
| Por segundo | 4 |
| Por minuto | 240 |
| Por hora | 14,400 |
| Por dia | 345,600 |
| Por semana | 2,419,200 |
| Por mês | 10,368,000 |
x-ratelimit-limit: máximo de requests por segundo da conta (compartilhado entre todas as keys)x-ratelimit-remaining: requests restantes na janela atualx-ratelimit-reset: unix epoch (segundos) quando a janela reseta
Cobrança
- 1 crédito por enriquecimento bem-sucedido
Apenas respostas success são cobradas. Respostas not_found (nenhum perfil encontrado na URL) e error não consomem crédito — o crédito é reservado antes da chamada e estornado automaticamente. Cada chamada reporta o gasto em meta.credits_used e o novo saldo em meta.credits_remaining.
Rodando altos volumes?
Pule os tiers do marketplace e tenha preço unitário ajustado ao seu volume real de chamadas, com linha direta para quem opera o pipeline.
Ver preço por volume