# Pinterest Pin Scraper (`scrapingmonkey/pinterest-pin-scraper`) Actor

Extract public Pinterest pin details from URLs or IDs. Export descriptions, images, video variants, source links, authors, boards and available engagement counts.

- **URL**: https://apify.com/scrapingmonkey/pinterest-pin-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Extract public Pinterest pin details from pin links or identifiers and save one complete record per pin. **Pinterest Pin Scraper** returns text, images, available video variants, source links, creators, boards and visible engagement metadata.

Use selected pins to enrich a research database or media inventory. Ordinary, video and product-related pins share one output schema, while missing optional fields remain empty instead of being guessed.

| At a glance | Details |
|---|---|
| 📥 Input | Enter numeric Pinterest pin IDs or canonical https://www.pinterest.com/pin/ID/ URLs. Short pin.it URLs are not supported. |
| 📤 Output | One pin per success row with the input source retained |
| 📄 Pagination | Individual lookups; no result pagination |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 HTTP requests concurrently; up to 5 attempts for temporary failures |
| 💾 Delivery | One Apify dataset view with individual records and complete nested JSON |

### What the Pinterest pin scraper collects 📌

The Actor reads the public detail response for each pin. It keeps media variants and nested context in the same row, making a single record usable in a spreadsheet or a downstream API.

Data can include:

- Pin ID, canonical URL, title, description and publication date when exposed
- Images, video variants, thumbnails and available media dimensions
- Source link and domain, creator and board metadata
- Pin-level and aggregate engagement fields kept separately
- Product-related metadata when actually present in the public response

### How to collect pin details from Pinterest 🚀

1. Enter one or more supported inputs.
2. Review the supported input format.
3. Start the Actor.
4. Open the **Pins** dataset view and review success or failed rows.
5. Export the dataset or retrieve records from your application.

```json
{
  "inputList": [
    "https://www.pinterest.com/pin/1020909809261285009/"
  ]
}
```

This Actor looks up individual pins and has no result pagination. Each unique supported input produces one success or failed record.

### Pinterest pin details output fields 📦

| Field | Type | Meaning |
|---|---|---|
| `input` | string | Original submitted input. |
| `status` | string | Whether this entity was successfully collected. |
| `id` | string or null | Id when supplied by Pinterest. |
| `url` | string or null | Url when supplied by Pinterest. |
| `title` | string or null | Title when supplied by Pinterest. |
| `description` | string or null | Description when supplied by Pinterest. |
| `created_at` | string or null | Created at when supplied by Pinterest. |
| `link` | string or null | Link when supplied by Pinterest. |
| `domain` | string or null | Domain when supplied by Pinterest. |
| `alt_text` | string or null | Alt text when supplied by Pinterest. |
| `auto_alt_text` | string or null | Auto alt text when supplied by Pinterest. |
| `seo_title` | string or null | Seo title when supplied by Pinterest. |
| `seo_description` | string or null | Seo description when supplied by Pinterest. |
| `seo_alt_text` | string or null | Seo alt text when supplied by Pinterest. |
| `dominant_color` | string or null | Dominant color when supplied by Pinterest. |
| `image_url` | string or null | Image url when supplied by Pinterest. |
| `images` | array or null | Available image variants, preserved in one dataset cell. |
| `videos` | array or null | Available video variants with duration in milliseconds, preserved in one dataset cell. |
| `has_video` | boolean or null | Whether video variants were present in this response. |
| `is_video_raw` | boolean or null | Raw Pinterest is\_video flag; video variants can exist when it is false. |
| `is_repin` | boolean or null | Is repin when supplied by Pinterest. |
| `is_promoted` | boolean or null | Is promoted when supplied by Pinterest. |
| `repin_count` | integer or null | Repin count reported for this pin; separate from aggregate saves. |
| `comment_count` | integer or null | Comment count reported for this individual pin. |
| `favorite_user_count` | integer or null | Favorite user count when supplied by Pinterest. |
| `share_count` | integer or null | Share count when supplied by Pinterest. |
| `comments_disabled` | boolean or null | Comments disabled when supplied by Pinterest. |
| `aggregated_pin_id` | string or null | Pinterest aggregate ID shared by related copies of the pin. |
| `aggregated_comment_count` | integer or null | Comment count reported for the aggregated pin. |
| `aggregated_save_count` | integer or null | Save count reported for the aggregated pin. |
| `aggregated_done_count` | integer or null | Tried-it count reported for the aggregated pin. |
| `reactions` | array or null | Reactions when supplied by Pinterest. |
| `author` | object or null | Author when supplied by Pinterest. |
| `board` | object or null | Board when supplied by Pinterest. |
| `section` | object or null | Section when supplied by Pinterest. |
| `product` | object or null | Product fields when product metadata exists. Raw zero prices do not establish a free product. |

