FrameFetch
For agents → Try it free
Pinterest

Video API

Get structured data from Pinterest video pins by URL: metadata, frames sampled at any rate in jpg, png, or webp, and the on-screen text burned into them. Pinterest video pins are typically silent or music-only, and Pinterest exposes no caption or transcript surface for them — FrameFetch says so up front instead of returning an empty or fabricated field.

Read the docs Pricing

Not every pin is a video

A Pinterest URL doesn't tell you what's behind it: pins can be a single static image, a multi-image carousel, or an actual video — and the pinterest.com/pin/<id> shape looks identical either way. FrameFetch doesn't pre-screen this for you before charging: send a pin URL, and if it's a video pin, metadata, frames, and text_overlay all work normally. If it turns out to be an image or carousel pin, there's no video stream to sample — frames and text_overlay fail to extract (no charge for the failed field), while metadata still returns whatever Pinterest exposes for that pin. If you're processing pins in bulk and want to skip non-video ones before spending a call, check the pin in a browser first — there's no cheaper pre-check FrameFetch can offer that Pinterest itself doesn't already gate.

What metadata exists — and what doesn't

For a video pin, FrameFetch returns the same metadata/insights shape every platform gets: title, uploader, duration, upload date, and a thumbnail; views, likes, and comment count where the platform exposes them. Individual fields come back null rather than guessed when Pinterest itself doesn't publish them for a given pin — FrameFetch doesn't backfill missing numbers.

FieldOn Pinterest
Metadata (title, uploader, duration, date, thumbnail)Supported
Insights (views, likes, comment count)Supported where Pinterest exposes them; individual numbers may be null
FramesSupported — video pins only
On-screen text (OCR)Supported — runs on extracted frames, same as every other platform
TranscriptNot supported — no caption or audio-text source exists to fall back to
Comments / audience sentimentNot supported — no reliable public comment source (same as TikTok, Instagram)

This table matches the live capability matrix at GET /v1/platforms — check it programmatically before requesting a field, rather than hardcoding assumptions.

The top-level ask question-answering param (see docs) still works on Pinterest despite the missing transcript: with no transcript to read, it falls back to answering from the pin's sampled frames instead of declining — ask.based_on reads ["frames"] and ask.confidence is capped below "high" for that weaker evidence, at the same flat price.

Quickstart

curl -X POST https://framefetch.net/v1/extract \
  -H "Authorization: Bearer <your-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.pinterest.com/pin/PIN_ID/",
    "fields": ["metadata", "frames"],
    "frames": { "mode": "fps", "fps": 1, "width": 480 }
  }'

Shape of the response for a real video pin (field names match the schema exactly; content below is illustrative, not a captured call):

{
  "platform": "pinterest",
  "metadata": {
    "title": "A 9-second recipe clip",
    "uploader": "Some Kitchen",
    "durationSec": 9,
    "uploadDate": "2026-05-14",
    "thumbnail": "https://i.pinimg.com/....jpg"
  },
  "insights": { "views": null, "likes": 214, "commentCount": null },
  "frames": [
    { "index": 0, "url": "https://.../frame-0.jpg", "tSec": 0 },
    { "index": 1, "url": "https://.../frame-1.jpg", "tSec": 1 }
  ],
  "cost": { "totalMicros": 2000 },
  "warnings": []
}

Note the nulls in insights: FrameFetch never backfills a number Pinterest itself didn't publish for that pin — a missing view count comes back null, not a guessed value. cost.totalMicros floors to the $0.002 minimum charge on a small metadata+frames call like this one; see pricing for the per-field rates it's built from.

Get a key with POST /v1/keys (free credit). Full reference in the docs. Agents can pay per call with x402 (USDC) — no account.

Frames + on-screen text (OCR)

Add "text_overlay" alongside "frames" to run OCR on each extracted frame — useful for pins that are effectively recipe cards, infographics, or text-over-video content, where the words on screen carry more information than the audio track.

curl -X POST https://framefetch.net/v1/extract \
  -H "Authorization: Bearer <your-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.pinterest.com/pin/PIN_ID/",
    "fields": ["frames", "text_overlay"],
    "frames": { "mode": "every_n", "n": 30, "width": 480 }
  }'

Call it from Node.js

The framefetch npm package wraps the same calls above — zero dependencies, just Node 18+'s built-in fetch. It's also the natural place to check the capability matrix before spending a call on a field Pinterest can't produce:

