Pinterest Scraper - Pins, Images and Source Links avatar

Pinterest Scraper - Pins, Images and Source Links

Pricing

from $1.54 / 1,000 pins

Go to Apify Store
Pinterest Scraper - Pins, Images and Source Links

Pinterest Scraper - Pins, Images and Source Links

Search Pinterest by keyword and get one row per pin: title, description, full-size image, the outbound link it points to (often a product or recipe), pinner, board, reactions and date. Repin and comment counts are empty because Pinterest no longer sends them. $1.60 per 1,000 pins.

Pricing

from $1.54 / 1,000 pins

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

1

Bookmarked

24

Total users

2

Monthly active users

3 days ago

Last modified

Share

Type a search the way you would type it into Pinterest and get the matching pins as rows: the title, the description, the full-size image, who pinned it, which board it sits on, and the outbound link. That link is the field most people are here for, because it usually goes to a product page or a recipe.

The awkward part, said up front: repin and comment counts arrive empty on every row. Pinterest stopped putting them in the search response. Across 239 pins from twelve runs both were null every time, so a "top pins by repins" pipeline cannot be built on this. reactionCount is the engagement number you do get, and it was null on about a quarter of those rows.

InputOne search query
OutputOne row per pin: title, description, full-size image, outbound link, pinner, board, reactions and date
Ceiling2,000 pins per run
Account neededNone, no login and nothing to paste
Price$1.60 per 1,000 pins on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 3,100

🔍 What Pinterest Scraper does

It runs your keywords through Pinterest's own search and pages through the results until it has as many pins as you asked for. Sponsored pins are left out unless you ask for them, and you can keep video pins only.

Paging stops early when two pages in a row bring nothing new. That is usually Pinterest running out of fresh results for a narrow query rather than anything going wrong, which is why a run can end with fewer pins than you asked for.

Keyword search is the whole scope. Boards, profiles and single pin pages are not part of it.

📋 What data you get from each Pinterest pin

What you getField
The pin's id and linkid, pinUrl
Title and descriptiontitle, description
The full-size imageimageUrl
The video, when one came throughisVideo, videoUrl
Where the pin pointslink
The pin's main colourdominantColor
Reactions (repins and comments are always empty)reactionCount, repinCount, commentCount
When it was createdcreatedAt
Who pinned it, and the board it sits onpinnerUsername, pinnerName, boardName, boardUrl
Whether it is sponsoredisPromoted

▶️ How to scrape Pinterest pins

  1. Open Pinterest Scraper and click Try for free.
  2. Type your keywords into Search query.
  3. Set Max pins. Start around 20 to see the shape of the output.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost to scrape Pinterest?

$1.60 per 1,000 pins on the Free plan. Paid plans pay a little less: $1.58 on Starter, $1.56 on Scale and $1.54 on Business. On the free plan, the $5 Apify gives you each month covers about 3,100 pins.

You pay per pin row delivered. Diagnostic rows are not billed, so a search that matches nothing writes a free row instead of pins. Max pins is a hard cap, so it doubles as your spending limit.

📥 What you give it

{
"query": "minimalist tattoo",
"maxItems": 200,
"includePromoted": false
}
FieldDefaultWhat it is
querynoneRequired. Your keywords, exactly as you would type them into Pinterest. The form opens with home office setup in the box.
maxItems50How many pins to collect, 1 to 2,000. This is the dial that sets what a run costs.
includeVideosOnlyfalseKeep only pins that came through with a playable video file. Read the video note under "What it does not do" first.
includePromotedfalseInclude sponsored pins.
notionConnectornoneOptional. Write every pin into Notion as a page when the run finishes. Authorise the connector once under Settings, API and Integrations, MCP connectors, then pick it here.
notionParentIdnoneOptional. The Notion data source to write into. Empty creates the pages privately in your workspace.
proxyConfigurationleave it aloneOptional. Leave it alone for a normal run. You can supply your own servers here if you have a reason to.

📤 What you get back