Nested field structure:

- `images[]`: `variant`, `url`, `width`, `height`, `dominant_color`.
- `videos[]`: `variant`, `url`, `width`, `height`, `duration_ms`, `thumbnail_url`.
- `reactions[]`: `type`, `count`.
- `author`: `id`, `username`, `name`, `url`, `image_url`, `image_large_url`, `is_verified`, `is_verified_merchant`, `is_private`, `follower_count`.
- `board`: `id`, `url`, `name`, `description`, `pin_count`, `follower_count`, `section_count`, `sectionless_pin_count`, `collaborator_count`, `is_collaborative`, `privacy`, `category`, `cover_image_url`, `cover_image_hd_url`, `last_modified_at`, `owner`, `images`.
- `board.owner`: `id`, `username`, `name`, `url`, `image_url`, `image_large_url`, `is_verified`, `is_verified_merchant`, `is_private`, `follower_count`.
- `board.images[]`: `variant`, `url`, `width`, `height`, `dominant_color`.
- `section`: `id`, `title`, `slug`, `description`, `pin_count`, `url`.
- `product`: `metadata_id`, `price_value_raw`, `price_currency`, `availability`, `is_out_of_stock`, `is_stale`.

The examples below use normalized public response data. Values are snapshots and may change; every top-level output field is included. Different media variants and nested objects remain inside the same row.

Complete representative success result:

