# Pinterest Image & Video Downloader — Media + Metadata by URL (`hipersoft/pinterest-downloader`) Actor

Download Pinterest images and videos by URL in bulk. Get full-resolution photos, MP4 video links, titles, pinner and save counts — one clean row per pin as JSON, CSV or Excel.

- **URL**: https://apify.com/hipersoft/pinterest-downloader.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (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.002 / item scraped

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Image & Video Downloader — Media + Metadata by URL

Download Pinterest pins in bulk. Paste one or more pin links and get the full-resolution image for every pin — plus the ready-to-save MP4 link for video and idea pins — and all the data behind the pin: title, description, pinner, save count, dominant color and the original source link. One tidy row per URL, ready to export as JSON, CSV or Excel.

This is the cheap, no-nonsense way to save Pinterest images and videos at scale for content creators, marketers, moodboard builders, researchers and anyone building an automated media pipeline.

### Why use this Pinterest downloader

- 🖼️ **Full-resolution images** — every image pin comes back with the original, highest-quality image link, plus every smaller size (736x, 564x, 474x, 236x…) in one map.
- 🎬 **Video pins & idea pins** — video and story/idea pins return direct MP4 download links (and the streaming playlist link too, if you want it).
- 📊 **Full metadata** — title, description, pinner username, save count, dominant color, created date and the outbound source link when the pin has one.
- 🔗 **Any pin link** — full pin URLs, country domains (pinterest.co.uk, .de, .fr and more), short pin.it links and bare numeric pin IDs all work.
- 📦 **Bulk in one run** — drop in a whole list of pins and get one clean record per pin.
- 💸 **Cheapest per-pin pricing** — pay only for the pins you actually download, with volume discounts as you scale.
- 📤 **Export anywhere** — JSON, CSV or Excel, or pull straight from the dataset into your own tools, Make or n8n.

### What you get

Each pin is one dataset record like this:

```json
{
  "source": "pinterest",
  "inputUrl": "https://www.pinterest.com/pin/10555380372667699/",
  "pinId": "10555380372667699",
  "url": "https://www.pinterest.com/pin/10555380372667699/",
  "title": "Healthy recipes easy meal prep ideas",
  "description": "Deliciously Yours | quick and easy dinner ideas",
  "mediaType": "video",
  "imageUrl": "https://i.pinimg.com/originals/8e/a9/bc/....jpg",
  "imageSizes": {
    "originals": "https://i.pinimg.com/originals/....jpg",
    "736x": "https://i.pinimg.com/736x/....jpg",
    "564x": "https://i.pinimg.com/564x/....jpg"
  },
  "videoUrls": [
    "https://v1.pinimg.com/videos/.../720w.mp4"
  ],
  "hlsUrl": "https://v1.pinimg.com/videos/.../video.m3u8",
  "thumbnailUrl": "https://i.pinimg.com/736x/....jpg",
  "storyMedia": [],
  "pinnerUsername": "ryleybuchanan",
  "pinnerName": null,
  "repinCount": 1016,
  "commentCount": null,
  "dominantColor": null,
  "sourceLink": null,
  "createdAt": "2026-08-04T13:20:03.000Z"
}
```

### Input

Give the downloader a list of Pinterest pin URLs. That's it.

```json
{
  "pinUrls": [
    "https://www.pinterest.com/pin/32017847347947654/",
    "https://www.pinterest.com/pin/10555380372667699/"
  ],
  "maxItems": 0
}
```

#### Input fields

| Field | Type | Description |
| --- | --- | --- |
| `pinUrls` | array | One or more pin URLs. Accepts full pin links, country domains (pinterest.co.uk, .de, .fr…), short `pin.it/xxxx` links and bare numeric pin IDs. Plain strings or `{"url": "..."}` objects both work. |
| `maxItems` | integer | Maximum number of pins to download. `0` = no limit (process every URL). |
| `proxyConfiguration` | object | Optional. Not required — leave off to run on a direct connection. |

