Wichtiger Hinweis: Dieser Leitfaden behandelt ausschließlich den Zugriff auf öffentliche Pinterest-Daten. Bevor Sie scrapen, prüfen Sie die Nutzungsbedingungen von Pinterest sowie geltende Gesetze — insbesondere den Computer Fraud and Abuse Act (CFAA) in den USA und die DSGVO (GDPR) in der EU. Das unbefugte Auslesen nicht-öffentlicher Daten oder das Umgehen technischer Schutzmaßnahmen kann rechtliche Konsequenzen haben.
Wenn Sie visuelle Inhalts- und Trend-Datasets aufbauen, ist Pinterest eine der reichhaltigsten Quellen überhaupt — über 5 Milliarden Pins weltweit, kategorisiert in Boards, getaggt mit Keywords und verknüpft mit externen Quellen. Doch Pinterest hat keine großzügige öffentliche Data API, und die interne Architektur ist stark auf Anti-Bot-Scoring ausgelegt. Dieser Leitfaden zeigt Ihnen, wie Sie Pinterest Pins und Boards 2026 scrapen — mit lauffähigen Codebeispielen, Produktionsfallen und einer klaren Ethik-orientierten Vorgehensweise.
Warum Pinterest-Scraping 2026 technisch herausfordernd ist
Pinterest ist keine klassische HTML-Seite. Die Oberfläche ist eine React-basierte Single-Page-Application, die Daten asynchron über eine interne Resource API lädt. Wenn Sie die Startseite aufrufen, sehen Sie kein serverseitig gerendertes Pin-Grid — Sie sehen eine leere Hülle, die über XHR-Aufrufe JSON-Daten nachlädt. Das bedeutet: klassisches HTML-Parsing mit BeautifulSoup funktioniert hier nur sehr begrenzt.
Hinzu kommt, dass Pinterest Anfragen pro IP-Adresse ratenlimitiert und ein Bot-Scoring betreibt, das auf Faktoren wie Anfrage-Frequenz, Header-Konsistenz, TLS-Fingerprint und geografische Plausibilität achtet. Wenn Sie aus einem deutschen Rechenzentrum 500 Anfragen pro Minute an pinterest.de senden, ist eine Blockade nur eine Frage der Zeit.
Öffentliche Oberflächen vs. Login-Wall
Nicht alle Pinterest-Daten sind gleich zugänglich. Hier eine Übersicht der wichtigsten Oberflächen:
| Oberfläche | Öffentlich? | Beispiel |
|---|---|---|
| Pin-Detailseite | Ja (ohne Login sichtbar) | pinterest.com/pin/123456789/ |
| Board-Feed | Ja (öffentliches Board) | pinterest.com/boardname/ |
| Suchergebnisse | Teilweise (begrenzt ohne Login) | pinterest.com/search/pins/?q=... |
| Home-Feed / Empfehlungen | Nein (Login erforderlich) | /home/ |
| Pinner-Profil | Ja (öffentliche Profile) | pinterest.com/username/ |
Der Home-Feed und personalisierte Empfehlungen sind login-walled — sie erfordern ein authentifiziertes Session-Cookie und sind personenbezogen. Diese Daten sollten Sie nicht ohne ausdrückliche Zustimmung scrapen. Konzentrieren Sie sich stattdessen auf öffentliche Pins, öffentliche Boards und Suchergebnisse, die ohne Login zugänglich sind.
Die offizielle Pinterest API v5
Pinterest bietet eine offizielle REST-API an — die Pinterest API v5. Sie ermöglicht den Zugriff auf Boards, Pins und Analytics für authentifizierte Konten. Für kommerzielle Produktionssysteme ist dies der empfohlene Weg. Allerdings hat die API v5 Einschränkungen: Sie ist primär für Kontenbesitzer gedacht, die ihre eigenen Daten verwalten, und nicht für das breite Sammeln öffentlicher Drittanbieter-Pins. Rate-Limits liegen typischerweise bei ca. 1.000 Schreibzugriffen pro Tag für Standard-Zugänge. Für Trend-Analyse und visuelle Datasets über fremde Boards reicht die offizielle API oft nicht aus.
Die interne Pinterest Resource API verstehen
Wenn Sie Pinterest im Browser öffnen und den Netzwerk-Tab beobachten, sehen Sie XHR-Aufrufe an Endpunkte wie diese:
/resource/PinResource/get/— lädt einen einzelnen Pin/resource/BoardFeedResource/get/— paginiert alle Pins eines Boards/resource/SearchResource/get/— führt eine Pin-Suche durch/resource/BaseSearchResource/get/— erweiterte Suche mit Filtern
Diese Endpunkte werden mit zwei zentralen Parametern aufgerufen:
GET /resource/BoardFeedResource/get/?source_url=%2Fboardname%2F&data=%7B%22options%22%3A%7B%22board_id%22%3A%221234567890%22%2C%22page_size%22%3A25%2C%22bookmarks%22%3A%5B%22YXNk...%22%5D%7D%7D
Der source_url-Parameter ist die URL-kodierte Pfade der ursprünglichen Seite (z. B. /boardname/). Der data-Parameter ist ein URL-kodiertes JSON-Objekt mit Optionen wie board_id, page_size und bookmarks (der Pagination-Cursor).
Erforderliche HTTP-Header für erfolgreiche Anfragen:
| Header | Beschreibung |
|---|---|
X-Pinterest-PWS-Handler | Internes Handler-Tag (z. B. www/[username]/[board].js) |
X-APP-VERSION | App-Version, die mit der aktuellen Site übereinstimmt |
csrftoken | CSRF-Token aus dem initialen Cookie-Set |
User-Agent | Ein realer Browser-User-Agent, konsistent über alle Anfragen |
Das CSRF-Token erhalten Sie, indem Sie zunächst die Board-Seite regulär aufrufen und das csrftoken-Cookie aus der Antwort extrahieren. Danach können Sie die Resource-API-Endpunkte mit diesem Token aufrufen.
Anti-Bot-Maßnahmen und warum rotierende Proxys nötig sind
Pinterest wendet mehrere Anti-Bot-Techniken an:
- Per-IP-Ratenlimits: Zu viele Anfragen von einer IP führen zu HTTP 429 oder leeren Responses.
- Bot-Scoring: Anomalien in Anfrage-Pattern, Headern und TLS-Fingerprints werden bewertet.
- Lokalisierung: Suchergebnisse und Empfehlungen sind geolokalisiert — eine Anfrage aus einem US-Rechenzentrum liefert andere Ergebnisse als eine aus einem französischen Residential-IP.
- JavaScript-Challenges: Manche Endpunkte erfordern eine gültige Browser-Sitzung mit ausgeführtem JS.
Deshalb sind rotierende Residential-Proxys die beste Wahl für Pinterest-Scraping. Datacenter-IPs werden von Pinterest schneller erkannt und blockiert. Residential-IPs stammen von echten ISPs und sind geografisch plausibel. Mit Geo-Targeting (z. B. -country-US) stellen Sie sicher, dass Sie konsistente, lokalisierte Suchergebnisse erhalten — wichtig für Trend-Analyse.
ProxyHat bietet Residential-Proxys mit Geo-Targeting auf Länder- und Stadt-Ebene. Eine Übersicht der verfügbaren Standorte finden Sie auf unserer Locations-Seite.
Proxy-Typen im Vergleich
| Eigenschaft | Residential | Datacenter | Mobile |
|---|---|---|---|
| Blockaden-Risiko bei Pinterest | Niedrig | Hoch | Sehr niedrig |
| Geschwindigkeit | Mittel (~200–500ms) | Schnell (~50–100ms) | Langsam (~300–800ms) |
| Geo-Targeting | Land + Stadt | Begrenzt | Land + ISP |
| Kosten | Mittel | Niedrig | Hoch |
| Einsatz für Pinterest | Empfohlen | Nur für Tests | Für hartnäckige Blocks |
Praxis-Beispiel 1: Pinterest-Board-Feed in Python scrapen
Das folgende Python-Skript paginiert den Board-Feed über die interne Resource API und verwendet das ProxyHat-Gateway mit rotierenden Residential-IPs aus den USA. Es extrahiert Pin-ID, Titel, Bild-URL und Link aus jedem Pin-Objekt.
import requests
import json
from urllib.parse import quote
# ProxyHat HTTP-Gateway mit US-Residential-IPs
proxy_url = "http://user-country-US:pass@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}
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": "application/json",
"X-Pinterest-PWS-Handler": "www/[username]/[board].js",
"X-APP-VERSION": "9d7c4f1",
}
board_slug = "username/board-name"
bookmarks = [""]
all_pins = []
for page in range(5): # max 5 Seiten = ~125 Pins
data = json.dumps({
"options": {
"board_id": "1234567890",
"page_size": 25,
"bookmarks": bookmarks,
},
"context": {}
})
params = {
"source_url": f"/{board_slug}/",
"data": data,
}
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 limit auf Seite {page}, pausiere...")
break
body = resp.json()
bookmark_list = body.get("resource", {}).get("options", {})
results = body.get("resource_response", {}).get("data", [])
for pin in results:
pin_id = pin.get("id")
title = pin.get("story", {}).get("title", "") or pin.get("description", "")
image_url = pin.get("images", {}).get("orig", {}).get("url", "")
link = pin.get("link", "")
all_pins.append({
"id": pin_id,
"title": title[:100],
"image_url": image_url,
"link": link,
})
bookmarks = bookmark_list.get("bookmarks", [""])
if not bookmarks or bookmarks == [""]:
break # keine weiteren Seiten
print(f"{len(all_pins)} Pins extrahiert")
for p in all_pins[:3]:
print(json.dumps(p, indent=2))
Beachten Sie, dass die board_id aus dem initialen HTML der Board-Seite extrahiert werden muss — sie steht in einem JSON-Block im <script>-Tag oder in den __PWS_DATA__-Daten. Alternativ können Sie die Board-Seite zuerst abrufen und die ID per Regex finden.
Praxis-Beispiel 2: Pinterest-Suche in Node.js über das HTTP-Gateway
Dieses Node.js-Beispiel nutzt axios mit dem ProxyHat-Gateway auf Port 8080 und führt eine Pin-Suche durch. Es verwendet eine sticky Session, um das CSRF-Token konsistent zu halten.
const axios = require('axios');
const proxyConfig = {
protocol: 'http',
host: 'gate.proxyhat.com',
port: 8080,
auth: {
username: 'user-country-US-session-search01',
password: 'pass',
},
};
const headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) '
+ 'AppleWebKit/537.36 (KHTML, like Gecko) '
+ 'Chrome/120.0.0.0 Safari/537.36',
'Accept': 'application/json',
'X-Pinterest-PWS-Handler': 'www/search/[query].js',
'X-APP-VERSION': '9d7c4f1',
};
const query = 'minimalist interior design';
const data = encodeURIComponent(JSON.stringify({
options: {
query: query,
page_size: 25,
bookmarks: [''],
},
context: {},
}));
const url = `https://www.pinterest.com/resource/SearchResource/get/?source_url=${encodeURIComponent('/search/pins/?q=' + encodeURIComponent(query))}&data=${data}`;
(async () => {
try {
const resp = await axios.get(url, {
headers,
proxy: proxyConfig,
timeout: 30000,
});
const results = resp.data.resource_response?.data || [];
console.log(`${results.length} Pins gefunden`);
results.slice(0, 5).forEach(pin => {
console.log({
id: pin.id,
title: (pin.description || '').slice(0, 80),
image: pin.images?.orig?.url?.slice(0, 60) + '...',
link: pin.link,
});
});
} catch (err) {
console.error('Fehler:', err.response?.status, err.message);
}
})();
Die -session-search01-Flag im ProxyHat-Benutzernamen sorgt dafür, dass alle Anfragen über dieselbe IP laufen — wichtig, damit das CSRF-Token und die Session-Konsistenz erhalten bleiben.
Pagination, Sessions und Fingerprint-Hygiene
Bookmark-Cursor-Pagination
Pinterest verwendet Bookmarks als Cursor für die Pagination. Jede Resource-API-Antwort enthält ein bookmarks-Array im resource.options-Objekt. Dieses Array enthält einen Base64-kodierten String, der den Pagination-Status repräsentiert. Übergeben Sie diesen Wert im nächsten Request, um die nächste Seite zu laden. Wenn das Array leer ist oder [""] enthält, sind keine weiteren Daten verfügbar.
Sticky Sessions für CSRF-Token-Kontinuität
Das csrftoken-Cookie ist an die IP-Adresse und die Browser-Sitzung gebunden. Wenn Sie bei jeder Anfrage die IP wechseln, verliert Pinterest die Session-Konsistenz und kann den Token invalidieren. Verwenden Sie deshalb eine sticky Session für alle Anfragen innerhalb eines Scraping-Durchlaufs:
# Sticky Session für einen kompletten Board-Scrape
proxy_url = "http://user-country-US-session-board123:pass@gate.proxyhat.com:8080"
Wechseln Sie die Session-ID (und damit die IP) erst, wenn Sie ein neues Board oder eine neue Suche starten. Das reduziert Blockaden und erhält die Token-Gültigkeit.
Pacing und Rate-Limit-Management
Eine aggressive Anfrage-Rate ist der schnellste Weg zu einer IP-Sperre. Empfohlene Pacing-Werte für Pinterest:
- Maximal 1 Anfrage pro 2–3 Sekunden pro IP/Session
- Maximal 50–100 Pins pro Minute pro Board
- Pause von 5–10 Sekunden zwischen Seiten
- Backoff bei HTTP 429: 60 Sekunden warten, dann neue Session
Mit rotierenden Proxys können Sie mehrere Sessions parallel betreiben — z. B. 10 sticky Sessions mit jeweils 1 Request/3s ergeben ~200 Pins/Minute. Weitere Tipps zur Skalierung finden Sie in unserem Web-Scraping-Use-Case.
User-Agent- und Header-Hygiene
Ein inkonsistenter User-Agent ist eines der auffälligsten Bot-Signale. Regeln:
- Verwenden Sie einen realen, aktuellen Browser-User-Agent (Chrome, Firefox, Safari).
- Behalten Sie denselben User-Agent für die gesamte Session bei.
- Senden Sie alle Header, die ein echter Browser senden würde — inklusive
Accept-Language,Sec-Fetch-*undReferer. - Setzen Sie
Accept-Languagepassend zur Geo-IP (z. B.en-US,en;q=0.9für US-IPs).
Ein häufiger Fehler: Entwickler setzen einen Chrome-User-Agent, senden aber keinen Sec-Ch-Ua-Header. Moderne Anti-Bot-Systeme prüfen diese Konsistenz.
Häufige Fehler und Edge Cases
- Leere
data-Parameter: Wenn das JSON nicht korrekt URL-kodiert ist, gibt Pinterest einen 400-Fehler zurück. Verwenden Sie immerurllib.parse.quoteoderencodeURIComponent. - Veraltete
X-APP-VERSION: Diese Version ändert sich bei Pinterest-Deployments. Wenn Ihre Anfragen plötzlich 403 zurückgeben, ist die Version veraltet — rufen Sie die Board-Seite im Browser auf und extrahieren Sie die aktuelle Version. - Gekürzte Pin-Objekte: Nicht jeder Pin hat alle Felder.
images.orig.urlkann fehlen bei Video-Pins — prüfen Sie aufvideosals Fallback. - Suchergebnisse ohne Login: Pinterest zeigt ohne Login nur eine begrenzte Anzahl Suchergebnisse (ca. 50–100 Pins). Für mehr Ergebnisse benötigen Sie ein Login-Cookie — was den Scope dieses Leitfadens überschreitet.
Ethisches Scraping: Wann man die offizielle API nutzen sollte
Scraping ist ein Werkzeug, kein Selbstzweck. Bevor Sie eine Scraping-Lösung bauen, prüfen Sie, ob die offizielle Pinterest API v5 Ihre Anforderungen erfüllt. Für die Verwaltung eigener Boards, Pin-Erstellung und Analytics ist die offizielle API der richtige Weg — sie ist stabil, dokumentiert und von Pinterest unterstützt.
Scraping öffentlicher Daten ist legitim, wenn:
- Sie nur öffentliche, nicht-personenbezogene Pin-Daten sammeln (Bild-URL, Beschreibung, Link, Board-Zugehörigkeit).
- Sie die
robots.txtvon Pinterest respektieren und gesperrte Pfade meiden. - Sie die Server von Pinterest nicht überlasten (angemessene Pacing-Raten).
- Sie keine personenbezogenen Daten von Pinner-Profilen ohne Rechtfertigung verarbeiten (DSGVO-relevant).
- Sie die Daten nicht für Wettbewerbsanalysen verwenden, die gegen die Nutzungsbedingungen verstoßen.
Vermeiden Sie das Scrapen von:
- Login-gesperrten Home-Feeds und personalisierten Empfehlungen.
- Privaten Boards (die ohnehin nicht öffentlich sind).
- Personenbezogenen Nutzerdaten (E-Mail, Standort, Aktivitätsverlauf).
Weitere Informationen zu ethischem Scraping finden Sie in den Richtlinien der FTC zu Online-Tracking und in der DSGVO-Übersicht.
Key Takeaways
- Öffentliche Daten nur: Scrapen Sie ausschließlich öffentliche Pins, Boards und Suchergebnisse — niemals Login-gesperrte Feeds.
- Resource API statt HTML: Pinterest lädt Daten über interne XHR-Endpunkte wie
BoardFeedResourceundSearchResource— nicht über serverseitiges HTML.- Residential-Proxys mit Geo: Rotierende US-Residential-IPs (
-country-US) sind der Standard für Pinterest-Scraping, da Suchergebnisse lokalisiert sind.- Sticky Sessions für CSRF: Verwenden Sie
-session--Flags, um die Token-Konsistenz während eines Board-Scrapes zu erhalten.- Pacing ist kritisch: Max. 1 Request/2–3s pro Session, Backoff bei 429, neue Session bei Blockade.
- Offizielle API bevorzugen: Für Produktionssysteme mit eigenen Daten ist die Pinterest API v5 die sauberere Lösung.
Bereit loszulegen? Schauen Sie sich unsere Preise an oder konsultieren Sie die ProxyHat-Dokumentation für weitere Integrationen. Für SERP-Tracking-Anwendungen haben wir außerdem einen dedizierten SERP-Tracking-Use-Case.






