Entrar Cadastrar
Posições no Google

Proxies para rastrear posições com o país no próprio link

Os buscadores mostram resultados por região, então um rank checker precisa de um IP do país certo para cada lote de consultas. O Resi Core dá um endereço residencial em qualquer um de mais de 200 países direto na string de conexão, enquanto os pacotes ilimitados com filtro de país cobrem listas grandes de palavras-chave. Uma seção à parte trata do acompanhamento das respostas de IA do Google, que também dependem do país e da cidade.

  • Resi Core: país na string
  • um IP novo a cada requisição
  • pacotes para listas grandes de palavras
Monitor numa mesa com um gráfico de posições subindo
Posições no Google

O que um rank checker precisa e o que o pacote entrega

As posições dependem de onde vem a consulta. O pool precisa responder isso primeiro.

O que a tarefa exigeO que os planos dão

Endereços do país que você acompanha

Resi Core: o país vai no login; nos pacotes, uma coluna de país no CSV exportado

Um IP novo para cada lote de consultas

O Resi Core troca o endereço a cada requisição, e os pacotes renovam cerca de um terço dos endereços por dia

Consultas paralelas para uma lista grande de palavras-chave

Sem limite de threads no Resi, de 500 a 5000 threads nos pacotes

Funciona com o checker que você já usa

Resi por login e senha na string, pacotes por IP; A-Parser, Key Collector e Rank Tracker aceitam HTTP e SOCKS5

Proxies residenciais

Calcule o tráfego para a sua lista de palavras-chave

Uma página de resultados pesa pouco, então um gigabyte cobre milhares de consultas. O preço por GB cai com o tamanho do pedido.

Preço dos proxies residenciais por 1 GB conforme o tamanho do pedido
Tamanho do pedidoResi CoreResi Prime
1 GB+$0.85$2.29
10 GB+economize 7%$0.79$2.09
50 GB+$0.72$1.95
100 GB+$0.65$1.75
500 GB+$0.57$1.55
1000 GB+$0.49$1.39

Preços em dólares americanos por 1 GB. Você compra gigabytes inteiros, a partir de um.

Pool

  • 2M+ IPs residenciais em mais de 200 países
  • Endereço novo a cada requisição ou um por sessão enquanto o dispositivo estiver disponível
  • E-mail da sua própria caixa: 465 e 587 para enviar, IMAP 993 e POP3 995 para receber, porta 25 fechada
  • Até 1000 linhas de uma vez, e a lista se renova sozinha a cada N minutos
Total
$19.75
Por 1 GB
$0.79
Faixa
10–49 GB

Você economiza 7% ($1.50) em relação ao preço de 1 GB+

Adicione 25 GB e cada gigabyte cai para $0.72

Comprar esta quantidade

Você pode usar os gigabytes por 3 meses a partir da compra; o que sobrar depois disso é baixado.

Sobre os residenciais

Três passos até a lista de palavras-chave monitorada

Escolha a região

Acompanhe o Google.de pela Europa, o Yandex pela CEI e o Baidu pela China. O World MIX cobre o resto e tem os maiores pools.

Exporte por país

Pegue a exportação CSV e fique com as linhas cuja coluna de país bate com o mercado acompanhado; o gerador pronto grava um arquivo ip:port por país.

Alimente a ferramenta

Rank checkers aceitam um arquivo de proxies ou uma URL. Defina a atualização a cada 10 minutos e a lista se mantém em dia sozinha.

Checker pronto: posição na SERP a partir do país escolhido

Defina DOMAIN e COUNTRY e coloque suas palavras-chave em keywords.txt. O script consulta o buscador por um proxy desse país e grava a posição do seu domínio num CSV. Use um pool limpo do verificador de proxies.

