Pinterest Scraper | $2.99 / 1k | avatar

Pinterest Scraper | $2.99 / 1k |

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Pinterest Scraper | $2.99 / 1k |

Pinterest Scraper | $2.99 / 1k |

Scrape Pinterest pins and boards by keyword. Titles, descriptions, outbound links, image URLs, dimensions and dominant colour. No login and no pinner identity data. Export to CSV, JSON or Excel.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

Raffy

Raffy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Turn any Pinterest search into a spreadsheet of pins you can actually work with: title, description, the outbound destination link, a direct image URL with its real pixel dimensions, the dominant colour, the board it lives on, when it was created and whether it is a video. Built for e-commerce and trend researchers, content and social planners, designers hunting reference, and anyone feeding a creative pipeline or an AI agent.

Scrape Pinterest pins by keyword, or switch scope to boards and get the boards that rank for a topic instead. No login, no API key, no cookie and no browser: the Actor reads the same public search response pinterest.com loads for a visitor, so a 20-result preview finishes in about 7 seconds and 1,000 pins cost only a handful of HTTP requests. Results export to CSV, JSON, Excel or XML.

This is an unofficial community Actor. It is not affiliated with, endorsed by or connected to Pinterest.

What does this Pinterest scraper do?

You give it a keyword (or a Pinterest search URL); it gives you back one clean row per result.

  • Scope pins (the default) returns individual pins with their image, description, destination link and board.
  • Scope boards returns the boards that match the keyword, with the board name, description, cover image and pin count.

Country domains work (pinterest.co.uk, pinterest.de, ...), and a bare keyword typed into the URL field is accepted as a shortcut. Pin, board and profile URLs are not search pages, so they are skipped with one free explanatory row; /search/users/ is refused on purpose because this Actor does not collect people.

Result status (tri-state output)

Every row says what happened to it, so nothing ever fails silently:

statusMeaningBilled?
okData was extracted.Yes
not_foundPinterest answered normally, but the search matched nothing.No
errorThe source could not be read or the input entry was unusable; error explains why.No

You are only charged for ok rows. A run that finds nothing costs you the Actor start event and nothing else.

Use cases for Pinterest search data

  • E-commerce trend research. A merchandiser pulls 500 pins for "quiet luxury kitchen", groups them by dominantColor and createdAt, and sees which palettes and product shapes are surfacing this quarter before committing to a buy.
  • Content and campaign planning. A social media manager searches their category weekly, reads the title and description wording that keeps appearing, and writes pin copy and hashtags that match how people actually search.
  • Creative inspiration and moodboards. A designer or art director collects imageUrl plus imageWidth and imageHeight for a theme and drops the set straight into a moodboard tool, a brief, or a vision-model pipeline — no manual right-click-save.
  • Traffic and affiliate research. An affiliate or SEO analyst filters to rows where link is present to see exactly which shops, blogs and recipe sites Pinterest is sending category traffic to.
  • Competitor category monitoring. A brand team searches a competitor's product terms and watches which boards their pins get collected on and how large (pinCount) those boards are.
  • AI agents and automation. Rows are flat JSON with an explicit status column, so an agent building a mood report or a product feed can tell "no results" apart from "could not check" without parsing prose.

What data you get from every pin or board

One row per search result. resultType is pin normally, or board when you set Scope to boards. Missing means Pinterest did not publish it — fields are omitted, never filled with a guess.

The result

FieldTypeDescription
resultTypestringpin for a pin result, board for a board result.
pinIdstringPinterest's numeric id for the result: the pin id, or the board id when Scope is boards.
titlestringPin title. When the pinner left it blank, Pinterest's grid title or its image alt text is used instead. For a board row, the board name.
descriptionstringDescription written by the pinner, or the board description. Frequently empty on Pinterest.
pinUrlstringCanonical pinterest.com URL of the pin, or of the board for a board row.
linkstringOutbound destination URL the pin points at — the shop, recipe or article. Absent for pins uploaded straight to Pinterest.
isVideobooleanTrue when the pin plays a video: a video pin, or an idea pin with a video block.
createdAtstringISO 8601 timestamp of when the pin was created. Pinterest does not publish this for boards.

Image

