Ferramenta de verificação de backlinks: scripts que você pode agendar
Toda chamada aqui funciona com curl ou qualquer cliente HTTP. Substitua a chave, mantenha o padrão: chamar, salvar, diff.
Equipe de pesquisa do ArchiLinks ·

Regras básicas
Uma chamada, uma cobrança. Cada solicitação é cobrada uma vez, independentemente da contagem de linhas, e uma única chamada retorna até 1.000 linhas. A paginação profunda para em 50.000 linhas, e per aceita valores de 10 a 5.000.
Isso muda como você escreve os scripts. Solicite per=1000 e faça paginação apenas quando precisar de mais, porque uma ferramenta de verificação de backlinks baseada em páginas pequenas multiplica seu custo por dez sem ganho real. Os erros são claros: HTTP 401 para chave ausente, 402 quando o crédito acaba, e todo corpo JSON carrega ok.
Execute cada script uma vez manualmente contra um domínio pequeno e leia o JSON. Os nomes dos campos, o contêiner de linhas e os campos de paginação devem vir de uma resposta real, não dos nossos exemplos, então confirme-os antes que um job cron dependa deles.
Python: salvar um snapshot datado
Os nomes dos campos na resposta são mostrados como exemplo. Imprima uma resposta antes de confiar em uma chave.
import json, sys, datetime, requests
BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."
def snapshot(domain, action="refdomains"):
r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
if r.status_code in (401, 402):
sys.exit(f"API said {r.status_code}: check key or balance")
r.raise_for_status()
body = r.json()
assert body.get("ok"), body
name = f"{domain}-{action}-{datetime.date.today()}.json"
json.dump(body, open(name, "w"), indent=1)
print(name, body.get("_credits"))
snapshot(sys.argv[1])Node: DR em massa para uma lista
bulk_dr aceita até 2.000 domínios por 1 crédito por chamada, via GET com um parâmetro de domínios ou via corpo POST. O separador de vírgula abaixo é um exemplo; teste com dois domínios primeiro. Node 18 ou posterior tem fetch embutido.
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
action: "bulk_dr",
domains: domains.join(","),
key: "sk_live_...",
});
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));Bash e jq: diff semanal
Salve um snapshot com a data, depois compare dois arquivos. Mantenha o cron semanal ou mensal; o índice é atualizado aproximadamente uma vez por mês.
# crontab: 0 6 1 * * /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
| jq -S . > "snap-$1-$(date +%F).json"
# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50Qual ação para qual script
| Script | Ação | Custo por execução | Saída |
|---|---|---|---|
| Linha de base de migração | toppages, refdomains | 4 créditos | Dois arquivos JSON |
| Limpeza de outreach | bulk_dr | 1 crédito por chamada, até 2.000 domínios | DR por prospect |
| Sobreposição de concorrentes | intersect | 2 créditos | Sites vinculando a 2–10 domínios |
| Monitoramento de anchor text | anchors | 2 créditos | Lista de anchor text |
| Verificação de portfólio | compare | 1 crédito por chamada, até 20 domínios | Métricas lado a lado |

Lidando com as bordas
Scripts falham nas bordas. Planeje para elas.
Envolva cada chamada em uma tentativa de nova conexão (retry) que aguarde e desista após três tentativas, exceto para 401 e 402, que uma nova tentativa nunca corrigirá. Registre o objeto _credits de cada resposta autenticada, para que um pico de gastos apareça nos seus logs antes de aparecer no seu saldo, e limite loops com um número máximo de páginas.
Mantenha snapshots no git ou em armazenamento de objetos com a data no nome do arquivo. Simples, sem graça, eficaz. Para migrações, combine esses scripts com a receita de mapa de redirecionamento e a lista de verificação de migração. Usuários do Google Sheets podem chamar as mesmas URLs do Apps Script com UrlFetchApp, e uma planilha com um gatilho mensal é um monitor perfeitamente válido.
Perguntas sobre scripts
Três perguntas surgem antes que a maioria dos scripts vá para produção, e cada uma tem uma resposta curta.
Como verifico quantos backlinks meu site tem, de graça?
Chame a ação de visão geral ou estatísticas sem chave. Ambas são gratuitas e retornam os totais do nosso próprio índice de links.
Para as listas por trás dos totais, você precisa de uma chave e 2 créditos por chamada.
O que acontece quando o saldo acaba?
A API retorna HTTP 402. Seu script deve parar e alertar, não tentar novamente em loop. Recarregue a partir da página da conta com USDT (TRC-20) e execute novamente.
Posso chamar a API do navegador?
Sim. O CORS está aberto. No entanto, não coloque uma chave no código front-end público, pois qualquer pessoa pode lê-la e gastar seu crédito.

