Pinterest Boards Scraper avatar

Pinterest Boards Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Pinterest Boards Scraper

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

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

1

Monthly active users

3 days ago

Last modified

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 categoryPublicly availableRestricted (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 ActorFull 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 nameDescription
idPinterest's numeric pin ID, as a string
index1-based position of this pin within its target's results
pinUrlCanonical https://www.pinterest.com/pin/<id>/ URL
sourceUrlThe urls input value this pin came from
titlePin title, falling back to the grid title or SEO alt text
gridTitleTitle as shown on Pinterest's board grid (can differ from title)
descriptionPin description text
altTextAlt text (SEO alt text, then auto-generated, then manual)
visualAnnotationsPinterest's own visual keyword tags for the image
imageUrlBest available image URL (orig โ†’ 736x โ†’ 474x โ†’ 236x)
imagesEvery image size variant (136x136, 170x, 236x, 474x, 736x, orig), each with url, width, height, quality, extension
dominantColorHex color Pinterest computed as the image's dominant color
imageSignaturePinterest's perceptual image signature/hash
hasVideotrue if the pin has a videos object
videoDurationMsLongest declared duration across the video's variants, in milliseconds
videos{"video_list": {...}} with url, width, height, duration, thumbnail, captions_urls per variant
isIdeaPintrue if the pin carries a Story Pin (Idea Pin) ID
isRepintrue if Pinterest flags this as a repin of another pin
Field nameDescription
repinsAggregated saves across every duplicate of this image on Pinterest โ€” null when Pinterest sent no aggregated stats, never 0
savesCountSame value as repins
repinCountThis specific pin's own save count โ€” a genuinely different number from savesCount/repins
commentCountTotal comments on the pin; only populated with fetchPinDetails on
shareCountTotal shares; only populated with fetchPinDetails on
dateISO 8601 pin creation timestamp; only populated with fetchPinDetails on
externalLinkDestination URL the pin links out to; null if fetchLinkDetails is off
linkSame value as externalLink
domainDomain of the outbound link; null if fetchLinkDetails is off

Board, section and pinner fields

Field nameDescription
boardNameName of the board the pin was scraped from
sectionId / sectionTitle / sectionSlugThe 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}
userUsername of the pin's owner (pinner)
pinner{id, fullName, username, imageUrl, isVerifiedMerchant, followerCount} โ€” followerCount only populated with fetchPinDetails on
nativeCreatorSame shape as pinner minus followerCount, populated only when Pinterest names a separate original creator
scrapedAtISO 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.

FeaturePinterest API v5Pinterest Boards Scraper
Access setupRegister a developer app and request OAuth scopes (e.g. boards:read, pins:read)Paste a URL โ€” no account or app needed
Scope of dataTrial 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 reviewStandard 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 limitsTrial: 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 boardsNot designed for reading other users' boards in bulkOne run accepts any number of board, profile or pin URLs in urls
Output shapeRaw per-endpoint API JSONOne 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.

  1. Open Pinterest Boards Scraper on the Apify platform.
  2. Paste one or more Pinterest board URLs, profile URLs/usernames, or pin URLs/IDs into urls โ€” the only required input.
  3. Set maxItems for how many pins you want per URL, and turn on fetchPinDetails or includeBoardSections if you need creation dates, comments, shares or section labels.
  4. Start the run.
  5. 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, savesCount and repinCount to see which pins are actually being saved and repinned.
  • ๐Ÿ›’ Ecommerce teams tracking product placement use link, domain and externalLink to find every board driving click-through traffic to a storefront.
  • ๐Ÿ“ˆ Content strategists planning a content calendar use title, altText and visualAnnotations to spot recurring visual themes across a niche's top boards.
  • ๐ŸŽจ Trend researchers studying visual shifts use dominantColor and hasVideo across thousands of pins to quantify color and format changes over time.
  • ๐Ÿค– AI engineers building a Pinterest-aware RAG pipeline or agent tool use title, description and altText as retrievable text, with savesCount and domain as 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

ParameterRequiredTypeDescriptionExample value
urlsYesarray (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/"
maxItemsNointeger (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
fetchLinkDetailsNoboolean (default true)Fill link / externalLink / domain with the destination each pin points at. Turn it off to return the three fields as null.true
fetchPinDetailsNoboolean (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
maxPinDetailFetchesNointeger (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
includeBoardSectionsNoboolean (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
proxyConfigurationNoobject (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 ApifyClient
client = 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.

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.

ScraperWhat it extracts
Pinterest Profile ScraperPinner bio, follower count and public board list
Pinterest Ads ScraperPinterest's paid ad creatives and targeting data
TikTok Data ScraperTikTok videos, captions and engagement metrics
Threads Search Post ScraperThreads 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.