A real row from a real run, with the description cut short (the real one runs on with the pinner's hashtags):

{
"ok": true,
"id": "492649955299899",
"title": "ADHD-Friendly Desk Setup for Better Focus & Productivity",
"description": "Create a calmer, more organized workspace with simple ADHD-friendly desk essentials. ...",
"pinUrl": "https://www.pinterest.com/pin/492649955299899/",
"imageUrl": "https://i.pinimg.com/originals/ef/3a/d0/ef3ad07436299cc349cbf8dfddb8a30d.png",
"isVideo": false,
"videoUrl": null,
"link": "https://www.zafranorganicbd.store/2026/08/adhd-friendly-desk-setup-for-better.html",
"dominantColor": "#a99477",
"repinCount": null,
"commentCount": null,
"reactionCount": 53,
"createdAt": "2026-09-09T15:49:57.000Z",
"pinnerUsername": "nanaliv30",
"pinnerName": "Nanaliving",
"boardName": "My Home",
"boardUrl": "https://www.pinterest.com/nanaliv30/my-home/",
"isPromoted": false
}
FieldHow to read it
linkThe product page, article or recipe. null when the pin links nowhere.
imageUrlThe full-size image, or the widest one Pinterest offers for that pin.
isVideo, videoUrlisVideo is true only when a playable video file came through, and videoUrl holds it.
repinCount, commentCountnull on every row. Pinterest no longer sends them.
reactionCountnull when there are none or Pinterest leaves it out.
createdAtWhen the pin was created, in UTC.

title, description, link, createdAt, boardName, boardUrl and dominantColor can each be null when Pinterest leaves that field out for a pin.

🧾 Reading the output

Pins carry ok: true. Anything that goes wrong is written as a single row with ok: false and an errorCode rather than an empty dataset, and those rows are not charged.

CodeWhat it means
BAD_INPUTNo search query was given.
NO_RESULTSThe search ran and matched nothing. With Video pins only switched on, a narrow query hits this often.
NOT_SERVEDThis pin was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
NETWORKPinterest was unreachable or answered badly.
TIME_LIMITThe run got close to its time limit and stopped on its own. The pins delivered before that are in the dataset and charged as usual. Give the run more time, or ask for fewer pins, to get the rest.

A run ends as failed only when the time limit stopped it before any pin came back.

One case has no diagnostic row: if a results page fails part-way through a long run, the pins already collected are delivered and billed and the run stops there. So a run that returns 380 of the 1,000 pins you asked for, with no error row, hit that. Run it again for the rest.

The Console's overview table includes a repinCount column, which is the one that is always empty. Nothing is missing from your data; the column has nothing to show.

💡 What people use it for

  • Pulling the outbound links behind a niche, which is a list of the sites and shops that niche actually buys from.
  • Watching which products keep resurfacing in a category, by running the same query weekly and deduping on id.
  • Keeping links to reference images with their sources attached, instead of a folder of screenshots.
  • Finding the boards and accounts that dominate a topic, by counting pinnerUsername and boardName across a few hundred rows.

From a niche to the shops behind it, in three steps:

  1. Run this actor on a product search in your niche.
  2. Collect the distinct websites from the link column.
  3. Put them into Contact Details Scraper as websites for the e-mail addresses, phones and social profiles those shops publish.

🚧 What it does not do

  • Keyword search only. No boards, no profiles, no single pin pages, no related pins.
  • No repin or comment counts. They are null on every row, and that is Pinterest's doing.
  • Video pins are under-counted. A pin whose video file Pinterest leaves out of the search response reads as an image here, so Video pins only will miss some genuine video pins.
  • No login, so anything private, secret-board or account-specific is out of reach.
  • Images and videos are not downloaded. You get the URLs.
  • Promoted pins were not seen in testing, even with the switch on. Pinterest decides what to serve.
  • Pinterest's ranking decides the order, and a narrow query can run out of fresh pins well before your ceiling.
  • Rows are a snapshot. A pin can be edited or deleted after it was read.
  • It is not an official Pinterest tool. Dami's Studio is independent and is not affiliated with or endorsed by Pinterest, or by any other company named on this page.

🧭 Which social scraper do you need?

If you wantUse
Pinterest pins by keyword, with their outbound linksThis one
Image results for a keyword, with the page each one sits onGoogle Images Scraper
Instagram posts and reels under a hashtagInstagram Hashtag Scraper
E-mails, phones and social links published on a list of websitesContact Details Scraper

❓ Questions people ask

Do I need a Pinterest account to scrape pins?

No. Nothing to log into, nothing to paste.

Can I scrape a specific Pinterest board or user?

Not with this one. It searches pins by keyword.

Why did I get fewer pins than I asked for?

Either the query ran dry, which is common on narrow searches, or the run stopped early on a failed page. A NO_RESULTS row tells the first apart; no row at all with a partial set means the second.

Can I get the video file?

When Pinterest includes it, yes, in videoUrl. It is not there for every video pin.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/pinterest-search-scraper. Either way the run happens on your Apify account at the same price.

Pins are public, and they carry someone's account name, which data-protection law covers, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good start, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the query you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.