Pinterest Scraper API – Pins, Search, Boards & Profiles avatar

Pinterest Scraper API – Pins, Search, Boards & Profiles

Pricing

from $1.20 / 1,000 scraped results

Go to Apify Store
Pinterest Scraper API – Pins, Search, Boards & Profiles

Pinterest Scraper API – Pins, Search, Boards & Profiles

Scrape public Pinterest Pins, search results, Boards, and Profiles into structured JSON. Extract images, videos, creators, engagement, outbound links, and available product data from keywords, URLs, Pin IDs, pin.it links, or usernames.

Pricing

from $1.20 / 1,000 scraped results

Rating

0.0

(0)

Developer

LanceAPI

LanceAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

📌 Pinterest Scraper All-in-One

Scrape public Pinterest search results, Pins, Boards, Profiles, images, videos, engagement signals, outbound links, creators, and available product data into clean JSON.

Pinterest Scraper All-in-One is an Apify Actor for collecting structured data from public Pinterest pages. Use it with search keywords, Pinterest URLs, Pin IDs, Board URLs, Profile URLs, profile usernames, Search URLs, or pin.it links. The Actor detects each target automatically and returns normalized, API-ready results.

It is built for content research, Pinterest SEO, creator discovery, product research, competitor monitoring, trend analysis, and automated data pipelines.

You are charged for successful, unique scraped Pin/results that are processed and returned. Duplicate results inside the same input scope are skipped and not charged.

This is an unofficial tool for public Pinterest data. It does not access private content, logged-in-only data, cookies, comments, follower lists, or non-public user information.

✨ Key Features

  • All-in-one input support: keyword search, Pinterest Search URLs, Pin URLs, Pin IDs, pin.it links, Board URLs, Profile URLs, and profile usernames in a dedicated Profiles field.
  • Simple input page: choose what you want to scrape first, then adjust only the options that apply to that input type.
  • Automatic target detection: paste a Pinterest URL and the Actor figures out whether it is a Pin, Board, Profile, or Search page.
  • Rich output by default: the Actor returns useful Pin, creator, attribution, board, media, engagement, outbound, and product fields whenever Pinterest exposes them publicly.
  • Efficient fetching internally: the Actor uses data already available in Pinterest responses first and only requests an individual Pin page when it is likely to add meaningful public fields.
  • Duplicate skipping: equivalent targets in the same run are normalized and processed once.
  • Result-based pricing: billing is based on returned scraped Pin/results, not on pages visited.

⚡ Quick Input Examples

Search by keyword

{
"searchQueries": ["home decor"],
"maxResults": 20
}

Scrape Pinterest URLs

{
"startUrls": [
"https://www.pinterest.com/pin/550354016972119338/",
"https://www.pinterest.com/HadleyJamesatHome/entryway-lighting-design-ideas/"
],
"maxResults": 20
}

Scrape profiles

{
"profiles": [
"jfcain",
"https://www.pinterest.com/HadleyJamesatHome/"
],
"profileContent": "pins",
"maxResults": 20
}

Input

Provide at least one value in searchQueries, startUrls, or profiles.

The Actor only runs keyword search when you provide searchQueries. If you leave Search queries empty and provide only URLs or profiles, no keyword search is performed.

Use this when you want to discover Pinterest content by topic.

FieldTypeRequiredDefaultDescription
searchQueriesarray of stringsNo[]Search Pinterest by one or more keywords. Examples: home decor, summer outfits, healthy recipes. Each keyword is processed as a separate search input.

🔗 Pinterest URLs

Use this when you already have Pinterest URLs.

FieldTypeRequiredDefaultDescription
startUrlsarray of stringsNo[]Pinterest URLs to scrape. Supported URLs include individual Pins, Boards, Profiles, Pinterest Search result pages, and pin.it short links. For plain usernames, use profiles. Numeric Pin IDs are still accepted for API compatibility.

Supported URL examples:

  • Pin URL: https://www.pinterest.com/pin/550354016972119338/
  • Board URL: https://www.pinterest.com/username/board-name/
  • Profile URL: https://www.pinterest.com/username/
  • Search URL: https://www.pinterest.com/search/pins/?q=home%20decor
  • Short Pin URL: https://pin.it/example