FieldTypeDescription
imageUrlstringURL of the largest still image Pinterest publishes for this result. The image file itself is never copied or re-hosted.
imageWidthintegerWidth in pixels of the image at imageUrl.
imageHeightintegerHeight in pixels of the image at imageUrl.
dominantColorstringHex colour Pinterest computed for the image, e.g. #816748. Handy for palette and trend analysis.

Board

FieldTypeDescription
boardNamestringName of the board the pin is saved on.
boardUrlstringAbsolute URL of that board.
pinCountintegerNumber of pins on the board. Board rows only.

Engagement (rarely populated — see Limitations)

FieldTypeDescription
saveCountintegerTimes the pin was saved, when the endpoint returns it. Usually absent from search results.
repinCountintegerRepin count, when the endpoint returns it. Usually absent from search results.
commentCountintegerComment count, when the endpoint returns it. Usually absent from search results.

Bookkeeping

FieldTypeDescription
searchQuerystringThe keyword this row was found with, so several searches stay separable in one dataset.
urlstringThe URL this row describes; identical to pinUrl.
statusstringok, not_found or error — see the table above.
errorstringWhy the row is not ok. Absent on ok rows.
scrapedAtstringISO 8601 timestamp of when this row was extracted.

How to scrape Pinterest pins and boards

  1. Open the Actor and either paste one or more Pinterest search URLs into Pinterest search URLs, or just type a keyword into Search keyword. A bare keyword typed into the URL field works too.
  2. Pick a Scope: Pins for individual pins (the default), Boards to find boards about the topic.
  3. Set Maximum results. Start with the default 20 to see the shape of the data.
  4. Click Start. Results appear in the dataset within seconds; export as JSON, CSV, Excel, XML or HTML, or read them from the API.

To run it from code or from an agent, call the Apify API with the same input object; the dataset is available at https://api.apify.com/v2/datasets/<datasetId>/items.

Input

FieldTypeDefaultWhen to change it
startUrlsarray of strings["https://www.pinterest.com/search/pins/?q=coffee"]Replace with your own search URLs, one per line, to batch several keywords in one run. Country domains (pinterest.co.uk, pinterest.de, ...) are accepted, and a bare keyword such as coffee works as a shortcut.
querystring(empty)Use it instead of a URL when you just want to type a keyword the way you would in the Pinterest search box. It can be combined with startUrls: it simply adds one more search.
scopeselect: pins, boardspinsSwitch to boards when you want the boards that rank for a topic rather than individual pins. Applies to query and to any start URL that does not name a scope itself.
maxItemsinteger20Raise it for a real dataset — this is also your spending cap, since each ok row is one billable result. It counts rows of every status.
proxyConfigurationobject{ "useApifyProxy": false }Leave off; the Actor is HTTP-only and needs no proxy from a normal IP. Enable Apify Proxy (datacenter) only if Pinterest starts answering 403 or 429.

Example input:

{
"startUrls": ["https://www.pinterest.com/search/pins/?q=coffee"],
"query": "cold brew setup",
"scope": "pins",
"maxItems": 100,
"proxyConfiguration": { "useApifyProxy": false }
}

Pin URLs, board URLs, profile URLs and /search/users/ pages are not search pages. They are skipped, each with one free error row explaining why, rather than silently disappearing. /search/users/ is refused on purpose: this Actor does not collect people.

Output

