Pinterest Boards Scraper (Pin Comments & Replies) avatar

Pinterest Boards Scraper (Pin Comments & Replies)

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Pinterest Boards Scraper (Pin Comments & Replies)

Pinterest Boards Scraper (Pin Comments & Replies)

Collect actionable insights from Pinterest boards automatically. This scraper fetches board details, pins, images, videos, and engagement stats. Useful for competitive research, content strategy, and large-scale Pinterest data analysis.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

Pinterest Comments Scraper — Pin Threads, Reactions and Replies

Pinterest Comments Scraper reads a public Pinterest board, profile or pin and returns one row per pin — title, image, save count, board, pinner and outbound link — with the comment thread attached: verbatim text, commenter, reaction count, attached photos and each comment's own reply count. Turn on "Only pins with comments" and it drops every pin nobody talked about, turning a board into a reading list instead of a grid. Built for social listening teams, UGC researchers and community managers who need real customer language, not save counts.

🧭 What is Pinterest Boards Scraper (Pin Comments & Replies)?

It's a Pinterest comments scraper built on top of a full pin scraper: point it at a board URL, a profile URL or username, or a single pin URL or ID, and it returns every pin as a normalized JSON row with the comment thread nested underneath. No Pinterest account, login or API key is required — every request runs logged out, keyless, from a bare Apify datacenter exit.

  • Discovery by URL — board (/user/board/), profile (/user/ or a bare username), or a single pin (URL or numeric ID), one per line.
  • Core pin fields — id, title, image variants, save/repin counts, board name, pinner username, outbound link and domain.
  • The comment thread — verbatim text, commenter identity, reaction count, attached photos, and each comment's own reply count, attached as a nested comments array.
  • A discussion filtercommentedPinsOnly keeps only pins with a real thread, with a scan ceiling so a silent multi-thousand-pin board can't run away with your run.
  • Optional enrichment — creation date, share count, pinner follower count and board section, each gated behind its own input so you only pay for what you ask for.
  • Standard Apify dataset export — JSON, CSV, Excel, HTML table, XML or RSS straight from the Console, or pulled via apify-client.

📊 What data can I extract with Pinterest Boards Scraper (Pin Comments & Replies)?

Every pin row carries content, media, engagement and board fields; the comment thread and board/section context are broken out below.

FieldExample valueUse case
id"1618549864585211"Pinterest's own pin ID, stable across runs
type"pin""error" on a failed target — see Output sample
index7Position of this row within its target
pinUrl"https://www.pinterest.com/pin/1618549864585211/"Canonical link back to the pin
sourceUrl"https://www.pinterest.com/HGTV/hgtv-dream-home/"The input URL this row came from
title / gridTitle"Walnut console table styling"Content title for a catalogue or content audit
description"Rich walnut finish, brass hardware, entryway styling."Longer copy for content review
altText"A walnut console table in a bright entryway"Accessibility text / image-SEO audits
visualAnnotations["furniture", "console table", "walnut"]Pinterest's own visual tags on the image
imageUrl / images[{"url": "...", "width": 736, "height": 1104, "quality": "736x", "extension": "jpg"}]Best-available still and every size variant returned
dominantColor"#a67b5b"Palette / swatch analysis
hasVideo / videoDurationMs / videosfalse / null / nullFilters video pins; duration and renditions when present
isIdeaPin / isRepinfalse / trueContent-type flags
savesCount (repins)4200Aggregated saves across every duplicate of the image — null, never 0, when Pinterest sent nothing
repinCount12This pin's own save count — a different number from savesCount
commentCount / shareCount / date26 / 3 / "2015-12-15T17:43:25Z"Only populated when fetchPinDetails is on
externalLink / link / domain"https://www.walmart.com/ip/..." / same / "walmart.com"Outbound destination for buyer-intent segmentation — null when fetchLinkDetails is off
user / pinner"HGTV" / {"id": "...", "username": "HGTV", "isVerifiedMerchant": false, "followerCount": 812000}Pinner identity; followerCount only with fetchPinDetails on
nativeCreatornullOriginal creator when the pin was authored elsewhere
scrapedAt"2026-08-04T10:15:00Z"Run timestamp, UTC