CSV export link from your dashboard
ISO 3166-1 alpha-2: positions are read from this country
keep proxies with speed >= this value
the domain whose position you track
one keyword per line
{q}=keyword, {cc}=country
keyword;position;proxy is written here
Os valores vêm do formulário; copie ou baixe o arquivo pronto.
Mostrar o código do script
Python 3.8+ · rank.py
#!/usr/bin/env python3
"""Search-position checker for Advanced.name proxies.

Reads the CSV proxy export, keeps one country, then asks a search engine for each
keyword through a proxy from that country and reports where your domain sits in
the results. Standard library only. Edit CONFIG and run: python3 rank.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # ISO 3166-1 alpha-2: positions are read from this country
MIN_SPEED = 3           # keep proxies with speed >= this value
DOMAIN = "example.com"  # the domain whose position you track
KEYWORDS_FILE = "keywords.txt"           # one keyword per line
SEARCH_URL = "https://www.bing.com/search?q={q}&count=50&setlang={cc}"  # {q}=keyword, {cc}=country
OUT_FILE = "positions.csv"               # keyword;position;proxy is written here
TIMEOUT = 20
# ============================================================================

import csv
import io
import re
import sys
import urllib.parse
import urllib.request

COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36"
HREF = re.compile(r'href="https?://([^/"]+)', re.I)


def load_proxies():
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
            continue
        if int(row[COL_SPEED] or 0) < MIN_SPEED:
            continue
        pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
    return pool


def position(html, domain):
    """First place the domain shows up among the result links, or 0 if absent."""
    rank, seen = 0, set()
    for host in HREF.findall(html):
        host = host.lower()
        if "bing.com" in host or "microsoft.com" in host or host in seen:
            continue
        seen.add(host)
        rank += 1
        if host == domain or host.endswith("." + domain):
            return rank
    return 0


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
    with open(KEYWORDS_FILE, encoding="utf-8") as fh:
        keywords = [line.strip() for line in fh if line.strip()]
    print("proxies: %d (%s), keywords: %d" % (len(proxies), COUNTRY, len(keywords)))

    with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
        writer = csv.writer(out, delimiter=";")
        writer.writerow(["keyword", "position", "proxy"])
        for i, keyword in enumerate(keywords):
            proxy = proxies[i % len(proxies)]
            url = SEARCH_URL.format(q=urllib.parse.quote(keyword), cc=COUNTRY.lower())
            handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
            req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Language": COUNTRY.lower()})
            try:
                html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
                pos = position(html, DOMAIN.lower())
            except Exception as exc:
                pos = "err: %s" % exc.__class__.__name__
            writer.writerow([keyword, pos, proxy])
            print("%-40s %s" % (keyword[:40], pos))
    print("written %s" % OUT_FILE)


if __name__ == "__main__":
    main()

Script: há bloco de IA e ele cita o seu domínio?

Cole uma linha Resi do seu painel, defina DOMAIN e coloque as palavras-chave em keywords.txt. O script abre os resultados num Chromium de verdade pelo proxy, espera o bloco de IA terminar de carregar e grava no CSV se o bloco aparece, quais domínios ele cita e se o seu está entre eles. Ele fecha sozinho o banner de cookies da UE e marca captcha ou erro de proxy numa linha separada. O Google muda o markup, então o título do bloco fica em LABELS.

host:port:login:password line from your dashboard
the domain you want to see among the cited sources
one keyword per line
{q}=keyword
interface language of the results page
country of the results, keep it equal to the country in the login
heading text of the AI block, separated by |
cookie banner buttons in EU countries, in the HL language
keyword;ai_block;cited;your_domain is written here
time for the AI block to finish drawing
set False to watch the browser
Os valores vêm do formulário; copie ou baixe o arquivo pronto.
Mostrar o código do script
Python 3.8+ · ai_overview.py
#!/usr/bin/env python3
"""AI Overview tracker for Advanced.name residential proxies.