A real row from the default run (start URL https://www.pinterest.com/search/pins/?q=coffee, maxItems: 20, which finished in 6.5 seconds with 20 ok rows from a single HTTP request):

{
"url": "https://www.pinterest.com/pin/1142577368000878517/",
"status": "ok",
"scrapedAt": "2026-09-08T12:51:44.486Z",
"resultType": "pin",
"pinId": "1142577368000878517",
"searchQuery": "coffee",
"title": "🤍☕️",
"description": "coffee heart aesthetic",
"pinUrl": "https://www.pinterest.com/pin/1142577368000878517/",
"imageUrl": "https://i.pinimg.com/originals/08/dd/4b/08dd4b75f60cb58831182c2b1e2ca891.jpg",
"imageWidth": 1024,
"imageHeight": 1536,
"dominantColor": "#816748",
"boardName": "Vaši pinovi",
"boardUrl": "https://www.pinterest.com/elanviee/_quick_creates/",
"createdAt": "2026-08-21T22:16:33.000Z",
"isVideo": false
}

The same Actor with "scope": "boards" and "query": "minimalist home office":

{
"url": "https://www.pinterest.com/greenwithless/minimalist-home-office/",
"status": "ok",
"scrapedAt": "2026-09-08T12:48:20.186Z",
"resultType": "board",
"pinId": "848084242269709151",
"searchQuery": "minimalist home office",
"title": "Minimalist Home Office",
"description": "Do you like minimalist home office design? On this board, you'll find the best minimalist home office ideas, minimalist home office decor, minimalist home office setup ideas, minimalist desk setup ideas, decluttering ideas for a minimalist home office, and more!",
"pinUrl": "https://www.pinterest.com/greenwithless/minimalist-home-office/",
"imageUrl": "https://i.pinimg.com/474x/77/23/b5/7723b511a95d32109589011837e0dfbe.jpg",
"boardName": "Minimalist Home Office",
"boardUrl": "https://www.pinterest.com/greenwithless/minimalist-home-office/",
"pinCount": 29,
"isVideo": false
}

And an input entry the Actor could not use, written as a free row instead of vanishing:

{
"url": "https://www.pinterest.com/",
"status": "error",
"error": "Input entry \"https://www.pinterest.com/pin/1142577368000878517/\" is not a URL this Actor can fetch; it was skipped.",
"scrapedAt": "2026-09-08T12:48:43.054Z"
}

How much does it cost to scrape Pinterest?

Pay per event. You pay for what you actually receive.

EventPriceWhen it is charged
Actor start$0.005Once per run (per GB of memory; the 1 GB default is one event).
Result$0.00299Per saved row with status ok — one pin, or one board when Scope is boards.

That works out at $2.99 per 1,000 results. Rows with status not_found or error are written to your dataset free of charge, and the Actor never bills for a row it could not deliver. Platform compute is included: the two events above are the whole price list. The free Apify plan's $5 of monthly credit covers about 1,670 results in a single run.

How it compares

This Actor is deliberately narrow and cheap: it does one thing — keyword search across pins and boards — and it does it over HTTP in seconds, with no login, no cookie and no browser to pay for. If what you want is a wide sample of what Pinterest surfaces for a topic, with real image URLs, destination links and colour data you can analyse, it is a good fit and it will not cost much.

It is not the tool for creator analytics or influencer discovery: it returns no pinner identity data at all, and engagement counts are almost never present in a search response. It cannot read private boards, it does not download image files, and because Pinterest personalises and localises search, two runs of the same keyword will not return an identical list. If you need per-creator metrics, follower counts or reproducible ranking, look elsewhere.

Integrations, API and AI agents

Results export to CSV, JSON, Excel and XML from the Apify console, or flow straight into Google Sheets, Airtable, Slack or a CRM through Apify integrations and webhooks — including Make, Zapier and n8n. Schedule the Actor to re-run a set of keywords weekly and only append what is new.

It can be called from the Apify API, from any Apify client library, from the Apify MCP server, or by any AI agent that can call an HTTP endpoint. Output is flat JSON with a stable status column, so an agent can distinguish "found nothing" from "could not check" without heuristics.

Tips

  • Use searchQuery when you batch. Put twenty search URLs in and every row still tells you which keyword produced it.
  • dominantColor is the cheap trend signal. Bucket it by hue and plot against createdAt to see a palette shift over months without downloading a single image.
  • link is the commercial signal. Filter to rows where link is present to get only pins that actually send traffic somewhere.
  • Raise maxItems before you raise concurrency. One request already returns up to 100 results, so a bigger maxItems is nearly free in requests.
  • Set maxItems deliberately. It counts every row, including free not_found and error rows, so a run always stays bounded.

Limitations

  • Unofficial endpoint. This Actor reads the undocumented JSON call that pinterest.com's own search page makes. It is not a published API, it carries no stability guarantee, and Pinterest can change or restrict it at any time. If that happens the Actor fails loudly with error rows rather than returning an empty success.
  • No pinner identity, by design. Usernames, real names, profile URLs, avatars and follower counts are present in the upstream response and are never written to the dataset. If you need creator-level data, this Actor is not the right tool. Note that a boardUrl naturally contains the board owner's public handle as its first path segment, because that is how Pinterest builds board URLs.
  • Engagement counts are usually absent. Pinterest's search response does not include saves, repins or comments. saveCount, repinCount and commentCount are populated only when the endpoint happens to return them, which for search results is rare. Treat them as a bonus, not as a guarantee.
  • Results vary by region and over time. Pinterest personalises and localises search. The same keyword run from a different country, or an hour later, returns a different and differently ordered set. Row counts and ordering are therefore not reproducible.
  • description and link are often empty. Most pins carry neither. In a typical 100-pin sample roughly a third have a description and under a fifth have an outbound link. title falls back to Pinterest's alt text and is present on almost every row.
  • A pins search almost never returns nothing. For an unmatched keyword Pinterest quietly serves loosely related pins instead of an empty result, so a not_found row is rare in pins scope. A boards search does return a genuinely empty result set, and that becomes one not_found row.
  • Images are referenced, never downloaded. You get imageUrl; fetching or storing the image itself is your decision and your responsibility.
  • Datacenter IPs are untested at scale. The endpoint was verified working without a proxy, but Pinterest may treat cloud IP ranges differently from a home connection. If you see HTTP 403 or 429 the run will fail visibly — switch on Apify Proxy (datacenter) in the input and retry.

FAQ

Is it legal to scrape Pinterest? This Actor reads only publicly visible search results, without logging in and without defeating any access control. Whether a particular collection and use is lawful depends on your jurisdiction, your purpose and Pinterest's terms of service, which you are responsible for reading. Get your own legal advice before running this at scale or for a commercial product.

Do I need a Pinterest account, an API key or a proxy? None of the three. The Actor reads a public search response over plain HTTP from Apify's datacenter IPs. Apify Proxy is available in the input but is off by default and is only worth enabling if you start seeing 403 or 429 responses.

Can I scrape Pinterest boards as well as pins? Yes. Set Scope to Boards and each row becomes a board: title is the board name, pinCount is how many pins it holds, and pinUrl links to it.

How many pins can I get in one run? As many as maxItems allows. One request to Pinterest returns 25-100 results, so even a 1,000-row run is only 10-40 requests and finishes in well under a minute.

Why did I get fewer rows than maxItems? Either the search genuinely ran out of results, or maxItems counts rows of every status — a couple of free error rows for unusable input entries reduce the number of ok rows in the same run. The final log line reports the exact breakdown.

What if a field is missing? Missing means Pinterest did not publish it for that result. Fields are omitted rather than filled with empty strings or zeros, so a missing link means "this pin points nowhere", not "the scraper failed". Only error rows indicate a failure.

Can I search for people, or for the boards of a specific user? No. Board search is supported through the Scope input; people search is deliberately not, and /search/users/ URLs are rejected with an explanatory row. This Actor is for content, not for profiling individuals.

Does it download the images? No. It gives you imageUrl, imageWidth and imageHeight. No image file is copied, cached or re-hosted by the Actor.

Can I use it from an AI agent or an MCP client? Yes. Call it through the Apify API or the Apify MCP server like any other Actor; the flat JSON rows and the status column are designed for exactly that.

This Actor collects only publicly accessible content from Pinterest search results. It does not log in, does not access private boards, and does not attempt to defeat any technical access restriction.

Pinterest content is user-generated, which means personal data can appear inside it. This Actor is built to avoid that: pinner usernames, full names, profile URLs, profile images and follower counts are present in the upstream response and are deliberately excluded from every dataset row. Board names and board URLs are retained as content metadata, and a board URL includes the owner's public handle because that is part of the URL Pinterest publishes. Images are referenced by URL only; no image file is copied or stored by the Actor.

If your dataset nevertheless ends up containing personal data — for example a person's name written into a pin title, a description or a board name by the person who posted it — you are the data controller for that processing under the GDPR, the CCPA and comparable laws. You are responsible for having a lawful basis, for honouring data-subject requests, and for deleting data you no longer need. Do not use this Actor to build profiles of individuals.

Pinterest is a trademark of its respective owner. This Actor is an independent, unofficial tool and is not affiliated with, authorised by or endorsed by Pinterest.