Como Raspar Pins e Boards do Pinterest em 2026

Guia técnico para desenvolvedores sobre como raspar pins, boards e resultados de busca do Pinterest usando a Resource API interna, proxies residenciais rotativos e boas práticas de paginação e ética.

How to Scrape Pinterest Pins and Boards in 2026: A Developer's Guide
Neste artigo

Aviso legal: Este artigo aborda apenas o acesso a dados públicos do Pinterest. Antes de qualquer coleta, verifique os Termos de Serviço do Pinterest e leis aplicáveis como o CFAA (EUA) e o GDPR (UE). Raspar dados pessoais ou contornar autenticação pode violar essas leis. Se existir uma API oficial que atenda às suas necessidades, use-a.

Se você está montando um dataset de tendências visuais, monitorando produtos ou analisando padrões de consumo, o Pinterest é uma mineração de ouro com mais de 5 bilhões de pins indexados. Mas raspar Pinterest em escala não é trivial — a plataforma emprega anti-bot agressivo, rate limits por IP e conteúdo localizado. Neste guia, vamos mostrar como raspar pins e boards do Pinterest em 2026 usando a Resource API interna, proxies residenciais rotativos e estratégias de sessão que mantêm sua coleta estável.

O que você precisa saber antes de raspar Pinterest

Para raspar Pinterest com eficiência, é essencial entender a arquitetura de superfícies públicas versus login-walled e como a plataforma entrega dados. O Pinterest é uma SPA (single-page application) que carrega conteúdo via chamadas XHR a endpoints internos — não há HTML server-rendered com pins embutidos. Toda a renderização acontece no cliente, o que significa que um requests.get() simples na URL de um board retorna apenas um shell HTML vazio.

As superfícies acessíveis sem login incluem:

  • Pins públicos: cada pin tem uma URL canônica em /pin/{id}/ com metadados visíveis (título, descrição, imagem, link de origem).
  • Boards públicos: feeds de pins em /{username}/{board_slug}/, paginados via cursor.
  • Resultados de busca: /search/pins/?q={query} retorna pins públicos correspondentes ao termo.

As superfícies login-walled incluem o home feed personalizado, recomendações e boards secretos. Tentar acessar essas áreas sem autenticação não apenas falha — pode sinalizar comportamento suspeito para os sistemas anti-bot do Pinterest.

O Pinterest oferece uma API oficial v5 com endpoints para boards, pins e métricas. No entanto, ela tem limitações significativas para casos de uso de coleta em escala: rate limits restritivos (aproximadamente 1.000 requests/dia no tier gratuito), necessidade de OAuth com app aprovado e ausência de endpoints de busca pública. Para datasets de tendências em larga escala, a API oficial raramente é suficiente sozinha.

A Resource API interna do Pinterest

Quando você abre um board no navegador, o Pinterest faz chamadas a endpoints internos sob /resource/. Esses endpoints retornam JSON estruturado e são a forma mais eficiente de raspar dados públicos. Os principais recursos incluem:

EndpointFunçãoParâmetros principais
/resource/PinResource/get/Dados de um pin específicoid do pin
/resource/BoardFeedResource/get/Feed de pins de um boardboard_id, page_size, bookmark
/resource/SearchResource/get/Busca de pins por termoquery, bookmark
/resource/BoardResource/get/Metadados de um boardboard_id ou slug

Cada chamada usa dois parâmetros de query críticos:

  • source_url= — a URL canônica da página que simula a navegação (ex.: /board/username/board-name/).
  • data= — um JSON URL-encoded contendo options (parâmetros do recurso) e context.

Os headers obrigatórios para que a Resource API responda corretamente incluem:

  • X-Pinterest-PWS-Handler — identifica o handler do frontend (ex.: board/[username]/[board_id]).
  • X-APP-VERSION — versão do build do frontend; muda periodicamente. Inspecione via DevTools para obter o valor atual.
  • csrftoken — token CSRF extraído de cookies; necessário para sessões consistentes.

