Pinterest Pin Scraper API – Data & Metadata avatar

Pinterest Pin Scraper API – Data & Metadata

Pricing

from $1.00 / 1,000 processed pins

Go to Apify Store
Pinterest Pin Scraper API – Data & Metadata

Pinterest Pin Scraper API – Data & Metadata

Extract structured Pinterest Pin data including titles, descriptions, images, videos, creators, boards, outbound links, engagement, and available product metadata from public Pin URLs.

Pricing

from $1.00 / 1,000 processed pins

Rating

0.0

(0)

Developer

LanceAPI

LanceAPI

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

3 days ago

Last modified

Share

Pinterest Pin Scraper API

Turn public Pinterest Pin URLs, short links, or Pin IDs into clean structured data—including media, creator, board, engagement, outbound links, and available shopping metadata.

Use this Pinterest Pin API when you already know which Pins you need. Submit up to 100 public Pin URLs, pin.it links, or numeric Pin IDs and receive stable, normalized JSON instead of Pinterest's raw internal response.

  • Structured Pin details: Titles, descriptions, dates, domains, hashtags, source links, and outbound URLs.
  • Image and video media: Normalized image variants plus available MP4/HLS video details.
  • Creator, board, and engagement context: Public attribution, collection context, saves, comments, shares, repins, and reactions when exposed.
  • Optional commerce and captions: Product fields and native subtitle references only when Pinterest provides them.
  • Duplicate-aware result pricing: Every input keeps its own Dataset item, while the same canonical Pin is processed and billed only once. Standard pricing is $2.00 per 1,000 results, or as low as $1.00 per 1,000 with eligible Apify Store discounts.

This Actor is intentionally focused on known Pin detail extraction. It does not perform keyword search, full board/profile crawling, related-Pin discovery, full comment pagination, or AI transcription.

✨ Key features

Stable, normalized Pinterest Pin data

Get a predictable public schema without exposing Pinterest's raw internal response. This makes downstream API integrations, databases, and automations less dependent on Pinterest's internal field layout.

Image and video media

Receive the best available Pin image, normalized image variants, thumbnails, and available video details. Video Pins can include a recommended video URL plus MP4/HLS formats, dimensions, duration, and reliable audio evidence when it can be detected.

Creator, board, and engagement context

Understand who is associated with a Pin, which public board contains it, and which engagement signals Pinterest exposes. Missing values remain null instead of being presented as invented zeroes or empty text.

Optional shopping data

Enable includeShoppingData for available product ID, name, brand, price, currency, availability, product URL, and rating. Product data is returned only when Pinterest exposes evidence for it.

Native caption metadata

Enable includeCaptions to inspect Pinterest-provided caption or subtitle references on video Pins. This is native metadata only—the Actor does not run speech recognition, translation, or transcript generation.

Batch processing with canonical de-duplication

Process up to 100 inputs per run. Equivalent URLs and IDs that resolve to the same canonical Pin still receive separate Dataset items, while that canonical Pin generates only one processed-pin billing event.

🚀 Quick start

  1. Paste a public Pinterest Pin URL, pin.it link, or numeric Pin ID into urls.
  2. Keep the default options enabled for Pin, media, creator, board, and engagement details.
  3. Click Start.
  4. Open the run's Dataset tab.
  5. Read the normalized pin, media, creator, board, and engagement groups. Enable shopping or captions when your workflow needs them.
{
"urls": [
"https://www.pinterest.com/pin/29695678789181460/"
]
}

Supported Pinterest inputs

  • Full Pin URL: https://www.pinterest.com/pin/29695678789181460/
  • Supported regional Pinterest domain: https://jp.pinterest.com/pin/29695678789181460/
  • Pinterest short link: https://pin.it/3AxJbLdcH
  • Numeric Pin ID: 29695678789181460

The Actor does not accept search pages, board URLs, profile URLs, related-Pin pages, or arbitrary non-Pinterest URLs.

