Pinterest Search Scraper: Pins, Boards, Profiles & Comments avatar

Pinterest Search Scraper: Pins, Boards, Profiles & Comments

Pricing

from $1.71 / 1,000 pins

Go to Apify Store
Pinterest Search Scraper: Pins, Boards, Profiles & Comments

Pinterest Search Scraper: Pins, Boards, Profiles & Comments

Scrape Pinterest without a login: the pins of searches, search URLs, boards, sections and profiles, boards and people searches, pin URLs. Each pin's id, URL, title, description, image and size, video, link, date, reactions, saves, pinner and board; comments as an add-on. Misses free.

Pricing

from $1.71 / 1,000 pins

Rating

0.0

(0)

Developer

Hyperbach

Hyperbach

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

Pinterest without a login: the pins of searches (All Pins, Videos, Products with prices), of boards and board sections, of profiles and of pin URLs; boards and people searches; a pin's comments and a search pin's save count and numeric id as add-ons. One row per pin — the pin's id and URL, title, description and alt text, the link it points to, the image with its size, the video, the date, the reactions, and the saves, repins and comments where Pinterest shows them, the hashtags, the pinner and the board — and one free row per input with a completeness verdict: COMPLETE (Pinterest's own end), CAPPED (your limit), TRUNCATED or PARTIAL. No login, no API key, no browser, proxies handled for you.

From $3.27 per 1,000 rows (pin) on the Free plan, $2.85 on Starter; every row and add-on is priced under Pricing below. A run start is $0.0012. The default input returns about 50 rows for about $0.1647. Every input gets a free row with its verdict; a board, profile or pin that does not exist is a free not_found row.

A Pinterest pin page in a browser: a photo of a narrow oak galley kitchen with its title, description, hashtags, pinner and board. Beside it, the row this Actor returns for the pin, with link and domain highlighted, then the hashtags, the reaction count, the pinner and the board.

Tested head-to-head on 2026-11-04