```json
{
  "input": "https://www.pinterest.com/pin/1020909809261285009/",
  "status": "success",
  "id": "1020909809261285009",
  "url": "https://www.pinterest.com/pin/1020909809261285009/",
  "title": "Mariam Olivera",
  "description": "Mariam Olivera|Modelo Cuba-Estadounidense",
  "created_at": "2023-06-20T12:53:52Z",
  "link": null,
  "domain": "Uploaded by user",
  "alt_text": null,
  "auto_alt_text": "a woman with long blonde hair is posing in the back seat of a car and holding her finger to her lips",
  "seo_title": "Mariam Olivera | Salud alternativa, Estilos de cabello y barba, Mujeres rubias",
  "seo_description": "Mariam Olivera|Modelo Cuba-Estadounidense | Lindas, Fotos, Photo de",
  "seo_alt_text": "a woman with long blonde hair is posing in the back seat of a car and holding her finger to her lips",
  "dominant_color": "#b0927a",
  "image_url": "https://i.pinimg.com/originals/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
  "images": [
    {
      "variant": "60x60",
      "url": "https://i.pinimg.com/60x60/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 60,
      "height": 60,
      "dominant_color": null
    },
    {
      "variant": "136x136",
      "url": "https://i.pinimg.com/136x136/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 136,
      "height": 136,
      "dominant_color": null
    },
    {
      "variant": "170x",
      "url": "https://i.pinimg.com/236x/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 236,
      "height": 419,
      "dominant_color": null
    },
    {
      "variant": "474x",
      "url": "https://i.pinimg.com/474x/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 474,
      "height": 842,
      "dominant_color": null
    },
    {
      "variant": "564x",
      "url": "https://i.pinimg.com/564x/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 564,
      "height": 1002,
      "dominant_color": null
    },
    {
      "variant": "736x",
      "url": "https://i.pinimg.com/736x/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 736,
      "height": 1307,
      "dominant_color": null
    },
    {
      "variant": "600x315",
      "url": "https://i.pinimg.com/600x315/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 600,
      "height": 315,
      "dominant_color": null
    },
    {
      "variant": "1200x",
      "url": "https://i.pinimg.com/1200x/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 1080,
      "height": 1919,
      "dominant_color": null
    },
    {
      "variant": "orig",
      "url": "https://i.pinimg.com/originals/37/fd/dd/37fddd03ee8b2e1a05c297e20d261601.jpg",
      "width": 1080,
      "height": 1919,
      "dominant_color": null
    }
  ],
  "videos": [],
  "has_video": false,
  "is_video_raw": false,
  "is_repin": true,
  "is_promoted": false,
  "repin_count": 2617,
  "comment_count": 0,
  "favorite_user_count": 0,
  "share_count": 633,
  "comments_disabled": true,
  "aggregated_pin_id": "5277747762016869223",
  "aggregated_comment_count": 659,
  "aggregated_save_count": 15126,
  "aggregated_done_count": 11,
  "reactions": [
    {
      "type": "1",
      "count": 1911
    },
    {
      "type": "11",
      "count": 1
    },
    {
      "type": "13",
      "count": 1
    }
  ],
  "author": {
    "id": "1020909946688135242",
    "username": "samuelp9215",
    "name": "Samuel Pimentel",
    "url": "https://www.pinterest.com/samuelp9215/",
    "image_url": "https://s.pinimg.com/images/user/default_75.png",
    "image_large_url": null,
    "is_verified": null,
    "is_verified_merchant": false,
    "is_private": null,
    "follower_count": 4
  },
  "board": {
    "id": "1020909877969119899",
    "url": "https://www.pinterest.com/samuelp9215/_quick_saves/",
    "name": "Guardado rápido",
    "description": "",
    "pin_count": null,
    "follower_count": null,
    "section_count": null,
    "sectionless_pin_count": null,
    "collaborator_count": null,
    "is_collaborative": false,
    "privacy": "public",
    "category": null,
    "cover_image_url": "https://i.pinimg.com/200x150/11/07/55/110755dccc232b0fc5197c0f7557418a.jpg",
    "cover_image_hd_url": null,
    "last_modified_at": null,
    "owner": {
      "id": "1020909946688135242",
      "username": "samuelp9215",
      "name": "Samuel Pimentel",
      "url": "https://www.pinterest.com/samuelp9215/",
      "image_url": "https://s.pinimg.com/images/user/default_75.png",
      "image_large_url": null,
      "is_verified": null,
      "is_verified_merchant": false,
      "is_private": null,
      "follower_count": 4
    },
    "images": []
  },
  "section": null,
  "product": null
}
```

Complete product result:

