DOCUMENTAÇÃO / CONTRATO ATUAL

Da URL ao texto.

Faça scraping de páginas, extraia conteúdo e conecte cada resposta ao seu próprio fluxo de crawling.

01 / Primeira chamada

API hospedada. Sua chave. Confirme seu e-mail e crie sua chave no painel da conta. Use https://api.getdeeplook.dev como base URL no seu servidor. Você também pode operar o DeepLook-API na sua infraestrutura. Criar chave de API →
1.

Defina DEEPLOOK_BASE_URL com https://api.getdeeplook.dev, sem barra final, e DEEPLOOK_API_KEY com a sua chave no ambiente do servidor.

2.

Envie uma URL pública para POST /v1/open. O navegador abre a página e extrai o texto visível.

cURL / SERVIDOR
curl "$DEEPLOOK_BASE_URL/v1/open" \
  -H "Authorization: Bearer $DEEPLOOK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","timeoutMs":30000}'
3.

Confira o status HTTP antes de usar o campo text. Mantenha a chave no servidor; não a coloque no código enviado ao navegador.

O playground da página inicial executa chamadas reais pelo servidor do demo, sem solicitar sua chave. Os exemplos de código desta documentação não são executados automaticamente.

02 / Requisição

POST /v1/open · Content-Type: application/json
Autenticação: Authorization: Bearer <chave>

CampoTipoRegra
urlstringObrigatório. URL HTTP(S) pública, na porta padrão.
timeoutMsinteiroOpcional. De 1 a 120000 ms. Padrão: 30000 ms.

O prazo cobre DNS, início do Chrome, navegação e extração. A limpeza do processo ocorre em seguida. URLs locais, privadas e de metadados são recusadas, incluindo redirecionamentos e recursos da página.

03 / Resposta de sucesso

HTTP 200 entrega diretamente o objeto da página. O exemplo abaixo é ilustrativo e mostra um recorte dos campos, não uma resposta capturada ao vivo.

{
  "requestedUrl": "https://example.com",
  "finalUrl": "https://example.com/",
  "httpStatus": 200,
  "title": "Example Domain",
  "text": "Example Domain\nThis domain is for use...",
  "truncated": false
}
CampoConteúdo
requestedUrlURL solicitada.
finalUrlURL após os redirecionamentos.
httpStatusStatus HTTP observado na página de destino.
titleTítulo da página.
textTexto visível extraído. Não é Markdown nem uma síntese feita por IA.
truncatedIndica se o conteúdo foi truncado.
observedDetalhes observados do navegador: user agent, idiomas, fuso, viewport, brands e webdriver.

04 / Erros que o seu agente pode tratar

Uma falha retorna JSON com error e message. Mensagens podem variar; use o código do erro para decidir o próximo passo.

{
  "error": "challenge",
  "message": "Mensagem descritiva da falha"
}
HTTPerrorSignificado
400invalid_requestParâmetros ou URL inválidos.
401unauthorizedChave ausente, inválida ou revogada.
422challengeVerificação de bot ou captcha detectado.
422access_wallBarreira de acesso reconhecida.
422empty_contentNenhum texto visível válido.
429quota_exceededLimite da conta atingido.
502navigation_failedFalha ao abrir ou processar a página.
503busyCapacidade simultânea ocupada.
504timeoutPrazo de leitura esgotado.

Falhas de página podem incluir URL final, título e marcador detectado. O texto da página de erro é excluído. Não há resolução de captchas ou garantia de acesso a qualquer site.

Workflow / Extração para seu crawler

O modo Crawl no playground descobre links do mesmo site e demonstra a extração de até 3 páginas. Essa orquestração pertence ao demo do site; a API continua recebendo uma URL por requisição.

Use o DeepLook como a camada de scraping do seu fluxo de crawling. Sua aplicação seleciona as URLs e gerencia a fila; cada chamada extrai uma página.