Input

FieldTypeRequiredDefaultLimitsDescription
urlsarray of stringsYesOne tested public video Pin1–100 itemsPublic Pinterest Pin URLs, supported regional domains, pin.it links, or numeric Pin IDs. Every input receives a Dataset item. Canonical duplicates are billed once.
includeMediabooleanNotrueIncludes normalized images, video URLs, thumbnails, dimensions, and available video formats. Disable it for a smaller text-focused response.
includeCreatorbooleanNotrueIncludes public creator ID, username, name, profile URL, avatar, and follower count when exposed.
includeBoardbooleanNotrueIncludes public board ID, name, and canonical URL when Pinterest exposes board context.
includeEngagementbooleanNotrueIncludes available saves, repins, comments, shares, reactions, and reaction counts.
includeShoppingDatabooleanNofalseIncludes available product and shopping fields. Leave it off for cleaner general-purpose output.
includeCaptionsbooleanNofalseIncludes native Pinterest caption/subtitle references for video Pins and checks exposed HLS audio evidence. It does not create a transcript.

The optional output-group switches do not multiply result billing. Multiple images, formats, product fields, or caption tracks remain part of one processed Pin result.

Duplicate inputs

Duplicate inputs remain separate Dataset items so input-to-output mapping stays clear. Inputs resolving to the same pinId are billed only once per run, including equivalent full URLs, regional URLs, numeric IDs, and successfully resolved short links.

Input examples

One Pin

{
"urls": [
"https://www.pinterest.com/pin/29695678789181460/"
]
}

Numeric Pin ID

{
"urls": [
"29695678789181460"
]
}
{
"urls": [
"https://pin.it/3AxJbLdcH"
]
}

Batch with shopping and native captions

{
"urls": [
"https://www.pinterest.com/pin/29695678789181460/",
"https://www.pinterest.com/pin/550354016972119338/",
"https://www.pinterest.com/pin/1000502873449586873/"
],
"includeMedia": true,
"includeCreator": true,
"includeBoard": true,
"includeEngagement": true,
"includeShoppingData": true,
"includeCaptions": true
}

Compact Pin-only output

{
"urls": [
"29695678789181460"
],
"includeMedia": false,
"includeCreator": false,
"includeBoard": false,
"includeEngagement": false,
"includeShoppingData": false,
"includeCaptions": false
}

The core pin object remains in successful results. The optional groups are omitted when disabled.

Short output example

{
"inputUrl": "https://www.pinterest.com/pin/29695678789181460/",
"normalizedUrl": "https://www.pinterest.com/pin/29695678789181460/",
"pinId": "29695678789181460",
"success": true,
"status": "success",
"pin": {
"id": "29695678789181460",
"type": "video",
"title": "The most amazing places on earth",
"description": null
},
"media": {
"type": "video",
"bestImageUrl": "https://i.pinimg.com/originals/21/21/d4/2121d49dca2b98155ad842ef60318d6b.jpg",
"video": {
"bestVideoUrl": "https://v1.pinimg.com/videos/iht/expMp4/1b/e9/90/1be990e86e2a4964ef1e9b8778fe935d_720w.mp4",
"durationMs": 12100,
"width": 720,
"height": 1280,
"hasAudio": null
}
},
"scrapedAt": "2026-08-24T14:37:06.390Z"
}

Output

Every submitted input produces one Dataset item in the original order, including duplicates and failures. Successful image and video Pins both use status: "success"; distinguish them with pin.type and media.type.

Optional groups are omitted when disabled. Individual fields use null when Pinterest does not expose a value or the Actor cannot determine it reliably.

Complete output field reference

Core processing fields

FieldTypeNullableMeaning
inputUrlstringNoOriginal input after surrounding whitespace is removed.
normalizedUrlstringYesCanonical Pinterest Pin URL when normalization or short-link resolution succeeds.
pinIdstringYesNumeric Pinterest Pin ID.
successbooleanNotrue when the public Pin was parsed into the normalized schema.
statusstringNoStable processing status described below.
scrapedAtstringNoISO 8601 UTC timestamp generated by the Actor.