```json
{
  "input": "https://www.pinterest.com/pin/4595430967781373568/",
  "status": "success",
  "id": "4595430967781373568",
  "url": "https://www.pinterest.com/pin/4595430967781373568/",
  "title": "Vanleestar Women Juniors Neon Ribbed Leg Warmers for 80s Eighty's Party",
  "description": "Premium Material and Comfort: Made from 100% acrylic fibers that are soft and comfortable. Easy to put on and take off. These leg warmers provide a layer of protection for your legs against cold weather, especially during winter, keeping you warm throughout the day\nVersatile Size and Fit: Total length measures 40cm/15.75in with excellent elasticity that fits most people. Super stretchy, thick and warm construction ensures a comfortable fit that enhances your appearance\nEasy Care Instructions: Machine washable in cold water and hang dry. Do not bleach or iron. These leg warmers maintain their shape after washing, ensuring long-lasting durability and appearance\nMultiple Occasion Wear: Suitable for party, christmas, rock concerts, cosplay events, dating, school, daily wear, fashion shows, 80s",
  "created_at": "2026-06-06T06:03:40Z",
  "link": "https://www.amazon.com/Warmers-Ribbed-Sports-Juniors-Knitted/dp/B0BPSQNK9H?ref_=pinterest_fplfs",
  "domain": "amazon.com",
  "alt_text": null,
  "auto_alt_text": null,
  "seo_title": "Vanleestar Women Juniors Neon Ribbed Leg Warmers for 80s Eighty's Party | White one size leg warmers for winter, Footless fitted white leg warmers, Cozy comfortable white leg warmers",
  "seo_description": "Jun 24, 2026 — Premium Material and Comfort: Made from 100% acrylic fibers that are soft and comfortable. Easy to put on and take off. These leg warmers provide a layer of protection for your legs against cold weather, especially during winter, keeping you warm throughout the day Versatile Size and Fit: Total length measures 40cm/15.…",
  "seo_alt_text": "Premium Material and Comfort: Made from 100% acrylic fibers that are soft and comfortable. Easy to put on and take off. These leg warmers provide a layer of protection for your legs against cold weather, especially during winter, keeping you warm throughout the day\nVersatile Size and Fit: Total length measures 40cm/15.75in with excellent elasticity that fits most people. Super stretchy, thick and warm construction ensures a comfortable fit that enhances your appearance\nEasy Care Instructions: Machine washable in cold water and hang dry. Do not bleach or iron. These leg warmers maintain their shape after washing, ensuring long-lasting durability and appearance\nMultiple Occasion Wear: Suitable for party, christmas, rock concerts, cosplay events, dating, school, daily wear, fashion shows, 80s White One Size Leg Warmers For Winter, Footless Fitted White Leg Warmers, Cozy Comfortable White Leg Warmers, White Stretch Mid-calf Leg Warmers, Eighties Party, Knit Leg Warmers, Jeans With Heels, Knit Fashion, Leg Warmers",
  "dominant_color": "#ffffff",
  "image_url": "https://i.pinimg.com/originals/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
  "images": [
    {
      "variant": "60x60",
      "url": "https://i.pinimg.com/60x60/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 60,
      "height": 60,
      "dominant_color": null
    },
    {
      "variant": "136x136",
      "url": "https://i.pinimg.com/136x136/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 136,
      "height": 136,
      "dominant_color": null
    },
    {
      "variant": "170x",
      "url": "https://i.pinimg.com/236x/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 236,
      "height": 236,
      "dominant_color": null
    },
    {
      "variant": "474x",
      "url": "https://i.pinimg.com/474x/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 474,
      "height": 474,
      "dominant_color": null
    },
    {
      "variant": "564x",
      "url": "https://i.pinimg.com/564x/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 564,
      "height": 564,
      "dominant_color": null
    },
    {
      "variant": "736x",
      "url": "https://i.pinimg.com/736x/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 736,
      "height": 736,
      "dominant_color": null
    },
    {
      "variant": "600x315",
      "url": "https://i.pinimg.com/600x315/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 600,
      "height": 315,
      "dominant_color": null
    },
    {
      "variant": "1200x",
      "url": "https://i.pinimg.com/1200x/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 1200,
      "height": 1200,
      "dominant_color": null
    },
    {
      "variant": "orig",
      "url": "https://i.pinimg.com/originals/f5/2e/d6/f52ed696dd7011fe84b9ec629f602398.jpg",
      "width": 1601,
      "height": 1601,
      "dominant_color": null
    }
  ],
  "videos": [],
  "has_video": false,
  "is_video_raw": false,
  "is_repin": false,
  "is_promoted": false,
  "repin_count": 8,
  "comment_count": 0,
  "favorite_user_count": 0,
  "share_count": 0,
  "comments_disabled": false,
  "aggregated_pin_id": "5332311432495162805",
  "aggregated_comment_count": 0,
  "aggregated_save_count": 21,
  "aggregated_done_count": 0,
  "reactions": [],
  "author": {
    "id": "746964425604559197",
    "username": "amazon",
    "name": "Amazon",
    "url": "https://www.pinterest.com/amazon/",
    "image_url": "https://i.pinimg.com/75x75_RS/eb/16/fc/eb16fcde8b29114c6af115cf6b51b4b0.jpg",
    "image_large_url": null,
    "is_verified": true,
    "is_verified_merchant": false,
    "is_private": null,
    "follower_count": 2300129
  },
  "board": {
    "id": "746964356886045799",
    "url": "https://www.pinterest.com/amazon/_products/",
    "name": "Products",
    "description": "",
    "pin_count": null,
    "follower_count": null,
    "section_count": null,
    "sectionless_pin_count": null,
    "collaborator_count": null,
    "is_collaborative": false,
    "privacy": "protected",
    "category": "products",
    "cover_image_url": "https://i.pinimg.com/200x150/17/dd/06/17dd067b523d52c134e3c171c48b1dd9.jpg",
    "cover_image_hd_url": null,
    "last_modified_at": null,
    "owner": {
      "id": "746964425604559197",
      "username": "amazon",
      "name": "Amazon",
      "url": "https://www.pinterest.com/amazon/",
      "image_url": "https://i.pinimg.com/75x75_RS/eb/16/fc/eb16fcde8b29114c6af115cf6b51b4b0.jpg",
      "image_large_url": null,
      "is_verified": true,
      "is_verified_merchant": false,
      "is_private": null,
      "follower_count": 2300129
    },
    "images": []
  },
  "section": null,
  "product": {
    "metadata_id": "-1632478299901500064",
    "price_value_raw": 0,
    "price_currency": "USD",
    "availability": null,
    "is_out_of_stock": false,
    "is_stale": false
  }
}
```