Paginação sem desperdiçar créditos
A paginação é onde os scripts silenciosamente custam mais do que deveriam. Cada solicitação de página é uma chamada separada com sua própria cobrança, então um loop que pede uma página a mais paga por nada.
Leia os campos de paginação em uma resposta real antes de escrever o loop. Os exemplos neste site mostram a estrutura, mas os nomes e o sinal de parada vêm do JSON ao vivo.
Pare quando uma página vier incompleta
Uma página com menos linhas do que você pediu geralmente é a última. Deixe o loop parar ali em vez de solicitar uma página extra para ter certeza.
Se a resposta contiver um total ou um campo de próxima página, use isso como sinal de parada. Conte as linhas que você salvou contra isso, para que uma discrepância apareça no log.
Limite todos os loops
Defina um máximo rígido de páginas em todos os loops. Um limite protege seu saldo se um nome de campo mudar e o script continuar solicitando a mesma página.
Escolha o limite com base no tamanho que você espera, depois aumente-o deliberadamente quando um domínio real precisar de mais páginas.
Escreva cada página conforme ela chega
Salve cada página em disco assim que ela retornar, com o número da página no nome do arquivo. Um script que para na página quarenta pode retomar do último arquivo salvo em vez de começar novamente e pagar duas vezes.
Mantenha os arquivos em uma pasta por domínio e por data, para que uma nova execução nunca misture duas extrações.
Executando os scripts em agendamento
Qualquer agendador serve. O que importa é que cada execução deixe um arquivo para trás, e que uma execução falha avise alguém.
Escolhendo um host para a tarefa
O cron serve para um servidor com um disco que você controla. Um job de CI serve para um repositório que já mantém os snapshots, para que o histórico viva ao lado do código que o lê.
Qualquer que seja sua escolha, mantenha a lista de domínios em um arquivo, para que adicionar um domínio seja uma edição em vez de uma mudança no script.
Alertando falhas, não cada sucesso
Alerte quando o script falhar, ou quando o saldo cair abaixo de um nível que você escolheu. Uma mensagem de sucesso toda manhã treina as pessoas a ignorarem o canal que carrega o problema real.
Registre o objeto _credits de cada execução, como o exemplo em Python faz, e revise a tendência uma vez por mês.
Um diff semanal em cinco etapas
Escolha as ações
Escolha as duas ou três chamadas que respondem à sua pergunta. Cada uma custa créditos, então anote o custo ao lado dela.
Salve a resposta bruta
Armazene o JSON exatamente como ele chegou, com o domínio e a data no nome do arquivo. A formatação pode esperar até a etapa de diff.
Ordene as chaves antes de comparar
Use jq -S ou equivalente, para que a ordem das chaves não apareça como uma mudança. O exemplo em bash acima faz isso.
Compare as listas, não os arquivos
Junte as duas respostas na URL ou domínio, depois relatore o que foi adicionado, removido e alterado. Um diff de texto bruto de um arquivo longo é difícil de agir.
Revise o diff e aja
Envie os domínios que deixaram de vincular para quem cuida do outreach, e as páginas removidas para quem cuida dos redirecionamentos.
Testando um script antes que um job cron dependa dele
Um script que roda sem supervisão deve provar seu valor primeiro. Use um domínio pequeno, leia o JSON completo e só então amplie a lista.
Uma verificação rápida de sanidade é comparar os totais com a chamada de visão geral gratuita para o mesmo domínio. Os números não precisam corresponder exatamente a uma lista paga, mas devem concordar em escala.
Execute com dois domínios
Dois domínios testam o loop, os nomes dos arquivos e os caminhos de erro. Um domínio pode passar por sorte, enquanto dois mostram se o loop é redefinido entre domínios.
Use um domínio que você conhece bem e um que não conhece, para que você possa julgar se a saída parece correta.
Mantenha a chave fora de logs e tickets
Scripts frequentemente imprimem o endereço completo da solicitação, e a chave está nesse endereço como um parâmetro. Remova a chave de qualquer linha que saia do servidor, ou envie-a no cabeçalho Authorization, o que a mantém fora do endereço.
Se uma chave aparecer em um ticket ou repositório público, pare o job agendado que a usa antes da próxima execução.
Mantenha uma nota curta de onde a chave está, quais scripts a leem e quais hosts eles chamam. Essa nota é o que você precisa quando alguém perguntar quem pode gastar o saldo.
Escolhendo a ação para cada pergunta
Comece pela pergunta, não pela lista de endpoints. Uma migração precisa saber quais URLs carregam links, enquanto uma lista de outreach precisa de pontuações de domínio. Um host, duas perguntas. Cada uma custa um número diferente de créditos.
Escreva o custo ao lado da pergunta antes de escrever qualquer código. Um script que roda semanalmente multiplica um preço pequeno por cinquenta e duas vezes, e essa multiplicação é fácil de esquecer até que o saldo mostre.
Retries que param quando devem
Tente novamente uma solicitação que falhou por um motivo temporário, como um timeout ou um erro de servidor, um pequeno número de vezes com uma pausa crescente entre as tentativas. Não tente novamente um 401 ou 402, pois esperar não mudará nenhuma das respostas.
Registre cada nova tentativa com a ação e o domínio, para que um padrão de falhas apareça como um padrão em vez de como silêncio.
Defina a contagem de novas tentativas em um só lugar, para que todas as chamadas no script sigam a mesma regra. Loops de nova tentativa espalhados tendem a discordar uns dos outros, e a discordância é difícil de encontrar em um log.