Pinterest Images & Videos Downloader by Keyword
Pricing
from $4.56 / 1,000 file storeds
Pinterest Images & Videos Downloader by Keyword
Downloads Pinterest images, videos and every page of idea pins into your run's storage, by keyword, profile, board or pin URL. Each file gets a SHA-256 checksum, size, resolution and, for video, duration, fps, codec and audio flag. No login. A file that fails to download is never charged.
Pricing
from $4.56 / 1,000 file storeds
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pinterest Downloader: Images & Videos by Keyword
Give this actor a keyword, a profile, a board or a pin URL and it downloads each pin's media into your own Apify storage: original-size images, MP4 videos, and every page of an idea pin. Every file is hashed with SHA-256 while it streams, and every video is probed with ffprobe for duration, resolution, frame rate, codec and audio. No login, no cookies.
Who it's for
A designer or marketer building a mood board wants the actual image files for a keyword like "scandinavian living room", not a list of links. A social team archiving a brand's profile or a campaign board wants durable copies with a checksum that proves what was saved. A dataset or AI pipeline needs pin images and videos together with their title, description, alt text, board and pinner, in one flat row per file.
Why this one
- Four ways in, one output. Keywords, profile usernames, board URLs and pin URLs (including
pin.itshort links) all land in the same row shape, tagged withsourceandsourceValue. - Originals, not thumbnails. Images come from
i.pinimg.com/originals/. A video pin gets its 720p MP4 plus a cover still. An idea pin with 11 pages gives you 11 files, each with itspageIndex. - Every file is hashed while it streams.
sha256is computed during the download, so it is the checksum of exactly what was stored. - Real ffprobe numbers.
duration_s,fps,codecandhasAudiocome from running ffprobe on the downloaded bytes. - A failed file is never charged. An over-cap file, a dead link, an HLS-only video that could not be converted, a pin you already got in this run: each is free. Only a file that landed in storage is billed.
- Media never touches the proxy. Only the small JSON requests go through Apify Proxy. The files are fetched directly.
What you get
One row per stored file by default (turn off "Expand rows" to get one row per source with the files
nested under files).
| Field | Type | Description |
|---|---|---|
query | text | The source as submitted, prefixed with its type, for example profile:marthastewart |
source / sourceValue | text | query, profile, board or pin, and the keyword, username, user/board or pin it came from |
pinId / pinUrl | text | The pin's id and its pinterest.com link |
kind | text | image, video, or cover (a video pin's still) |
pageIndex | number | Page of an idea pin, 0 for a single-file pin |
kvKey / kvUrl | text | Where the file is stored in this run's key-value store |
originalMediaUrl | text | The Pinterest CDN URL the file came from |
bytes / sha256 | number / text | Size and SHA-256, computed while streaming |
width / height | number | Pixel dimensions |
duration_s / fps / codec / hasAudio | number / text / boolean | ffprobe fields; null for a still where meaningless |
title / description / altText | text | From the pin; null when the pin has none |
pinnerUsername / boardName / link / createdAt | text | From the pin; createdAt is null on board feeds, which do not carry it |
videoSkipped | text | hls-only when a video exists only as an HLS stream that could not be converted |
error | text | Why a file could not be stored. null on success |
Scope and limits
- Public content only. Private boards, secret boards and logged-in-only views are not available, and there is no input for a cookie or session.
- Idea pins and videos are supported. A
carousel_datapin type exists in Pinterest's data, but none appeared across about 120 logged-out pins during the build, so that shape is handled but has not been seen live. pin.itshort links are followed to the pin when the link resolves to one.kvUrlneeds your Apify token. The run's default key-value store is private.- Video is MP4. When a pin only offers an HLS stream, it is converted to MP4 with ffmpeg without re-encoding; if that fails the video is skipped and flagged, not billed.
Pricing
- File stored: $6 per 1,000 files
- Megabyte downloaded: $0.005 per MB
Plus a $0.0075 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
Billing is per stored file (file event) plus per megabyte stored, rounded up per file
(megabyte event). Misses, filtered pins, duplicate pins, over-cap files and HLS-only skips are never billed.
Example runs
Each is a ready-to-run input.
- Download Pinterest images by keyword
{"queries": ["scandinavian living room"], "maxPinsPerSource": 25, "kinds": "images"}
- Download every pin from a Pinterest board
{"boards": ["https://www.pinterest.com/marthastewart/crafts/"], "maxPinsPerSource": 50, "kinds": "all"}
- Download Pinterest videos from a profile
{"profiles": ["marthastewart"], "maxPinsPerSource": 25, "kinds": "videos"}
Use-case variant candidate: none
How to use
- In the Apify Console. Open the actor page and click Start — the
queriesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~pinterest-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"queries":["scandinavian living room"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Input
{"queries": ["scandinavian living room"]}
One search term per line, as you would type it into Pinterest. Add profiles, boards or pin URLs in the fields below; at least one of the four is needed. Accepted formats: scandinavian living room, minimalist bathroom, cottagecore bedroom.
Sample output
| query | found | status | source | sourceValue | pinCount | fileCount | truncated | files | pinId | pinUrl | kind | pageIndex | kvKey | kvUrl | originalMediaUrl | bytes | sha256 | width | height | duration_s | fps | codec | hasAudio | title | description | altText | pinnerUsername | boardName | link | createdAt | videoSkipped | error | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scandinavian living room | true | OK | <all files (full list)> | <size (bytes)> | <duration (s)> | 1970-01-01T00:00:00.000Z |
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~pinterest-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"queries":["scandinavian living room"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~pinterest-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"queries":["scandinavian living room"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~pinterest-media-downloader/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"queries":["{{source}}"]}, mapping the row's source into the queries array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Pinterest Image Downloader: Save Pins by Keyword" — the agent will find and run this actor.
Tips
- Start with
maxPinsPerSourceat 5 to see what a source returns before a big run. - Use "Videos only" on a profile to skip its image pins. Pins without a video are not downloaded or billed.
- A pin that appears under two sources is downloaded once per run. Turn off "Never download the same pin twice" to get it under each.
- Lower "Max file size" to keep one long video from dominating a run's storage.
vs. alternatives
Pinterest's own downloader links hand you one pin at a time. Link scrapers return image URLs that you still have to fetch yourself. This actor does the fetching, stores the files, and gives you checksums and ffprobe data in the same row.
Data & privacy
Only publicly visible pins are read, as a logged-out visitor would see them. No account, cookie or token is used or stored. Files are saved to your own run's storage and nowhere else. You are responsible for having the right to use what you download.
FAQ
Can it download a private board? No. Only what Pinterest shows to a logged-out visitor.
Why is createdAt empty on some rows? Board feeds do not carry a pin's date. Search, profile and single-pin lookups do.
Does a video pin cost two files? Yes: the MP4 and its cover still are two stored files, each billed once.
What happens to a huge video? It is aborted at your "Max file size" and returned as an error row, free.
Related actors
-
Pinterest Search Scraper: Pins by Keyword: just need the pin data for a keyword (titles, links, counts) without downloading the files.
-
pinterest-search-lookup: pin metadata and image links by keyword, no files. -
ig-media-downloader: the same download-and-hash workflow for Instagram posts.