🗣️ Comment thread data

Each pin row carries hasComments, commentsCollected, commentCountReported (Pinterest's own aggregated total) and commentsTruncated, plus the thread itself in comments[]:

FieldExample valueUse case
id / type"998877665544" / "aggregatedcomment"aggregatedcomment (written comment) or userdiditdata (a Pinterest "I tried it" post) — each keeps its text under a different key
text / hasText"Does this come in walnut? Mine arrived broken :(" / trueVerbatim — emoji and line breaks preserved exactly, never stripped
createdAt"2024-03-02T09:14:00Z"ISO 8601 UTC
user{"id": "...", "username": "jane_doe", "fullName": "Jane Doe", "isPrivateProfile": false}Commenter identity
replyCount2This comment's own reply count — reply text itself isn't retrievable, see FAQ
reactionCount5Sum of Pinterest's reaction types, or like_count on an "I tried it" post
helpfulCount / isEdited0 / falsePinterest's "helpful" tally; edit flag (written comments only)
mediaUrls[]Photo attachments — populated on "I tried it" posts and sticker replies

One concrete use case: a home-goods brand pulls commentsCollected, filters hasText: true, and reads every text value against its own board to catch "does it come in walnut" and "mine arrived broken" before they turn into support tickets — data saves counts never surface.

🎯 Board and targeting data

The fields you segment and scope runs on: boardName, board.{id,url,privacy,name}, boardInfo.{totalPins,boardFollowerCount,boardSectionCount,boardCollaboratorCount,boardIsCollaborative,boardCreatedAt,boardOwnerUsername}, and — only when includeBoardSections is on — sectionId / sectionTitle / sectionSlug. domain segments pins by the merchant or site they link out to; pinsDroppedByFilter reports how many silent pins commentedPinsOnly has skipped on the current target so far.

🆚 How does Pinterest Boards Scraper (Pin Comments & Replies) differ from the official Pinterest API?

Pinterest's own API (v5) is built to manage the pins and boards your own authenticated app account owns — creating, listing and updating them — plus ads, catalog and analytics endpoints; it requires an approved developer app, an OAuth grant, and (per Pinterest's access-tier documentation) starts on a Trial tier limited to calls per day/app before a Standard tier unlocks per-minute/per-user limits (developers.pinterest.com, checked 2026-08-04). Its published endpoint list has no documented resource for reading another account's comment thread at all.

FeaturePinterest API v5This actor
Read a board/profile you don't ownNot documented for arbitrary public accounts✅ works from any public URL or username
Comment thread on a pinNo comments-read endpoint in the published reference✅ verbatim text, reactions, reply counts
Access approvalDeveloper app review, OAuth, Trial → Standard tiers❌ none — paste URLs and run
Setup requirementRegister app, request scopes, get authorizationApify Console or API call
Output shapeRaw per-endpoint API JSONOne normalized row per pin, export-ready

❓ Why doesn't the official Pinterest API return a stranger's comments?

Pinterest's v5 endpoints (pins_get, pins_list, boards_list_pins, and the rest) operate on content the authorizing account owns or manages — that's the whole point of OAuth scopes like pins:read and boards:read. There is no documented endpoint that lets an approved app pull the comment thread under someone else's public pin, because comments were never part of the content-management surface the API was built for. This actor covers that gap by reading the same public, logged-out /resource/ endpoints the Pinterest website itself calls to render a pin page, gated on Pinterest's own aggregated comment counter rather than the unreliable per-pin one.

Use the official API when you're managing, publishing or reporting on pins and boards your own business account controls. Use this actor when you need to read what's already public on someone else's board, profile or pin — including what people said about it.

💡 How to use data extracted from Pinterest?

📣 Social listening and community managers