Opens Google results for every keyword through a Resi Core or Resi Prime line
in a real Chromium, because the AI block is drawn by JavaScript. Records
whether the page shows the AI block and which domains it cites.
Setup: pip install playwright && python -m playwright install chromium
"""

# ================================ CONFIG ====================================
PROXY = "res.advanced.name:9000:USER-type-residential-country-us:PASS"  # host:port:login:password line from your dashboard
DOMAIN = "example.com"  # the domain you want to see among the cited sources
KEYWORDS_FILE = "keywords.txt"  # one keyword per line
SEARCH_URL = "https://www.google.com/search?q={q}&hl={hl}&gl={gl}"  # {q}=keyword
HL = "en"  # interface language of the results page
GL = "us"  # country of the results, keep it equal to the country in the login
LABELS = "AI Overview|AI Mode"  # heading text of the AI block, separated by |
CONSENT = "Reject all|Accept all"  # cookie banner buttons in EU countries, in the HL language
OUT_FILE = "ai_overview.csv"  # keyword;ai_block;cited;your_domain is written here
WAIT_MS = 4000  # time for the AI block to finish drawing
HEADLESS = True  # set False to watch the browser
# ============================================================================

import csv
import sys
import urllib.parse

from playwright.sync_api import sync_playwright

FIND_BLOCK = """(labels) => {
  const heads = [...document.querySelectorAll('h1,h2,h3,div,span')]
    .filter(e => e.children.length === 0 && labels.includes(e.textContent.trim()));
  if (!heads.length) return null;
  let box = heads[0];
  for (let i = 0; i < 8 && box.parentElement; i++) {
    box = box.parentElement;
    const links = [...box.querySelectorAll('a[href^="http"]')];
    if (links.length >= 2 && box.innerText.length > 200) return links.map(a => new URL(a.href).hostname);
  }
  return [];
}"""


def proxy_of(line):
    host, port, user, password = line.strip().split(":", 3)
    return {"server": "http://%s:%s" % (host, port), "username": user, "password": password}


def bare(host):
    host = host.lower()
    return host[4:] if host.startswith("www.") else host


def main():
    keywords = [k.strip() for k in open(KEYWORDS_FILE, encoding="utf-8") if k.strip()]
    labels = [x.strip() for x in LABELS.split("|") if x.strip()]
    consent = [x.strip() for x in CONSENT.split("|") if x.strip()]
    rows = []
    with sync_playwright() as pw:
        browser = pw.chromium.launch(headless=HEADLESS, proxy=proxy_of(PROXY))
        page = browser.new_page(locale=HL)
        for kw in keywords:
            url = SEARCH_URL.format(q=urllib.parse.quote_plus(kw), hl=HL, gl=GL)
            try:
                resp = page.goto(url, wait_until="domcontentloaded", timeout=60000)
                if resp is None or resp.status >= 400:
                    status = "http %s" % (resp.status if resp else "none")
                    print("%-40s %s" % (kw[:40], status), file=sys.stderr)
                    rows.append([kw, status, "", ""])
                    continue
                for name in consent:
                    button = page.get_by_role("button", name=name)
                    if button.count():
                        button.first.click()
                        page.wait_for_load_state("domcontentloaded")
                        break
                if "/sorry/" in page.url:
                    print("%-40s captcha: change the session id in the login" % kw[:40], file=sys.stderr)
                    rows.append([kw, "captcha", "", ""])
                    continue
                page.wait_for_timeout(WAIT_MS)
                hosts = page.evaluate(FIND_BLOCK, labels)
            except Exception as exc:
                print("%-40s error: %s" % (kw[:40], str(exc).splitlines()[0]), file=sys.stderr)
                rows.append([kw, "error", "", ""])
                continue
            if hosts is None:
                print("%-40s no AI block" % kw[:40])
                rows.append([kw, "no", "", ""])
                continue
            cited = sorted({bare(h) for h in hosts if "google." not in h})
            mine = any(h == DOMAIN or h.endswith("." + DOMAIN) for h in cited)
            print("%-40s AI block, %d sources, %s %s" % (kw[:40], len(cited), DOMAIN, "cited" if mine else "not cited"))
            rows.append([kw, "yes", " ".join(cited), "yes" if mine else "no"])
        browser.close()
    with open(OUT_FILE, "w", encoding="utf-8", newline="") as f:
        out = csv.writer(f, delimiter=";")
        out.writerow(["keyword", "ai_block", "cited", "your_domain"])
        out.writerows(rows)
    print("saved", OUT_FILE)


if __name__ == "__main__":
    main()
Configuração

Como configurar um rank tracker

A-Parser, Key Collector, Rank Tracker

No A-Parser e no Key Collector, cole a lista ip:port no campo de proxies e defina o intervalo de checagem para que uma palavra-chave passe por um endereço no máximo uma vez por dia. O Rank Tracker e programas parecidos leem um arquivo de proxies; aponte para a lista que o gerador grava por país.

As posições dependem de onde vem a consulta, então mantenha uma lista por mercado: uma instância do tracker por país, cada uma só com endereços daquele país.

Lendo posições no seu próprio código

O script acima consulta o buscador por um proxy do país e registra a colocação do seu domínio. Envie os parâmetros de idioma e região do buscador junto com o proxy: o endereço define o país e os parâmetros, a cidade.

Confira o pool antes de cada rodada no verificador de proxies; para um teste manual leve, a lista de proxies grátis serve. Uma introdução às SERPs regionais vai ficar nos artigos.

Respostas de IA do Google: AI Overviews e AI Mode

Cada vez mais o Google coloca um bloco de IA acima dos resultados comuns: uma resposta curta com links para fontes. Parte dos cliques vai para lá, então você precisa saber se o seu site entrou nas fontes e quais consultas não mostram o bloco. O bloco é montado pela localização do usuário: para uma mesma consulta, Berlim e Munique podem ver fontes diferentes.

Um scraper de resultados comum nunca vê esse bloco: o Google o desenha com JavaScript depois que a página carrega. Você precisa de um navegador de verdade, como o Chromium com Playwright, e de um IP residencial do país certo. Endereços de lista costumam cair em captcha nesses resultados, por isso aqui quem trabalha são o Resi Core e o Resi Prime.

Para acompanhar por país basta o Resi Core com o código do país no login. Quando o cliente se importa com uma cidade, escolha o Resi Prime com a cidade na string e uma sessão fixa por lote de consultas: assim o lote inteiro sai de um endereço daquela cidade.

O que registrar e com que frequência

Rode a lista de palavras-chave uma vez por dia ou uma vez por semana: o bloco de IA muda mais devagar que as posições comuns. Para cada consulta anote a data, o país ou a cidade, se o bloco aparece, quais domínios ele cita e se o seu está entre eles. Depois de um mês dá para ver quais páginas a IA usa na resposta e quais saíram.

O segundo script acima grava exatamente esses campos em CSV. O primeiro script acompanha as posições comuns no mesmo país, então os dois relatórios batem por consulta.

Na prática

As posições como aparecem em cada país

Quatro ajustes que deixam os dados de posição confiáveis

  1. Consulte uma palavra-chave a partir de um IP no máximo uma vez por dia; o pool é grande o bastante para espalhar a carga.
  2. Mantenha as listas de IPs separadas por país: endereços misturados misturam os resultados.
  3. Acrescente os parâmetros de idioma e localização do buscador; o proxy define o país e os parâmetros definem a cidade.
  4. Use a página de proxies grátis para um teste rápido, depois passe para o Resi Core ou para um pacote no acompanhamento diário.

Esta tarefa por país

Ver todos os países
FAQ

Perguntas sobre esta tarefa

Que região usar para o Google?
O Google mostra resultados pelo país de quem busca. No Resi Core coloque o código do país no login, e cada requisição sai de um IP residencial desse país. Nos pacotes filtre o CSV exportado pela coluna de país: Europa para a UE, World MIX para os EUA e o resto do mundo, CEI para mercados de língua russa.
Como acompanho as respostas de IA do Google?
Pelo Resi Core ou pelo Resi Prime e um navegador de verdade: o JavaScript desenha o bloco de IA, então uma requisição HTTP simples nunca o vê. O script desta página abre os resultados no Chromium e registra se o bloco aparece e se cita o seu domínio. Para cidades diferentes, escolha o Resi Prime.
Quantas palavras-chave por dia?
O Resi Core não tem limite de threads, então o teto é o tráfego que você compra. Com 1000 threads no pacote #2 um checker processa dezenas de milhares de consultas por dia; mantenha um IP por palavra-chave por dia.
Preciso de login e senha?
Nos pacotes, não: o acesso fica vinculado ao IP da máquina que roda o checker. O Resi Core usa o login e a senha da string e não precisa de lista branca.
Como acompanho os resultados de uma cidade específica?
Os parâmetros de localização do buscador definem a cidade com qualquer proxy. Quando os resultados dependem do IP, escolha o Resi Prime: você define a cidade na string de conexão.
Planos para esta tarefa

O que escolher para acompanhar posições

Acompanhe os resultados por país pelo Resi Core e por cidade pelo Resi Prime, e rode listas grandes de palavras-chave todo dia num pacote ilimitado por menos.

Resi Core

Resultados por paísMelhor escolha

2M+ IPs · mais de 200 países · sem limite de threads

Um IP residencial do país certo a cada requisição. Uma página de resultados pesa pouco, então um gigabyte cobre milhares de consultas.

a partir de $0.49 por GB1 GB por $0.85

Resi Prime

Resultados por cidade

30M+ IPs · 220 países · sem limite de threads

Cidade e região na string de conexão dão os resultados que um usuário daquela cidade vê.

a partir de $1.39 por GB1 GB por $2.29

Proxies ilimitados

Listas grandes de palavras-chave

Pacote #2 · World MIX · 12.000 IP · 1000 threads

Dezenas de milhares de consultas por dia sem medidor de tráfego. O país do mercado você escolhe pela coluna do CSV exportado.

$378 por mêsou $2.10 por hora

Veja posições reais amanhã de manhã

Pegue 1 GB de Resi Core, defina o país na string e rode o checker em endereços vivos.

Preços Testar uma hora grátis