Um exemplo de URL completa seria:

https://www.pinterest.com/resource/BoardFeedResource/get/?source_url=%2Fboard%2Fusername%2Fboard-name%2F&data=%7B%22options%22%3A%7B%22board_id%22%3A%221234567890%22%2C%22page_size%22%3A25%2C%22bookmark%22%3Anull%7D%2C%22context%22%3A%7B%7D%7D

Por que você precisa de proxies residenciais rotativos

O Pinterest aplica rate limits agressivos por IP e usa sistemas de bot scoring que analisam padrões de requisição. Em testes práticos, um único IP datacenter consegue aproximadamente 50–100 requests antes de receber um 429 Too Many Requests ou ser redirecionado para uma página de verificação. Proxies datacenter são rapidamente flagados porque ranges de IPs de provedores cloud (AWS, DigitalOcean, Hetzner) são bem conhecidos pelos sistemas anti-bot.

Proxies residenciais, por outro lado, usam IPs de ISPs reais, tornando o tráfego indistinguível de um usuário comum. Isso é crítico para o Pinterest por um motivo adicional: busca e recomendações são localizadas. Um pin de moda em country-US pode não aparecer em country-DE. Se seu dataset precisa de cobertura global ou consistência regional, você precisa controlar o geo do IP.

Comparação rápida de tipos de proxy para raspar Pinterest:

Tipo de proxyDetecçãoRate limit práticoGeo-targetingCusto relativo
DatacenterAlta~50 req/IPLimitadoBaixo
Residencial rotativoBaixa~500–1000 req/IPPaís + cidadeMédio
MobileMuito baixa~2000+ req/IPPaísAlto

Para a maioria dos casos de uso de scraping do Pinterest, proxies residenciais rotativos com geo-targeting oferecem o melhor equilíbrio entre custo e confiabilidade. Veja as localizações disponíveis no ProxyHat para cobrir as regiões que você precisa.

Exemplo prático em Python: paginando BoardFeedResource

Vamos a um exemplo completo em Python usando a biblioteca requests com o gateway HTTP do ProxyHat. O código pagina um board público, extrai dados truncados de cada pin e mantém uma sessão sticky para continuidade do csrftoken.

import requests
import json
from urllib.parse import quote

# ProxyHat residential proxy: US geo + sticky session for csrftoken continuity
proxy_url = "http://user-country-US-session-pinterest1:pass@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

session = requests.Session()
session.proxies = proxies

# First, visit the board page to get cookies (csrftoken)
board_page_url = "https://www.pinterest.com/username/board-name/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml",
}
resp = session.get(board_page_url, headers=headers)
csrf_token = session.cookies.get("csrftoken", "")

# Now call the Resource API
api_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "X-Pinterest-PWS-Handler": "board/[username]/[board_id]",
    "X-APP-VERSION": "c8f0e8f",  # inspect via DevTools for current value
    "X-CSRFToken": csrf_token,
    "Accept": "application/json",
}

board_id = "1234567890"
bookmark = None
all_pins = []

for page in range(10):
    options = {
        "board_id": board_id,
        "page_size": 25,
        "bookmark": bookmark,
    }
    data = json.dumps({"options": options, "context": {}})
    
    params = {
        "source_url": "/username/board-name/",
        "data": data,
    }
    
    resp = session.get(
        "https://www.pinterest.com/resource/BoardFeedResource/get/",
        headers=api_headers,
        params=params,
    )
    
    if resp.status_code == 429:
        print(f"Rate limited on page {page}. Backing off...")
        break
    
    result = resp.json()
    resource_resp = result.get("resource_response", {})
    pins = resource_resp.get("data", [])
    
    for pin in pins:
        all_pins.append({
            "id": pin.get("id"),
            "title": pin.get("title", ""),
            "image_url": pin.get("images", {}).get("orig", {}).get("url", ""),
            "link": pin.get("link", ""),
        })
    
    bookmark = resource_resp.get("bookmark")
    if not bookmark:
        print("No more pages.")
        break
    
    # Pacing: wait 1-2 seconds between requests
    import time
    time.sleep(1.5)

