Pinterest Scraper - $1.60 per 1,000, No Login
Pricing
from $1.60 / 1,000 pin returneds
Pinterest Scraper - $1.60 per 1,000, No Login
A pin is an image plus a link back to wherever it came from, usually a product page or a recipe. That link is on every row, with title, description, image URL, video URL, pinner and board. Repin and comment counts are null; Pinterest stopped sending them. $1.60 per 1,000 pins.
Pricing
from $1.60 / 1,000 pin returneds
Rating
5.0
(3)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
17
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Pinterest Search Scraper
A pin is an image plus a link back to wherever that image came from, usually a product page or a recipe. That outbound link is the field most people are here for, and it arrives on every row alongside the title, description, image URL, pinner, board, and the video URL when the pin is a video. No login and nothing for you to paste.
Pinterest's web API rejects anything that doesn't look like a real browser session carrying the current app build hash, so this bootstraps a session and reads the live build on every run, then pages through the results.
What you get per pin
| Field | Notes |
|---|---|
id | Pinterest's pin id. |
title | Pin title. Can be empty when the pinner never set one. |
description | The pin's description text, hashtags included. |
pinUrl | pinterest.com/pin/{id}/. |
imageUrl | Full-size image. |
isVideo | Whether Pinterest flags the pin as video. |
videoUrl | Direct video file. See the caveat below. |
link | The destination the pin links out to — the affiliate or product URL. This is the field most people are actually after. |
dominantColor | Hex, from Pinterest. |
reactionCount | Reactions on the pin. Usually a small number, null on roughly a quarter of rows. |
repinCount, commentCount | See the caveat below. |
createdAt | ISO timestamp. |
pinnerUsername, pinnerName | The account that pinned it. |
boardName, boardUrl | The board it lives on. |
isPromoted | Sponsored pin flag. Promoted pins are excluded unless you ask for them. |
Two caveats worth reading
repinCount and commentCount come back null. Pinterest stopped putting them in the search
response. Across 239 pins from twelve recent runs, both were null on every single row. Don't build
a "top pins by repins" pipeline on this. reactionCount is the engagement number you do get, and
even that was null on about a quarter of those 239.
videoUrl can be null even when isVideo is true. Pinterest doesn't always include the
playable file in the search payload. Those are still genuine video pins; only the direct URL is
missing.
Beyond those, link, description, createdAt, boardName, boardUrl and dominantColor can
each be null when Pinterest omits them for a given pin.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
query | string | — | Required. Keywords, e.g. home office setup. |
maxItems | integer | 50 | Pins to collect, up to 2000. It pages until it reaches this. |
includeVideosOnly | boolean | false | Keep only video pins. |
includePromoted | boolean | false | Include sponsored pins. |
notionConnector | string | — | Optional. Authorize a Notion MCP connector once under Settings → API & Integrations, pick it here, and every pin is written into Notion when the run ends. |
{"query": "minimalist tattoo","maxItems": 200,"includePromoted": false}
Cost
$0.0016 per pin, which is $1.60 per 1,000. Flat on every plan.
A $0.005 run-start fee applies from 24 August 2026, charged once per run on top of the per-pin price.
Only real pins are billed. Runs that get blocked, rate-limited, return nothing, or are given bad
input write a single ok: false row with an errorCode and cost you nothing per pin:
BAD_INPUT— noquerywas given.BLOCKED/RATE_LIMITED— Pinterest pushed back on the exit address. It rotates automatically, so retry.NO_RESULTS— the search worked and matched nothing.NETWORK/SERVER_ERROR— transient. Retry later.
If you get fewer pins than you asked for
Usually Pinterest's relevance ranking simply ran out of fresh results for that query — the scraper stops after two consecutive pages with no new pins. The other possibility is a rate limit. Check the dataset for a diagnostic row; that tells the two apart.
Proxy
Handled for you. It goes out through rented static addresses, falls back to Apify datacenter, and rotates on a block. Residential is never used, so nothing is billed per gigabyte. You can supply your own proxy servers in the Proxy input and they're used exactly as given.