Pinterest Search URLs keep their own search type. For example, /search/videos/ is treated as video search even if searchType is set to pins.

👤 Profiles

Use this when you want to scrape Pinterest profiles by username or profile URL.

FieldTypeRequiredDefaultDescription
profilesarray of stringsNo[]Pinterest usernames or profile URLs. Examples: jfcain, @jfcain, https://www.pinterest.com/jfcain/. This field is only for Profile targets.

Profile URLs are accepted in both startUrls and profiles. If you enter the same profile in both places, the Actor normalizes and deduplicates it.

⚙️ Options

These options control result volume or behavior for specific input types.

FieldTypeRequiredDefaultDescription
maxResultsintegerNo20Maximum number of content results to return for each search, board, or profile input. Profile and board metadata rows do not count toward this limit. For Profiles with pins_and_boards, the limit applies independently to Pins and Boards. Minimum 1, maximum 5000.
searchTypestringNopinsChoose what type of Pinterest results to return for keyword searches. Only applies to searchQueries. Allowed values: pins, videos, boards.
profileContentstringNopinsChoose what content to collect when scraping Pinterest profiles. Only applies to Profile inputs from profiles or Profile URLs. Allowed values: pins, boards, pins_and_boards, profile_only.

🔧 Advanced

FieldTypeRequiredDefaultDescription
proxyConfigurationobjectNo{ "useApifyProxy": false }Optional proxy settings for Pinterest requests. Leave disabled unless you need a specific proxy configuration. When disabled, requests stay direct and the Actor does not silently switch to proxy fallback.

How Multiple Inputs Are Processed

searchQueries, startUrls, and profiles can be used together. Every keyword, URL, Pin ID, or profile is normalized into an internal target and processed as its own input scope.

Equivalent targets are deduplicated. For example, these two inputs refer to the same profile and are scraped once:

{
"startUrls": ["https://www.pinterest.com/jfcain/"],
"profiles": ["jfcain"]
}

For list-style inputs, maxResults applies per input, not to the whole run. For example, two search queries with maxResults: 100 can return up to 200 content results.

For Profile inputs:

  • profile_only: returns the Profile metadata row only.
  • pins: returns the Profile metadata row plus up to maxResults Pins.
  • boards: returns the Profile metadata row plus up to maxResults Boards.
  • pins_and_boards: returns the Profile metadata row plus up to maxResults Pins and up to maxResults Boards.

For Board inputs, the Board metadata row is returned before the Board Pins and does not count against maxResults.

More Input Examples

Search Pinterest Pins

{
"searchQueries": ["home decor", "summer outfits"],
"searchType": "pins",
"maxResults": 100
}

Search Pinterest Videos

{
"searchQueries": ["workout ideas"],
"searchType": "videos",
"maxResults": 50
}

Search Pinterest Boards

{
"searchQueries": ["wedding planning"],
"searchType": "boards",
"maxResults": 50
}

Scrape a Pin by URL or ID

{
"startUrls": [
"https://www.pinterest.com/pin/550354016972119338/",
"29695678789181460"
]
}

Scrape a Board

{
"startUrls": [
"https://www.pinterest.com/HadleyJamesatHome/entryway-lighting-design-ideas/"
],
"maxResults": 100
}

Scrape a Profile URL

{
"startUrls": ["https://www.pinterest.com/HadleyJamesatHome/"],
"profileContent": "pins",
"maxResults": 100
}

Scrape a Profile Username

{
"profiles": ["jfcain"],
"profileContent": "pins",
"maxResults": 100
}

Mix Different Input Types

{
"searchQueries": ["home decor"],
"startUrls": [
"https://www.pinterest.com/pin/550354016972119338/",
"https://www.pinterest.com/search/videos/?q=home%20decor",
"https://www.pinterest.com/HadleyJamesatHome/entryway-lighting-design-ideas/"
],
"profiles": ["jfcain"],
"maxResults": 50
}

API Usage