print(f"Collected {len(all_pins)} pins")
for pin in all_pins[:5]:
    print(json.dumps(pin, indent=2))

Note o uso de session-pinterest1 no username do proxy. Isso cria uma sessão sticky que mantém o mesmo IP residencial por toda a duração da coleta, preservando cookies e csrftoken. Sem essa consistência, o Pinterest pode invalidar a sessão a cada rotação de IP.

Exemplo em Node.js: HTTP gateway na porta 8080

Para quem usa Node.js, o mesmo padrão funciona com axios e o gateway HTTP do ProxyHat:

const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');

const proxyUrl = 'http://user-country-US-session-pinterest1:pass@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);

const headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  'X-Pinterest-PWS-Handler': 'board/[username]/[board_id]',
  'X-APP-VERSION': 'c8f0e8f',
  'Accept': 'application/json',
};

async function scrapeBoard(boardId, maxPages = 10) {
  const allPins = [];
  let bookmark = null;
  
  for (let page = 0; page < maxPages; page++) {
    const data = JSON.stringify({
      options: { board_id: boardId, page_size: 25, bookmark },
      context: {},
    });
    
    try {
      const response = await axios.get(
        'https://www.pinterest.com/resource/BoardFeedResource/get/',
        {
          params: { source_url: '/username/board-name/', data },
          headers,
          httpsAgent: agent,
        }
      );
      
      const pins = response.data.resource_response.data || [];
      pins.forEach(pin => {
        allPins.push({
          id: pin.id,
          title: pin.title || '',
          image_url: pin.images?.orig?.url || '',
          link: pin.link || '',
        });
      });
      
      bookmark = response.data.resource_response.bookmark;
      if (!bookmark) break;
      
      await new Promise(r => setTimeout(r, 1500)); // pacing
    } catch (err) {
      if (err.response?.status === 429) {
        console.log(`Rate limited on page ${page}`);
        break;
      }
      throw err;
    }
  }
  
  return allPins;
}

scrapeBoard('1234567890').then(pins => {
  console.log(`Collected ${pins.length} pins`);
  console.log(JSON.stringify(pins.slice(0, 3), null, 2));
});

Paginação por bookmark, sessões sticky e higiene de fingerprint

Bookmark/cursor pagination

O Pinterest usa paginação por cursor (bookmark) em vez de offset. Cada resposta inclui um campo bookmark na raiz de resource_response. Quando não há mais páginas, o bookmark é null ou uma string vazia. Nunca tente paginar com page=N — isso não funciona na Resource API.

Sessões sticky para continuidade de csrftoken

O csrftoken é vinculado ao IP e à sessão de cookies. Se você rotaciona IPs a cada requisição (per-request rotation), o token CSRF perde validade e você recebe 403 Forbidden. A solução é usar sticky sessions no ProxyHat, mantendo o mesmo IP por um período definido:

# Sticky session: same IP for the duration of a board scrape
http://user-country-US-session-board123:pass@gate.proxyhat.com:8080

# Rotate to a new IP for the next board
http://user-country-US-session-board456:pass@gate.proxyhat.com:8080

Use um identificador de sessão único por board ou lote de coleta. Quando terminar um board, troque o session ID para obter um novo IP.

Pacing e rate limiting

Mantenha um intervalo de 1–3 segundos entre requisições por sessão. Com proxies residenciais rotativos, você pode paralelizar múltiplas sessões — cada uma com seu próprio session ID e IP — mas mantenha o pacing dentro de cada sessão. Um padrão eficaz:

  • 10 sessões paralelas, cada uma com 1.5s de delay entre requests.
  • Isso resulta em aproximadamente 6–7 requests/segundo agregados.
  • Monitore a taxa de 429 e reduza a concorrência se passar de 5%.

User-Agent e higiene de fingerprint