Point the actor at your own brand's boards with commentedPinsOnly: true and a generous maxPinsScannedPerUrl, then read comments[].text on every pin that came back. It's the direct line to what customers actually say under a product pin — sizing complaints, "where can I buy this," damaged-in-shipping reports — that savesCount alone will never show you.

🏢 Agencies and UGC partners

Run the same input across every client board on a schedule and compare commentsCollected, commentCountReported and hasComments side by side to benchmark which boards and pins are generating real engagement versus silent saves, then hand clients a discussion-density report instead of a vanity-metric screenshot.

📊 Market and content research

Walk a category's high-traffic boards (recipe, DIY, product) with fetchPinDetails on to pull date and shareCount alongside the thread, and correlate comment density against visualAnnotations and dominantColor to see which visual styles and topics actually start a conversation, not just get saved.

🤖 AI agents and automated pipelines

Feed comments[].text into a sentiment or intent classifier as part of a monitoring pipeline — the actor ships the raw verbatim text and structural fields (replyCount, reactionCount, hasText) and deliberately no computed judgement, so the agent's own model does the classifying on clean input.

🔼 Input sample

ParameterRequiredTypeDescriptionExample value
urlsYesarrayBoard URLs (https://www.pinterest.com/<user>/<board>/), profile URLs or bare usernames, and pin URLs or bare pin IDs. One per line.["https://www.pinterest.com/HGTV/hgtv-dream-home/"]
maxItemsNointegerPin rows to return per target, 1–5000, default 10. With commentedPinsOnly on, this counts pins you keep, not pins opened.25
includeCommentsNobooleanAttach the comment thread as comments[]. Default true. Off returns plain pin rows with an empty array.true
maxCommentsPerPinNointegerComments per pin, 1–200, default 20. Comments are read 50 per request; a longer thread is cut and flagged commentsTruncated: true.50
commentedPinsOnlyNobooleanDrop pins with an empty thread, default true. Ignored when includeComments is off.true
maxPinsScannedPerUrlNointegerCeiling on pins opened while hunting for commented ones, 0–20000, default 400. 0 = no ceiling.500
fetchPinDetailsNobooleanFills date, commentCount, shareCount and pinner.followerCount, default false. Reuses the same closeup request the comment engine already made.true
maxPinDetailFetchesNointegerCeiling on the enrichment above, across the whole run, 0–5000, default 50. 0 = no ceiling.25
includeBoardSectionsNobooleanStamps sectionId / sectionTitle / sectionSlug onto each pin, default false.false
fetchLinkDetailsNobooleanFills link / externalLink / domain, default true. Off returns all three as null.true
proxyConfigurationNoobjectYour own Apify proxy selection, honored exactly as configured. Default {"useApifyProxy": false}.{"useApifyProxy": false}
{
"urls": ["https://www.pinterest.com/HGTV/hgtv-dream-home/"],
"maxItems": 25,
"includeComments": true,
"maxCommentsPerPin": 50,
"commentedPinsOnly": true,
"maxPinsScannedPerUrl": 500,
"fetchPinDetails": true,
"maxPinDetailFetches": 25,
"includeBoardSections": false,
"fetchLinkDetails": true,
"proxyConfiguration": { "useApifyProxy": false }
}

Common pitfall: maxItems counts pins kept, not pins opened. With commentedPinsOnly on and a low maxPinsScannedPerUrl, a quiet board can exhaust its scan ceiling before it ever fills maxItems — the run log prints the real kept/dropped fraction, and if every opened pin comes back silent the run fails loudly instead of finishing on an empty dataset.

🔽 Output sample

One typed, normalized JSON row per pin, consistent across every target type (board, profile, pin). Export as JSON, CSV, Excel, HTML table, XML or RSS from the Apify Console or API — nested fields like comments[] flatten to indexed columns in CSV/Excel.

{
"type": "pin",
"id": "1618549864585211",
"index": 1,
"pinUrl": "https://www.pinterest.com/pin/1618549864585211/",
"sourceUrl": "https://www.pinterest.com/HGTV/hgtv-dream-home/",
"title": "Walnut console table styling",
"gridTitle": "Walnut console table",
"description": "Rich walnut finish, brass hardware, entryway styling.",
"altText": "A walnut console table in a bright entryway",
"visualAnnotations": ["furniture", "console table", "walnut"],
"imageUrl": "https://i.pinimg.com/736x/aa/bb/cc/table.jpg",
"images": [
{ "url": "https://i.pinimg.com/736x/aa/bb/cc/table.jpg", "width": 736, "height": 1104, "quality": "736x", "extension": "jpg" }
],
"dominantColor": "#a67b5b",
"imageSignature": "abc123def456",
"hasVideo": false,
"videoDurationMs": null,
"videos": null,
"isIdeaPin": false,
"isRepin": true,
"repins": 4200,
"savesCount": 4200,
"repinCount": 12,
"commentCount": 26,
"shareCount": 3,
"date": "2015-12-15T17:43:25Z",
"externalLink": "https://www.walmart.com/ip/walnut-console-table/123456",
"link": "https://www.walmart.com/ip/walnut-console-table/123456",
"domain": "walmart.com",
"boardName": "HGTV Dream Home",
"sectionId": null,
"sectionTitle": null,
"sectionSlug": null,
"board": {
"id": "543216789012345",
"url": "https://www.pinterest.com/HGTV/hgtv-dream-home/",
"privacy": "public",
"name": "HGTV Dream Home"
},
"boardInfo": {
"boardName": "HGTV Dream Home",
"boardDescription": "Every room from this year's Dream Home.",
"boardUrl": "https://www.pinterest.com/HGTV/hgtv-dream-home/",
"totalPins": 187,
"boardId": "543216789012345",
"boardPrivacy": "public",
"boardFollowerCount": 812000,
"boardSectionCount": 6,
"boardCollaboratorCount": 0,
"boardIsCollaborative": false,
"boardCreatedAt": "2015-01-05T00:00:00Z",
"boardOwnerUsername": "HGTV"
},
"user": "HGTV",
"pinner": {
"id": "223344556677",
"fullName": "HGTV",
"username": "HGTV",
"imageUrl": "https://i.pinimg.com/280x280_RS/pinner.jpg",
"isVerifiedMerchant": false,
"followerCount": 812000
},
"nativeCreator": null,
"scrapedAt": "2026-08-04T10:15:00Z",
"hasComments": true,
"commentsCollected": 2,
"commentCountReported": 26,
"commentsTruncated": false,
"pinsDroppedByFilter": 4,
"comments": [
{
"id": "998877665544",
"type": "aggregatedcomment",
"text": "Does this come in walnut? Mine arrived broken :(",
"hasText": true,
"createdAt": "2024-03-02T09:14:00Z",
"user": {
"id": "334455667788",
"username": "jane_doe",
"fullName": "Jane Doe",
"imageUrl": "https://i.pinimg.com/280x280_RS/jane.jpg",
"isPrivateProfile": false
},
"replyCount": 2,
"reactionCount": 5,
"helpfulCount": 0,
"isEdited": false,
"mediaUrls": []
},
{
"id": "998877665599",
"type": "userdiditdata",
"text": "Made this look happen in my own entryway, love it!",
"hasText": true,
"createdAt": "2024-04-11T15:02:00Z",
"user": {
"id": "990011223344",
"username": "home_by_amy",
"fullName": "Amy R.",
"imageUrl": "https://i.pinimg.com/280x280_RS/amy.jpg",
"isPrivateProfile": false
},
"replyCount": 0,
"reactionCount": 14,
"helpfulCount": 3,
"isEdited": null,
"mediaUrls": ["https://i.pinimg.com/736x/dd/ee/ff/entryway.jpg"]
}
]
}

A failed target leaves an uncharged accounting row instead of vanishing silently: {"type": "error", "id": null, "sourceUrl": "...", "errorReason": "target_not_found", "errorMessage": "...", "scrapedAt": "..."}. Filter these out with type !== "error" before counting or billing against results.

🎯 How do you filter and target specific pins?

Precision here comes from which pins get opened, which survive, and how deep each thread goes — there's no keyword search, so targeting starts at the URL level:

  1. Target scope — a board URL scrapes one board; a profile URL or bare username walks every board that profile publishes, newest-pinned first; a pin URL or bare numeric ID scrapes exactly one pin regardless of commentedPinsOnly.
  2. Quality thresholdcommentedPinsOnly (default true) keeps only pins with a retrievable thread. Discussion density is a board property and it's low: measured live, /HGTV/hgtv-dream-home/ kept 10 of 26 pins opened, /officialflawliz/cherry-cola-lips/ kept 0 of 25, and a deep walk of /marthastewart/easy-dinner-recipes/ kept 5 of 400.
  3. Volume controlsmaxItems caps rows kept; maxPinsScannedPerUrl caps pins opened while hunting for them (0 = no ceiling); maxCommentsPerPin caps comments per thread (1–200, cut threads are flagged commentsTruncated). These three interact: a tight scan ceiling on a quiet board can end the run before maxItems fills.
  4. Enrichment scopefetchPinDetails + maxPinDetailFetches decide how many pins additionally get date/shareCount/pinner.followerCount; includeBoardSections decides whether pins get tagged with their board section.
{ "urls": ["https://www.pinterest.com/HGTV/hgtv-dream-home/"], "maxItems": 20, "commentedPinsOnly": true, "maxPinsScannedPerUrl": 2000 }
{ "urls": ["https://www.pinterest.com/HGTV/"], "maxItems": 500, "includeComments": false }
{ "urls": ["1618549864585211"], "includeComments": true, "maxCommentsPerPin": 200, "fetchPinDetails": true }

The first digs deep into one board for real discussion; the second walks an entire profile fast with comments off for pure metadata; the third pulls one pin's complete thread and full detail.

▶️ Want to try other Pinterest scrapers?

Other Pinterest scrapers

ScraperWhat it extracts
Pinterest Profile Scraper With Email & Website ContactsPublic Pinterest profile bios followed to email, phone and social handles on the linked website
Pinterest Ads Scraper — Performance AnalyticsPinterest Ads Library ads with flattened targeting and derived reach/engagement metrics

Comment and review scrapers on other platforms

ScraperWhat it extracts
TikTok Shop Data Scraper: Reviews & Sentiment AnalysisTikTok Shop product reviews with sentiment scoring
Tripadvisor Review Scraper: Photo & Visual Content FiltersTripadvisor reviews filtered by photo and visual content

⚙️ How to extract Pinterest data programmatically

The actor runs as a standard Apify Actor: one API call starts it, one dataset endpoint returns structured JSON back — no separate signup, no Pinterest credentials.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<your-handle>/pinterest-boards-scraper-pin-comments-and-replies").call(
run_input={
"urls": ["https://www.pinterest.com/HGTV/hgtv-dream-home/"],
"commentedPinsOnly": True,
"maxCommentsPerPin": 50,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("type") == "error":
continue
print(item["title"], item["commentsCollected"])
for comment in item.get("comments", []):
print(" -", comment["text"])

Export to spreadsheets or CRM

Export the dataset as CSV or Excel from the Console (or dataset().download_items(item_format="csv")) and map title to a content/product column, boardName to a category or campaign column, commentsCollected / commentCountReported to an engagement column, and each comments[].text row to a feedback field for a spreadsheet pivot or CRM import.

Yes. Every board, profile, pin and comment this actor reads is already public on pinterest.com — nothing requires a login, a password, or bypassing an access control, and the actor never authenticates as a Pinterest user. Pin metadata (title, image, save counts) is Pinterest's own public content. The comment thread is different: user.username, user.fullName, the avatar and the comment text are personal data about identifiable people, so GDPR, CCPA and equivalent regimes govern how you store, process and republish it once collected — not whether you may read it. Pinterest's own Terms of Service also govern automated access at scale; review them before a large or recurring run. Consult legal counsel for commercial applications involving bulk storage of personal data, particularly before republishing a comment that names or criticizes someone.

❓ Frequently asked questions

What happens if a pin is deleted or a board goes private after I've scraped it?

Nothing retroactive — the row you already collected stays in your dataset unchanged. If a target has vanished before the run reaches it, the actor logs an uncharged type: "error" row (errorReason: "target_not_found") instead of silently skipping it, so a disappeared board or pin is always visible in the output.

Can I get comments along with saves, board and pinner info in the same run?

Yes — one row per pin carries both. Turn includeComments off and you get plain pin rows (save counts, board, pinner, link) with an empty comments array instead; there's no separate run needed for either.

How accurate is the comment count data?

commentCountReported reflects Pinterest's own aggregated comment counter, which this actor uses deliberately instead of the per-pin comment_count field: the two disagreed on 44 of 60 sampled pins on one board, with comment_count claiming 1–15 comments on 19 pins whose aggregated count — and retrievable comments — was actually zero. Thread recovery against Pinterest's declared total is lossy in the other direction too, since deleted and hidden comments stay in Pinterest's count; that's why commentCountReported and commentsCollected are shipped side by side rather than presented as one "completeness" number.

How many pins and comments can I get per run?

maxItems caps rows kept per target at 1–5000 (default 10). maxCommentsPerPin caps comments per thread at 1–200 (default 20); a longer thread is cut and flagged commentsTruncated: true, with commentCountReported still showing Pinterest's true total. maxPinsScannedPerUrl caps how many pins get opened while hunting for commented ones (0–20000, default 400, 0 = no ceiling) — this is what actually protects you from a silent multi-thousand-pin board.

How do I get only the pins people actually discussed?

Turn on commentedPinsOnly (the default). It drops any pin whose thread came back empty so the export reads like a discussion log rather than a board grid. Density varies hard by board — 10 of 26 pins kept on one board, 0 of 25 on another, 5 of 400 on a deep walk of a third — so pair it with a generous maxPinsScannedPerUrl on boards you expect to be mostly quiet.

⚠️ Can I get the replies under each comment?

No. Reply bodies are not served to logged-out clients: seven dedicated Pinterest reply resources answer HTTP 404, and the comments endpoint silently re-serves the identical top-level page when asked for a reply thread — a toggle that changes nothing. This actor ships replyCount (each comment's own reply count) instead of a fake includeReplies option, because a toggle with no effect is worse than an absent feature.

Does this scraper work with Claude, ChatGPT and other AI agent frameworks?

Yes, as a standard HTTP-callable Apify Actor — any agent framework that can make an authenticated REST call (via apify-client or a raw API request) can start a run and read the dataset back as JSON, including piping comments[].text straight into a sentiment or classification tool.

What makes this different from a plain Pinterest scraper?

It treats the comment thread as the actual product instead of an afterthought: it reads text from the correct key depending on comment type (aggregatedcomment vs userdiditdata, which store text in different fields), gates on Pinterest's aggregated comment counter instead of the unreliable per-pin one, and reports a missing count as null rather than a false 0. It also declines to ship a comments[].replies field that would silently return duplicate data, and doesn't attach a sentiment score or spam filter to comment text — spam is real Pinterest content and is returned unfiltered.

Can I use this without a Pinterest account or API key?

Yes. Every request runs logged out and keyless — no Pinterest login, password, cookie or developer app is needed. You only need an Apify account to run the actor; a proxy is optional and off by default, since Pinterest's public endpoints answered every request in testing without one.

Conclusion

Pinterest Comments Scraper turns a board, profile or pin into structured JSON: the full pin record — image, saves, board, pinner, outbound link — plus the comment thread attached correctly across both of Pinterest's comment shapes, gated on the one counter Pinterest itself doesn't fake. It's built for social listening teams, UGC researchers, agencies and AI pipelines that need what people actually said under a pin, not just how many times it was saved. Reply bodies stay out because Pinterest doesn't serve them logged out — everything else ships as measured, with real nulls instead of false zeros. Start a run from the Apify Console or API with a single board URL to see the thread on your own content.