Complete video result:

```json
{
  "input": "https://www.pinterest.com/pin/1139762618205274470/",
  "status": "success",
  "id": "1139762618205274470",
  "url": "https://www.pinterest.com/pin/1139762618205274470/",
  "title": "",
  "description": "* Tout dans le regard et dans les yeux \"",
  "created_at": "2025-08-07T15:41:44Z",
  "link": null,
  "domain": "Uploaded by user",
  "alt_text": "",
  "auto_alt_text": "a young woman with long hair standing in front of a mirror looking at the camera",
  "seo_title": "* Tout dans le regard et dans les yeux \" [Vidéo] | Beleza, Visage de femme, La beauté",
  "seo_description": "27 juil. 2026 — * Tout dans le regard et dans les yeux \" | Nous, Je suis",
  "seo_alt_text": "a young woman with long hair standing in front of a mirror looking at the camera",
  "dominant_color": "#685e51",
  "image_url": "https://i.pinimg.com/originals/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
  "images": [
    {
      "variant": "60x60",
      "url": "https://i.pinimg.com/60x60/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 60,
      "height": 60,
      "dominant_color": null
    },
    {
      "variant": "136x136",
      "url": "https://i.pinimg.com/136x136/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 136,
      "height": 136,
      "dominant_color": null
    },
    {
      "variant": "170x",
      "url": "https://i.pinimg.com/236x/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 236,
      "height": 419,
      "dominant_color": null
    },
    {
      "variant": "474x",
      "url": "https://i.pinimg.com/474x/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 474,
      "height": 842,
      "dominant_color": null
    },
    {
      "variant": "564x",
      "url": "https://i.pinimg.com/564x/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 564,
      "height": 1002,
      "dominant_color": null
    },
    {
      "variant": "736x",
      "url": "https://i.pinimg.com/736x/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 576,
      "height": 1024,
      "dominant_color": null
    },
    {
      "variant": "600x315",
      "url": "https://i.pinimg.com/600x315/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 576,
      "height": 315,
      "dominant_color": null
    },
    {
      "variant": "1200x",
      "url": "https://i.pinimg.com/1200x/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 576,
      "height": 1024,
      "dominant_color": null
    },
    {
      "variant": "orig",
      "url": "https://i.pinimg.com/originals/ff/37/ff/ff37ff1bbc3dd8538e5b417a21989a5c.jpg",
      "width": 576,
      "height": 1024,
      "dominant_color": null
    }
  ],
  "videos": [
    {
      "variant": "V_720P",
      "url": "https://v1.pinimg.com/videos/iht/expMp4/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85_720w.mp4",
      "width": 576,
      "height": 1024,
      "duration_ms": 11411,
      "thumbnail_url": "https://i.pinimg.com/videos/thumbnails/originals/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85.0000000.jpg"
    },
    {
      "variant": "V_HLSV4",
      "url": "https://v1.pinimg.com/videos/iht/hls/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85.m3u8",
      "width": 576,
      "height": 1024,
      "duration_ms": 11411,
      "thumbnail_url": "https://i.pinimg.com/videos/thumbnails/originals/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85.0000000.jpg"
    },
    {
      "variant": "V_HLSV3_MOBILE",
      "url": "https://v1.pinimg.com/videos/iht/hls/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85.m3u8",
      "width": 576,
      "height": 1024,
      "duration_ms": 11411,
      "thumbnail_url": "https://i.pinimg.com/videos/thumbnails/originals/4e/e6/e1/4ee6e1e3df877bdd571559f473644e85.0000000.jpg"
    }
  ],
  "has_video": true,
  "is_video_raw": false,
  "is_repin": false,
  "is_promoted": false,
  "repin_count": 135,
  "comment_count": 0,
  "favorite_user_count": 0,
  "share_count": 438,
  "comments_disabled": true,
  "aggregated_pin_id": "5445477821380085177",
  "aggregated_comment_count": 0,
  "aggregated_save_count": 342,
  "aggregated_done_count": 0,
  "reactions": [
    {
      "type": "1",
      "count": 82
    }
  ],
  "author": {
    "id": "1139762755604254414",
    "username": "nadinelove7560",
    "name": "🌸  𝙽𝚊𝚍𝚒𝚗𝚎 🌸",
    "url": "https://www.pinterest.com/nadinelove7560/",
    "image_url": "https://i.pinimg.com/75x75_RS/9c/4e/eb/9c4eeb56bbac214fd46e4ba2f62138d8.jpg",
    "image_large_url": null,
    "is_verified": null,
    "is_verified_merchant": false,
    "is_private": null,
    "follower_count": 90657
  },
  "board": {
    "id": "1139762686886253038",
    "url": "https://www.pinterest.com/nadinelove7560/beautiful-face/",
    "name": "𝙱𝚎𝚊𝚞𝚝𝚒𝚏𝚞𝚕 𝙵𝚊𝚌𝚎 ...",
    "description": "",
    "pin_count": null,
    "follower_count": null,
    "section_count": null,
    "sectionless_pin_count": null,
    "collaborator_count": null,
    "is_collaborative": false,
    "privacy": "public",
    "category": null,
    "cover_image_url": "https://i.pinimg.com/custom_covers/200x150/1139762686886253038_1787167152.jpg",
    "cover_image_hd_url": null,
    "last_modified_at": null,
    "owner": {
      "id": "1139762755604254414",
      "username": "nadinelove7560",
      "name": "🌸  𝙽𝚊𝚍𝚒𝚗𝚎 🌸",
      "url": "https://www.pinterest.com/nadinelove7560/",
      "image_url": "https://i.pinimg.com/75x75_RS/9c/4e/eb/9c4eeb56bbac214fd46e4ba2f62138d8.jpg",
      "image_large_url": null,
      "is_verified": null,
      "is_verified_merchant": false,
      "is_private": null,
      "follower_count": 90657
    },
    "images": []
  },
  "section": null,
  "product": null
}
```