O Pinterest cruza o User-Agent com o IP e cookies. Se o IP é dos EUA mas o User-Agent indica um locale diferente, isso aumenta o bot score. Use um User-Agent consistente e realista por sessão. Evite:

  • User-Agents de versões antigas de navegador (>2 anos).
  • Strings genéricas como python-requests/2.x.
  • Trocar de User-Agent no meio de uma sessão.

Outros headers que ajudam a reduzir fingerprint risk: Accept-Language coerente com o geo do proxy (ex.: en-US,en;q=0.9 para IPs dos EUA), Referer apontando para a página anterior e sec-fetch-dest/sec-fetch-mode preenchidos corretamente.

Erros comuns e edge cases

  • X-APP-VERSION desatualizado: o Pinterest atualiza o build do frontend frequentemente. Um valor antigo retorna 403 ou JSON vazio. Inspecione o header em DevTools a cada poucos dias.
  • Bookmark sem type-check: às vezes o bookmark vem como string vazia "" em vez de null. Trate ambos como fim da paginação.
  • Pins com rich metadata: pins de produtos têm campos adicionais em rich_metadata com preço, disponibilidade e categoria. Não os ignore se você está monitorando e-commerce.
  • Boards com sub-boards: algumas contas têm sub-boards que não aparecem no feed principal. Verifique BoardResource para mapear a hierarquia completa.
  • Search results localizados: o mesmo termo de busca retorna resultados diferentes por país. Se você precisa de resultados consistentes, fixe o geo do proxy.

Configuração no ProxyHat

Para começar a raspar Pinterest com o ProxyHat, você precisa de uma conta ativa. Veja os planos e preços para escolher o pacote de tráfego residencial adequado ao seu volume. A configuração é direta — todos os parâmetros de geo e sessão vão no username do proxy:

# HTTP (porta 8080)
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080

# SOCKS5 (porta 1080)
socks5://user-country-US-session-abc123:pass@gate.proxyhat.com:1080

# Geo por cidade
http://user-country-DE-city-berlin-session-def456:pass@gate.proxyhat.com:8080

Consulte a documentação oficial do ProxyHat para detalhes sobre parâmetros avançados, rotação automática e limites de concorrência. Para casos de uso de scraping em geral, veja nosso guia de web scraping com proxies e SERP tracking.

Scraping ético e quando usar a API oficial

Raspar Pinterest é legalmente aceitável quando limitado a dados públicos e não-pessoais: metadados de pins públicos, títulos de boards, imagens e links de origem. Dados pessoais (perfis de usuários, atividade, comentários) exigem cautela adicional sob GDPR e CCPA.

Práticas éticas que recomendamos:

  • Respeite o robots.txt do Pinterest — verifique quais paths são permitidos antes de coletar.
  • Use rate limits conservadores (1–3s entre requests por sessão).
  • Não republique conteúdo protegido por copyright sem permissão do criador original.
  • Considere a API oficial v5 do Pinterest para dados que ela cobre, especialmente se você está construindo um produto comercial.

A API oficial é a escolha certa quando: você precisa de dados autenticados (analytics de pins próprios), está construindo um app aprovado pelo Pinterest ou seu volume de coleta é baixo o suficiente para o rate limit gratuito. Para datasets de tendências em larga escala, a combinação de Resource API pública + proxies residenciais é a abordagem mais prática.