The job: the pins of one Pinterest search (minimalist kitchen design, the leader automation-lab's own default query), 50 pins. Every Actor ran on it the same day from the same harness; a rival's cost is what a buyer account paid, this Actor's is its list price on the Free plan. Fields counts the filled fields of a typical row. Re-measured monthly.

ActorRowsFirst rowRun timeCostFieldsFailures
this Actor505.7 s6.5 s$0.1642none
epctex/pinterest-scraper507.8 s7.9 s$0.00515none
automation-lab/pinterest-scraper5017 s18 s$0.1620none

Why this Pinterest scraper

  • Every logged-out Pinterest job in one Actor. Search queries and search URLs (All Pins, Videos, Products with prices, Boards, People), board URLs and board sections, profile URLs or usernames, pin URLs and pin.it links: give any mix in one run, each input with its own cap (maxPins) and the run's cap on top (maxItems).
  • The fields Pinterest shows. The pin's id and URL, title, description and alt texts, the link and its domain, the full-size image with its width and height plus a 736-px and a 236-px copy, the dominant colour, the video (an HLS stream, the MP4 where Pinterest's answer lists one, its length), the date, the reactions, the hashtags, Pinterest's topics, the pinner and the board. Board, profile and pin-URL pins also carry the save and repin counts; a pin URL the comment and share counts; a Products pin its price, currency and stock.
  • Boards to their own end. A board is read 50 pins a call to the pin count Pinterest gives for it, on one anonymous visitor's cookies (Pinterest serves some visitors a board's first page with no next page; the Actor asks again as a new visitor). Our test read IKEA USA's Kitchens board, 681 of 681 pins, in 14 calls (2026-11-04).
  • Deep searches, checked. Pins come up to 100 on the first call and 25 a call after it, in Pinterest's own order, to Pinterest's own end of the list: our test read 876 distinct pins for garden ideas in 44 pages (2026-10-22). About a fifth of a long search's results repeat earlier pins; each pin is delivered and charged once a run.
  • Add-ons when you need them. A pin's comments as their own rows (includeComments), and for search pins the save count and the numeric pin id that Pinterest's logged-out search does not show (searchPinDetails: found for 8 of 10 pins of one search on our test, 2026-11-04; a pin on one of Pinterest's automatic preview boards has none). Each is charged only when you switch it on. For a video pin whose answer lists only the HLS stream, checkVideoMp4 looks for the MP4 file Pinterest's CDN keeps beside it (one extra read per video pin, no charge).
  • Honest runs. Every input gets a free row that says what was read and why the walk stopped; a value that is not a Pinterest search, board, profile or pin is a free invalid row, a record that does not exist a free not_found row. Filters (only pins with a link, a minimum of reactions, words to exclude, a minimum image width, a date, no AI-generated pins, a price band) drop pins for free.

Who it's for

  • Marketers and content creators — what ranks for a keyword on Pinterest, which boards collect it and which profiles lead it: the titles, descriptions, hashtags and images of the top pins, and the sites they link to.
  • E-commerce and SEO teams — a competitor's boards and created pins with their save counts, the products of a search with their prices, and which domains the pins point to, read again on a schedule to see what moved.
  • Researchers and data teams — typed rows keyed by pin_id, with the board and the pinner, comments joined by pin_id, a free row per input with the verdict, and a run summary to check a pipeline against.

Quick start

The first 50 pins of a search

{
"searchQueries": [
"minimalist kitchen design"
],
"maxPins": 50
}

A whole board and a profile's pins

{
"boardUrls": [
"https://www.pinterest.com/IKEAUSA/kitchens/"
],
"profileUrls": [
"westelm"
],
"maxPins": 1000
}

Products with prices, and boards for a keyword

{
"searchQueries": [
"nike sneakers"
],
"searchScope": "products",
"searchUrls": [
"https://www.pinterest.com/search/boards/?q=minimalist%20kitchen"
],
"maxPins": 100
}

Pins with their comments

{
"pinUrls": [
"https://www.pinterest.com/pin/1013380353677170047/"
],
"includeComments": true,
"maxCommentsPerPin": 50
}

Switching from automation-lab/pinterest-scraper?

Your input works as it is. Each name in the left column is read as this Actor's own field and the run log says so (read <theirs> as <ours>); a name marked not read is ignored with a note. A value in the other Actor's shape, an object list or its own date form, is read too.

automation-lab/pinterest-scraperthis Actorwhat to know
searchQueriessearchQueriesThe same: keywords, one a line; searchScope picks pins, videos, products, boards or people.
boardUrlsboardUrlsThe same: a board URL, or a board section's URL for that section only; username/board works too.
profileUrlsprofileUrlsThe same: a profile URL or a bare username; the profile row and the profile's created pins.
pinUrlspinUrlsThe same: a pin URL (numeric or with a title), a pin.it link or the number.
maxPinsmaxPinsThe same name; per input, 1 to 10,000.
proxynot readNot an input: the Actor picks and rotates its own exits (Apify's datacenter proxy, residential as the fallback), so no proxy setting is needed.

What differs:

  • The leader's input names are this Actor's own: searchQueries, boardUrls, profileUrls, pinUrls and maxPins run as they are.
  • maxPins is per input here (each search, board or profile), and maxItems caps the whole run.
  • The leader's saves field is the reaction count; here it is reaction_count, and save_count is the real save count where Pinterest shows it (boards, profiles, pin URLs, and search pins with the details add-on).
  • Every input gets a free row with a verdict (how far the list was read and why it stopped).

Output

One row per pin, board, profile or comment (and one free row per input):

fieldmeaning
row_typepin (one pin, charged), board (a board, charged), profile (a profile, charged), comment (one comment of a pin, the add-on, charged) or search (the free row of one input, with the walk's verdict; every input kind gets one).
input_indexThe 1-based position of the input this row answers, over every list in order: searchQueries, searchUrls, boardUrls, profileUrls, pinUrls.
input_valueThe input as you gave it (the query, the URL or the username).
input_kindWhat the input was read as: query (a search query), url (a search URL), board (a board or section), profile or pin.
queryThe search's words (a URL's q=).
scopeA search's scope: pins (All Pins), videos, buyable_pins (Products), boards or users (People). Null for a board, profile or pin input.
search_urlThe search on Pinterest, as a URL you can open.
statusA free row: ok, invalid, duplicate, not_found, failed or not_read (see the FAQ). A pin, board, profile or comment row: ok.
status_detailWhy, in words, when the status is not ok.
scraped_atWhen the row was read (ISO 8601, UTC).
positionThe row's place among this input's delivered rows (pins of a search, a board or a profile; boards or profiles of a search), in Pinterest's order (1 = first); a comment's place under its pin.
pin_idPinterest's id of the pin: an encrypted e1_… id for a search or board pin (the same in every run), the number for a profile's pin or a pin URL.
pin_urlThe pin's page on Pinterest.
titleThe pin's title (null when the pin has none).
descriptionThe pin's description, as the pinner wrote it.
alt_textThe image's alt text (Pinterest's description of the picture).
linkThe web page the pin points to (null for a pin uploaded with no link).
domainThe domain of the linked page (null when the pin has no link).
image_urlThe full-size image.
image_widthThe full-size image's width in pixels.
image_heightThe full-size image's height in pixels.
image_736x_urlThe image 736 pixels wide.
thumbnail_urlThe image 236 pixels wide (the grid's thumbnail).
dominant_colorThe image's dominant colour (#rrggbb).
is_videoTrue for a video pin.
video_urlA video pin's stream (an HLS .m3u8 URL).
video_duration_sA video pin's length in seconds.
created_atWhen the pin was created (ISO 8601, UTC).
reaction_countThe pin's reactions, as Pinterest shows them (null when Pinterest gives no count).
hashtagsThe hashtags in the pin's title and description, without the #.
topicsPinterest's own topics for the pin (home decor …).
is_promotedTrue for a promoted pin (an ad).
pinner_usernameThe pinner's Pinterest username.
pinner_nameThe pinner's display name.
pinner_urlThe pinner's profile on Pinterest.
pinner_followersThe pinner's followers, where the answer gives it (a search pin; null on a board's or profile's pin).
board_idPinterest's id of the board the pin is saved to.
board_nameThe board's name.
board_urlThe board's page on Pinterest.
board_pin_countThe board's pin count, as Pinterest gives it.
pins_deliveredA free row: the pin rows delivered for this input.
pages_readA free row: how many calls of the input's list were read (a search's last page twice; a board's or profile's record counts as one).
repeats_skippedA free row: results skipped because Pinterest had shown them on an earlier page, or another input of the run delivered them.
verdictA free row: COMPLETE (Pinterest's own end of the list on two reads, or a board's own pin count reached), CAPPED (your cap), TRUNCATED (the list only repeated itself, ended under Pinterest's own count, or the filters dropped every new pin for 10 pages) or PARTIAL (a refusal or the time limit).
verdict_detailA free row: the verdict in words — rows delivered, pages read, repeats, pins filtered, the source's own count, why the walk stopped.
numeric_pin_idThe pin's numeric id: the pin id itself for a profile's pin or a pin URL; for a search pin, the one the details add-on found (null when not found).
numeric_pin_urlThe pin's page by its numeric id, which opens logged out.
grid_titleThe title Pinterest shows under the pin in a grid (a title Pinterest made when the pinner gave none).
auto_alt_textPinterest's own description of the image.
seo_alt_textThe image's alt text Pinterest writes for search engines.
image_signatureThe image's own signature (the file name of its i.pinimg.com URLs): the same image has the same signature in every pin.
video_mp4_urlA video pin's MP4 file: the one Pinterest's answer lists; with checkVideoMp4 on, else the 720-px rendition Pinterest's CDN keeps beside the HLS stream, checked by one 1-byte read before it is written (kept for 12 of 20 videos in our tests); null where neither exists.
video_thumbnail_urlA video pin's still image.
is_idea_pinTrue for an idea pin (a multi-page story pin), false for any other pin of a search; null when the answer does not say (a board's, section's or profile's feed).
idea_pin_page_countAn idea pin's page count.
save_countHow many times the pin was saved, where Pinterest shows it logged out: board, profile and pin-URL pins, Products pins, and search pins the details add-on found.
repin_countThe pin's repin count, where Pinterest shows it (board, profile and pin-URL pins; search pins the details add-on found).
comment_countThe pin's comment count from the pin's own record (pin URLs, and search pins the details add-on found by their record); null elsewhere, because a feed's count says 0 where the pin has comments.
share_countThe pin's share count (pin URLs, and search pins the details add-on found by their record).
is_repinTrue when the pin is a repin of another pin (board, profile and pin-URL pins).
annotationsPinterest's visual annotations of the image (words for what it shows), where the answer gives them.
priceA Products pin's price, as a number in currency.
currencyThe price's currency (ISO code).
in_stockA Products pin: true when the shop says it is in stock.
product_nameA Products pin: the product's name.
product_brandA Products pin: the product's brand.
product_countryA Products search: the country of the view Pinterest answered (US: the only view that prices products logged out).
pinner_idThe pinner's Pinterest id.
pinner_image_urlThe pinner's profile picture.
pinner_is_verified_merchantTrue when the pinner is a verified merchant.
pinner_is_verifiedTrue when Pinterest shows the pinner's identity as verified.
details_statusThe details add-on on a search pin: found (a save count or a numeric id), not_found, cut (the run's time limit stopped the read; what it read is on the row, and it is not charged), or null when the add-on is off.
details_noteWhere the details add-on read the values, or why it found none.
comments_statusThe comments add-on on a pin: served, none (no comment), off (the pinner turned comments off), unavailable (Pinterest's answer names no comments list), failed, cut (the run's time limit stopped the read; the comments read before it are delivered); null when the add-on is off.
board_descriptionThe board's description.
board_section_countThe board's section count.
board_follower_countThe board's followers (a board URL's record; a boards search result does not carry it).
board_collaborator_countThe board's collaborators.
board_categoryPinterest's category of the board (a board URL's record).
board_cover_image_urlThe board's cover image.
board_owner_usernameThe board owner's username.
board_owner_nameThe board owner's display name.
board_owner_urlThe board owner's profile on Pinterest.
section_idA board section's id (a section URL's board row).
section_nameA board section's title.
section_pin_countA board section's pin count.
profile_idThe profile's Pinterest id.
profile_usernameThe profile's username.
profile_nameThe profile's display name.
profile_urlThe profile on Pinterest.
profile_followersThe profile's followers.
profile_followingThe accounts the profile follows (a profile URL's record).
profile_pin_countThe profile's pin count (its saves included), as Pinterest gives it.
profile_board_countThe profile's board count.
profile_aboutThe profile's about text (a profile URL's record).
profile_websiteThe website the profile names (a profile URL's record).
profile_image_urlThe profile's picture.
profile_is_verified_merchantTrue for a verified merchant.
profile_is_verifiedTrue when Pinterest shows the profile's identity as verified.
profile_created_atWhen the profile joined Pinterest (a profile URL's record; ISO 8601, UTC).
profile_last_pin_atWhen the profile last saved a pin (ISO 8601, UTC).
comment_idThe comment's id.
comment_textThe comment's text.
comment_created_atWhen the comment was written (ISO 8601, UTC).
commenter_usernameThe commenter's username.
commenter_nameThe commenter's display name.
commenter_urlThe commenter's profile on Pinterest.
comment_reaction_countThe comment's reactions.
comment_reply_countThe replies to the comment (counted, not read).
comment_helpful_countHow many readers marked the comment helpful.
comment_image_urlA picture the commenter attached, where there is one.
boards_deliveredA free row: the board rows delivered for this input.
profiles_deliveredA free row: the profile rows delivered for this input.
comments_deliveredA free row: the comment rows delivered for this input's pins.
filtered_outA free row: the pins your filters dropped (free, not counted by the caps).
top_domainsA search's free row: the domains its delivered pins link to most, with the pin count of each ({domain, pins}, up to 10).
related_termsA search's free row: Pinterest's guide terms for the query (the related searches it suggests).
dropped_parametersA search URL's free row: the URL's parameters Pinterest does not apply to the search (only the query and the scope are read).
view_countryA Products search's free row: the country of the view Pinterest answered.
standard_priceA Products pin's price before a sale, as a number in currency (the offer's own standard price; the same as price when there is no sale).
percent_offA Products pin's discount in percent, as the offer shows it (null when there is no sale).
board_owner_followersThe board owner's followers (a boards search result carries it; a board URL's record does not).
modules_skippedA search's free row: the results of its pages that are not pins, boards or profiles (Pinterest's idea and story modules), counted and not delivered.