import { FrameFetch } from 'framefetch';

const ff = new FrameFetch({ apiKey: process.env.FRAMEFETCH_API_KEY });

// Pinterest has no transcript at all — check once, then skip asking for fields it can't produce.
const caps = await ff.platforms();
console.log(caps.pinterest);   // { metadata:true, insights:true, transcript:false, frames:true, ... }

const result = await ff.frames(
  'https://www.pinterest.com/pin/PIN_ID/',
  { mode: 'fps', fps: 1, width: 480 },
);
console.log(result.frames.length, 'frames extracted');

ff.platforms() and ff.frames(url, spec) are real methods on the client, not a wrapper you'd have to hand-roll — npm install framefetch, every method throws a typed FrameFetchError on failure. Full method list in the docs.

Accuracy notes — frames, OCR, and the vision fallback

Pinterest frames go through the same pipeline as every other platform: a progressive video download via yt-dlp (a DASH-aware fallback format ladder shared with Reddit, Instagram, and TikTok), then ffmpeg samples stills from it at whatever rate you asked for. There's no Pinterest-specific shortcut and no separate code path to trust less — on a genuine video pin, frame extraction is exactly as reliable as it is anywhere else on this API.

text_overlay runs Tesseract OCR locally against each extracted frame — a real open-source OCR engine, not a hosted vision-LLM guessing at text. It's fast, cheap, and genuinely good at the clean, high-contrast typography common on Pinterest (recipe cards, infographics, quote graphics); it's weaker on cursive/script fonts, low-contrast text over a busy image, or small text sampled at a low frames.width — the same limitations Tesseract has anywhere it runs. Each returned line carries its own confidence (Tesseract's word-level confidence, averaged per line and normalized to 0–1) and a pixel bbox, so you can threshold out low-confidence reads instead of trusting every line equally.

Pinterest also doesn't need FrameFetch's residential proxy the way YouTube and Reddit do — extraction works the same from a plain datacenter IP, so a proxy outage (see /status) affects Pinterest less than it affects those two platforms.

Why Pinterest transcript is a hard no, not a "coming soon"

Some competing "downloader" tools imply universal transcription by not mentioning the gap at all — they'll happily accept a Pinterest URL and either return nothing for the transcript field or silently fail. FrameFetch's capability matrix marks Pinterest's transcript as false: requesting it is simply omitted from the response with a warning, and it is never billed. There's no roadmap promise here either — Pinterest video pins are typically silent or set to background music, so a speech transcript wouldn't be meaningful even if Pinterest exposed better audio access. If your workflow needs Pinterest's on-screen text, text_overlay is the field that actually carries information for this platform.

The omission is exact and typed, not hand-wavy: request transcript on a Pinterest URL and the response's warnings array carries exactly transcript is not available for pinterest; drop "transcript" from "fields" — the rest of the call still succeeds and still bills normally for whatever else you asked for.

Use it from an AI agent (MCP)

FrameFetch ships an MCP server at POST https://framefetch.net/mcp with the tools framefetch_extract, framefetch_search, framefetch_account and framefetch_platform_capabilities — the latter is the one to call first for Pinterest, so your agent checks transcript: false before it ever asks for one. See the MCP setup guide for a working Claude Desktop / Cursor config.

FAQ

Does Pinterest support transcripts?

No. GET /v1/platforms reports transcript: false for Pinterest, and FrameFetch never fakes one — requesting transcript on a Pinterest URL is simply omitted with a warning, at no charge.

How do I know if a Pinterest URL is a video pin before I call the API?

You mostly don't, up front — Pinterest pins can be static images, multi-image carousels, or videos, and the URL shape doesn't tell you which. Send it to FrameFetch; a video pin returns normally, an image or carousel pin fails to extract frames (no video stream to sample) while metadata still comes back.

What can I extract from a Pinterest video pin?

Metadata (title, uploader, duration, upload date, thumbnail), insights where Pinterest exposes them, frames at any size in jpg/png/webp, and on-screen text via OCR. No transcript, no comments — request only the fields Pinterest actually supports.

Can I get comments on a Pinterest pin?

No. comments is false for Pinterest in the capability matrix — TikTok, Instagram, and Reddit are the same way (Reddit's own public comment API was deprecated by Reddit on 2026-05-28). Only YouTube has a reliable public comment source FrameFetch can read.

What image formats can frames use?

jpg, png, or webp, at any width from 16 to 7680 px.