Complete failed dataset item:

```json
{
  "input": "invalid input",
  "status": "failed",
  "id": null,
  "url": null,
  "title": null,
  "description": null,
  "created_at": null,
  "link": null,
  "domain": null,
  "alt_text": null,
  "auto_alt_text": null,
  "seo_title": null,
  "seo_description": null,
  "seo_alt_text": null,
  "dominant_color": null,
  "image_url": null,
  "images": null,
  "videos": null,
  "has_video": null,
  "is_video_raw": null,
  "is_repin": null,
  "is_promoted": null,
  "repin_count": null,
  "comment_count": null,
  "favorite_user_count": null,
  "share_count": null,
  "comments_disabled": null,
  "aggregated_pin_id": null,
  "aggregated_comment_count": null,
  "aggregated_save_count": null,
  "aggregated_done_count": null,
  "reactions": null,
  "author": null,
  "board": null,
  "section": null,
  "product": null
}
```

A failed row preserves `input`, sets `status` to `failed`, and sets every other top-level field to `null`. The reason is written to the run log. Optional successful values remain null or empty when Pinterest omits them. The single dataset view exposes object fields as useful columns; arrays are kept in their parent row rather than expanded into additional rows or views.

### Input and pagination settings ⚙️

| Parameter | Type | Required | Default | Rules |
|---|---|---|---|---|
| `inputList` | array of strings | Yes | None | Enter numeric Pinterest pin IDs or canonical https://www.pinterest.com/pin/ID/ URLs. Short pin.it URLs are not supported. |