Example record:

{
"row_type": "pin",
"input_index": 4,
"input_value": "https://www.pinterest.com/IKEAUSA/kitchens/",
"input_kind": "board",
"query": null,
"scope": null,
"search_url": null,
"status": "ok",
"status_detail": null,
"scraped_at": "2026-11-04T12:31:03Z",
"position": 1,
"pin_id": "e1_AfqPShwLgzNSy_dMogsPdE-dsil9BVzaqnMen54uRBxTfTShufWA",
"pin_url": "https://www.pinterest.com/pin/e1_AfqPShwLgzNSy_dMogsPdE-dsil9BVzaqnMen54uRBxTfTShufWA/",
"title": "This pantry hutch is clutch",
"description": "Especially if you want great storage and style! This kitchenette is an affordable way to create a pantry hutch and instantly make more storage space for food, dishes, cookware and …(truncated for display)",
"alt_text": "a kitchen with white cupboards and wooden counter tops in the center is filled with dishes",
"link": "https://www.ikea.com/us/en/cat/modular-kitchens-22957/",
"domain": "ikea.com",
"image_url": "https://i.pinimg.com/originals/0b/a8/4b/0ba84b268abdf88bf5bdb3331f48fdf3.jpg",
"image_width": 1000,
"image_height": 1500,
"image_736x_url": "https://i.pinimg.com/736x/0b/a8/4b/0ba84b268abdf88bf5bdb3331f48fdf3.jpg",
"thumbnail_url": "https://i.pinimg.com/236x/0b/a8/4b/0ba84b268abdf88bf5bdb3331f48fdf3.jpg",
"dominant_color": "#bab0a4",
"is_video": false,
"video_url": null,
"video_duration_s": null,
"created_at": "2025-09-02T18:58:29Z",
"reaction_count": 9,
"hashtags": [
"kitchen",
"dreamkitchen",
"IKEAkitchen",
"pantry",
"hutch"
],
"topics": [],
"is_promoted": false,
"pinner_username": "IKEAUSA",
"pinner_name": "IKEA US",
"pinner_url": "https://www.pinterest.com/IKEAUSA/",
"pinner_followers": null,
"board_id": "252835035269371550",
"board_name": "Kitchens",
"board_url": "https://www.pinterest.com/IKEAUSA/kitchens/",
"board_pin_count": null,
"pins_delivered": null,
"pages_read": null,
"repeats_skipped": null,
"verdict": null,
"verdict_detail": null,
"numeric_pin_id": null,
"numeric_pin_url": null,
"grid_title": "This pantry hutch is clutch",
"auto_alt_text": "a kitchen with white cupboards and wooden counter tops in the center is filled with dishes",
"seo_alt_text": null,
"image_signature": "0ba84b268abdf88bf5bdb3331f48fdf3",
"video_mp4_url": null,
"video_thumbnail_url": null,
"is_idea_pin": true,
"idea_pin_page_count": 1,
"save_count": 87,
"repin_count": 4,
"comment_count": null,
"share_count": null,
"is_repin": true,
"annotations": [],
"price": null,
"currency": null,
"in_stock": null,
"product_name": null,
"product_brand": null,
"product_country": null,
"pinner_id": "252835103988780744",
"pinner_image_url": "https://i.pinimg.com/75x75_RS/65/8d/bc/658dbc05a53b6c2b442e594785b2b109.jpg",
"pinner_is_verified_merchant": true,
"pinner_is_verified": true,
"details_status": null,
"details_note": null,
"comments_status": null,
"board_description": null,
"board_section_count": null,
"board_follower_count": null,
"board_collaborator_count": null,
"board_category": null,
"board_cover_image_url": null,
"board_owner_username": null,
"board_owner_name": null,
"board_owner_url": null,
"section_id": null,
"section_name": null,
"section_pin_count": null,
"profile_id": null,
"profile_username": null,
"profile_name": null,
"profile_url": null,
"profile_followers": null,
"profile_following": null,
"profile_pin_count": null,
"profile_board_count": null,
"profile_about": null,
"profile_website": null,
"profile_image_url": null,
"profile_is_verified_merchant": null,
"profile_is_verified": null,
"profile_created_at": null,
"profile_last_pin_at": null,
"comment_id": null,
"comment_text": null,
"comment_created_at": null,
"commenter_username": null,
"commenter_name": null,
"commenter_url": null,
"comment_reaction_count": null,
"comment_reply_count": null,
"comment_helpful_count": null,
"comment_image_url": null,
"boards_delivered": null,
"profiles_delivered": null,
"comments_delivered": null,
"filtered_out": null,
"top_domains": null,
"related_terms": null,
"dropped_parameters": null,
"view_country": null,
"standard_price": null,
"percent_off": null,
"board_owner_followers": null,
"modules_skipped": null
}