### Output fields

| Field | Description |
| --- | --- |
| `pinId` | Numeric Pinterest pin ID. |
| `url` | Canonical pin URL. |
| `title` | Pin title. |
| `description` | Pin description. |
| `mediaType` | `image`, `video` or `story`. |
| `imageUrl` | Full-resolution image link. |
| `imageSizes` | Map of every available image size to its URL. |
| `videoUrls` | Array of MP4 links for video and idea pins (best quality first). |
| `hlsUrl` | Streaming playlist link for the video, when present. |
| `thumbnailUrl` | Pin thumbnail / cover image. |
| `storyMedia` | Array of media items for idea/story pins. |
| `pinnerUsername` | The username of the account that saved the pin. |
| `repinCount` | How many times the pin has been saved. |
| `dominantColor` | The pin's dominant color, when available. |
| `sourceLink` | The outbound source URL the pin links to, when present. |
| `createdAt` | When the pin was created/updated (ISO 8601). |

### Use cases

- **Content creators & designers** — pull the original, high-resolution images for a moodboard or reference library in one run.
- **Marketers & social teams** — collect Pinterest video pins as MP4 files for repurposing across channels.
- **Researchers & analysts** — gather pin titles, descriptions and save counts to study trends and engagement.
- **Automation builders** — feed pin media and metadata straight into Make, n8n or your own database.

### FAQ

**What links can I paste?**
Full pin URLs (`https://www.pinterest.com/pin/123.../`), international domains like `pinterest.co.uk`, short `pin.it/xxxx` links, and bare numeric pin IDs.

**Do I get the original full-size image?**
Yes — `imageUrl` is the highest-resolution original, and `imageSizes` also lists every smaller size so you can pick what you need.

**Does it work with video and idea pins?**
Yes. Video and idea pins return direct MP4 links in `videoUrls`, plus a streaming playlist link in `hlsUrl`.

**Do I need a proxy?**
No. The downloader runs on a direct connection out of the box. A proxy field is available but optional.

**What formats can I export?**
JSON, CSV or Excel — or read the dataset directly from your own code, Make or n8n.

**How much does it cost?**
You pay a small amount per pin you download, with volume discounts as you scale — one of the cheapest ways to save Pinterest media in bulk.

### Notes

- Use this tool for publicly available pins and respect Pinterest's terms and the rights of content owners.
- Media links point to Pinterest's own image and video servers.

# Actor input Schema

## `pinUrls` (type: `array`):

One or more Pinterest pin URLs to download. Accepts full pin links (https://www.pinterest.com/pin/1234567890/), country domains (pinterest.co.uk, .de, .fr …), short pin.it/xxxx links and bare numeric pin IDs. You can paste plain strings or {"url": "..."} objects.

## `maxItems` (type: `integer`):

Maximum number of pins to download (0 = no limit; process every URL you provide).

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

Optional proxy. Not required — leave off to run on a direct connection. Enable only if you specifically want requests routed through a proxy.

## Actor input object example

```json
{
  "pinUrls": [
    "https://www.pinterest.com/pin/32017847347947654/",
    "https://www.pinterest.com/pin/10555380372667699/"
  ],
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# 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 = {
    "pinUrls": [
        "https://www.pinterest.com/pin/32017847347947654/",
        "https://www.pinterest.com/pin/10555380372667699/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/pinterest-downloader").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 = {
    "pinUrls": [
        "https://www.pinterest.com/pin/32017847347947654/",
        "https://www.pinterest.com/pin/10555380372667699/",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/pinterest-downloader").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 '{
  "pinUrls": [
    "https://www.pinterest.com/pin/32017847347947654/",
    "https://www.pinterest.com/pin/10555380372667699/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call hipersoft/pinterest-downloader --silent --output-dataset

```

## MCP server setup

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

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/RpKO1ec5LhxoT42Jv/builds/ljql68b6b0q5zCpO2/openapi.json