Use supported Pinterest pin URLs or numeric pin IDs. Board URLs, profile URLs and search phrases are different input types and should be sent to their corresponding actors.

Use canonical HTTPS links on `www.pinterest.com` or `pinterest.com`. Country-specific hosts, shortened `pin.it` links and unsupported paths are not accepted.

Duplicate normalized inputs are processed once. A returned identifier is deduplicated within the pagination of one source input; the same object found under different source inputs retains each source relationship.

There is no result-page setting. Each unique target is looked up individually, and its nested fields stay in that single result row.

### Pinterest pin details use cases 🎯

#### Pin database enrichment

Resolve selected pin URLs into structured descriptions, IDs, creators and source websites. Retain original links for review and joining records.

#### Media reference inventories

Collect image variants, dimensions and available video URLs. Keep all variants within the pin row when exporting to JSON.

#### Engagement snapshots

Compare the visible pin-level and aggregate counters supplied at collection time. Keep their separate meanings when calculating your own metrics.

### Pricing and saved-result behavior 💰

Check the Actor’s **Pricing** tab for the active charging model and current rate. Store settings may change, so this README does not state an unverified fixed price or runtime.

Under dataset-item pricing:

- Each unique success result represents one pin for its source input.
- An invalid or unavailable input, an input with no accessible results, or a request that exhausts retries can produce a `failed` row.
- Retry attempts and supporting metadata requests do not create extra dataset rows by themselves.
- Nested media, author and source fields stay inside their parent result.
- A normal empty continuation after earlier successes creates no additional result row.
- Saved failed rows are not assumed to be free. Check the active pricing configuration for their treatment.

Larger page budgets and more inputs can produce more saved rows. Start with a small run and check actual usage before increasing the workload.

### Pinterest pin details API 🔌

