# Pinterest Video Downloader — MP4 + HLS Links (`khadinakbar/pinterest-video-downloader`) Actor

Download Pinterest videos: direct MP4, HLS, thumbnail, creator, duration & stats from pin URLs, pin.it links, IDs, or a search keyword. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/pinterest-video-downloader.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Videos, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 video downloadeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Video Downloader — MP4 + HLS Links

Download Pinterest videos in bulk. Paste pin URLs, `pin.it` short links, bare pin IDs, a whole **board or profile URL**, or a search keyword — and get back the **direct MP4 download link**, the HLS stream URL, thumbnail, creator, duration, dimensions, and engagement stats for every video pin. HTTP-only, no login, no cookies, MCP-ready.

### What you get

One record per video pin, with a ready-to-download `videoUrl` (progressive MP4) plus every available rendition.

| Field | Description |
|-------|-------------|
| `pinId` | Numeric Pinterest pin ID |
| `pinUrl` | Canonical pin URL |
| `title` | Pin title |
| `description` | Pin description text |
| `destinationUrl` | Outbound link the pin points to (product/blog), if any |
| `createdAt` | ISO-8601 pin creation date |
| `boardName`, `boardUrl` | Board the pin belongs to |
| `videoUrl` | **Direct MP4 download URL** (best available quality) |
| `mp4Formats` | All MP4 renditions: `quality`, `url`, `width`, `height` |
| `hlsUrl` | Adaptive HLS `.m3u8` stream URL (for ffmpeg / yt-dlp) |
| `width`, `height` | Video pixel dimensions |
| `durationMs`, `durationSeconds` | Video length |
| `thumbnailUrl` | Poster image URL |
| `creatorUsername`, `creatorFullName`, `creatorProfileUrl` | Creator info |
| `repinCount`, `commentCount`, `reactionCount` | Engagement stats |
| `dominantColor` | Dominant hex color |
| `storedVideoUrl` | Permanent Apify link to the saved MP4 (when **Save MP4** is on) |
| `source` | `url` or `search` |
| `scrapedAt` | ISO-8601 timestamp |

### When to use it

- Repurpose Pinterest video content into other channels (TikTok, Reels, Shorts).
- Archive your own or licensed pins as MP4 files.
- Feed downloadable video URLs to an AI agent or automation (Make, Zapier, n8n).
- Build datasets of trending video pins by keyword.

**Do not use it** for image pins, boards, or profile scraping — those aren't videos. For general Pinterest data see the other Pinterest actors in this account.

### Pricing

Pay-per-event, billed only for what you get:

- **Actor start:** $0.00005 per run
- **Video downloaded:** **$0.005 per video** returned with a download link

A 50-video run costs about **$0.25**. Non-video pins are skipped and **not** charged. Pay-Per-Usage (compute + proxy) is also available for very large jobs.

### Input

| Input | What it does |
|-------|--------------|
| **Pinterest pin URLs / links / IDs** | One per line. Full pin URL, `pin.it` link, or bare numeric ID. |
| **Board or profile URLs** | Optional. Download every video pin from a board (`/username/board/`) or profile (`/username/`), up to Max results per input. |
| **Search keyword** | Optional. Collects video pins matching a topic, up to Max results. |
| **Max results** | Hard cap on videos returned (cost control). Default 50. |
| **Save MP4 file to storage** | Download the MP4 into the run store and add a permanent `storedVideoUrl`. |
| **Include HLS stream URLs** | Include `.m3u8` links. Default on. |
| **Preferred MP4 quality** | Which MP4 goes in `videoUrl`. Default: best available. |
| **Proxy** | Apify Datacenter (US) by default; switch to Residential for very large runs. |

#### Example input

```json
{
  "pinUrls": [
    "https://www.pinterest.com/pin/351912467391055/",
    "https://pin.it/abc123",
    "73605775154301126"
  ],
  "maxResults": 50,
  "saveVideo": false
}
```

#### Example: download every video from a board or profile

```json
{
  "boardOrProfileUrls": [
    "https://www.pinterest.com/username/my-recipes/",
    "https://www.pinterest.com/username/"
  ],
  "maxResults": 100
}
```

#### Example: collect trending video pins by keyword

```json
{
  "searchQuery": "home workout",
  "maxResults": 100,
  "includeHls": true
}
```

### Example output

```json
{
  "pinId": "351912467391055",
  "pinUrl": "https://www.pinterest.com/pin/351912467391055/",
  "title": "Easy weeknight dinner",
  "isVideo": true,
  "videoUrl": "https://v1.pinimg.com/videos/iht/expMp4/4b/b4/80/..._720w.mp4",
  "mp4Formats": [
    { "quality": "720P", "url": "https://v1.pinimg.com/.../_720w.mp4", "width": 720, "height": 1280 }
  ],
  "hlsUrl": "https://v1.pinimg.com/videos/iht/hls/4b/b4/80/....m3u8",
  "width": 720,
  "height": 1280,
  "durationMs": 20500,
  "durationSeconds": 20.5,
  "thumbnailUrl": "https://i.pinimg.com/originals/...jpg",
  "creatorUsername": "JoyfulKitchenRecipes1",
  "repinCount": 1240,
  "source": "url",
  "scrapedAt": "2026-07-01T12:00:00.000Z"
}
```