pin

The core pin object is included for successful results.

FieldTypeNullableMeaning
pin.idstringNoNumeric Pinterest Pin ID.
pin.typestringNoDetected video, image, gif, or unknown type.
pin.urlstringNoCanonical public Pinterest Pin URL.
pin.titlestringYesTitle exposed by Pinterest.
pin.descriptionstringYesDescription exposed by Pinterest.
pin.createdAtstringYesPinterest-provided creation date string; it is not guaranteed to be normalized.
pin.sourceUrlstringYesSource URL exposed in Pin rich metadata.
pin.outboundUrlstringYesPublic destination URL associated with the Pin.
pin.domainstringYesDomain or source label exposed by Pinterest.
pin.hashtagsarray of stringsHashtags extracted from the available description.

media

Included when includeMedia is true.

FieldTypeNullableMeaning
media.typestringNoDetected video, image, gif, or unknown media type.
media.bestImageUrlstringYesBest available original/high-resolution image or thumbnail URL.
media.imagesarrayNormalized image variants.
media.videoobjectYesAvailable normalized video details; null for image Pins.

Each media.images item contains quality, nullable width and height in pixels, and url.

media.video

FieldTypeNullableMeaning
bestVideoUrlstringYesRecommended available video URL, with progressive MP4 preferred over HLS when present.
thumbnailUrlstringYesPinterest-provided video thumbnail or best Pin image.
durationMsnumberYesDuration in milliseconds.
widthnumberYesSelected video width in pixels.
heightnumberYesSelected video height in pixels.
hasAudiobooleanYesAudio evidence from an exposed HLS manifest. null means not reliably determined.
formatsarrayAvailable video variants.

Each formats item can contain:

  • quality: Pinterest quality identifier.
  • format: mp4, hls, or unknown.
  • mimeType: nullable detected MIME type.
  • width and height: nullable pixels.
  • durationMs: nullable milliseconds.
  • bitrate: nullable bitrate exposed by Pinterest.
  • thumbnailUrl: nullable thumbnail.
  • url: direct media URL.

creator

Included when includeCreator is true; the whole value can be null.

  • id: nullable Pinterest user ID.
  • username: nullable public username.
  • fullName: nullable display name.
  • profileUrl: nullable canonical profile URL.
  • avatarUrl: nullable public avatar URL.
  • followerCount: nullable numeric follower count exposed by Pinterest.

board

Included when includeBoard is true; the whole value can be null.

  • id: nullable board ID.
  • name: nullable board name.
  • url: nullable canonical public board URL.

engagement

Included when includeEngagement is true.

  • saves: nullable number of saves exposed by Pinterest.
  • repins: nullable repin count.
  • comments: nullable comment count. This Actor does not crawl comment text or pagination.
  • shares: nullable share count.
  • reactions: nullable sum of exposed reaction counts.
  • reactionCounts: nullable map keyed by Pinterest reaction identifier.

These values can change after a run and may differ by geography or Pinterest response.

product

Included when includeShoppingData is true; the value is null when Pinterest does not expose product evidence.

  • id: nullable product reference ID.
  • name: nullable product name.
  • brand: nullable brand or merchant name.
  • price: nullable numeric price. Pinterest's zero/missing value is returned as null, not interpreted as a free product.
  • currency: nullable currency code.
  • availability: nullable availability value such as out_of_stock.
  • url: nullable product or merchant URL.
  • rating: nullable numeric rating.

captions

Included when includeCaptions is true.

  • available: boolean indicating whether at least one native track reference was found.
  • tracks: array of native tracks containing nullable language, nullable label, detected format, and direct url.

Caption tracks are Pinterest-provided metadata. They are not AI-generated transcripts.

error

