# Pinterest Pin Detail (`xtracto/pinterest-pin-detail`) Actor

Fetch full metadata for a Pinterest pin: image, video, save count, hashtags, creator, board, and product info.

- **URL**: https://apify.com/xtracto/pinterest-pin-detail.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 results

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Pinterest Pin Detail Scraper

Extract full metadata for any Pinterest pin in bulk — title, description, image URL, outbound link, save count, dominant color, pinner profile, and board context — in a clean structured JSON output.

### Why use this actor

- **No account / no login required** — just give it a Pinterest pin URL or a numeric pin ID.
- **No API key needed** — Pinterest's public API is locked behind a developer review; this actor returns the same data the pin page shows.
- **Rich pin metadata** — title, description, image URL with dimensions, dominant color, alt text, hashtags, outbound link, and the pin's save count.
- **Pinner + board context** — every record includes the creator's username, display name, profile picture, follower count, and the board the pin lives in.
- **Bulk input** — pass a list of pin URLs or IDs in one run; one clean dataset row per pin.
- **Stable JSON output** suitable for pipelines, spreadsheets, and databases — every row carries `_input`, `_source`, `_scrapedAt` envelope fields so you can join results back to your input list.

### How it works

1. You provide a list of Pinterest pin URLs (e.g. `https://www.pinterest.com/pin/424605071126047814/`) or bare numeric pin IDs (`424605071126047814`).
2. The actor opens each pin the same way Pinterest's web app does and reads its record — image, title, description, link, save count, pinner, and board — then assembles a flat JSON row.
3. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.

### Input

```json
{
  "pins": [
    "https://www.pinterest.com/pin/424605071126047814/",
    "424605071126047814"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["DATACENTER"]
  }
}
````

| Field | Type | Description |
|---|---|---|
| `pins` | array | List of Pinterest pin URLs or numeric pin IDs. Both `https://www.pinterest.com/pin/424605071126047814/` and `424605071126047814` are accepted. |
| `proxyConfiguration` | object | Apify Proxy settings. Datacenter works for most pins; switch to residential if you hit blocks on a particular pin. |

### Output

Input: `https://www.pinterest.com/pin/424605071126047814/`

```json
{
  "_input": "https://www.pinterest.com/pin/424605071126047814/",
  "_source": "S2-fallback",
  "_scrapedAt": "2026-05-18T11:30:26.926224+00:00",
  "id": "424605071126047814",
  "title": "Skin Tone Ranges",
  "description": " ",
  "link": null,
  "dominantColor": "#e3e0df",
  "imageUrl": "https://i.pinimg.com/564x/b6/d0/aa/b6d0aaffbbd81bb395967401b3e5ad3d.jpg",
  "imageWidth": 564,
  "imageHeight": 1002,
  "videoUrl": null,
  "isVideo": false,
  "saveCount": 698,
  "commentCount": null,
  "reactionCounts": null,
  "closeupUnifiedDescription": null,
  "createdAt": null,
  "altText": null,
  "hashtags": [],
  "pinner": {
    "id": "424605208526455283",
    "username": null,
    "fullName": "Pinterest",
    "profileImageUrl": "https://i.pinimg.com/60x60_RS/1c/b5/61/1cb561c8e7b9c709f78d110a4b5f0863.jpg",
    "followerCount": 6258732
  },
  "board": {
    "id": "424605139806979476",
    "name": "Official news",
    "url": "/pinterest/official-news/",
    "pinCount": 51
  },
  "richSummary": null,
  "shopMetadata": null
}
```

| Field | Type | Description |
|---|---|---|
| `_input` | string | The pin URL or ID exactly as you supplied it. Use this to join results back to your input list. |
| `_source` | string | Internal tag for the path used to fetch the record. `S1-primary` means the fastest, richest path; values starting with `S2-fallback` / `S3-fallback` mean a fallback was used. |
| `_scrapedAt` | string | ISO-8601 UTC timestamp when the record was scraped. |
| `id` | string | Pinterest's numeric pin ID (stable across edits). |
| `title` | string | Pin title or headline. May be `null` for image-only pins. |
| `description` | string | Pinner-written caption. May be empty or whitespace if the pinner left it blank. |
| `link` | string | Outbound destination URL the pin links to (article, product page, etc.). `null` for self-uploaded pins with no link. |
| `dominantColor` | string | Hex color string Pinterest computes from the image (e.g. `#e3e0df`). Useful for palette / mood grouping. |
| `imageUrl` | string | Direct CDN URL of the pin image at the largest available size. |
| `imageWidth` | integer | Width of `imageUrl` in pixels. |
| `imageHeight` | integer | Height of `imageUrl` in pixels. |
| `videoUrl` | string | Direct video URL for video pins. `null` for image pins. |
| `isVideo` | boolean | `true` if the pin is a video pin. |
| `saveCount` | integer | Number of times the pin has been saved (re-pinned). |
| `commentCount` | integer | Number of comments on the pin. May be `null` on the fallback path. |
| `reactionCounts` | object | Map of reaction-type id to count (e.g. `{"1": 1705, "5": 1}`). May be `null` on the fallback path. |
| `closeupUnifiedDescription` | string | Long-form expanded description Pinterest sometimes shows on the closeup view. |
| `createdAt` | string | ISO timestamp when the pin was created. May be `null` on the fallback path. |
| `altText` | string | Accessibility alt text the pinner set on the image. |
| `hashtags` | array | List of hashtag strings extracted from the description. |
| `pinner` | object | Creator profile — `id`, `username`, `fullName`, `profileImageUrl`, `followerCount`. |
| `board` | object | Board context — `id`, `name`, `url` (relative path), `pinCount`. |
| `richSummary` | object | Structured rich-pin metadata (recipe, product, article) when the pin carries it. `null` otherwise. |
| `shopMetadata` | object | Shop / merchant metadata for shoppable pins. `null` otherwise. |

