Wichtiger Hinweis: Dieser Leitfaden behandelt ausschließlich den Zugriff auf öffentlich zugängliche Daten auf Pinterest. Bevor Sie Pinterest scrapen, müssen Sie die Nutzungsbedingungen von Pinterest sowie geltende Gesetze prüfen — darunter der Computer Fraud and Abuse Act (CFAA) in den USA und die Datenschutz-Grundverordnung (DSGVO/GDPR) in der EU. Das Sammeln personenbezogener Daten ohne Rechtsgrundlage oder das Umgehen technischer Zugriffsschranken kann rechtliche Konsequenzen haben. Für produktive Anwendungen sollten Sie stets die offizielle Pinterest-API bevorzugen.
Wenn Sie visuelle Trend-Datensätze, Produktdaten oder Content-Research-Pipelines aufbauen, ist Pinterest eine der ertragreichsten Quellen im Web. Über 5 Milliarden Pins und mehr als 500 Millionen monatlich aktive Nutzer bedeuten eine schier endlose Menge an strukturierten Bild-, Link- und Metadaten. Doch Pinterest Pins und Boards scrapen ist 2026 komplexer geworden: Die Plattform betreibt aktive Bot-Abwehr, lokalisiert Suchergebnisse nach IP-Geolokation und trennt scharf zwischen öffentlichen Oberflächen und login-geschützten Feeds. Dieser Leitfaden zeigt, wie Entwickler öffentliche Pin- und Board-Daten zuverlässig extrahieren — mit Residential Proxys, korrekter Paginierung und sauberen Request-Headern.
Warum Pinterest Pins und Boards scrapen 2026 Entwickler vor Herausforderungen stellt
Pinterest betreibt eine Single-Page-Applikation, die Daten über eine interne Resource API nachlädt. Es gibt keine klassischen HTML-Seiten mit strukturierten Pin-Listen, die sich mit einem einfachen HTTP-Request und XPath abgreifen lassen. Stattdessen liefert der Server JSON-Antworten, die durch Client-Side-Rendering in die Seite injiziert werden. Wer diese JSON-Endpunkte direkt anspricht, bekommt saubere, maschinenlesbare Daten — muss aber die korrekten Header, Tokens und Paginierungs-Cursor mitführen.
Dazu kommt eine aggressive Anti-Bot-Infrastruktur. Pinterest bewertet pro IP die Request-Frequenz, Header-Konsistenz und Verhaltensmuster. Bei Auffälligkeiten erscheinen CAPTCHAs, Soft-Blocks oder HTTP-403-Antworten. Da Suchergebnisse und Empfehlungen stark lokalisiert sind (ein Pin aus den USA sieht andere Related-Pins als derselbe Pin aus Deutschland), ist die IP-Geolokation ein integraler Bestandteil der Datenerfassung — nicht nur ein Mittel zur Blockvermeidung.
Öffentliche Oberflächen vs. login-geschützte Feeds
Nicht alle Pinterest-Daten sind gleich zugänglich. Für ein ethisch und technisch sauberes Scraping-Konzept müssen Sie diese Unterscheidung treffen:
- Öffentliche Pins: Jeder Pin mit einer öffentlichen URL (z. B.
https://www.pinterest.com/pin/123456789/) ist ohne Login abrufbar. Enthält Bild-URL, Titel, Beschreibung, Link und Board-Referenz. - Öffentliche Boards: Ein Board-Feed unter
/username/board-slug/ist öffentlich, solange das Board nicht auf „geheim“ gestellt ist. DerBoardFeedResource-Endpunkt liefert paginierte Pin-Listen. - Suchergebnisse: Die Suche unter
/search/pins/?q=keywordgibt öffentliche Pins zurück, die im Index sind — ebenfalls ohne Login. - Home Feed & Personalisierte Empfehlungen: Diese Feeds sind login-geschützt und stark personalisiert. Sie fallen nicht unter legitimes Public-Data-Scraping und werden in diesem Leitfaden nicht behandelt.
Die offizielle Pinterest API v5 — Grenzen und Einsatzbereich
Pinterest bietet eine offizielle REST-API (v5) für Entwickler. Sie eignet sich für produktive Integrationen, hat aber Einschränkungen, die für umfassendes Scraping relevant sind:
- Rate Limits: Standard-Accounts erhalten ca. 100 Requests pro Minute für Schreib-Operationen und höhere Limits für Lesezugriffe, je nach App-Typ.
- Datenumfang: Die API liefert Pin- und Board-Objekte, aber nicht alle Metadaten, die die Web-Oberfläche zeigt (z. B. detaillierte Related-Pin-Graphen oder volle Suchergebnis-Paginierung).
- Authentifizierung: OAuth 2.0 mit App-Review — geeignet für Produktions-Apps, weniger für explorative Datensammlung.
- Zugriffsvoraussetzungen: Einige Endpunkte erfordern verifizierte Websites oder Business-Accounts.
Für viele Use Cases — insbesondere breite Trend- und Content-Datensätze — greifen Entwickler daher auf die interne Resource API zurück. Wer jedoch eine stabile Produktions-App baut, sollte prüfen, ob die offizielle API den Bedarf deckt.
| Methode | Zugänglichkeit | Datentiefe | Rate Limits | Legalität/ToS |
|---|---|---|---|---|
| Offizielle API v5 | OAuth, App-Review | Strukturiert, begrenzt | Dokumentiert (~100/min) | Vollständig unterstützt |
| Interne Resource API | Öffentlich (ohne Login) | Voll (Pins, Boards, Suche) | Undokumentiert, IP-basiert | Grauzone — ToS prüfen |
| HTML-Scraping (SSR) | Öffentlich | Begrenzt, unzuverlässig | Sehr niedrig | Grauzone — ToS prüfen |
Die interne Pinterest Resource API verstehen
Wenn Sie im Browser auf Pinterest navigieren, sendet die SPA asynchron Anfragen an Endpunkte der Form /resource/<ResourceName>/get/. Diese Endpunkte akzeptieren einen source_url-Parameter (der angezeigten Seite) und einen data-Parameter mit URL-kodiertem JSON, das die eigentlichen Abfrageparameter enthält.
Wichtige Resource-Endpunkte
/resource/PinResource/get/— Lädt einen einzelnen Pin mit allen Metadaten: Bild-URLs, Titel, Beschreibung, Link, Board-Referenz, Rich-Pin-Daten./resource/BoardFeedResource/get/— Paginierter Feed aller Pins in einem öffentlichen Board. Der primäre Endpunkt für Board-Scraping./resource/SearchResource/get/— Suchergebnisse für ein Keyword. Liefert Pins, die zum Suchbegriff passen, mit Ranking-Signalen./resource/BaseSearchResource/get/— Neuere Variante der Suche mit erweiterten Filter- und Sortieroptionen.
Erforderliche Header
Die Resource API erwartet mehrere Header, die bei Fehlen oder Inkonsistenz einen Block auslösen können:
X-Pinterest-PWS-Handler— Identifiziert den serverseitigen Handler, z. B.www/[username]/[slug].js. Dieser Wert ändert sich je nach aufgerufener Seite.X-APP-VERSION— Die aktuelle App-Version, z. B.9a8b7c6. Veraltet sich schnell; prüfen Sie den aktuellen Wert in den Live-Headern.csrftoken— Ein CSRF-Token, das in einem Cookie gesetzt und im Header wiederholt wird. Für Paginierung über Sticky Sessions wichtig.User-Agent— Ein realer Browser-User-Agent. Inkonsistenz zwischen Header und Verhalten ist ein Bot-Signal.Accept/Accept-Language— Sollten zur Geo-Lokation der IP passen (z. B.de-DEfür eine deutsche IP).
Anti-Bot-Realität: Rate Limits und Bot-Scoring
Pinterest setzt ein mehrschichtiges Bot-Detection-System ein. Es kombiniert:
- Per-IP Rate Limits: Zu viele Requests von einer IP in kurzem Zeitraum führen zu HTTP 429 oder 403. Die genauen Schwellen sind undokumentiert, aber Erfahrungswerte zeigen, dass mehr als ca. 50–80 Requests pro Minute pro IP riskant sind.
- Bot-Scoring: Header-Konsistenz, TLS-Fingerprint (JA3), Verhaltensmuster und Timing werden ausgewertet. Ein Python-
requests-Client ohne Browser-Header hat ein hohes Bot-Score-Risiko. - Geolokalisierung: Suchergebnisse und Related-Pins variieren nach Land. Eine IP aus den USA liefert andere Ergebnisse als eine aus Deutschland — selbst für dasselbe Keyword.
- CAPTCHA-Walls: Bei wiederholten Verhaltensanomalien wird ein CAPTCHA eingeschaltet, das ohne Browser schwer zu lösen ist.
Deshalb sind rotierende Residential Proxys mit Geo-Targeting die Basis für jedes ernsthafte Pinterest-Scraping. Datacenter-IPs haben ein hohes Block-Risiko, weil sie in Bot-Blocklisten auftauchen. Mobile Proxys sind eine Alternative, aber für Pinterest reicht Residential in der Regel aus und ist kosteneffizienter.
ProxyHat einrichten: Residential Proxys mit Geo-Targeting
ProxyHat bietet Residential Proxys über ein HTTP/SOCKS5-Gateway. Die Authentifizierung erfolgt per Benutzername/Passwort, wobei Geo-Targeting und Session-Stickiness im Benutzernamen kodiert werden.
Verbindungsformate
# HTTP-Proxy mit US-Geo
http://user-country-US:pass@gate.proxyhat.com:8080
# HTTP-Proxy mit deutscher Geo (Stadt Berlin)
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080
# Sticky Session für csrftoken-Kontinuität
http://user-session-abc123-country-US:pass@gate.proxyhat.com:8080
# SOCKS5-Proxy
socks5://user-country-DE:pass@gate.proxyhat.com:1080
Die -session--Flag hält dieselbe Exit-IP für die Lebensdauer der Session. Das ist für Pinterest wichtig, weil der csrftoken an die IP gebunden sein kann — wenn die IP mitten in einer Paginierung wechselt, kann der Token invalidiert werden.
Weitere Details zu Standorten finden Sie auf der ProxyHat-Locations-Seite, und aktuelle Preise auf der Preisseite. Die vollständige Gateway-Dokumentation finden Sie unter docs.proxyhat.com.
Praktisches Beispiel 1: BoardFeedResource in Python paginieren
Das folgende Beispiel lädt alle Pins aus einem öffentlichen Board über die BoardFeedResource, paginiert mit Bookmark-Cursorn und routet jeden Request über den ProxyHat-Gateway mit US-Geo und Sticky Session.
import requests
import json
from urllib.parse import quote
# ProxyHat-Konfiguration
PROXY = "http://user-session-pint-001-country-US:pass@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}
# Pinterest-spezifische Header
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/131.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]/[slug].js",
"X-APP-VERSION": "9a8b7c6",
"X-Requested-With": "XMLHttpRequest",
}
board_slug = "username/board-slug"
source_url = f"/{board_slug}/"
# Erste Seite
data_param = json.dumps({
"options": {
"board_url": board_slug,
"current_url": source_url,
"page_size": 25,
},
"context": {}
})
all_pins = []
bookmark = None
page = 0
while True:
if bookmark:
data_obj = json.loads(data_param)
data_obj["options"]["bookmarks"] = [bookmark]
data_param = json.dumps(data_obj)
params = {
"source_url": source_url,
"data": data_param,
}
url = "https://www.pinterest.com/resource/BoardFeedResource/get/"
resp = requests.get(url, headers=headers, params=params, proxies=proxies, timeout=30)
if resp.status_code == 429:
print(f"Rate limited on page {page}, backing off...")
import time; time.sleep(60)
continue
if resp.status_code != 200:
print(f"HTTP {resp.status_code} on page {page}")
break
payload = resp.json()
pins = payload.get("resource_response", {}).get("data", [])
if not pins:
print("No more pins.")
break
for pin in pins:
# Truncated pin object — nur die Felder, die wir brauchen
all_pins.append({
"id": pin.get("id"),
"title": pin.get("title", ""),
"description": pin.get("description", ""),
"image_url": pin.get("images", {}).get("orig", {}).get("url", ""),
"link": pin.get("link", ""),
"board_id": pin.get("board", {}).get("id", ""),
})
bookmark = payload.get("resource_response", {}).get("bookmark")
page += 1
print(f"Page {page}: {len(pins)} pins (total: {len(all_pins)})")
if not bookmark or bookmark == "-end-":
break
# Pacing: 1–2 Sekunden zwischen Requests
import time; time.sleep(1.5)
print(f"Done. Total pins: {len(all_pins)}")
Das Beispiel zeigt das Kernmuster: source_url und data als Query-Parameter, Bookmark-basierte Paginierung, und Pacing von ca. 1,5 Sekunden pro Request. Die Sticky Session -session-pint-001- stellt sicher, dass der csrftoken gültig bleibt.
Praktisches Beispiel 2: PinResource in Node.js über den HTTP-Gateway
Für Node.js-Entwickler funktioniert derselbe Ansatz über axios mit dem ProxyHat-HTTP-Gateway auf Port 8080:
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent').HttpsProxyAgent;
const PROXY_URL = 'http://user-session-pin-node-country-DE:pass@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(PROXY_URL);
const headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 '
+ '(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8',
'X-Pinterest-PWS-Handler': 'www/pin/[id].js',
'X-APP-VERSION': '9a8b7c6',
'X-Requested-With': 'XMLHttpRequest',
};
async function fetchPin(pinId) {
const sourceUrl = `/pin/${pinId}/`;
const data = JSON.stringify({
options: { id: pinId, field_set_key: 'unauth_react_main_pin' },
context: {},
});
const url = 'https://www.pinterest.com/resource/PinResource/get/';
try {
const resp = await axios.get(url, {
httpsAgent: agent,
headers,
params: { source_url: sourceUrl, data },
timeout: 30000,
});
const pinData = resp.data.resource_response.data;
return {
id: pinData.id,
title: pinData.title || '',
description: pinData.description || '',
image_url: pinData.images?.orig?.url || '',
link: pinData.link || '',
board: pinData.board?.name || '',
};
} catch (err) {
console.error(`Error fetching pin ${pinId}: ${err.message}`);
return null;
}
}
// Beispielaufruf
(async () => {
const pin = await fetchPin('1234567890');
console.log(JSON.stringify(pin, null, 2));
})();
Hier verwenden wir die deutsche Geo -country-DE mit Accept-Language: de-DE — die IP und der Sprach-Header müssen konsistent sein, sonst steigt das Bot-Score-Risiko.
Bookmark-Paginierung, Sticky Sessions und Pacing
Bookmark-Cursor verstehen
Pinterest paginiert über sogenannte Bookmarks — kodierte Cursor-Strings, die den nächsten Seiten-Offset repräsentieren. Die Antwort jeder Resource-API-Seite enthält ein bookmark-Feld. Dieser Wert wird im nächsten Request im data-Parameter unter options.bookmarks übergeben. Wenn der Bookmark-Wert -end- ist, sind keine weiteren Seiten vorhanden.
Key Takeaway: Verlieren Sie den Bookmark-Cursor nicht — er ist nicht rekonstruierbar. Speichern Sie ihn in Ihrer Pipeline zwischen, damit Sie bei Unterbrechungen weitermachen können.
Sticky Sessions für csrftoken-Kontinuität
Der csrftoken wird beim ersten Request in einem Cookie gesetzt. Bei nachfolgenden Requests muss derselbe Token im Header gesendet werden. Wenn die Exit-IP wechselt, kann Pinterest den Token invalidieren. Mit der ProxyHat -session--Flag halten Sie dieselbe IP:
# Session-Token generieren
import uuid
session_id = f"pint-{uuid.uuid4().hex[:8]}"
proxy = f"http://user-session-{session_id}-country-US:pass@gate.proxyhat.com:8080"
Rotieren Sie die Session-ID periodisch (z. B. alle 50–100 Requests), um eine einzelne IP nicht zu überlasten.
Pacing und User-Agent-Hygiene
- Pacing: 1–2 Sekunden zwischen Requests pro Session. Bei 429-Antworten exponential backoff (30s, 60s, 120s).
- User-Agent: Verwenden Sie einen realen, aktuellen Browser-User-Agent. Ändern Sie ihn nicht pro Request — das ist verdächtig. Ein UA pro Session ist realistischer.
- Accept-Language: Muss zur Geo der IP passen. US-IP +
de-DEist ein Fingerprint-Risiko. - TLS-Fingerprint: Python
requestshat einen anderen TLS-Fingerprint als Chrome. Für hochvolumiges Scraping erwägen Siecurl_cffioder einen Headless-Browser wie Playwright.
Häufige Fehler und Edge Cases
- Veraltete
X-APP-VERSION: Pinterest rotiert die App-Version regelmäßig. Ein Wert von vor 3 Monaten kann Blocks auslösen. Aktualisieren Sie ihn wöchentlich, indem Sie die Header in den Live-DevTools prüfen. - Fehlender
X-Pinterest-PWS-Handler: Dieser Header identifiziert den serverseitigen Handler. Ein falscher oder fehlender Wert liefert leere Antworten oder 403. - Bookmark-Verlust bei Session-Wechsel: Wenn die IP mitten in einer Paginierung wechselt, kann der Bookmark invalidiert werden. Verwenden Sie Sticky Sessions für die gesamte Paginierung.
- Leere Antworten bei zu hohem Tempo: Manchmal liefert Pinterest HTTP 200 mit leeren
data-Arrays statt 429. Das ist ein Soft-Block-Signal — reduzieren Sie das Tempo. - Geheim-Boards: Boards, die auf „geheim“ gestellt sind, sind nicht öffentlich. Der
BoardFeedResource-Endpunkt liefert eine leere Antwort oder einen Fehler. Respektieren Sie dies — der Zugriff auf nicht-öffentliche Daten ist ein ToS-Verstoß. - Rate Limit bei parallelen Sessions: Selbst mit verschiedenen IPs kann Pinterest Verhaltensmuster erkennen, wenn alle Sessions identische Timing-Muster haben. Variieren Sie Pacing zufällig (z. B. 1–3 Sekunden statt fix 1,5s).
Ethisches Scraping: Wann Sie die offizielle API verwenden sollten
Scraping ist ein Werkzeug, kein Selbstzweck. Bevor Sie die interne Resource API verwenden, prüfen Sie:
- Ist die Datenquelle öffentlich? Wenn die Daten nur nach Login sichtbar sind, scrapen Sie sie nicht. Der Home Feed und personalisierte Empfehlungen sind Beispiele für login-geschützte Daten.
- Enthalten die Daten personenbezogene Informationen? Pin-Daten (Bild, Titel, Link) sind in der Regel nicht personenbezogen. Profil-Daten (Name, E-Mail, Standort) können personenbezogen sein und fallen unter DSGVO/GDPR.
- Respektieren Sie
robots.txt. Prüfen Sie https://www.pinterest.com/robots.txt vor dem Scraping. Auch wenn robots.txt nicht rechtlich bindend ist, ist sie ein starkes Signal für die Crawling-Präferenzen der Plattform. - Gibt es eine offizielle API? Für Produktions-Apps mit stabilen SLAs ist die Pinterest API v5 die richtige Wahl. Sie bietet dokumentierte Rate Limits, OAuth-Sicherheit und Support.
- Wie hoch ist das Datenvolumen? Für kleine, einmalige Datensätze kann die Resource API ausreichen. Für kontinuierliche, hochvolumige Pipelines ist die offizielle API nachhaltiger.
Die Faustregel: Scrapen Sie nur öffentliche, nicht-personenbezogene Daten, respektieren Sie Rate Limits und robots.txt, und bevorzugen Sie offizielle APIs für Produktionssysteme. Weitere Best Practices für Web-Scraping finden Sie in unserem Web-Scraping-Use-Case und im SERP-Tracking-Use-Case.
Key Takeaways
- Pinterests interne Resource API liefert strukturierte JSON-Daten über Endpunkte wie
PinResource,BoardFeedResourceundSearchResource— aber nur für öffentliche Daten. - Erforderliche Header (
X-Pinterest-PWS-Handler,X-APP-VERSION,csrftoken) müssen konsistent sein und sich nicht widersprechen. - Rotierende Residential Proxys mit Geo-Targeting sind Pflicht — Datacenter-IPs haben ein hohes Block-Risiko, und Suchergebnisse sind lokalisiert.
- Sticky Sessions über die
-session--Flag halten dencsrftokenwährend der Paginierung gültig. - Pacing (1–2 Sekunden pro Request), User-Agent-Hygiene und Accept-Language-Konsistenz reduzieren das Bot-Score-Risiko.
- Für Produktionssysteme ist die offizielle Pinterest API v5 die nachhaltigere Wahl.
FAQ
Was bedeutet „Pinterest Pins und Boards scrapen 2026“?
Es bezeichnet das Extrahieren öffentlicher Pin- und Board-Daten von Pinterest über die interne Resource API oder die offizielle API v5. Entwickler verwenden diese Daten für visuelle Trend-Datensätze, Content-Research und Produktkataloge. 2026 ist dies wegen verbesserter Anti-Bot-Maßnahmen und lokalisierter Suchergebnisse komplexer geworden und erfordert Residential Proxys mit Geo-Targeting.
Warum ist Pinterest-Scraping für Proxy-Nutzer relevant?
Pinterest lokalisiert Suchergebnisse und Empfehlungen nach IP-Geolokation. Um repräsentative Datensätze aus verschiedenen Ländern zu erfassen, müssen Sie Proxys mit Geo-Targeting verwenden. Zudem gelten pro IP Rate Limits von ca. 50–80 Requests pro Minute. Ohne Proxy-Rotation werden Sie schnell geblockt. Residential Proxys bieten die nötige IP-Diversität und Geo-Kontrolle.
Welcher Proxy-Typ funktioniert am besten für Pinterest-Scraping?
Residential Proxys sind die beste Wahl für Pinterest. Sie stammen von echten ISPs und haben ein geringeres Block-Risiko als Datacenter-IPs. Mit Geo-Targeting (z. B. -country-US oder -country-DE) steuern Sie die Lokalisierung der Ergebnisse. Sticky Sessions (-session-) halten den csrftoken während der Paginierung gültig. Mobile Proxys sind eine Alternative, aber für Pinterest meist nicht nötig.
Wie vermeide ich Blocks beim Pinterest-Scraping?
Verwenden Sie rotierende Residential Proxys mit Geo-Targeting, halten Sie Pacing von 1–2 Sekunden pro Request ein, und stellen Sie Header-Konsistenz sicher (User-Agent, Accept-Language und IP-Geo müssen zusammenpassen). Nutzen Sie Sticky Sessions für die gesamte Paginierung, damit der csrftoken gültig bleibt. Bei HTTP 429 oder leeren Antworten reduzieren Sie das Tempo und wenden exponential backoff an.
Sollte ich die interne Resource API oder die offizielle Pinterest API v5 verwenden?
Für explorative Datensammlung und breite Trend-Datensätze ist die interne Resource API praktisch, da sie mehr Daten liefert als die offizielle API. Für Produktionssysteme mit stabilen SLAs ist die offizielle Pinterest API v5 die bessere Wahl — sie bietet dokumentierte Rate Limits, OAuth-Sicherheit und Support. Prüfen Sie immer die Nutzungsbedingungen, bevor Sie die interne API verwenden.