Unsuccessful items include:

  • error.code: stable machine-readable error code.
  • error.message: plain-English explanation for API users.

Internal exception text, cookies, proxy passwords, and authentication headers are not returned.

Status values

StatusMeaningMain outputprocessed-pin event*
successAn image, video, or GIF Pin was parsed successfully.Normalized pin and selected optional groups.Yes
no_mediaThe Pin was reached but no supported media was found.NO_MEDIA error.Yes
invalid_inputThe input was empty, malformed, or not a supported Pinterest Pin URL/ID.INVALID_INPUT or INVALID_PIN_URL.No when rejected before processing
not_foundPinterest reports that the Pin cannot be found.PIN_NOT_FOUND error.Yes
privateThe Pin is private or requires authentication.PRIVATE_PIN error.Yes
rate_limitedPinterest temporarily rate-limited the request.RATE_LIMITED error.Yes
blockedPinterest blocked the request from the current network path.BLOCKED error.Yes
timeoutPinterest did not respond before the timeout.TIMEOUT error.Yes
errorThe Pin was unavailable, unsupported, or could not be parsed.A matching stable error.code.Yes

*Only the first processed occurrence of a canonical Pin is billed. Canonical duplicates do not generate another event. A syntactically valid pin.it input that enters processing can be billed even if redirect resolution later fails.

Failures do not stop the rest of a batch. Every failed input is written to the Dataset in its original position.

Error codes

CodeMeaning
INVALID_INPUTThe input is empty or missing.
INVALID_PIN_URLThe value is not a supported Pinterest Pin URL or numeric Pin ID.
PIN_NOT_FOUNDPinterest reports that the Pin cannot be found.
PIN_UNAVAILABLEThe Pin is currently unavailable or a network request failed.
PRIVATE_PINThe Pin is private or requires authentication.
NO_MEDIAThe Pin was parsed but contains no supported media.
RATE_LIMITEDPinterest temporarily rate-limited the request.
BLOCKEDPinterest blocked the request from the current network path.
TIMEOUTPinterest did not respond within the request timeout.
PARSE_FAILEDPinterest responded, but the Pin could not be normalized safely.

Output examples

Image Pin

{
"inputUrl": "https://www.pinterest.com/pin/550354016972119338/",
"normalizedUrl": "https://www.pinterest.com/pin/550354016972119338/",
"pinId": "550354016972119338",
"success": true,
"status": "success",
"pin": {
"id": "550354016972119338",
"type": "image",
"url": "https://www.pinterest.com/pin/550354016972119338/",
"title": null,
"description": null,
"createdAt": "Mon, 11 Oct 2021 01:46:00 +0000",
"sourceUrl": "https://notentirelyaverage.com/salted-burnt-caramel-custard/",
"outboundUrl": "https://notentirelyaverage.com/salted-burnt-caramel-custard/",
"domain": "notentirelyaverage.com",
"hashtags": []
},
"media": {
"type": "image",
"bestImageUrl": "https://i.pinimg.com/originals/f8/4e/fe/f84efee12675666101577f980fea18e2.png",
"images": [
{
"quality": "orig",
"width": 683,
"height": 1024,
"url": "https://i.pinimg.com/originals/f8/4e/fe/f84efee12675666101577f980fea18e2.png"
}
],
"video": null
},
"scrapedAt": "2026-08-24T14:40:00.000Z"
}

Pinterest values can change over time. This example shows the normalized structure of a real tested public image Pin.

Shopping Pin

{
"inputUrl": "https://www.pinterest.com/pin/1000502873449586873/",
"normalizedUrl": "https://www.pinterest.com/pin/1000502873449586873/",
"pinId": "1000502873449586873",
"success": true,
"status": "success",
"pin": {
"id": "1000502873449586873",
"type": "image",
"title": null,
"description": "COSRX BHA Power Liquid | Shop Korean Skincare in CAN & US | Sukoshi Mart",
"outboundUrl": "https://sukoshimart.com/products/cosrx-bha-blackhead-power-liquid",
"domain": "sukoshimart.com"
},
"product": {
"id": "-2951750088062004643",
"name": null,
"brand": null,
"price": null,
"currency": "USD",
"availability": "out_of_stock",
"url": "https://sukoshimart.com/products/cosrx-bha-blackhead-power-liquid",
"rating": null
},
"scrapedAt": "2026-08-24T14:46:14.431Z"
}

