Pinterest Scraper - Pins, Images and Source Links
Pricing
from $1.54 / 1,000 pins
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
Maintained by CommunityActor stats
1
Bookmarked
24
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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.
| Input | One search query |
| Output | One row per pin: title, description, full-size image, outbound link, pinner, board, reactions and date |
| Ceiling | 2,000 pins per run |
| Account needed | None, 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 get | Field |
|---|---|
| The pin's id and link | id, pinUrl |
| Title and description | title, description |
| The full-size image | imageUrl |
| The video, when one came through | isVideo, videoUrl |
| Where the pin points | link |
| The pin's main colour | dominantColor |
| Reactions (repins and comments are always empty) | reactionCount, repinCount, commentCount |
| When it was created | createdAt |
| Who pinned it, and the board it sits on | pinnerUsername, pinnerName, boardName, boardUrl |
| Whether it is sponsored | isPromoted |
▶️ How to scrape Pinterest pins
- Open Pinterest Scraper and click Try for free.
- Type your keywords into Search query.
- Set Max pins. Start around 20 to see the shape of the output.
- Click Start.
- 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}
| Field | Default | What it is |
|---|---|---|
query | none | Required. Your keywords, exactly as you would type them into Pinterest. The form opens with home office setup in the box. |
maxItems | 50 | How many pins to collect, 1 to 2,000. This is the dial that sets what a run costs. |
includeVideosOnly | false | Keep only pins that came through with a playable video file. Read the video note under "What it does not do" first. |
includePromoted | false | Include sponsored pins. |
notionConnector | none | Optional. 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. |
notionParentId | none | Optional. The Notion data source to write into. Empty creates the pages privately in your workspace. |
proxyConfiguration | leave it alone | Optional. 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}
| Field | How to read it |
|---|---|
link | The product page, article or recipe. null when the pin links nowhere. |
imageUrl | The full-size image, or the widest one Pinterest offers for that pin. |
isVideo, videoUrl | isVideo is true only when a playable video file came through, and videoUrl holds it. |
repinCount, commentCount | null on every row. Pinterest no longer sends them. |
reactionCount | null when there are none or Pinterest leaves it out. |
createdAt | When 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.
| Code | What it means |
|---|---|
BAD_INPUT | No search query was given. |
NO_RESULTS | The search ran and matched nothing. With Video pins only switched on, a narrow query hits this often. |
NOT_SERVED | This pin was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
NETWORK | Pinterest was unreachable or answered badly. |
TIME_LIMIT | The 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
pinnerUsernameandboardNameacross a few hundred rows.
From a niche to the shops behind it, in three steps:
- Run this actor on a product search in your niche.
- Collect the distinct websites from the
linkcolumn. - Put them into Contact Details Scraper as
websitesfor 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
nullon 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 want | Use |
|---|---|
| Pinterest pins by keyword, with their outbound links | This one |
| Image results for a keyword, with the page each one sits on | Google Images Scraper |
| Instagram posts and reels under a hashtag | Instagram Hashtag Scraper |
| E-mails, phones and social links published on a list of websites | Contact 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.
Is scraping Pinterest legal?
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.