Pinterest Shopping & Product Scraper with Prices
Pricing
$5.00 / 1,000 product scrapeds
Pinterest Shopping & Product Scraper with Prices
Turn Pinterest shop-the-look pins into a product feed. One row per product with its real price, currency, sale price, discount, stock status, merchant, buy link and image — plus the pin it came from. Search by shopping keyword or paste specific pins. No Pinterest account needed.
Pricing
$5.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Hamza
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 days ago
Last modified
Categories
Share
Pinterest's best shopping content hides the interesting part one level down: a single "shop the look" pin is really a basket of separate products, each with its own name, merchant, price and buy link. This actor opens those pins and gives you one row per product — price, currency, the "was" price and discount where there is one, whether the merchant marks it available, the outbound buy link, the image, and the pin it was found in. Point it at shopping keywords, at specific pins, or at both.
What you can do with it
- Build a priced product feed for a niche — "arched cabinet", "linen sofa", "gold pendant light" — without touching a single merchant site.
- Watch what a competitor's shop-the-look pins are actually selling, and at what price.
- Pull discounted items only: every row carries the original price, the discount percentage and a plain
onSaleflag. - Collect merchant-and-link pairs for affiliate, comparison or curation work, each already tied to the image that sells it.
- Compare price ranges across a category, a market or a moment in time by scheduling the same keywords weekly.
- Enrich pins you already track: paste their addresses and get the products inside them.
What you get
One row per product. Abridged real example:
{"type": "product","id": "47850814786426317-872220652852770625","title": "Ripple Rotating Wall Lamp | Yedwo Design","productName": "Ripple Rotating Wall Lamp | Yedwo Design","price": 199,"currency": "USD","currencySymbol": "$","priceDisplay": "US$199.00","standardPrice": null,"percentOff": null,"onSale": false,"inStock": true,"merchant": "YEDWO","link": "https://yedwo.com/products/ripple-rotating-wall-lamp-yedwo-design","domain": "yedwo.com","imageUrl": "https://i.pinimg.com/736x/cb/fb/92/cbfb924161c8f141bc7d05c925cd1a80.jpg","productPinUrl": "https://www.pinterest.com/pin/872220652852770625/","productIndex": 0,"isCollectionProduct": true,"collectionSize": 1,"parentPinId": "47850814786426317","parentPinUrl": "https://www.pinterest.com/pin/47850814786426317/","parentPinTitle": "Ripple Rotating Wall Lamp | Yedwo Design","parentPinCreatedAt": "2026-01-07T22:29:57.000Z","parentPinSaveCount": 8995,"parentPinnerUsername": "ashaarty","parentCreatorUsername": "yedwo","parentIsPromoted": false,"searchQuery": null,"scrapedAt": "2026-08-04T12:00:00.000Z"}
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
queries | list of text | ["arched cabinet"] | Shopping keywords, worded the way a shopper would type them. A Pinterest search address works too — the words are taken from it. Up to 50 per run. |
pins | list of text | [] | Addresses of specific pins you want the products from, or plain pin numbers. Up to 1000 per run. |
maxProducts | number | 500 | How many product rows to collect before the run stops. Maximum 20000. |
maxPinsPerQuery | number | 60 | How deep to go through each keyword's public results before moving to the next keyword. Maximum 500. |
onlyWithPrice | true/false | true | Keep only products that publish a price. Turn it off to also get unpriced entries, which still carry name, merchant, link and image. |
onlyInStock | true/false | false | Keep only products the merchant currently marks as available. Products whose availability is not published count as unknown and are excluded when this is on. |
includePromoted | true/false | false | Pinterest mixes promoted pins into results. Off keeps things organic; on keeps them and flags them with parentIsPromoted. |
country | select | us | The market to browse from. Shopping results and currencies differ by market, and the choice is kept the same for the whole run. Pinterest does not always honour it, so every row also records the market it was actually served for. |
Output fields
| Field | Type | Description |
|---|---|---|
id | text | Stable row identifier: the pin it came from plus the product within it. |
title | text | The product's own name as published. Empty when the entry has none — it is never given the pin's caption instead. |
productName | text | The merchant-side product name, when published separately from the title. |
description | text | The product description, where the merchant publishes one. |
price | number | The current price as a number. |
currency | text | Three-letter currency code, e.g. USD, GBP, CAD. |
currencySymbol | text | The symbol shown alongside the price, e.g. $. |
priceDisplay | text | The price exactly as Pinterest formats it, e.g. US$2,698.00. |
standardPrice | number | The pre-discount price, when the item is reduced. |
standardPriceDisplay | text | The pre-discount price as formatted text. |
percentOff | number | Discount percentage, when one is published. |
percentOffLabel | text | The discount as shown, e.g. 21% off. |
onSale | true/false | True when there is a real reduction — an equal "was" price does not count. |
hasPriceDrop | true/false | Whether the merchant marks this as a recent price drop. |
inStock | true/false | Availability as published. Empty when the merchant does not publish it. |
availabilityCode, conditionCode | number | Availability and condition exactly as published, unaltered. |
merchant | text | The shop behind the product. |
link | text | The outbound buy link. |
domain | text | The destination host, handy for grouping by retailer. |
imageUrl, images | text / object | The product image, plus every size published for it. |
dominantColor | text | The image's dominant colour, as a hex value. |
productId, offerId | text | Pinterest's own identifiers for the product and its offer. |
productPinId, productPinUrl | text | The pin for this individual product, where one exists. |
productIndex | number | The product's position inside its pin. |
isCollectionProduct | true/false | True when the row came from a multi-product pin. |
richType | text | How Pinterest labels the entry — product for genuine products. |
isActive | true/false | Whether the entry is still live in the pin. |
collectionSize, collectionTitle | number / text | How many products the parent pin holds, and its heading if it has one. |
parentPinId, parentPinUrl | text | The pin the product was found in. |
parentPinTitle, parentPinDescription, parentPinAltText | text | The parent pin's caption, description, and an automatically generated image description where there is no caption. |
parentPinImageUrl | text | The parent pin's own image. |
parentPinLink, parentPinDomain | text | Where the parent pin itself points. |
parentPinCreatedAt | date | When the parent pin was published. |
parentPinSaveCount, parentPinRepinCount | number | How many times the parent pin has been saved and repinned. These are two different measures and are reported separately. |
parentPinnerUsername | text | Who pinned it. |
parentCreatorUsername | text | The account credited with the original, which is often not the same person. |
parentIsPromoted | true/false | Whether the parent pin is a paid placement. |
source, searchQuery, inputTarget, parentPinPosition | text / number | Where the row came from: a keyword or a pin you supplied, and the parent pin's rank in those results. |
country | text | The market the run asked to browse from. Empty when the run could not be held to it. |
browsedFromCountry | text | The market Pinterest actually served the results for, which is not always the one that was asked for. Empty when Pinterest does not say. |
hasFullDetails | true/false | True when the product came from the fully opened pin. False when the pin could not be opened and the product was taken from what the results page already showed. |
scrapedAt | date | When the row was collected. |
Pricing
You pay $5.00 per 1,000 products, which is half a cent per product row. Nothing else is billed: there is no charge for keywords you search, for pins that turn out to hold no products, or for entries filtered out by your own switches.
Worked example: a run over four keywords that returns 400 products costs 400 × $0.005 = $2.00. Set maxProducts to cap the bill exactly — a run capped at 500 products can never cost more than $2.50.
Limits & what this actor cannot do
- This is a shop-the-look and collection product extractor, not a "price for any pin" tool. Ordinary merchant catalog pins — the single-product pins that link straight to a shop — do not publish a price on Pinterest at all, so they return no rows. Multi-product pins, and single-product pins that carry a real offer, are the ones that pay off. Expect a minority of any keyword's results to hold products; the actor tells you exactly how many did.
- Not every entry inside a collection has a price. By default those are dropped; switch
onlyWithPriceoff to keep them. - Prices, discounts, availability and save counts are a snapshot at the moment of collection and keep changing afterwards.
- Pinterest publishes a limited number of public results for any one search, so very large targets return what Pinterest makes available rather than an unlimited history.
- Results and currencies are personalised to the market they are served for, and the market you pick is not always the market Pinterest serves. Every row records both the market that was asked for and the one Pinterest actually served, so you always know which one produced your prices.
- A pin that cannot be opened is reported as such, never silently counted as a pin that holds no products. Where the results page had already shown some of that pin's products, those are kept and marked with
hasFullDetailsas false. - Promoted pins appear inside Pinterest's own results. They are excluded by default and flagged when you keep them.
- Pins that have been deleted or made private are reported as unavailable rather than returned empty.
- Availability and condition are passed through exactly as published, without being reinterpreted.
- Shortened
pin.itlinks cannot be used — open one in a browser and paste the full address it lands on. - Speed depends on the size of the job and on how fast Pinterest answers; no fixed speed is promised.
- Pinterest's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and for handling any personal data in line with applicable privacy law.
FAQ
Do I need a Pinterest account? No. Nothing here is behind a login, and no account is ever involved.
Does it need my login or password? No. Never provide them — they are not an input and would not be used.
Why did some of my keywords return nothing? Because those results contained no pins with product entries. Pinterest happily fills a result page with visually similar pins even for a term nobody shops with, and none of that filler carries a price. Wording the keyword the way a shopper would — a product noun, not a mood — makes a large difference. An empty keyword always means an empty keyword: if pins could not be opened instead, the run reports that separately rather than letting it look like nothing was there.
Is the data complete? It is complete for what Pinterest publishes publicly. Every price, discount, stock marker and merchant name comes from the product entry itself; nothing is estimated, and a field the merchant did not publish arrives empty rather than as a zero. What it cannot give you is a price for pins where no price exists anywhere on Pinterest — those simply produce no rows.
Can I schedule it?
Yes. Save your keywords as a task and run it daily or weekly to track prices and discounts over time; scrapedAt on every row gives you the time series.
Why do I sometimes get two rows with the same product?
Because the same product can appear inside two different pins. Each row records the pin it came from, so you can keep both or group by link to collapse them.