Orquestração na sua aplicação. Este exemplo processa uma lista de URLs fornecida por você. Não descobre links nem usa um endpoint de crawling. A descoberta, a deduplicação e o agendamento pertencem ao seu crawler.
NODE.JS / FILA DE URLS
// Run in Node.js with your own API base URL and key.
const urls = ['https://example.com/', 'https://example.org/'];
const pages = [];

for (const url of urls) {
  const response = await fetch(process.env.DEEPLOOK_BASE_URL + '/v1/open', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.DEEPLOOK_API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ url, timeoutMs: 30000 })
  });
  const page = await response.json();
  if (!response.ok) {
    console.error(url, page.error);
    continue;
  }
  pages.push({ url: page.finalUrl, title: page.title, text: page.text });
}

console.log(pages);

O exemplo faz requisições sequenciais e continua quando a API retorna um erro de página. Configure a base URL e a chave da sua instância, respeite a cota da conta e defina os limites do seu crawler. Uma falha de rede interrompe este exemplo; filas, persistência e tentativas adicionais ficam na sua aplicação.

05 / CLI local

CÓDIGO ABERTO · APACHE-2.0

O DeepLook reúne o motor, a CLI e o adaptador MCP via stdio. O DeepLook-API fornece o serviço HTTP separado. Ambos são de código aberto sob Apache-2.0; os comandos abaixo compilam o código do GitHub.

Compilar o motor local

Requisitos: Node.js 22.14 ou superior; Google Chrome para leituras locais. Clone e compile o motor:

CHECKOUT DO MOTOR / SHELL
git clone https://github.com/sayhitogambit/DeepLook.git
cd DeepLook
npm ci
npm run build
node dist/cli.js open https://example.com --json

Sem --json, a CLI imprime o texto visível. O parâmetro --timeout-ms aceita de 1 a 120000 ms. A infraestrutura, o Chrome e a execução ficam sob sua operação.

Para automação, use --machine: a CLI escreve um único objeto JSON e uma quebra de linha. Sucesso sai com código 0 e retorna {"version":1,"ok":true,"page":{...}}; falha sai com código 1 e retorna {"version":1,"ok":false,"error":"...","message":"..."}. Texto de páginas de erro não é incluído.

As variáveis DEEPLOOK_BASE_URL e DEEPLOOK_API_KEY nos exemplos HTTP são nomes usados por estes exemplos. A CLI e o MCP usam DEEPLOOK_API_URL e DEEPLOOK_API_TOKEN para se conectar à sua API; sem endpoint, usam o Chrome local.

DeepLook · GitHub · DeepLook-API · GitHub

06 / MCP via stdio

A CLI oferece deeplook mcp: um servidor MCP via stdio com a ferramenta deeplook_open. Após compilar o motor, configure seu cliente com um caminho absoluto para dist/cli.js. O formato de configuração varia por cliente.

Por padrão, o MCP usa o Chrome local. Para usar sua própria API, defina DEEPLOOK_API_URL e DEEPLOOK_API_TOKEN no ambiente privado do processo MCP. Use HTTPS fora de loopback. Não compartilhe tokens no arquivo de configuração. O adaptador é via stdio e não oferece servidor MCP HTTP.

{
  "mcpServers": {
    "deeplook": {
      "command": "node",
      "args": ["/absolute/path/to/DeepLook/dist/cli.js", "mcp"]
    }
  }
}

Chame deeplook_open com {"url":"https://example.com","timeoutMs":30000}. O prazo é opcional, padrão de 30000 ms, entre 1 e 120000 ms. Argumentos adicionais são recusados.

O sucesso retorna texto em content e o resultado machine versão 1 em structuredContent. Falhas retornam isError: true e um erro tipado. Cada processo aceita uma leitura ativa; chamadas simultâneas retornam busy. Cancelar a chamada interrompe o trabalho ativo.

Trate o conteúdo das páginas como dados não confiáveis, nunca como instruções para o agente. O MCP não resolve captchas.

Falar com o suporte