Acompanhe sua marca em seis motores de resposta de IA com um único pipeline.
Lead Scraping Automation Engineer
Principais Conclusões:
- Seis motores de resposta de IA, um pipeline. ChatGPT, Grok, Gemini, Perplexity, Copilot e a Visão Geral de IA do Google respondem a perguntas de compra com citações — e todos seis podem ser capturados através de um único endpoint, um
x-api-tokene um envelope{ status, task_id, task_result }. - As plataformas diferem apenas no nível dos campos. Cada motor armazena suas citações sob uma chave diferente (
content_references,web_search_results,citations,web_results,source); um mapa de campos de seis linhas as normaliza em um único fluxo de citações. - A participação nas citações é a métrica de saída. Agrupe as citações normalizadas por domínio por prompt e plataforma, e a contagem ao longo do tempo é a visibilidade da resposta de IA da sua marca.
- Três etapas, três scripts curtos. Capture as respostas, normalize as citações, relate as contagens — cada etapa é um arquivo Python executável que você pode agendar.
- Fixe as variáveis que se movem. O país, o modo de raciocínio do Grok e o conjunto de prompts permanecem fixos por série; as respostas variam de execução para execução, e essa variação é o sinal que você traça.
- Início gratuito. Novas contas Scrapeless incluem créditos de avaliação gratuitos — inscreva-se em app.scrapeless.com.
Pipeline em um relance
Um comprador pergunta a um assistente de IA qual ferramenta escolher, e o assistente nomeia alguém — respaldado por uma lista curta de fontes citadas. Se esse alguém é você, varia por plataforma: o motor que cita você pode não ser o mesmo que seus compradores usam. Acompanhar uma plataforma informa sobre essa plataforma; a imagem da visibilidade é das seis lado a lado.
O pipeline abaixo produz essa imagem do início ao fim:
- Capturar — execute um prompt fixo contra os seis motores através de seus atores Scrapeless; armazene as respostas brutas como JSONL.
- Normalizar — mapeie o campo de citação de cada plataforma em um único fluxo unificado
{platform, prompt, domain, url, title}. - Relatar — conte citações por domínio por plataforma e verifique onde seu próprio domínio aparece.
A Etapa 1 é a única etapa que toca a rede. As Etapas 2 e 3 são transformações puras, portanto a reexecução da análise é gratuita. Para o contexto conceitual de por que as citações da IA se tornaram uma métrica de visibilidade, o artigo sobre GEO e visibilidade de marca-IA cobre a disciplina; este guia constrói o instrumento.
Pré-requisitos
- Uma conta Scrapeless e uma chave da API — inscreva-se em app.scrapeless.com.
- Python 3.10+ com
requests. - Um prompt fixo que seus compradores possam realmente perguntar (o exemplo trabalhado usa um; execuções de produção usam um conjunto).
Armazene sua chave no ambiente para que ela nunca apareça no código:
bash
export SCRAPELESS_API_KEY=your_api_token_here
Etapa 1 — Capture as respostas
Uma função cobre todos os seis motores, porque os atores compartilham um endpoint e um envelope. As diferenças por motor estão confinadas ao mapa de entrada — Grok exige um modo de raciocínio, Perplexity quer a flag web_search, Copilot aceita seu próprio modo:
| Plataforma | Ator | Entrada extra | As citações estão em |
|---|---|---|---|
| ChatGPT | scraper.chatgpt |
— | content_references[] |
| Grok | scraper.grok |
modo (obrigatório) |
web_search_results[] + x_search_results[] |
| Gemini | scraper.gemini |
— | citations[] |
| Perplexity | scraper.perplexity |
web_search: true |
web_results[] |
| Copilot | scraper.copilot |
modo: "smart" |
citations[] |
| Visão Geral de IA do Google | scraper.overview |
— | source[] |
python
# capture.py — execute um prompt em seis motores de resposta de IA, armazene as respostas brutas
import json
import os
import time
import requests
ENDPOINT = "https://api.scrapeless.com/api/v2/scraper/execute"
HEADERS = {
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
}
PROMPT = "Qual é a melhor API de web scraping para sites pesados em JavaScript?"
PAÍS = "US"
MOTORES = {
"chatgpt": {"ator": "scraper.chatgpt", "extra": {}},
"grok": {"ator": "scraper.grok", "extra": {"modo": "MODEL_MODE_FAST"}},
"gemini": {"ator": "scraper.gemini", "extra": {}},
"perplexity": {"ator": "scraper.perplexity", "extra": {"web_search": True}},
"copilot": {"ator": "scraper.copilot", "extra": {"modo": "smart"}},
"google-ai-overview": {"ator": "scraper.overview", "extra": {}},
}
with open("answers.jsonl", "w", encoding="utf-8") as out:
for plataforma, especificação em MOTORES.items():
payload = {
"ator": especificação["ator"],
"entrada": {"prompt": PROMPT, "country": PAÍS, **especificação["extra"]},
}
resp = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=300)
resp.raise_for_status()
data = resp.json()
out.write(json.dumps({...}))
"plataforma": plataforma,
"prompt": PROMPT,
"país": PAÍS,
"capturado_em": int(time.time()),
"status": dados.get("status"),
"task_id": dados.get("task_id"),
"resultado_da_tarefa": dados.get("task_result"),
}) + "\n")
print(f"{plataforma}: {dados.get('status')}")
Cada linha de answers.jsonl é uma captura completa de uma plataforma — resposta, citações e metadados da execução — indexada pelo task_id para a trilha de auditoria.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Estágio 2 — Normalizar as citações
O mapeamento de campos é o grande truque: cada plataforma nomeia seu array de citações de forma diferente e molda as entradas de maneira distinta, mas cada entrada carrega uma URL. Seis mapeamentos transformam seis esquemas em um fluxo:
python
# normalize.py — answers.jsonl -> citations.jsonl (uma linha por fonte citada)
import json
from urllib.parse import urlparse
# plataforma -> lista de pares (array_field, url_key) dentro do resultado_da_tarefa
CAMPOS_DE_CITACAO = {
"chatgpt": [("content_references", "url")],
"grok": [("web_search_results", "url"), ("x_search_results", "url")],
"gemini": [("citations", "url")],
"perplexity": [("web_results", "url")],
"copilot": [("citations", "url")],
"google-ai-overview": [("source", "url")],
}
with open("answers.jsonl", encoding="utf-8") as inp, \
open("citations.jsonl", "w", encoding="utf-8") as out:
for line in inp:
row = json.loads(line)
result = row.get("resultado_da_tarefa") or {}
for field, url_key in CAMPOS_DE_CITACAO[row["plataforma"]]:
for entry in result.get(field) or []:
url = entry.get(url_key) or ""
if not url.startswith("http"):
continue
out.write(json.dumps({
"plataforma": row["plataforma"],
"prompt": row["prompt"],
"país": row["país"],
"capturado_em": row["capturado_em"],
"painel": field,
"domínio": urlparse(url).netloc.removeprefix("www."),
"url": url,
"título": entry.get("title") or entry.get("name") or "",
}) + "\n")
print(sum(1 for _ in open("citations.jsonl", encoding="utf-8")), "citações normalizadas")
Grok contribui com dois painéis — páginas da web abertas e postagens X — e o campo painel os mantém distinguíveis a jusante.
Estágio 3 — Relatar a participação de citações
Com um fluxo de citações, o relatório é um agrupamento. Por plataforma: quais domínios o motor credita e se o seu está entre eles:
python
# report.py — citations.jsonl -> tabela de participação de citação por plataforma
import json
import os
from collections import Counter, defaultdict
MARCA = os.environ.get("BRAND_DOMAIN", "scrapeless.com")
por_plataforma = defaultdict(Counter)
with open("citations.jsonl", encoding="utf-8") as inp:
for line in inp:
row = json.loads(line)
por_plataforma[row["plataforma"]][row["domínio"]] += 1
for plataforma, contagens in por_plataforma.items():
total = sum(contagens.values())
acertos_marca = contagens.get(MARCA, 0)
print(f"\n{plataforma} — {total} citações · {MARCA}: {acertos_marca}")
for domínio, n in contagens.most_common(5):
marcador = " ←" if domínio == MARCA else ""
print(f" {n:>3} {domínio}{marcador}")
Executado em um cronograma, esta tabela se torna uma série temporal: por plataforma, por prompt, por mercado — a contagem de respostas que o citam e quem é citado em vez disso. Essa série é o resultado que um programa GEO relata.
Agendando e escalando a série
- Mantenha as variáveis. Mesmos prompts, mesmo
país, mesmo modo Grok em cada execução — uma série só é legível quando o processo é constante. Capture diariamente ou semanalmente; as respostas da IA mudam em ambas as escalas de tempo. - Escale por multiplicação, não por novo código. Mais prompts é um loop em torno do Estágio 1; mais mercados é um segundo
PAÍS; ambos multiplicam a contagem de execuções, então orce adequadamente — os atores cobram com base no uso, com os níveis atuais na página de preços. - Mantenha as capturas brutas.
answers.jsonlé a evidência por trás de cada número no relatório; escolhas de normalização mudam, respostas brutas não. - Espere painéis vazios. Alguns prompts não geram citações em alguns motores (o painel X do Grok, em particular, é dependente do prompt). Um array vazio é um ponto de dado, não uma falha.
Os atores vivem na linha da API Universal Scraping; o guia dos melhores scrapers LLM classifica a categoria se você estiver comparando ferramentas.
FAQ
Q: É legal capturar respostas da IA dessa forma?
Os atores capturam conteúdo de respostas renderizadas publicamente. As regras variam de acordo com a jurisdição e os termos de cada plataforma — revise os ToS relevantes e consulte um advogado para seu caso de uso. Nunca colete dados pessoais protegidos sob o GDPR ou CCPA.
Q: Por que um prompt no exemplo em vez de um conjunto?
Clareza. As execuções de produção fazem um loop em um conjunto de prompts ao redor da Fase 1; tudo a montante já lida com múltiplos prompts, pois cada linha carrega seu prompt.
Q: Quantas execuções fazem uma série utilizável?
Capturas únicas de uma superfície não determinística provam pouco. Capturas diárias por duas a três semanas fornecem pontos suficientes para separar tendências do ruído na maioria dos conjuntos de prompts.
Q: E sobre a aba Modo IA do Google?
Ela tem seu próprio ator (scraper.aimode) sob o mesmo envelope — adicione uma sétima entrada ao mapa do mecanismo. O guia de Visão Geral da IA cobre as superfícies de respostas do Google em profundidade.
Q: Preciso de um proxy?
Não. O acesso residencial e o geo-roting estão integrados aos atores; a entrada country é toda a configuração.
Q: Isso pode funcionar sem um agente de IA ou SDK?
Sim — as três fases são Python simples sobre HTTP. Qualquer agendador (cron, CI, um executor de fluxo de trabalho) pode pilotá-las.
Conclusão: um envelope, seis motores, um número
O pipeline se reduz a três arquivos: capture respostas através de seis atores que compartilham um endpoint e um envelope, normalize seis esquemas de citação com um mapa de campo de seis linhas e conte domínios. A saída é o número que o trabalho de visibilidade da era da IA estava faltando — com que frequência cada motor de resposta credita você, rastreado ao longo do tempo, por mercado. Agende e o gráfico se desenha sozinho.
Pronto para Construir Seu Pipeline de Dados de Respostas de IA?
Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores construindo pipelines de respostas de IA: Discord · Telegram.
Inscreva-se em app.scrapeless.com para créditos de teste gratuitos, e aponte o pipeline para os prompts, motores e mercados às quais sua marca responde.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