### Use from code

**Apify API (JavaScript):**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('khadinakbar/pinterest-video-downloader').call({
  pinUrls: ['https://www.pinterest.com/pin/351912467391055/'],
  maxResults: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].videoUrl);
```

**Apify API (Python):**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("khadinakbar/pinterest-video-downloader").call(run_input={
    "pinUrls": ["https://www.pinterest.com/pin/351912467391055/"],
    "maxResults": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["videoUrl"])
```

### MCP / AI agents

This actor is MCP-ready. Exposed as `apify--pinterest-video-downloader` in the Apify MCP server, it returns a single downloadable MP4 URL per pin — a clean tool call for agents that need to fetch or repurpose Pinterest video.

### FAQ

**Does it need my Pinterest login or cookies?** No. It reads Pinterest's public, unauthenticated pin API.

**What if a pin only has an HLS stream?** `videoUrl` may be empty but `hlsUrl` is returned; download it with ffmpeg or yt-dlp.

**Do I pay for image pins?** No. Only pins that yield a video download link are billed.

**Do the CDN links expire?** Pinterest CDN links are stable but not guaranteed forever. Enable **Save MP4** to keep a permanent copy in the run store.

### Legal

This actor extracts publicly available data from Pinterest. Use it in compliance with Pinterest's Terms of Service and applicable copyright law. You are responsible for how you use downloaded content. Download and redistribute only content you have the right to use. This actor is not affiliated with or endorsed by Pinterest.

# Actor input Schema

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

One entry per Pinterest video you want to download. Accepts a full pin URL ('https://www.pinterest.com/pin/351912467391055/'), a 'pin.it' short link ('https://pin.it/abc123'), or a bare numeric pin ID ('351912467391055'). Paste many at once — each is resolved and downloaded independently. NOT a board or profile URL; use the search keyword field to collect videos from a topic instead.

## `boardOrProfileUrls` (type: `array`):

Download every video pin from a whole Pinterest board or profile. Accepts a board URL ('https://www.pinterest.com/username/board-name/') or a profile URL ('https://www.pinterest.com/username/'), up to Max results per input. Image pins are skipped automatically. NOT for individual pins — use the pin URLs field above for those.

## `searchQuery` (type: `string`):

Free-text Pinterest search; the actor collects video pins matching it up to Max results. Example: 'cooking recipe' or 'home workout'. Leave empty when you supply exact pin URLs above. Runs in addition to any pin URLs provided.

## `maxResults` (type: `integer`):

Hard cap on the number of videos returned across all inputs. Controls cost — you are charged per video downloaded. Defaults to 50. Use a small value (1-5) for a quick test run.

## `saveVideo` (type: `boolean`):

When enabled, the actor downloads the MP4 bytes into the run's key-value store and adds a permanent 'storedVideoUrl' to each record. When disabled (default), only the direct CDN video URLs are returned, which is faster and cheaper. Enable this if the source CDN link might expire before you fetch it.

## `includeHls` (type: `boolean`):

Include the adaptive HLS (.m3u8) stream URLs alongside the direct MP4. Useful for ffmpeg/yt-dlp pipelines or when a pin has no progressive MP4. Defaults to true. Does not affect pricing.

## `videoQuality` (type: `string`):

Which progressive MP4 to put in the primary 'videoUrl' field. 'best' picks the highest-resolution MP4 available. Pinterest usually exposes a single 720p MP4, so 'best' and '720p' are typically identical. All available MP4 renditions are always returned in 'mp4Formats'.

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

Proxy used to reach Pinterest's API. Defaults to Apify Datacenter proxy (US), which is sufficient. Switch to Residential if you hit rate limits on large runs.

## Actor input object example

```json
{
  "pinUrls": [
    "https://www.pinterest.com/pin/351912467391055/"
  ],
  "searchQuery": "cooking recipe",
  "maxResults": 50,
  "saveVideo": false,
  "includeHls": true,
  "videoQuality": "best",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with one record per Pinterest video (MP4 URL, HLS, thumbnail, creator, stats).

## `summary` (type: `string`):

Counts of pins attempted, videos downloaded, non-video pins skipped, and amount billed.

# 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/351912467391055/"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/pinterest-video-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/351912467391055/"],
    "maxResults": 50,
}

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/fEAQIgMCSNYZuNvYj/builds/RROhgdMj11cR7UdsI/openapi.json
