Como Raspar Pins e Boards do Pinterest em 2026: Guia para Desenvolvedores

Guia técnico para raspar pins, boards e resultados de busca públicos do Pinterest em 2026, com exemplos em Python e Node.js usando proxies residenciais rotativos.

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

Aviso legal: Este guia trata apenas de acesso a dados públicos no Pinterest. Antes de raspar qualquer plataforma, leia e respeite os Termos de Serviço dela. Nos EUA, o Computer Fraud and Abuse Act (CFAA) pode aplicar-se a acessos não autorizados; na UE, o GDPR rege o tratamento de dados pessoais. Consulte fontes oficiais como a FTC e a Comissão Europeia. Quando existir uma API oficial adequada ao seu caso de uso, prefira-a.

Desenvolvedores que constroem datasets de conteúdo visual e tendências frequentemente precisam coletar pins e boards do Pinterest em escala. Neste artigo explicamos como raspar Pinterest em 2026 — focando em superfícies públicas, na Resource API interna da plataforma, armadilhas anti-bot e estratégias de proxy residencial com geo-targeting. Se você quer um Pinterest scraper robusto e production-ready, este guia cobre o caminho completo.

O que você pode e não pode raspar do Pinterest

O Pinterest expõe diferentes superfícies com níveis distintos de acessibilidade:

  • Pins públicos — qualquer pin em board público é acessível via URL pinterest.com/pin/{id}/ sem login. Contém título, descrição, imagem, link de destino e metadados do board.
  • Feeds de boards públicos — a lista de pins de um board público pode ser paginada via Resource API interna.
  • Resultados de busca — buscas públicas retornam pins, boards e anúncios relevantes sem login, mas o conteúdo é localizado por país.
  • Home feed personalizado — requer login e é gerado por algoritmo de recomendação. Não é superfície pública.
  • Perfis e boards privados — login-walled; raspar esses dados viola ToS e potencialmente o GDPR.

Para produção, a Pinterest API v5 oficial oferece endpoints para pins, boards e métricas de contas autenticadas, com rate limits documentados. É a escolha correta quando você precisa de dados da sua própria conta ou de parceiros autorizados. Para datasets de tendências públicas em larga escala, a API v5 é limitada porque não expõe busca pública nem feeds de boards de terceiros.

Contexto técnico: a Resource API interna do Pinterest

O frontend do Pinterest é uma SPA que carrega dados via uma API interna chamada Resource API. Os endpoints seguem o padrão /resource/{NomeDoResource}/get/ e aceitam parâmetros via query string. Os principais recursos para scraping público são:

ResourceUsoPaginação
PinResourceDados de um pin único por IDSingle object
BoardFeedResourceLista de pins de um boardbookmark cursor
SearchResourceBusca pública por keywordbookmark cursor
BoardResourceMetadados de um boardSingle object

As chamadas usam dois parâmetros principais na URL:

  • source_url — a URL amigável que representa a página (ex.: /board/usuario/nome-do-board/).
  • data — um JSON URL-encoded contendo opções como board_id, page_size e bookmark.

Headers relevantes que o frontend envia e que melhoram a taxa de sucesso:

  • X-Pinterest-PWS-Handler — identificador do handler do lado do servidor.
  • X-APP-VERSION — versão do bundle do frontend; atualiza frequentemente.
  • csrftoken — token CSRF obtido do cookie inicial.
  • User-Agent — navegador real e atualizado.

Um exemplo de requisição para BoardFeedResource:

GET /resource/BoardFeedResource/get/?source_url=%2Fboard%2Fusuario%2Fboard%2F&data=%7B%22board_id%22%3A%22123456789%22%2C%22page_size%22%3A25%2C%22bookmarks%22%3A%5B%22YXJyYXko...%22%5D%7D HTTP/1.1
Host: www.pinterest.com
X-Pinterest-PWS-Handler: www/[username]/[board].js
X-APP-VERSION: 7e1c1c8
csrftoken: abc123def456

Realidade anti-bot: rate limits e bot scoring

O Pinterest aplica rate limits por IP e heurísticas de bot scoring. Sinais que elevam o risco de bloqueio incluem:

  • Muitas requisições do mesmo IP em janelas curtas — tipicamente centenas por minuto.
  • Ausência de cookies de sessão e tokens CSRF consistentes.
  • User-Agens desatualizados ou incompatíveis com headers aceitos.
  • Padrões de navegação não-humanos (sem requisições de assets CSS/JS).

Como busca e recomendações do Pinterest são localizadas por país, raspar de um IP fora do mercado-alvo pode retornar resultados enviesados. Por isso, proxies residenciais rotativos com geo-targeting são essenciais. Com ProxyHat, você força o país no username:

http://user-country-US:pass@gate.proxyhat.com:8080

Para manter a continuidade de csrftoken ao paginar, use sessões sticky com flag -session-:

http://user-country-US-session-pinterest-01:pass@gate.proxyhat.com:8080

Isso preserva o mesmo IP de saída durante a sessão, evitando trocas abruptas que invalidam cookies. Saiba mais sobre localizações disponíveis na página de locations.

Exemplo 1: Python com requests e ProxyHat

Este snippet pagina BoardFeedResource via HTTP gateway da ProxyHat, extraindo campos truncados de cada pin:

import requests
import json
from urllib.parse import quote

PROXY = "http://user-country-US-session-pin01:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Accept-Language": "en-US,en;q=0.9",
    "X-Pinterest-PWS-Handler": "www/[username]/[board].js",
    "X-APP-VERSION": "7e1c1c8",
    "X-Requested-With": "XMLHttpRequest",
}

board_slug = "username/board-name"
board_id = "123456789"
source_url = f"/board/{board_slug}/"

