Templates
Receitas reutilizáveis de scraping, crawling e busca com variáveis e lógica personalizada.
Introdução
Templates são configurações reutilizáveis para scraping, crawling ou busca. Em vez de repetir as mesmas opções em cada chamada, você define uma vez em um template (ou obtém um na AnyCrawl Template Store) e referencia com template_id.
Benefícios:
- Simplicidade: chame a API só com
template_id+ entradas mínimas - Consistência: padronize o comportamento na equipe ou nos projetos
- Segurança: templates podem restringir domínios e expor apenas variáveis necessárias
- Poder: handlers opcionais para transformações avançadas
Tipos suportados:
scrape: extração de página única via/v1/scrapecrawl: crawling multi-página via/v1/crawlsearch: resultados de mecanismos de busca via/v1/search
Marketplace de templates
Explore templates prontos em anycrawl.dev/template.
Como usar:
- Navegue no marketplace e encontre um template adequado
- Copie o
template_idna página de detalhes - Chame a API com esse
template_ide as entradas necessárias
Exemplo:
curl -X POST "https://api.anycrawl.dev/v1/scrape" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "content-extractor",
"url": "https://example.com"
}'Uso de templates nas chamadas da API
Parâmetros da requisição
Com template_id, só campos mínimos são permitidos:
| Endpoint | Obrigatório | Opcionais |
|---|---|---|
/v1/scrape | template_id | url, variables |
/v1/crawl | template_id | url, variables |
/v1/search | template_id | query, variables |
Observações importantes:
urlouquerypodem ser opcionais se o template já os definir. Consulte a descrição do template.variablespassa entradas dinâmicas que o template espera (veja a seção Variáveis).- Outros campos (
engine,formats,timeoutetc.) vêm do template e não podem ser sobrescritos. - Campos não permitidos retornam erro de validação 400.
Scrape com template
curl -X POST "https://api.anycrawl.dev/v1/scrape" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-scrape-template",
"url": "https://example.com",
"variables": { "category": "tech" }
}'Crawl com template
curl -X POST "https://api.anycrawl.dev/v1/crawl" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-crawl-template",
"url": "https://docs.example.com",
"variables": { "maxPages": 50 }
}'Search com template
curl -X POST "https://api.anycrawl.dev/v1/search" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-search-template",
"query": "machine learning tutorials",
"variables": { "lang": "en" }
}'Variáveis
Templates podem declarar variáveis para aceitar entradas dinâmicas na chamada.
- Cada variável tem um
type:string,number,booleanouurl - Podem ser
requiredou opcionais comdefaultValue - Veja a descrição do template para saber o que é esperado
Exemplo de requisição com variáveis:
{
"template_id": "blog-scraper",
"url": "https://example.com/blog/post-123",
"variables": {
"author": "john-doe",
"includeComments": true,
"maxComments": 50
}
}Se faltar variável obrigatória ou o tipo estiver errado, você recebe erro de validação 400.
Formato da resposta
As respostas com template seguem o mesmo formato das chamadas padrão:
{
"success": true,
"data": {
"url": "https://example.com",
"markdown": "# Page Title\n\nContent...",
"metadata": { ... },
// Campos adicionais de handlers personalizados (se houver)
"extractedData": { ... }
}
}Templates com handlers personalizados podem acrescentar campos extras.
Tratamento de erros
Erros comuns ao usar templates:
| Erro | HTTP | Descrição |
|---|---|---|
| Template não encontrado | 404 | template_id inexistente ou sem acesso |
| Erro de validação | 400 | Variáveis obrigatórias ausentes ou tipos incorretos |
| Violação de restrição de domínio | 403 | URL não permitida pela política do template |
| Campos inválidos | 400 | Campos de topo extras não permitidos com template |
Exemplo de resposta de erro:
{
"success": false,
"error": "Validation error",
"message": "When using template_id, only template_id, url, variables are allowed. Invalid fields: engine, formats",
"data": {
"type": "validation_error",
"issues": [
{
"field": "engine",
"message": "Field 'engine' is not allowed when using template_id",
"code": "invalid_field"
}
],
"status": "failed"
}
}Boas práticas
Para quem chama a API
- Sempre confira a descrição do template: variáveis obrigatórias e domínios/palavras-chave permitidos
- Use templates do marketplace quando possível para ganhar tempo
- Trate 404 (template removido ou arquivado)
- Não tente sobrescrever configurações do template (
engine,formatsetc.) — a chamada falhará
Para autores de templates
- Mantenha o template focado em um único caso de uso
- Documente todas as variáveis com descrições claras
- Use restrições de domínio para evitar uso indevido
- Defina preço adequado à complexidade
- Teste bem antes de publicar
Criar templates (avançado)
Ao criar seus próprios templates, você pode configurar:
Restrições de domínio
Limite onde o template pode ser usado:
{
"allowedDomains": {
"type": "glob",
"patterns": ["*.example.com", "docs.mysite.com"]
}
}type:"exact"(correspondência exata) ou"glob"(padrão)patterns: lista de domínios ou padrões permitidos
Restrições de palavra-chave (templates de busca)
Limite quais consultas podem ser usadas:
{
"allowedKeywords": {
"type": "glob",
"patterns": ["*tutorial*", "*documentation*"]
}
}allowedKeywordsé validada antes da execução da consulta.type:"exact"ou"glob"patterns: valores/padrões permitidos- A validação ocorre antes de
queryTransform.
Preço
Defina o custo em créditos por chamada:
{
"pricing": {
"perCall": 10,
"currency": "credits"
}
}Handlers personalizados
Código JavaScript/TypeScript para:
requestHandler: pós-processar resultados do scrape e adicionar camposfailedRequestHandler: tratar falhas com lógica de retryqueryTransform(somente busca): transformar consultas antes da buscaurlTransform(scrape/crawl): transformar URLs antes do processamento
Ambos os transforms suportam:
- Modo template com placeholders (query:
{{query}}, url:{{url}}) - Modo append com
prefixesuffix regexExtractopcional para extrair substring antes do modo
Exemplo de extração regex para perfis TikTok:
{
"customHandlers": {
"urlTransform": {
"enabled": true,
"mode": "append",
"prefix": "",
"suffix": "",
"regexExtract": {
"pattern": "^(https?:\\/\\/www\\.tiktok\\.com\\/@[^\\/?#]+)",
"flags": "i",
"group": 1
}
}
}
}Isso extrai https://www.tiktok.com/@piperrockelle de entradas como:
https://www.tiktok.com/@piperrockelle?abb=ccchttps://www.tiktok.com/@piperrockelle
Exemplo de requestHandler:
// Extract structured data from page context
const title = context.data.title;
const content = context.data.markdown;
return {
extractedTitle: title,
wordCount: content.split(/\s+/).length,
customMetric: calculateMetric(content),
};Modelo de segurança
- Templates não confiáveis: executam em sandbox VM endurecida com limitações rígidas
- Templates confiáveis: podem usar funções async com acesso controlado à página do navegador
Somente templates revisados e aprovados pelo AnyCrawl podem ser marcados como confiáveis.
FAQ
Posso sobrescrever engine ou formats do template?
Não. Templates são configurações imutáveis. Você só pode informar url/query e variables.
O que acontece se eu usar um template do marketplace?
Templates do marketplace são públicos. Você paga os créditos definidos pelo autor.
Os templates veem minha chave de API?
Não. Executam em sandboxes isolados sem acesso às suas credenciais.
Como crio meus próprios templates?
Use o playground AnyCrawl para criar e testar. Após publicar, ficam disponíveis via API.