Back to Library
Scrape Pinterest
js • 1/26/2026
6
const axios = require('axios');
async function pinterest(query) {
try {
const url = `https://id.pinterest.com/resource/BaseSearchResource/get/?source_url=/search/pins/?q=${query}&rs=rs&data=${encodeURIComponent(JSON.stringify({
options: {
query: query,
rs: "rs",
scope: "pins",
redux_normalize_feed: true,
source_url: `/search/pins/?q=${encodeURIComponent(query)}&rs=rs`
},
context: {}
}))}`;
const res = await axios.get(url, {
headers: {
"accept": "application/json, text/javascript, */*; q=0.01",
"x-pinterest-appstate": "active",
"x-pinterest-pws-handler": "www/search/[scope].js",
"x-requested-with": "XMLHttpRequest",
"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36",
"referer": "https://id.pinterest.com/",
"accept-language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7"
}
});
if (res.status !== 200) {
return { error: `Pinterest error ${res.status} ${res.statusText}` };
}
let json;
try {
json = res.data;
} catch (err) {
return { error: "Invalid JSON response: " + err.message };
}
const results = json.resource_response?.data?.results || [];
if (results.length === 0) return { error: "No results" };
const formatted = results.map(pin => ({
id: pin.id,
title: pin.seo_alt_text || "No Title",
image: pin.images?.["474x"]?.url || pin.images?.["236x"]?.url || null,
board: pin.board?.name || "-",
username: pin.pinner?.username || "-",
source: `https://id.pinterest.com/pin/${pin.id}/`
}));
return { query, count: formatted.length, results: formatted };
} catch (e) {
return { error: e.message };
}
}
module.exports = { pinterest };