Replace `$ACTOR_ID` with the identifier shown in this Actor’s **API** tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.pinterest.com/pin/1020909809261285009/"]}'
```

Download JSON, CSV, Excel, XML or other formats available in the Console, or retrieve the dataset through the Apify API. Schedules, webhooks and Apify integrations can connect results to Google Sheets, Make, Zapier, n8n, cloud storage or your own backend. These are connection options rather than integrations already configured by the Actor.

### Reliability, retries, and public-data limits ⚠️

Collection uses pure HTTP with up to five concurrent requests. Invalid syntax and confirmed missing, removed or inaccessible targets stop without unnecessary retries. Temporary network or proxy failures, timeouts, blocking responses, malformed data, throttling and server errors are retried up to five total attempts per request.

Earlier successful pages remain saved when a later request fails. A normal end after previously saved results is not retried. An input that produces no accessible results can receive a failed row; this does not by itself prove the underlying account or collection does not exist. A later exhausted request can append a failed row while keeping earlier output.

Pinterest controls public availability, ranking, fields and pagination. Private, deleted, restricted or otherwise unavailable data can be omitted. Counts can change during collection, and media links can expire. Successful HTTP research confirms the supported request paths and pagination on tested sources, rather than future availability or exhaustive coverage.

Pin-level comment or save counters can differ from aggregate counters. They remain separate fields. Product metadata is optional and does not guarantee price, currency, stock or a usable shopping offer. Missing or placeholder price values must not be treated as a free product. Media URLs are returned, not downloaded.

An invalid string within a valid input list does not stop other inputs. A configuration that fails validation, such as a non-string list item or an invalid page-count type, exits before requests start. Infrastructure errors such as startup failure, unavailable dataset storage or an unrecoverable result-save error can stop the whole run. A failed dataset save is not retried as a new scraping request.

### Frequently asked questions ❓

#### Can it collect video pins?

Yes. Video and story media variants are included when Pinterest exposes them. The Actor does not rely on a single video flag and does not convert streams into another format.

#### Does it export product prices and stock?

Only source fields that are actually supplied can appear. Product-related pins do not guarantee valid prices, stock information or complete catalog data.

#### Does it export all pin comments?

It returns available comment counters and pin metadata. Use Pin Comments Scraper to paginate the public comment feed.

#### Does it require Pinterest login or personal cookies?

No. The Actor uses HTTP requests from the public website. It does not require a Pinterest account, password or personal session cookie, and does not launch a browser.

#### What happens to invalid or unavailable inputs?

Invalid individual inputs are saved as failed rows without a source request. Confirmed unavailable targets stop without unnecessary retries. Temporary failures allow up to five total attempts; other inputs and previously saved results remain available.

#### Can I export results or schedule runs?

Yes. Download the default dataset in supported formats or retrieve it through the Apify API. Apify schedules and completion webhooks can connect repeated runs to your own workflow.

### Support, responsible use, and related actors 🛟

For a reproducible issue, use the Actor’s **Issues** tab and provide the run ID, approximate time, safe public input, expected behavior and actual result. Include the selected mode or page count when applicable. Do not share access tokens, cookies or proxy credentials.

Use public data responsibly and follow applicable privacy, copyright, contractual and platform requirements before storing, analyzing or redistributing collected information.

# Actor input Schema

## `inputList` (type: `array`):

Enter numeric Pinterest pin IDs or canonical https://www.pinterest.com/pin/ID/ URLs. Short pin.it URLs are not supported.

## Actor input object example

```json
{
  "inputList": [
    "https://www.pinterest.com/pin/1020909809261285009/"
  ]
}
```

# Actor output Schema

## `pins` (type: `string`):

Individual result rows. Failed rows retain the input and status.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "inputList": [
        "https://www.pinterest.com/pin/1020909809261285009/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/pinterest-pin-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "inputList": ["https://www.pinterest.com/pin/1020909809261285009/"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/pinterest-pin-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "inputList": [
    "https://www.pinterest.com/pin/1020909809261285009/"
  ]
}' |
apify call scrapingmonkey/pinterest-pin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/pinterest-pin-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ln6x8Z2cEopTaMdQk/builds/bqr9Gx9RCrWepdF6Z/openapi.json