Use the Actor ID lance_api/pinterest-scraper-api.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
searchQueries: ['home decor'],
maxResults: 20,
searchType: 'pins',
};
const run = await client.actor('lance_api/pinterest-scraper-api').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("lance_api/pinterest-scraper-api").call(
run_input={
"searchQueries": ["home decor"],
"maxResults": 20,
"searchType": "pins",
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Output

The Dataset can contain four result types:

  • pin: a Pinterest Pin result.
  • profile: public Profile metadata.
  • board: public Board metadata.
  • error: a per-input error record. A failed input does not stop the whole batch unless the Actor input itself is invalid.

All rows include:

  • inputType: where the result came from, such as search, pin, board, profile, or unknown.
  • inputValue: the original keyword, URL, username, or ID.
  • resultType: pin, profile, board, or error.
  • scrapedAt: ISO 8601 timestamp in UTC.

The Actor automatically returns rich metadata whenever it is publicly available. There is no data-depth setting to choose. Fields that Pinterest does not expose for a specific result are returned as null or empty arrays instead of forcing extra low-value requests.

Complete Output Field Reference

Top-Level Fields

FieldTypeNullableDescription
successbooleanYesPresent on error rows as false. Successful result rows may omit it.
inputTypestringNoInput scope that produced the row: search, pin, board, profile, or unknown.
inputValuestringNoOriginal user-provided input or search keyword.
resultTypestringNopin, profile, board, or error.
pinobjectYesPin data for pin rows.
creatorobjectYesCreator data for Pin rows when available.
originalCreatorobjectYesReserved for original creator data when Pinterest exposes it. Currently often null.
attributionobjectYesBrand, merchant, publisher, or source attribution when Pinterest exposes it separately from the creator.
boardobjectYesBoard data for Pin rows or Board metadata rows.
engagementobjectYesAvailable engagement metrics when Pinterest exposes them.
mediaobjectYesAvailable image and video metadata.
productobjectYesAvailable product or Rich Pin fields when Pinterest exposes meaningful shopping data.
profileobjectYesProfile metadata for profile rows.
errorobjectYesError details for error rows.
scrapedAtstringNoUTC ISO 8601 timestamp, for example 2026-08-25T00:00:00Z.

pin

FieldTypeNullableDescription
idstringYesPinterest Pin ID.
urlstringYesPublic Pinterest Pin URL.
typestringYesMedia type reported by Pinterest, commonly image or video.
titlestringYesPin title when available.
descriptionstringYesPin description when available.
altTextstringYesAlt text when Pinterest exposes it.
createdAtstringYesCreation timestamp as exposed by Pinterest.
isPromotedbooleanYesWhether the Pin is marked as promoted when exposed.
sourceUrlstringYesSource URL when exposed.
outboundUrlstringYesExternal destination URL when exposed.
domainstringYesDomain derived from Pinterest payload.
hashtagsarrayYesHashtags parsed from the Pin title and description.

creator

FieldTypeNullableDescription
idstringYesCreator ID when exposed.
usernamestringYesPinterest username.
fullNamestringYesPublic display name.
profileUrlstringYesPublic Pinterest Profile URL.
avatarUrlstringYesAvatar image URL.
followerCountnumberYesPublic follower count when exposed.
verifiedbooleanYesPinterest verification flag when exposed. This is not email or identity verification by this Actor.
isVerifiedMerchantbooleanYesPinterest merchant verification flag when exposed in the public payload.
isPrimaryWebsiteVerifiedbooleanYesPinterest primary website verification flag when exposed in the public payload.

attribution

attribution uses the same normalized account shape as creator. It comes from Pinterest attribution fields such as grid_attribution when available.

creator is the account that pinned or owns the Pin record. attribution is the brand, merchant, publisher, or source account Pinterest attaches to the grid item. They can be the same account, different accounts, or null. originalCreator is kept separate and remains null unless Pinterest exposes a distinct original creator source.

board

FieldTypeNullableDescription
idstringYesBoard ID when exposed.
namestringYesBoard name.
descriptionstringYesBoard description.
categorystringYesBoard category when exposed.
privacystringYesBoard privacy value. Public Boards normally return public.
pinCountnumberYesPublic Pin count when exposed.
followerCountnumberYesPublic Board follower count when exposed.
urlstringYesPublic Board URL.
coverUrlstringYesBoard cover image URL.
ownerobjectYesBoard owner with id, username, and fullName when available.

media

FieldTypeNullableDescription
typestringYesMedia type reported by Pinterest.
dominantColorstringYesDominant color when exposed.
bestImageUrlstringYesBest available image URL selected from Pinterest image variants.
imagesarrayYesImage variants with variant, width, height, and url.
videoobjectYesVideo metadata when Pinterest exposes video formats.

media.video can include bestVideoUrl, thumbnailUrl, durationMs, width, height, hasAudio, and formats. durationMs is in milliseconds. hasAudio is currently null when the public payload does not reliably expose audio information.

engagement

FieldTypeNullableDescription
savesnumberYesSave count when exposed.
repinsnumberYesRepin count when exposed.
commentsnumberYesComment count when exposed.
sharesnumberYesShare count when exposed.
reactionsnumberYesReaction count when exposed.
reactionDetailobjectYesReaction breakdown when exposed.

Pinterest may expose some engagement metrics separately or not at all. The Actor does not merge different metrics into one artificial number.

product

FieldTypeNullableDescription
isProductbooleanNoPresent as true only when meaningful product fields are available.
namestringYesProduct name.
siteNamestringYesMerchant, publisher, or site name from Pinterest Rich Pin data.
productUrlstringYesProduct URL when exposed.
priceobjectYesPrice object with value, currency, and formatted.
originalPriceobjectYesOriginal list price with value and formatted when exposed.
discountobjectYesDiscount object with percentage and formatted when exposed.
availabilityobjectYesAvailability object. Currently includes inStock when exposed.
ratingobjectYesRating object with value, ratingCount, and reviewCount when exposed.

profile

FieldTypeNullableDescription
idstringYesProfile ID when exposed.
usernamestringYesPinterest username.
fullNamestringYesPublic display name.
profileUrlstringYesPublic Profile URL.
biostringYesPublic bio.
websiteUrlstringYesPublic website URL.
avatarUrlstringYesAvatar image URL.
followerCountnumberYesPublic follower count when exposed.
followingCountnumberYesPublic following count when exposed.
pinCountnumberYesPublic Pin count when exposed.
verifiedbooleanYesPinterest verification flag when exposed.

error

FieldTypeNullableDescription
codestringNoMachine-readable error code.
messagestringNoHuman-readable error message.
detailsobjectYesAdditional details when available.

Status Values

The run summary stored in OUTPUT contains one summary object per input scope. List-style inputs may include:

StatusMeaningDataset rowsCharged?
limit_reachedThe Actor reached maxResults for that input.Successful returned rows.Yes, for returned unique scraped Pin/results.
no_more_resultsPinterest reported no more public results before maxResults.Successful returned rows, if any.Yes, for returned unique scraped Pin/results only.
pagination_stalledPagination stopped because Pinterest did not advance the bookmark.Returned rows collected before the stall.Yes, for returned unique scraped Pin/results only.
blockedPinterest returned retryable blocked or suspicious empty responses.Usually an error row, unless partial results were already collected.Error rows are not charged. Returned successful scraped Pin/results are charged.
errorThe input failed with a structured error.error row.No.

Possible error codes include INVALID_INPUT, UNSUPPORTED_URL, PIN_NOT_FOUND, PROFILE_NOT_FOUND, BOARD_NOT_FOUND, NO_RESULTS, PAGINATION_STALLED, RATE_LIMITED, BLOCKED, TIMEOUT, PARSE_FAILED, and MEDIA_UNAVAILABLE.

Complete Output Example

{
"inputType": "search",
"inputValue": "home decor",
"resultType": "pin",
"pin": {
"id": "902760687832445696",
"url": "https://www.pinterest.com/pin/902760687832445696/",
"type": "image",
"title": "Hawthorne Vintage Wall Sconce | Traditional Brass Hallway Lighting",
"description": "A public Pinterest Pin description...",
"altText": null,
"createdAt": null,
"isPromoted": false,
"sourceUrl": null,
"outboundUrl": "https://hadleyjamesathome.com/products/hawthorne-vintage-wall-sconce",
"domain": "hadleyjamesathome.com",
"hashtags": []
},
"creator": {
"id": null,
"username": "HadleyJamesatHome",
"fullName": "Hadley James at Home",
"profileUrl": "https://www.pinterest.com/HadleyJamesatHome/",
"avatarUrl": "https://i.pinimg.com/75x75/example.jpg",
"followerCount": null,
"verified": null
},
"originalCreator": null,
"attribution": null,
"board": {
"id": null,
"name": "Entryway Lighting Design Ideas",
"url": "https://www.pinterest.com/HadleyJamesatHome/entryway-lighting-design-ideas/",
"pinCount": null,
"followerCount": null
},
"engagement": {
"saves": 120,
"repins": null,
"comments": 3,
"shares": null,
"reactions": null,
"reactionDetail": null
},
"media": {
"type": "image",
"dominantColor": "#b08a64",
"bestImageUrl": "https://i.pinimg.com/originals/51/16/90/511690c2692d705acee310f555cfc62f.jpg",
"images": [
{
"variant": "orig",
"width": 1000,
"height": 1500,
"url": "https://i.pinimg.com/originals/51/16/90/511690c2692d705acee310f555cfc62f.jpg"
}
],
"video": null
},
"product": null,
"scrapedAt": "2026-08-25T00:00:00Z"
}

Error Example

{
"success": false,
"inputType": "unknown",
"inputValue": "https://example.com/not-a-pinterest-url",
"resultType": "error",
"error": {
"code": "UNSUPPORTED_URL",
"message": "Only public Pinterest URLs are supported: https://example.com/not-a-pinterest-url"
},
"scrapedAt": "2026-08-25T00:00:00Z"
}

💳 Pricing

This Actor uses result-based pricing. The billing unit is a returned, processed, unique scraped Pin/result.

If you provide a direct Pin URL, Pin ID, pin.it link, Board URL, Profile URL, Search URL, username in profiles, or search keyword, the Actor will process that input. Successful returned scraped Pin/results are charged. Duplicate results inside the same input scope are skipped and not charged. Error rows are not charged.

For inputs that can produce many Pins, such as search keywords, Pinterest Search URLs, Boards, and Profiles, billing is based on the final number of returned scraped Pin/results. In other words, if a search keyword returns 250 scraped Pins, you are charged for 250 results.

Apify user levelPrice per 1,000 resultsApprox. price per result
Free$2.20$0.0022
Starter$1.80$0.0018
Scale$1.50$0.0015
Business$1.20$0.0012

Pricing notes:

  • Direct Pin inputs: charged when the Pin is successfully processed and returned.
  • Search keywords and Search URLs: charged by the number of returned scraped Pin/results.
  • Board and Profile inputs: charged by the number of returned scraped Pin/results from that Board or Profile.
  • Profile and Board metadata rows: included for context and not counted as scraped Pin/result billing units.
  • Duplicate results within the same input scope: not charged.
  • Invalid inputs, unsupported URLs, not-found records, and error rows: not charged.
  • No public results returned: not charged.

For the latest published price, check the Actor's Pricing tab on Apify.

Use Cases

Pinterest SEO and Content Research

Collect public titles, descriptions, hashtags, creators, Boards, image URLs, and outbound domains to understand what content appears for a topic.

Trend and Creative Research

Use keyword and video search to gather public Pins for mood boards, creative analysis, visual trend tracking, and AI-assisted content workflows.

Creator Discovery

Scrape public Profile and Pin context to identify creators, brands, publishers, and accounts active in a niche.

Competitor and Brand Monitoring

Track public Pins, Boards, outbound links, domains, product references, and engagement signals for selected competitors or categories.

E-Commerce and Affiliate Research

Collect available Rich Pin product data, merchant names, prices, product URLs, source domains, and public Pin metadata for market research.

Dataset and API Automation

Use the Actor in scheduled Apify jobs, API workflows, dashboards, enrichment pipelines, and AI data preparation.

How It Works

The Actor uses public Pinterest web responses and HTML bootstrap metadata. It does not run a browser, does not download media files, and does not require Pinterest cookies from the user.

For search, Board, and Profile Pin feeds, it follows Pinterest bookmark pagination until it reaches maxResults, Pinterest returns no more public results, or pagination stops.

For discovered Pins, the Actor first uses the data already present in the Pinterest response. It may request the individual Pin page only when useful high-value fields are likely missing, such as core Pin metadata, creator data, media data, or product/Rich Pin information. It does not send extra requests just to fill low-value or rarely exposed fields.

Proxy is disabled by default. When proxy is disabled, Pinterest requests are made directly and the Actor does not silently fail over to proxy. When proxy is enabled in Advanced settings, Pinterest requests use the configured Apify Proxy.

Public Data and Responsible Use

This Actor is intended for public Pinterest data only. Use the results responsibly and follow Pinterest's terms, Apify's terms, privacy laws, anti-spam rules, and copyright requirements.

Do not use this Actor to harass people, send spam, build unlawful profiles, bypass access controls, collect private information, or copy content in a way that violates rights holders' interests.

FAQ

What can I scrape with this Pinterest scraper?

You can scrape public Pinterest Pins, keyword search results, video search results, Board search results, Board Pins, public Profile metadata, public Profile Pins, and public Profile Boards when Pinterest exposes them.

Can I use a Pin ID instead of a URL?

Yes. Numeric Pin IDs such as 550354016972119338 are accepted in startUrls for API compatibility.

Can I enter a username in Pinterest URLs?

For the cleanest new input experience, enter usernames in profiles, for example jfcain. Pinterest URLs should contain full Pinterest URLs. The backend still accepts plain usernames in startUrls for backward compatibility with older API calls.

Yes. Public pin.it links are accepted and resolved as Pin inputs.

What does searchType affect?

searchType only affects keyword searches from searchQueries. It does not affect Pin URLs, Board URLs, Profile URLs, or entries in profiles. Pinterest Search URLs decide their own type from the URL path.

What does profileContent affect?

profileContent only affects Profile inputs. It controls whether the Actor returns profile Pins, profile Boards, both, or only the Profile metadata row.

How does billing work?

Billing is based on returned unique scraped Pin/results. If a search returns 100 scraped Pins, you are charged for 100 results. If a direct Pin input returns one Pin, you are charged for one result. Duplicate results skipped inside the same input scope and error rows are not charged.

Are Profile and Board metadata rows counted as scraped Pins?

No. Profile and Board metadata rows are included to help you understand where the scraped Pins came from. Pricing is based on returned scraped Pin/results.

What happens when Pinterest returns no results?

If no public results are returned, the Actor reports a structured NO_RESULTS error or a run summary with no returned results. No returned result means no result charge.

Does the Actor scrape comments, followers, or private Pins?

No. V1 does not scrape comments, follower lists, following lists beyond public count fields, private Pins, private Boards, authenticated feeds, or logged-in-only content.

Does it download image or video files?

No. It returns image and video URLs exposed by Pinterest. It does not download, store, or re-upload the media files.

Does it verify creators or emails?

No. The verified field is Pinterest's public verification flag when exposed. It is not email verification or identity verification by this Actor.

Why are some fields null?

Pinterest does not expose every field for every Pin, Board, Profile, or search result. null means the value was not available in the public payload. It is different from 0 or false.

Limitations

  • Only public Pinterest data is supported.
  • Private content, deleted content, restricted content, logged-in-only feeds, and regionally unavailable pages may fail or return partial data.
  • Comments crawling, related Pins, Topics, Trending feeds, Board Sections, follower lists, and authenticated account data are not supported in V1.
  • Profile Board collection depends on Boards exposed in the public Profile payload and may not represent every Board on very large Profiles.
  • Product data is only returned when Pinterest exposes meaningful Rich Pin or shopping fields.
  • Engagement metrics may be missing, delayed, rounded, or exposed differently across Pinterest surfaces.
  • The Actor returns media URLs, not downloaded media files.
  • The Actor does not translate content, classify images, run ASR, scan external websites, or validate external product pages.

Support

For help, contact lanceapi2026@hotmail.com or open an issue on the Actor's Issues page.

When reporting a problem, include the Apify Run ID, a non-sensitive sample input, the status or error code, and a short description of what you expected. Do not send Apify tokens, cookies, passwords, private keys, or other secrets.