Pricing

Pay for the rows a run delivers, plus one run start; no platform usage is billed to you. The row and details prices fall with your Apify plan.

eventunitFreeStarterScaleBusiness
Pin (pin)per 1,000$3.27$2.85$2.22$1.71
Board (board)per 1,000$3.99$3.39$2.59$1.99
Profile (profile)per 1,000$3.10$2.64$2.17$1.55
Comment (comment, add-on)per 1,000$1.00$1.00$1.00$1.00
Search pin details (pin_details, add-on)per 1,000$3.00$2.55$2.10$1.50
Run start (start)per run$0.0012$0.0012$0.0012$0.0012

A pin is $3.27 per 1,000 on the Free plan ($0.00327 a pin). Each run that delivers a charged row also pays the run start, $0.0012 once; a run that delivers no charged row pays nothing at all. So one search of 50 pins costs $0.1647 on the Free plan and $0.1437 on Starter, and several inputs in one run share one start. A board row (a boards search result, or the record of a board URL) is $3.99 per 1,000 on the Free plan ($3.3915 on Starter), and a profile row (a people search result, or the record of a profile URL) $3.10 ($2.635 on Starter). The add-ons cost only when you switch them on: each comment row, and each search pin whose save count or numeric id the details add-on found (a pin it could not fill is free). The free row of every input, a value that is not a Pinterest search, board, profile or pin (invalid), a repeated input (duplicate), a record that does not exist (not_found), an input left at the cap or the time limit (not_read), a refusal the run could not pass (failed) and a pin your filters drop are never charged. A pin is charged once a run, also when several inputs list it, under either of its ids. A run that stops early (a timeout, an abort) is charged for the rows it delivered. maxItems counts the pin, board and profile rows; before the first request the log names the price of each row at your plan and the most the run can cost. Enterprise plans have their own rates: the Actor's Pricing tab shows the price for your plan.