Invalid input

{
"inputUrl": "https://example.com/not-a-pinterest-pin",
"normalizedUrl": null,
"pinId": null,
"success": false,
"status": "invalid_input",
"error": {
"code": "INVALID_PIN_URL",
"message": "The input is not a supported Pinterest Pin URL or numeric Pin ID."
},
"scrapedAt": "2026-08-24T14:37:05.365Z"
}

🔌 API usage

Use the real Actor ID lance_api/pinterest-pin-scraper-api. Keep your token in the APIFY_TOKEN environment variable and never place a real token in source code.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
urls: ['https://www.pinterest.com/pin/29695678789181460/'],
includeMedia: true,
includeCreator: true,
includeBoard: true,
includeEngagement: true,
includeShoppingData: false,
includeCaptions: false,
};
const run = await client.actor('lance_api/pinterest-pin-scraper-api').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('lance_api/pinterest-pin-scraper-api').call(run_input={
'urls': ['https://www.pinterest.com/pin/29695678789181460/'],
'includeMedia': True,
'includeCreator': True,
'includeBoard': True,
'includeEngagement': True,
'includeShoppingData': False,
'includeCaptions': False,
})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items[0])

cURL

This synchronous endpoint starts the Actor, waits for completion, and returns the default Dataset items:

curl --request POST \
"https://api.apify.com/v2/acts/lance_api~pinterest-pin-scraper-api/run-sync-get-dataset-items" \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"urls": ["https://www.pinterest.com/pin/29695678789181460/"],
"includeMedia": true,
"includeCreator": true,
"includeBoard": true,
"includeEngagement": true,
"includeShoppingData": false,
"includeCaptions": false
}'

💳 Pricing

Simple result-based pricing: each unique canonical Pinterest Pin that enters processing produces one processed-pin billing event. Duplicate inputs can still receive separate Dataset items, but they are not charged again.

Standard Free pricing is $0.0020 per result — $2.00 per 1,000 results. Eligible Apify Store discounts can reduce this to $0.0010 per result — $1.00 per 1,000 results.

  • One processed unique canonical Pin: one event.
  • Canonical duplicate: no additional charge.
  • Image, video, or GIF Pin: one event when it is the first processed occurrence.
  • No-media, unavailable, private, blocked, rate-limited, timeout, or parse-failed result: one event when processing was attempted for that unique canonical input.
  • Malformed input or unsupported domain rejected before Pinterest processing: no event.
  • Multiple images, video formats, product fields, or caption tracks: still one event.
  • Optional output groups: enabling or disabling them does not multiply billing.

Check the Actor's Pricing tab for the current plan-specific rate. Control event cost by limiting the number of unique canonical Pins submitted in each run.

💡 Use cases

Pinterest content research

Build structured research datasets from known public Pins, including titles, descriptions, media, attribution, and destination links.

Media cataloging

Use normalized image and available video variants to organize public Pinterest media references in a CMS, DAM, or review workflow.

Creator and board analysis

Use creator and board context to understand public attribution and collection placement. The Actor returns the data; your downstream system can perform analysis or aggregation.

Engagement analysis

Collect available saves, comments, shares, repins, and reactions for reporting, comparison, or trend research across a known list of Pins.

Commerce and shopping enrichment

Enable product data to enrich catalogs or research commerce-focused Pins with available currency, availability, product URLs, and other exposed fields.

AI and RAG pipelines

Feed normalized Pin text, media URLs, and metadata into your own retrieval, classification, summarization, or multimodal workflow. The Actor itself does not perform AI analysis.