def fetch_page(bookmark=None):
    data = {
        "board_id": board_id,
        "page_size": 25,
        "bookmarks": [bookmark] if bookmark else [],
    }
    params = {
        "source_url": source_url,
        "data": json.dumps(data, separators=(",", ":")),
    }
    url = "https://www.pinterest.com/resource/BoardFeedResource/get/"
    r = requests.get(url, headers=headers, params=params, proxies=proxies, timeout=30)
    r.raise_for_status()
    payload = r.json()
    return payload.get("resource_response", {}).get("data", []), payload.get("resource_response", {}).get("bookmark")

all_pins = []
bookmark = None
for page in range(5):
    pins, bookmark = fetch_page(bookmark)
    for pin in pins:
        image = pin.get("images", {}).get("orig", {})
        all_pins.append({
            "id": pin.get("id"),
            "title": pin.get("title") or pin.get("grid_title"),
            "image_url": image.get("url"),
            "link": pin.get("link"),
        })
    if not bookmark:
        break

print(json.dumps(all_pins[:3], indent=2))

Resultado truncado esperado:

[
  {
    "id": "9876543210",
    "title": "Minimalist living room ideas",
    "image_url": "https://i.pinimg.com/originals/aa/bb/cc/...jpg",
    "link": "https://example.com/blog/minimalist-living-room"
  }
]

Para casos de uso de web scraping em escala, veja nossa página de use cases.

Exemplo 2: Node.js com axios via HTTP gateway

const axios = require("axios");

const PROXY = "http://user-country-US-session-pin02:PASSWORD@gate.proxyhat.com:8080";
const headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
              + "(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "Accept": "application/json, text/javascript, */*; q=0.01",
  "X-Pinterest-PWS-Handler": "www/[username]/[board].js",
  "X-APP-VERSION": "7e1c1c8",
  "X-Requested-With": "XMLHttpRequest",
};

async function fetchBoardFeed(boardId, bookmark) {
  const data = JSON.stringify({
    board_id: boardId,
    page_size: 25,
    bookmarks: bookmark ? [bookmark] : [],
  });
  const params = new URLSearchParams({
    source_url: "/board/username/board-name/",
    data,
  });
  const res = await axios.get(
    "https://www.pinterest.com/resource/BoardFeedResource/get/",
    { headers, params, proxy: { host: "gate.proxyhat.com", port: 8080, auth: { username: "user-country-US-session-pin02", password: "PASSWORD" } }, timeout: 30000 }
  );
  return res.data.resource_response;
}

(async () => {
  let bookmark = null;
  for (let i = 0; i < 5; i++) {
    const resp = await fetchBoardFeed("123456789", bookmark);
    for (const pin of resp.data || []) {
      const img = (pin.images && pin.images.orig) || {};
      console.log({
        id: pin.id,
        title: pin.title || pin.grid_title,
        image_url: img.url,
        link: pin.link,
      });
    }
    bookmark = resp.bookmark;
    if (!bookmark) break;
  }
})();

Paginação por bookmark, pacing e higiene de fingerprint

A Resource API do Pinterest usa cursor bookmark em vez de offset. Cada resposta inclui um novo bookmark que deve ser enviado na próxima requisição. Boas práticas:

  • Sticky session por board — mantenha o mesmo IP durante toda a paginação de um board para preservar csrftoken e cookies.
  • Pacing — espere 1–3 segundos entre páginas; 25 pins por página é o tamanho padrão.
  • User-Agent consistente — use um UA moderno e mantenha-o durante toda a sessão.
  • Headers aceitos — inclua Accept-Language compatível com o geo do proxy.
  • Rotatividade entre boards — troque de sessão (e portanto de IP) ao mudar de board.

Dica: se você raspar mais de ~200 requisições por minuto de um único IP, o bot scoring do Pinterest dispara. Distribua o trabalho entre sessões residenciais rotativas.

Comparação: API oficial vs scraping público

AspectoPinterest API v5Scraping público com proxies
AutenticaçãoOAuth 2.0Cookie/CSRF
Busca públicaNão suportadaSim, via SearchResource
Feeds de boards de terceirosNãoSim, via BoardFeedResource
Rate limitDocumentado (~1.000 req/min por app)Imposto por IP, não documentado
EstabilidadeAltaMédia — quebra com mudanças internas
CustoGratuito até limitesCusto de proxies

Scraping ético e quando usar a API oficial

Raspar Pinterest deve limitar-se a dados públicos e não-pessoais: metadados de pins, imagens e links de destino. Evite coletar dados de perfis, contagens de seguidores ou qualquer campo que identifique pessoas físicas — isso pode configurar tratamento de dados pessoais sob o GDPR. Respeite o robots.txt e os Termos de Serviço do Pinterest.

Para produção estável, considere a API v5 oficial sempre que ela cobrir seu caso de uso. Scraping faz sentido quando você precisa de cobertura que a API não oferece — busca pública e feeds de boards de terceiros — e está disposto a manter o scraper contra mudanças internas.

Consulte sempre a documentação da ProxyHat para detalhes atualizados de configuração de proxies e limites de concorrência.

Principais pontos

  • Superfícies públicas — pins, boards e busca são acessíveis sem login; home feed e perfis privados exigem login.
  • Resource API — endpoints como BoardFeedResource e SearchResource retornam JSON com cursor bookmark.
  • Proxies residenciais com geo — essenciais porque busca e recomendações são localizadas por país.
  • Sticky session — preserva csrftoken durante paginação; troque de sessão ao mudar de board.
  • Pacing e UA — 1–3s entre páginas, UA moderno e consistente reduzem bot scoring.
  • Ética — apenas dados públicos e não-pessoais; prefira API v5 quando possível.

Pronto para escalar? Veja planos da ProxyHat e comece a raspar com proxies residenciais rotativos.

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