Pinterest Boards Scraper
Pricing
$19.99/month + usage
Pinterest Boards Scraper
Pinterest Boards Scraper extracts data from public Pinterest boards. Collect board titles, descriptions, pins, images, video links, and engagement metrics. Ideal for trend research, content planning, competitor analysis, and large-scale data extraction.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pinterest Boards Scraper โ Pin Images, Saves and Board Data
Pinterest Boards Scraper pulls every pin from a Pinterest board, profile or single pin URL and returns each pin's image and video variants, alt text, saves and repin counts, outbound link and domain, and board and pinner metadata as structured JSON. Pinterest's own bookmark cursor is walked page by page, so a 1,200-pin board comes back in full rather than the first screenful. Point it at a URL below and run it to see the output shape.
๐ What is Pinterest Boards Scraper?
Pinterest Boards Scraper is an Apify Actor that extracts every pin from a Pinterest board, a pinner's profile, or a single pin URL, and returns the results as typed, structured JSON. It calls Pinterest's own public /resource/ endpoints directly over an HTTP client that impersonates a Chrome browser at the TLS level โ no headless browser, no cookies, and no Pinterest account or login required. It's built for marketers auditing board content, visual-trend researchers, and developers or AI engineers who need Pinterest pin data as a clean feed instead of scraped HTML.
๐ What Pinterest pin data is publicly available to scrape?
Everything a signed-out visitor sees on a public board, profile or pin page is accessible without a Pinterest account; only secret and private boards sit behind a login.
| Data category | Publicly available | Restricted (needs Pinterest login) |
|---|---|---|
| Pin images and video variants | โ | โ |
| Pin title, description, alt text | โ | โ |
| Aggregated saves and this pin's own repin count | โ | โ |
| Outbound link and domain | โ | โ |
| Pin creation date, comment count, share count | โ (via pin closeup) | โ |
| Board name, pin count, sections, follower count | โ (public boards) | Secret boards โ owner/collaborator login |
| Pinner username, display name, follower count | โ | Pinner's own following list, private boards |
| Comment text and threaded replies | โ not returned by this Actor | Full comment bodies โ separate surface |
Pinterest Boards Scraper only returns publicly visible data โ what any visitor sees. Nothing behind a login wall.
๐๏ธ What data can I extract with Pinterest Boards Scraper?
Each pin row carries content and media fields, engagement and link fields, and board/pinner metadata โ all read from the same JSON keys the Actor pushes to the dataset.
Pin content and media fields
| Field name | Description |
|---|---|
id | Pinterest's numeric pin ID, as a string |
index | 1-based position of this pin within its target's results |
pinUrl | Canonical https://www.pinterest.com/pin/<id>/ URL |
sourceUrl | The urls input value this pin came from |
title | Pin title, falling back to the grid title or SEO alt text |
gridTitle | Title as shown on Pinterest's board grid (can differ from title) |
description | Pin description text |
altText | Alt text (SEO alt text, then auto-generated, then manual) |
visualAnnotations | Pinterest's own visual keyword tags for the image |
imageUrl | Best available image URL (orig โ 736x โ 474x โ 236x) |
images | Every image size variant (136x136, 170x, 236x, 474x, 736x, orig), each with url, width, height, quality, extension |
dominantColor | Hex color Pinterest computed as the image's dominant color |
imageSignature | Pinterest's perceptual image signature/hash |
hasVideo | true if the pin has a videos object |
videoDurationMs | Longest declared duration across the video's variants, in milliseconds |
videos | {"video_list": {...}} with url, width, height, duration, thumbnail, captions_urls per variant |
isIdeaPin | true if the pin carries a Story Pin (Idea Pin) ID |
isRepin | true if Pinterest flags this as a repin of another pin |
Engagement, link and date fields
| Field name | Description |
|---|---|
repins | Aggregated saves across every duplicate of this image on Pinterest โ null when Pinterest sent no aggregated stats, never 0 |
savesCount | Same value as repins |
repinCount | This specific pin's own save count โ a genuinely different number from savesCount/repins |
commentCount | Total comments on the pin; only populated with fetchPinDetails on |
shareCount | Total shares; only populated with fetchPinDetails on |
date | ISO 8601 pin creation timestamp; only populated with fetchPinDetails on |
externalLink | Destination URL the pin links out to; null if fetchLinkDetails is off |
link | Same value as externalLink |
domain | Domain of the outbound link; null if fetchLinkDetails is off |
Board, section and pinner fields
| Field name | Description |
|---|---|
boardName | Name of the board the pin was scraped from |
sectionId / sectionTitle / sectionSlug | The board section holding this pin; only populated with includeBoardSections on, null for pins outside every section |
board | {id, url, privacy, name} for the board the pin was scraped from |
boardInfo | {boardName, boardDescription, boardUrl, totalPins, boardId, boardPrivacy, boardFollowerCount, boardSectionCount, boardCollaboratorCount, boardIsCollaborative, boardCreatedAt, boardOwnerUsername} |
user | Username of the pin's owner (pinner) |
pinner | {id, fullName, username, imageUrl, isVerifiedMerchant, followerCount} โ followerCount only populated with fetchPinDetails on |
nativeCreator | Same shape as pinner minus followerCount, populated only when Pinterest names a separate original creator |
scrapedAt | ISO 8601 timestamp of when the run scraped this pin |
๐ค Add-on: Need additional Pinterest data?
Pair this Actor with Pinterest Profile Scraper for pinner bio, follower count and full public board lists, or Pinterest Ads Scraper for Pinterest's paid ad creatives and targeting data. Both live alongside this Actor under the same publisher.
๐ How does Pinterest Boards Scraper differ from the official Pinterest API?
Pinterest's own API (v5) is built for managing content you own inside an approved app, not for reading arbitrary third parties' public boards; Pinterest Boards Scraper reads any public board, profile or pin directly, with no app or account.
| Feature | Pinterest API v5 | Pinterest Boards Scraper |
|---|---|---|
| Access setup | Register a developer app and request OAuth scopes (e.g. boards:read, pins:read) | Paste a URL โ no account or app needed |
| Scope of data | Trial access starts scoped to the app owner's own account; reading another user's boards needs that user to authorize your app (developers.pinterest.com, checked 2026-08-04) | Reads any public board, profile or pin without the owner's authorization |
| App review | Standard tier requires submitting a video demo of your OAuth flow for review (developers.pinterest.com, checked 2026-08-04) | No review or approval process |
| Rate limits | Trial: daily limits per rate-limit category. Standard: per-minute limits based on activity (developers.pinterest.com, checked 2026-08-04) | Governed by this Actor's own maxItems / maxPinDetailFetches inputs, not a per-app API quota |
| Bulk read across many boards | Not designed for reading other users' boards in bulk | One run accepts any number of board, profile or pin URLs in urls |
| Output shape | Raw per-endpoint API JSON | One consistent JSON row per pin, across boards, profiles and pin URLs |
Use Pinterest's own API when you're building an integration for boards and pins you own or manage. Use Pinterest Boards Scraper when you need structured data from other people's public boards, profiles or pins without building an OAuth flow or requesting API access.
โถ๏ธ How to use Pinterest Boards Scraper
No coding is required to run a first extraction.
- Open Pinterest Boards Scraper on the Apify platform.
- Paste one or more Pinterest board URLs, profile URLs/usernames, or pin URLs/IDs into
urlsโ the only required input. - Set
maxItemsfor how many pins you want per URL, and turn onfetchPinDetailsorincludeBoardSectionsif you need creation dates, comments, shares or section labels. - Start the run.
- Download results as JSON, CSV or Excel from the Apify Console, or stream them via the Apify API once the run finishes.
How to scale to bulk pin extraction
urls is an array (stringList editor, one entry per line), so a single run can hold any number of board, profile or pin targets rather than one at a time. maxItems applies per target, not per run, and Pinterest's bookmark cursor is walked automatically for each URL until that target's pins are exhausted or the ceiling is hit.
๐ก What can you do with Pinterest pin data?
- ๐ท๏ธ Brand marketers auditing a competitor's board use
boardName,savesCountandrepinCountto see which pins are actually being saved and repinned. - ๐ Ecommerce teams tracking product placement use
link,domainandexternalLinkto find every board driving click-through traffic to a storefront. - ๐ Content strategists planning a content calendar use
title,altTextandvisualAnnotationsto spot recurring visual themes across a niche's top boards. - ๐จ Trend researchers studying visual shifts use
dominantColorandhasVideoacross thousands of pins to quantify color and format changes over time. - ๐ค AI engineers building a Pinterest-aware RAG pipeline or agent tool use
title,descriptionandaltTextas retrievable text, withsavesCountanddomainas metadata filters, straight out of the JSON.
Because the output is already typed JSON with stable keys, any of these fields can be fed into an agent framework or automation pipeline without writing a parser.
๐ก๏ธ How does Pinterest Boards Scraper handle rate limits and blocking?
Pinterest Boards Scraper calls Pinterest's public endpoints directly with a Chrome-TLS-impersonating HTTP client, and runs without a proxy by default โ Pinterest's public endpoints answered every request in testing without one. If you set proxyConfiguration, your groups, country and custom proxy URLs are honored exactly as configured, and the client rotates to the next proxy session after a failed request.
Every request retries automatically (3 attempts by default) on HTTP 403, 429, any 5xx status, a network error, or an HTTP 200 response with an empty body โ Pinterest sometimes returns 200 with nothing as a soft block, and the client treats that the same as a hard failure, backing off up to 8 seconds between attempts. If a target still can't be reached after all retries, or genuinely doesn't exist, it's logged as an uncharged error row instead of silently skipped. If every target in a run fails, the run itself fails loudly rather than reporting a false success with zero rows.
โฌ๏ธ Input
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
urls | Yes | array (stringList) | Board URLs (https://www.pinterest.com/<user>/<board>/), profile URLs or bare usernames, and pin URLs or bare pin IDs. One per line โ bulk runs are supported. | "https://www.pinterest.com/officialflawliz/cherry-cola-lips/" |
maxItems | No | integer (min 1, max 5000, default 10) | Maximum pins returned per target. Pins are fetched 250 per request, so 1,000 pins is 4 requests. A board holding fewer pins returns everything it has and logs the shortfall. | 500 |
fetchLinkDetails | No | boolean (default true) | Fill link / externalLink / domain with the destination each pin points at. Turn it off to return the three fields as null. | true |
fetchPinDetails | No | boolean (default false) | Open each pin's closeup to fill date, commentCount, shareCount, the pin's board section and the pinner's follower count. These five fields are null without it โ 1 extra request per pin. | true |
maxPinDetailFetches | No | integer (min 0, max 5000, default 50) | Ceiling on the closeup requests above, across the whole run. Pins past the ceiling are still returned, with the five detail fields null. 0 = no ceiling. | 200 |
includeBoardSections | No | boolean (default false) | Walk the board's sections and stamp sectionId / sectionTitle / sectionSlug onto each pin. Costs roughly one request per 50 section pins. Pins outside every section keep a null section. | true |
proxyConfiguration | No | object (default {"useApifyProxy": false}) | Your own proxy selection โ groups, country and custom proxy URLs โ honored exactly as configured. | {"useApifyProxy": false} |
Example input
{"urls": ["https://www.pinterest.com/officialflawliz/cherry-cola-lips/","https://www.pinterest.com/somepinner/","142567144444531120"],"maxItems": 500,"fetchLinkDetails": true,"fetchPinDetails": true,"maxPinDetailFetches": 200,"includeBoardSections": true,"proxyConfiguration": { "useApifyProxy": false }}
โฌ๏ธ Output
Results are typed, normalized JSON โ one row per pin, with the same schema on every run, downloadable as JSON, CSV or Excel from the Apify Console or via the API. A target that can't be reached or doesn't exist pushes a separate "type": "error" row (id, index, sourceUrl, errorReason, errorMessage, scrapedAt) instead of a pin row โ these accounting rows are not charged; filter them out with item.type !== "error" (or keep only item.type === "pin").
Example output
{"type": "pin","id": "987654321098765432","index": 1,"pinUrl": "https://www.pinterest.com/pin/987654321098765432/","sourceUrl": "https://www.pinterest.com/officialflawliz/cherry-cola-lips/","title": "Cherry cola glossy lip combo","gridTitle": "Cherry cola glossy lip combo","description": "Deep cherry liner under a clear gloss for a juicy, long-wear finish.","altText": "Close-up of glossy cherry-red lips","visualAnnotations": ["lipstick", "makeup", "red lips"],"imageUrl": "https://i.pinimg.com/736x/aa/bb/cc/aabbccddeeff00112233445566778899.jpg","images": [{ "url": "https://i.pinimg.com/136x136/aa/bb/cc/aabbccddeeff.jpg", "width": 136, "height": 136, "quality": "136x136", "extension": "jpg" },{ "url": "https://i.pinimg.com/736x/aa/bb/cc/aabbccddeeff.jpg", "width": 736, "height": 981, "quality": "736x", "extension": "jpg" },{ "url": "https://i.pinimg.com/originals/aa/bb/cc/aabbccddeeff.jpg", "width": 1080, "height": 1440, "quality": "orig", "extension": "jpg" }],"dominantColor": "#8c1f2b","imageSignature": "b8f2b1c9a7d4e3f0","hasVideo": false,"videoDurationMs": null,"videos": null,"isIdeaPin": false,"isRepin": false,"repins": 214,"savesCount": 214,"repinCount": 6,"commentCount": 3,"shareCount": 12,"date": "2024-11-02T14:08:31Z","externalLink": "https://www.flawliz.com/products/cherry-cola-lip-combo","link": "https://www.flawliz.com/products/cherry-cola-lip-combo","domain": "www.flawliz.com","boardName": "Cherry Cola Lips","sectionId": "784512","sectionTitle": "Lip Combos","sectionSlug": "lip-combos","board": {"id": "622981345612345678","url": "https://www.pinterest.com/officialflawliz/cherry-cola-lips/","privacy": "public","name": "Cherry Cola Lips"},"boardInfo": {"boardName": "Cherry Cola Lips","boardDescription": "Every cherry-toned lip combo we've tried.","boardUrl": "https://www.pinterest.com/officialflawliz/cherry-cola-lips/","totalPins": 1162,"boardId": "622981345612345678","boardPrivacy": "public","boardFollowerCount": 48213,"boardSectionCount": 15,"boardCollaboratorCount": 0,"boardIsCollaborative": false,"boardCreatedAt": "2021-03-14T09:22:10Z","boardOwnerUsername": "officialflawliz"},"user": "officialflawliz","pinner": {"id": "459812337766554433","fullName": "Flawliz Beauty","username": "officialflawliz","imageUrl": "https://i.pinimg.com/280x280_RS/aa/bb/cc/pinner-avatar.jpg","isVerifiedMerchant": true,"followerCount": 92104},"nativeCreator": null,"scrapedAt": "2026-08-04T10:15:03Z"}
โ๏ธ How does it work?
Pinterest Boards Scraper talks to Pinterest's own public /resource/ endpoints โ the same JSON APIs Pinterest's web app calls โ over HTTPS requests that impersonate a real Chrome browser at the TLS level, so no headless browser or HTML scraping is involved. Each board, profile or pin is fetched through Pinterest's own bookmark-cursor pagination, so a large board's full pin set comes back rather than just the first page. Requests carry no Pinterest cookie or login of any kind, so every field returned is data a signed-out visitor could already see. When a request is blocked or throttled, it's retried automatically, and a target that still can't be reached is reported as an error row rather than guessed at. The output schema โ the same JSON keys, in the same shape โ stays constant even when Pinterest changes its page layout, because the Actor talks to Pinterest's data endpoints, not its HTML.
๐งฉ Integrations
Pinterest Boards Scraper runs on the Apify platform, so it works with the same tools you already use to call other Apify Actors.
Calling Pinterest Boards Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<YOUR_USERNAME>/pinterest-boards-scraper").call(run_input={"urls": ["https://www.pinterest.com/officialflawliz/cherry-cola-lips/"],"maxItems": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["savesCount"])
Works in Go, Ruby, Node.js, cURL โ any language that can make an HTTP request.
No-code tools (n8n, Make, LangChain)
In n8n, use Apify's official node (or an HTTP Request node against the run-sync endpoint) to start a run and pull the resulting pins into your workflow. In Make, Apify's app module runs the Actor and iterates the returned dataset items as a scenario step. In LangChain, the ApifyWrapper / ApifyDatasetLoader can trigger this Actor and load the returned pins directly as documents for a chain or agent.
โ๏ธ Is it legal to scrape Pinterest pins?
Scraping publicly available Pinterest pin and board data is generally lawful โ Pinterest Boards Scraper only returns what's already visible to a signed-out visitor on pinterest.com, never content from secret boards or behind a login wall. Because each pin row includes the pinner's public username, display name and follower count, that portion of the output is personal data under regimes like the EU/UK GDPR and the California CCPA/CPRA: you need a lawful basis (e.g. legitimate interest) to store and use it, and should honor access/deletion requests and avoid retaining it longer than your stated purpose requires. The pin content itself โ images, titles, saves counts, board metadata โ is not personal data. Consult legal counsel if your use case involves bulk storage of personal data.
โ Frequently asked questions
What Pinterest pin fields does Pinterest Boards Scraper return?
The top fields are title, imageUrl, savesCount, repinCount and boardName, alongside video variants, outbound links and board/pinner metadata. See What data can I extract above for the full field list.
Does Pinterest Boards Scraper require a Pinterest account or login?
No. It calls Pinterest's public /resource/ endpoints with no cookie, CSRF token or login of any kind โ only pages a signed-out visitor could reach.
How many pins can I extract in one run?
Up to maxItems (max 5000) per target, and urls accepts any number of board, profile or pin targets in one run โ so a run's total isn't capped by the Actor, only by maxItems ร number of targets.
What happens if a Pinterest board is private, secret or doesn't exist?
It's reported as an uncharged error row (errorReason: "target_not_found" or "fetch_failed") with the failure message in errorMessage, and logged, instead of silently skipped. Secret and private boards are unreachable without the owner's login and are reported the same way.
Can I scrape multiple Pinterest boards, profiles or pins at once?
Yes. urls is an array โ one board, profile or pin per line โ and every target in the list is processed in the same run.
Does Pinterest Boards Scraper work with Claude, ChatGPT and other AI agent tools?
It's callable as an HTTP endpoint via the Apify API by any agent framework โ feed the returned JSON straight into a tool call or context window without an MCP server.
What makes Pinterest Boards Scraper different from a generic web scraper?
It walks Pinterest's real bookmark cursor rather than a bounded scroll loop, so a board's full pin set comes back instead of the first screenful; it separates aggregated savesCount from this pin's own repinCount instead of collapsing them; and a run that scrapes zero pins fails loudly instead of exiting green.
Does Pinterest Boards Scraper return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with consistent field names across runs โ no HTML parsing, no selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.
What happens when Pinterest changes its layout or anti-bot system?
The Actor is maintained and its output schema stays stable across Pinterest UI changes, since it reads Pinterest's data endpoints rather than parsing HTML.
Can I use Pinterest Boards Scraper without managing proxies or browser infrastructure?
Yes. It runs without a proxy by default and handles retries and proxy rotation internally; you only need to supply proxyConfiguration if your runs start getting blocked.
Which Pinterest pin fields work best for AI training data and RAG indexing?
For RAG, index the high-information text fields: title, description, altText and visualAnnotations. For training data, use the fields with the most consistent structure across rows: savesCount, repinCount, hasVideo and domain โ all return as typed primitives, with genuine gaps as null rather than 0.
๐ Related scrapers
| Scraper | What it extracts |
|---|---|
| Pinterest Profile Scraper | Pinner bio, follower count and public board list |
| Pinterest Ads Scraper | Pinterest's paid ad creatives and targeting data |
| TikTok Data Scraper | TikTok videos, captions and engagement metrics |
| Threads Search Post Scraper | Threads posts, quotes and replies matching a search |
๐ฌ Your feedback
Found a bug or missing a field? Let us know via the Actor's Issues tab on Apify Console, or through the support contact on its store listing โ reports get fixed and folded back into this README.