Usage patterns

  • What each input reads — searchQueries: the words you would type in Pinterest's search box, read in the scope searchScope names (All Pins by default). searchUrls: a search URL as your browser shows it (/search/pins/, /search/videos/, /search/buyable_pins/, /search/boards/, /search/users/), on any Pinterest country domain; Pinterest applies only the query and the scope, and the free row lists the URL's other parameters as dropped. boardUrls: a board (one board row and its pins) or a board section (that section's pins). profileUrls: a profile URL or username (one profile row and the pins it created). pinUrls: a pin by its numeric URL or a pin.it link (one pin row with its saves, comments, repins and shares). A Pinterest URL is read as what it is, whichever list it is in.
  • What a row is — row_type = pin: one pin, in Pinterest's order (position). board and profile: a boards or people search result, or the record of a board or profile URL. comment: one comment of a delivered pin (the comments add-on), with the pin's pin_id. search: the free row of one input — the rows delivered, pages_read, repeats_skipped, filtered_out, the verdict with its verdict_detail, and the status with its reason (the name is the original search Actor's; every input kind gets one).
  • How far an input goes — maxPins (1 to 10,000, default 50) stops each input after that many rows: pins for a pin search, a board, a section or a profile; boards or profiles for those searches. A broad search ends at Pinterest's own end of the list, about 900 pins on our test; a board ends at its own pin count; a profile at the end of its created pins. maxItems caps the pin, board and profile rows of the whole run. The free row's verdict says where the walk stopped and why.
  • The products view — Logged out, Pinterest prices products on its US view only (our test of 26 countries, 2026-11-04: the other 25 gave unpriced pins or no list), so a Products search is read on the US view and every product row says the country its answer named (product_country). A page whose pins carry no price is never delivered as products: the Actor reads it again on a fresh connection, then on a US residential one. Pinterest's US view itself serves the Products search with no price at times; a search it serves so on every try ends with no product row and a free failed row that says so, to read again later. productDomain keeps one shop's products (Pinterest's own merchant filter); minPrice and maxPrice are applied by the Actor on the served price, because Pinterest's search does not apply them.

Input configuration

fieldtypedefaultwhat it does
searchQueriesarrayWhat to search for on Pinterest, one query a line (minimalist kitchen design), as you would type it in Pinterest's search box. Each query reads the results of searchScope (All Pins by default). Up to 200 inputs a run (every list together). An empty query gets a free invalid row, a query given twice a free duplicate row.
searchScopepins / videos / products / boards / people"pins"The results each search query reads: pins (All Pins, the default), videos (video pins only), products (shopping pins with their price; read on Pinterest's US view, the only view that prices products), boards (board rows) or people (profile rows). A search URL keeps its own scope.
searchUrlsarrayPinterest search URLs, as your browser shows them: https://www.pinterest.com/search/pins/?q=garden%20ideas (All Pins), /search/videos/?q=…, /search/buyable_pins/?q=… (Products), /search/boards/?q=… or /search/users/?q=…; any Pinterest country domain. The query and the scope are read; Pinterest applies no other URL parameter, and the row lists the ones it dropped. A board, profile or pin URL here is read as what it is.
boardUrlsarrayPinterest boards, one a line: https://www.pinterest.com/IKEAUSA/kitchens/ or IKEAUSA/kitchens; a board section's URL (…/kitchens/ikea-house-warming/) reads that section only. Each gives one board row and the board's pins, up to maxPins, with each pin's save and repin counts. A board that does not exist gets a free not_found row.
profileUrlsarrayPinterest profiles, one a line: https://www.pinterest.com/westelm/ or the username westelm. Each gives one profile row (followers, following, pins, boards, about, website) and the pins the profile created, up to maxPins, with their numeric ids, saves and repins.
pinUrlsarrayPins by their URL, one a line: https://www.pinterest.com/pin/1063131055810571289/, a /pin/<title>--<number>/ URL, a pin.it short link or the bare number. Each gives one pin row with its saves, comments, repins and shares. A pin URL from a logged-out search (/pin/e1_…/) opens for a logged-in viewer only and gets a free invalid row.
maxPinsinteger50Stop each input after this many rows (1 to 10,000): pins for a pin search, a board, a section or a profile; boards for a boards search; profiles for a people search. A pin Pinterest repeats on a later page, or one an earlier input of the run already delivered, is skipped and not counted. A broad search ends at Pinterest's own end of the list, about 900 pins on our test; a board ends at its own pin count.
maxItemsinteger0Stop the run after this many pin, board and profile rows across every input (0 = no limit). Comment rows ride with their pins and are bounded by maxCommentsPerPin; the free rows are not counted. An input left unread at the cap gets a free not_read row.
includeCommentsbooleanfalseRead the comments of every delivered pin (a search's, a board's, a profile's or a pin URL's) as comment rows after their pin: the text, the date, the commenter's public name and profile, the reactions and the reply count. Each comment row is its own charge. A pin whose comments are off says so in comments_status. Off by default.
maxCommentsPerPininteger20With includeComments: at most this many comment rows a pin (1 to 500), in Pinterest's order.
searchPinDetailsbooleanfalseLogged out, Pinterest's search shows no save count and an encrypted pin id. Switched on, each search pin is looked up in its board's feed (the save and repin counts) and in its pinner's public feeds (the numeric id and URL, and the counts of the pin's record). Our tests found the saves for about half of the pins and the numeric id for about a third; a pin on one of Pinterest's automatic preview boards or pinners has neither, and details_note says why. Charged only for a pin it fills. Off by default.
checkVideoMp4booleanfalsePinterest's answer gives most video pins only an HLS stream (video_url). Switched on, each such pin gets one extra 1-byte read of the 720-px MP4 file Pinterest's CDN keeps beside the stream, and video_mp4_url is written only when the CDN serves it (12 of 20 videos in our tests). The read holds each video pin's row until it ends, so a run with video pins takes a few seconds longer. No extra charge. Off by default.
onlyWithLinkbooleanfalseSkip pins that link to no website. A skipped pin is free and not counted.
minReactionsinteger0Skip pins with fewer reactions than this (the count Pinterest shows on the pin). 0 = no filter.
excludeWordsarraySkip pins whose title, description, alt text or link holds any of these words as a whole word (any case: "art" skips "Art deco", not "smart").
minImageWidthinteger0Skip pins whose full-size image is narrower than this. 0 = no filter.
createdAfterstringSkip pins created before this day (YYYY-MM-DD). Pinterest's lists are not in date order, so the walk reads on.
noAiPinsbooleanfalseAsk Pinterest's search to leave out pins it marks as AI-generated (its own filter; pins, videos and products searches).
productDomainstringProducts searches only: the shop's domain (wayfair.com); Pinterest's own merchant filter.
minPricenumberProducts searches: skip products cheaper than this, in the price's own currency (Pinterest's search does not apply a price filter itself, so the actor reads the served price). A product with no price is skipped when a price filter is set.
maxPricenumberProducts searches: skip products dearer than this, in the price's own currency.
feedbackstringA note to the people who maintain this Actor: what you needed and did not get. For example a missing field, a wrong or empty result, or the Actor you switch from or to, and why. The run does not read it: the rows and the charges stay the same. A person reads every note.

Errors

A run does not fail because of your input. When an input cannot be used — a date that is not a date, an id in the wrong form, two settings that contradict each other — the run ends Succeeded, charges nothing, and says what to change:

  • the status message starts with INPUT REJECTED;
  • the dataset holds one row, {"error": true, "code": "…", "message": "…"}, and no results;
  • the key-value store record ERROR holds the same object.

From code, check error on the first row before reading results.

A board, profile or pin that does not exist is not an error: it gets one free row with status not_found (Pinterest said so on two exits), and the run goes on with the others. A run that ends Failed is a fault on our side, never your input; it charges nothing, and we are alerted.

FAQ

Which status is which?

A free row's status is ok (read), invalid (an empty query, or a value that is not a Pinterest search, board, profile or pin URL), duplicate (the same input again: read once), not_found (Pinterest answered that the board, profile, section or pin does not exist, on two exits), failed (a refusal or an error; free) or not_read (left at maxItems, the charge limit or the run's time limit). A pin, board, profile or comment row's status is ok.

Does it give the save count and the comments?

Yes, where Pinterest shows them logged out. Board, profile and pin-URL pins carry save_count and repin_count; a pin URL also carries the comment and share counts. Pinterest's logged-out search shows neither the save count nor a numeric pin id: the searchPinDetails add-on looks each search pin up in its board's feed and its pinner's public feeds (8 of 10 found on our test; details_note says why when not). A pin's comments come as their own rows with includeComments; comments_status says served, none, off (the pinner turned them off) or failed. Replies to a comment are counted (comment_reply_count), not read.

Why does a search pin's id start with e1_?

Logged out, Pinterest names most search pins by an encrypted id (e1_…) instead of the number you see when logged in. The id is the same in every run; the pin URL (pin_url) with it opens for a logged-in viewer only. Profile and pin-URL pins carry their numeric id; a board's feed names its pins by the e1_ id as a search does, and the searchPinDetails add-on finds the numeric id for many search pins (numeric_pin_id, numeric_pin_url). A pin met under both ids in one run (a board and one of its sections, a search and a pin URL) is delivered and charged once.

What about related pins, visual search and followers?

Not served: Pinterest answers them only to a logged-in viewer (our tests of 2026-11-04: related pins and the visual search answer "Login required" or an error to every logged-out call, followers lists "Authentication failed"), so they are not inputs of this Actor.

Does it need a Pinterest account or API key?

No. Everything is read from Pinterest's public pages, logged out.

Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('hyperbach/pinterest-search-scraper').call({"searchQueries": ["minimalist kitchen design"], "maxPins": 50});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('hyperbach/pinterest-search-scraper').call(run_input={'searchQueries': ['minimalist kitchen design'], 'maxPins': 50})
items = client.dataset(run['defaultDatasetId']).list_items().items

CLI

$apify call hyperbach/pinterest-search-scraper --input '{"searchQueries": ["minimalist kitchen design"], "maxPins": 50}'

REST

curl -X POST "https://api.apify.com/v2/acts/hyperbach~pinterest-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' -d '{"searchQueries": ["minimalist kitchen design"], "maxPins": 50}'

AI agents and MCP

Apify's MCP server offers this Actor as a tool to Claude, Cursor, VS Code and any other MCP client. Connect https://mcp.apify.com?tools=hyperbach/pinterest-search-scraper and ask, for example: "Get the first 50 Pinterest pins for minimalist kitchen design with their images and links". The agent fills the input from the table above and reads the rows from the run's dataset. A field under the name another Actor gives it is read as this Actor's own: queries, keywords, searchTerms, searchQuery as searchQueries; startUrls, urls, url, searchUrl as searchUrls; boards, boardUrl, board as boardUrls; profiles, usernames, username, profileUrl as profileUrls (and more). An agent or a person can add feedback to any run and say what was needed and not delivered: a missing field, a wrong or empty result, the Actor switched from or to, and why. The run returns the same rows at the same price, and a person reads every note.

n8n, Make and Zapier

The Apify node in n8n, the Apify app in Make and the Apify integration in Zapier run this Actor on a schedule or from a trigger and read its dataset. A webhook on the run's end (Integrations on the Actor page) sends the rows on to your own endpoint. Nothing to install on our side.

Support

Disagree with a charge? Write to apify@hyperbach.com with the run ID. We will ask Apify to compensate you, and the charge comes back to your Apify account as platform credit.

Did it do the job? A short review on the Store, at any rating, helps the next buyer choose.

See also

  • Telegram Profile Scraper — Telegram channels, groups, bots and users by username or link, with the exact subscriber or member count.
  • YouTube Channel Search Scraper — the YouTube channels a keyword finds, with subscribers, the exact video and view counts and the country.
  • Threads Scraper — Threads profiles with the exact follower count, their posts and replies with view counts, and keyword and tag search, without a login.
  • Substack Scraper — the posts of a Substack newsletter with the full text of free posts, the date, the paywall flag and the likes.
  • Weibo Scraper — Weibo posts, profiles, search, comments and the hot-search boards, without a login.
  • Spotify Scraper — the tracks of a Spotify playlist or album and an artist's top tracks and releases, with play counts.

This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.