#### Error envelope

Pins that don't exist or fail to fetch return a structured error instead of crashing the run:

```json
{
  "_input": "https://www.pinterest.com/pin/000000000000000000/",
  "_error": "not_found",
  "_scrapedAt": "2026-05-18T11:30:30.012345+00:00"
}
```

Other `_error` values: `invalid_input` (pin URL could not be parsed) and `fetch_failed` (pin record could not be retrieved after retries). Filter on `_error` to triage failed rows.

### Pricing

This actor is billed per result: **$7.50 per 1,000 pins** (Tier 5). Each successful pin = 1 result. Errors (not-found, fetch-failed) are not billed.

### Other Sosmed Actors

| Platform | Actor | Best for |
|---|---|---|
| Pinterest | [Pinterest User Profile Scraper](https://apify.com/xtracto/pinterest-user-profile) | Pinner bio, follower / following counts, pin count |
| Pinterest | [Pinterest Board Scraper](https://apify.com/xtracto/pinterest-board) | Board metadata + pins inside the board |
| Instagram | [Instagram Post Detail Scraper](https://apify.com/xtracto/instagram-post-detail-scraper) | Full metadata for any Instagram post URL |
| Threads | [Threads Post Detail Scraper](https://apify.com/xtracto/threads-post-detail-scraper) | Full metadata for any Threads post |
| Tumblr | [Tumblr Post Detail Scraper](https://apify.com/xtracto/tumblr-post-detail-scraper) | Full metadata for any Tumblr post |
| Reddit | [Reddit Post Detail Scraper](https://apify.com/xtracto/reddit-post-detail-scraper) | Reddit post + body + score |

Browse the full catalog at [apify.com/xtracto](https://apify.com/xtracto).

### Notes

- Accepts both full pin URLs (`https://www.pinterest.com/pin/<id>/`) and bare numeric IDs.
- Private and deleted pins return `{"_error": "not_found", "_input": "..."}` — they are not billed.
- Video pins (including idea / story pins with video pages) populate `videoUrl` and set `isVideo: true`. Image-only pins leave `videoUrl` as `null`.
- The `link` field is `null` for self-uploaded pins that don't point anywhere outside Pinterest.
- Some fields (`commentCount`, `reactionCounts`, `createdAt`, `altText`) may be `null` when the actor falls back from `S1-primary` to `S2-fallback` — the core image, title, save count, pinner, and board are always populated when the pin exists.

# Actor input Schema

## `pins` (type: `array`):

List of Pinterest pin URLs (e.g. https://www.pinterest.com/pin/424605071126047814/) or bare numeric pin IDs.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Datacenter is the default and works for most pins. Switch to residential if you hit blocks.

## Actor input object example

```json
{
  "pins": [
    "https://www.pinterest.com/pin/424605071126047814/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "pins": [
        "https://www.pinterest.com/pin/424605071126047814/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/pinterest-pin-detail").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 = { "pins": ["https://www.pinterest.com/pin/424605071126047814/"] }

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

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

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

```

## CLI example

```bash
echo '{
  "pins": [
    "https://www.pinterest.com/pin/424605071126047814/"
  ]
}' |
apify call xtracto/pinterest-pin-detail --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=xtracto/pinterest-pin-detail",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pinterest Pin Detail",
        "description": "Fetch full metadata for a Pinterest pin: image, video, save count, hashtags, creator, board, and product info.",
        "version": "0.1",
        "x-build-id": "Q3ldjo944xMgwaXmR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xtracto~pinterest-pin-detail/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xtracto-pinterest-pin-detail",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/xtracto~pinterest-pin-detail/runs": {
            "post": {
                "operationId": "runs-sync-xtracto-pinterest-pin-detail",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/xtracto~pinterest-pin-detail/run-sync": {
            "post": {
                "operationId": "run-sync-xtracto-pinterest-pin-detail",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "pins"
                ],
                "properties": {
                    "pins": {
                        "title": "Pinterest pin URLs or pin IDs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "List of Pinterest pin URLs (e.g. https://www.pinterest.com/pin/424605071126047814/) or bare numeric pin IDs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Datacenter is the default and works for most pins. Switch to residential if you hit blocks.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