Key Takeaways

  • Use a Resource API interna (/resource/*/get/) para coletar pins, boards e buscas públicas — é mais eficiente que parsear HTML.
  • Headers obrigatórios: X-Pinterest-PWS-Handler, X-APP-VERSION e csrftoken são essenciais para respostas válidas.
  • Proxies residenciais rotativos com geo são necessários porque busca e recomendações são localizadas e rate limits são por IP.
  • Sessões sticky (-session- no username) mantêm continuidade de csrftoken e evitam 403.
  • Paginação por bookmark — nunca use offset; o cursor vem em resource_response.bookmark.
  • Pacing de 1–3s por sessão, com paralelismo controlado via múltiplas sessões com IPs diferentes.
  • Scraping ético: colete apenas dados públicos, respeite robots.txt e prefira a API oficial quando viável.

Perguntas frequentes

O que é raspar pins e boards do Pinterest?

É o processo de coletar dados públicos de pins (título, imagem, link, descrição) e boards do Pinterest usando a Resource API interna da plataforma. Isso permite montar datasets de tendências visuais, monitorar produtos e analisar padrões de consumo em escala, sem precisar de login para acessar superfícies públicas.

Por que raspar Pinterest importa para usuários de proxy?

O Pinterest aplica rate limits agressivos por IP e localiza resultados de busca por país. Sem proxies residenciais rotativos com geo-targeting, você rapidamente recebe 429s ou dados inconsistentes entre regiões. Proxies residenciais permitem manter IPs de ISPs reais, controlando a localização e distribuindo a carga.

Qual tipo de proxy funciona melhor para raspar Pinterest?

Proxies residenciais rotativos com geo-targeting (país/cidade) oferecem o melhor equilíbrio custo-benefício. Eles têm baixa detecção porque usam IPs de ISPs reais, suportam aproximadamente 500–1000 requests por IP antes de rate limiting e permitem fixar o país para resultados de busca consistentes. Proxies mobile são ainda mais confiáveis, mas com custo significativamente maior.

Como evitar bloqueios ao raspar Pinterest?

Use sessões sticky para manter continuidade de csrftoken, mantenha pacing de 1–3 segundos entre requisições por sessão, use User-Agents realistas coerentes com o geo do proxy, monitore a taxa de 429 e reduza concorrência se passar de 5%, e atualize o header X-APP-VERSION periodicamente inspecionando o Pinterest via DevTools.

Coletar dados públicos e não-pessoais do Pinterest é geralmente aceitável, mas você deve respeitar os Termos de Serviço da plataforma, o robots.txt e leis como CFAA (EUA) e GDPR (UE). Não acesse áreas login-walled sem permissão, não colete dados pessoais sem base legal e considere a API oficial para uso comercial.

Perguntas frequentes

O que é raspar pins e boards do Pinterest?

É o processo de coletar dados públicos de pins (título, imagem, link, descrição) e boards do Pinterest usando a Resource API interna da plataforma. Isso permite montar datasets de tendências visuais, monitorar produtos e analisar padrões de consumo em escala, sem precisar de login para acessar superfícies públicas.

Por que raspar Pinterest importa para usuários de proxy?

O Pinterest aplica rate limits agressivos por IP e localiza resultados de busca por país. Sem proxies residenciais rotativos com geo-targeting, você rapidamente recebe 429s ou dados inconsistentes entre regiões. Proxies residenciais permitem manter IPs de ISPs reais, controlando a localização e distribuindo a carga.

Qual tipo de proxy funciona melhor para raspar Pinterest?

Proxies residenciais rotativos com geo-targeting (país/cidade) oferecem o melhor equilíbrio custo-benefício. Eles têm baixa detecção porque usam IPs de ISPs reais, suportam aproximadamente 500–1000 requests por IP antes de rate limiting e permitem fixar o país para resultados de busca consistentes.

Como evitar bloqueios ao raspar Pinterest?

Use sessões sticky para manter continuidade de csrftoken, mantenha pacing de 1–3 segundos entre requisições por sessão, use User-Agents realistas coerentes com o geo do proxy, monitore a taxa de 429 e reduza concorrência se passar de 5%, e atualize o header X-APP-VERSION periodicamente.

É legal raspar dados do Pinterest?

Coletar dados públicos e não-pessoais do Pinterest é geralmente aceitável, mas você deve respeitar os Termos de Serviço da plataforma, o robots.txt e leis como CFAA (EUA) e GDPR (UE). Não acesse áreas login-walled sem permissão, não colete dados pessoais sem base legal e considere a API oficial para uso comercial.

Pronto para começar?

Acesse mais de 50M de IPs residenciais em mais de 148 países com filtragem por IA.

Ver preçosProxies residenciais
← Voltar ao Blog