Data warehouse and API automation

Load predictable JSON into a database, spreadsheet, ETL job, scheduled Apify Task, or internal API without parsing Pinterest's raw internal response.

How it works

  1. Validate each Pin URL, short link, or numeric Pin ID.
  2. Resolve supported short links and normalize the canonical Pin URL.
  3. Reuse equivalent canonical Pin requests where possible.
  4. Retrieve the public Pin detail data over HTTP with bounded retries and timeouts.
  5. Normalize Pin, media, creator, board, engagement, shopping, and caption fields.
  6. Save one Dataset item for every submitted input, including duplicates and failures.
  7. Apply processed-pin billing once per unique canonical Pin that entered processing.

The Actor uses HTTP requests rather than a full browser and does not expose Pinterest's internal endpoint or raw response as its public API.

FAQ

What Pinterest inputs are supported?

Public Pin detail URLs on supported Pinterest domains, pin.it short links, and numeric Pin IDs. Search, profile, and board URLs are not accepted.

Can I use only a numeric Pin ID?

Yes. For example, submit 29695678789181460 as an item in urls.

Yes. The Actor follows supported public redirects and returns the canonical normalizedUrl and pinId when resolution succeeds.

Can I process up to 100 Pins?

Yes. urls accepts 1–100 items, and every input receives a Dataset item.

How are duplicates handled and charged?

Equivalent inputs remain separate Dataset items for clear input mapping. If they resolve to the same canonical Pin, that Pin is billed only once in the run.

Does it return both image and video Pins?

Yes. Both return status: "success" when parsed. Use pin.type or media.type to distinguish them. Video information is returned only when Pinterest exposes video media.

Does it return shopping data?

Enable includeShoppingData. Product fields are returned only when Pinterest exposes product evidence; otherwise product is null.

Does it scrape native captions or generate transcripts?

With includeCaptions, the Actor returns native Pinterest caption/subtitle references when available. It does not perform ASR, transcript generation, or translation.

What happens if a Pin is private or unavailable?

The input still receives a structured failure item with status and error.code. A valid Pinterest input that entered processing counts as one result unless it is a canonical duplicate.

How am I charged?

Each unique canonical Pin that enters processing generates one processed-pin event. Inputs rejected before Pinterest processing are not charged, and duplicates do not generate another event. See the Pricing tab for your plan's current rate.

Can AI agents use this Actor?

AI systems can call the Actor through the Apify API or an integration that supports Apify Actors, then use the returned structured data in downstream workflows. A dedicated MCP section is not included until this Actor's Apify MCP availability has been verified.

Limitations

  • Public Pin detail extraction only.
  • Private, deleted, login-required, region-restricted, or unavailable Pins may fail or expose limited fields.
  • Pinterest decides which metadata, media, creator, board, engagement, product, and caption fields are available.
  • Shopping data is returned only when Pinterest exposes product evidence.
  • Native captions are returned only when exposed; no ASR, transcript generation, or translation is performed.
  • Direct image and video CDN URLs may expire, rotate, or become unavailable after a run.
  • No keyword search, related-Pin discovery, full board crawl, full profile crawl, or full comment pagination.
  • No permanent media hosting or automatic copying of media files into storage.
  • No outbound-site scanning and no access-control bypass.

Public data and responsible use

Use this Actor only for publicly accessible Pinterest Pin data and comply with Pinterest's terms, Apify's terms, applicable privacy laws, copyright rules, and other applicable law.

Do not use it to access private information, bypass controls, harass people, send spam, create unlawful profiles, or redistribute copyrighted media without the necessary rights or permission. You are responsible for your inputs and downstream use of returned data and URLs.

Support

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

Include the Run ID, a non-sensitive public Pin URL or ID, the returned status, error.code, and expected versus actual behavior. Do not send your Apify token, cookies, sessions, API keys, passwords, proxy credentials, or other private credentials.