Scrape public Pinterest search results by keyword and export clean pin metadata.
Use this Actor when you need repeatable Pinterest pin data for trend research, creative analysis, ecommerce inspiration, content planning, visual SEO research, or brand monitoring. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.
Automate Pinterest opportunity briefs in n8n: Use the ready-made Generate weekly Pinterest content opportunity briefs with Apify, OpenAI, and Google Sheets workflow to run this Actor, summarize search trends, and send weekly content ideas to a spreadsheet.
At a glance
- Keyword search: collect public Pinterest pins for one or many search terms.
- Pin metadata: save pin URLs, images, thumbnails, titles, descriptions, positions, creators, boards, colors, and outbound domains when visible.
- Optional detail enrichment: open pin pages to collect extra public metadata when Pinterest exposes it anonymously.
- Locale controls: set browser locale and country labels for research organization.
- Visual research workflow: export pins to spreadsheets, dashboards, creative research boards, or AI agents.
What can it do?
Pinterest Search Scraper turns public Pinterest keyword searches into structured pin rows.
- Export Pinterest search results by keyword with position, pin URL, image URL, title, and description.
- Collect visual and creator context such as thumbnails, dominant colors, creator names, board names, and outbound domains when visible.
- Research ecommerce and content trends by comparing pins across keywords.
- Build brand or topic monitors by scheduling recurring keyword searches.
- Use it as a Pinterest search API workflow for CSV, JSON, Excel, or direct Dataset API exports.
Common workflows
- Creative research: collect pin images, titles, and source domains around a visual theme.
- Ecommerce inspiration: monitor product, decor, fashion, and lifestyle search terms.
- Content planning: discover popular visual topics and language for social content.
- SEO and trend research: compare Pinterest keyword results over time.
- Brand monitoring: track public pins and domains around branded terms.
- AI image analysis: feed image URLs and metadata into classification or clustering workflows.
What data can you collect?
Each dataset row represents one public Pinterest pin search result.
| Field | Description |
|---|---|
query |
Keyword used for the Pinterest search |
position |
Result position within the keyword |
pinId |
Pinterest pin identifier |
pinUrl |
Public Pinterest pin URL |
title |
Public title or image alt text |
description |
Public description when available |
imageUrl |
Larger image URL when available |
thumbnailUrl |
Thumbnail image URL |
dominantColor |
Background color exposed in the public card |
creatorName |
Creator name when public and available |
creatorUsername |
Creator username when public and available |
creatorUrl |
Creator URL when public and available |
boardName |
Board name when public and available |
boardUrl |
Board URL when public and available |
domain |
Linked domain when public and available |
outboundUrl |
External URL when public and available |
repinCount |
Repin count when public and available |
saveCount |
Save count when public and available |
isVideo |
Whether Pinterest exposed the pin as video content |
videoUrl |
Public video URL when Pinterest exposes one |
fetchedAt |
Timestamp when the row was saved |
Example input
{
"queries": ["home decor", "summer outfits"],
"maxResultsPerQuery": 25,
"includePinDetails": false,
"locale": "en-US",
"country": "US",
"proxyConfiguration": { "useApifyProxy": false }
}
Example output
{
"query": "home decor",
"position": 1,
"pinId": "123456789012345678",
"pinUrl": "https://www.pinterest.com/pin/123456789012345678/",
"title": "Cozy living room decor ideas",
"description": null,
"imageUrl": "https://i.pinimg.com/736x/example.jpg",
"thumbnailUrl": "https://i.pinimg.com/236x/example.jpg",
"dominantColor": "rgb(195, 184, 170)",
"creatorName": null,
"boardName": null,
"domain": null,
"outboundUrl": null,
"fetchedAt": "2026-07-03T12:00:00.000Z"
}
Tips for best results
- Use buyer or creative phrases: specific visual keywords produce more actionable pin datasets.
- Keep detail enrichment optional:
includePinDetails=trueis slower and may be blocked by login walls. - Use multiple related queries: compare positions and domains across nearby terms.
- Treat public counts as optional: Pinterest often hides save/repin counts from anonymous views.
- Schedule stable keywords: recurring runs help track changing visual trends.
Limits and caveats
- The Actor extracts publicly visible Pinterest search data only.
- It does not access private boards, logged-in feeds, saved pins, messages, or account analytics.
- Some creator, board, outbound URL, and count fields may be null when Pinterest hides them.
- Pinterest layouts and anonymous access can vary by region, query, and time.
- Search results are saved after each bounded keyword batch. A late blocked query cannot discard rows already produced by earlier queries.
- The default 540-second work budget leaves time for
RUN_CHECKPOINTandRUN_SUMMARYbefore the 600-second platform timeout. Increase both limits together only for deliberately larger tasks. - If the work budget ends after rows exist, the Actor succeeds with warnings and reports pending queries and skipped detail pages. If no row was saved, it fails loudly.
API usage
Node.js:
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/pinterest-search-scraper').call({
queries: ['home decor'],
maxResultsPerQuery: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python:
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/pinterest-search-scraper").call(
run_input={"queries": ["home decor"], "maxResultsPerQuery": 25}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
cURL:
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~pinterest-search-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"queries":["home decor"],"maxResultsPerQuery":25}'
MCP and AI agents
This Actor can be used through the official Apify MCP server at https://mcp.apify.com.
For a focused single-Actor tool setup, use:
https://mcp.apify.com?tools=fetch_cat/pinterest-search-scraper
Claude Code:
claude mcp add --transport http apify-pinterest 'https://mcp.apify.com?tools=fetch_cat/pinterest-search-scraper'
JSON MCP configuration:
{
"mcpServers": {
"apify-pinterest": {
"type": "http",
"url": "https://mcp.apify.com?tools=fetch_cat/pinterest-search-scraper"
}
}
}
Use the same JSON keys shown in the input configuration table, such as queries, maxResultsPerQuery, includePinDetails, runBudgetSeconds, locale, country, and proxyConfiguration.
Example prompts:
- “Collect 25 public Pinterest pins for home decor.”
- “Compare summer outfit and capsule wardrobe searches without detail enrichment.”
- “Run these searches with detail enrichment and report any pending queries from the checkpoint.”
Support
If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.
Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.
Privacy and data handling
This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses the inputs you provide and the public records needed to produce the documented dataset to produce the output dataset and sends requests to public Pinterest Search pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.