{
  "data": {
    "id": "fHnOYPsdhpAycpss7",
    "actId": "o4Uv59BHQoBe7wlRH",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-06T14:24:09.023Z",
    "finishedAt": "2026-11-06T14:24:13.010Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3893,
      "runTimeSecs": 3.893,
      "computeUnits": 0.004325555555555556,
      "imageSizeBytes": 355636224
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Pinterest Media Downloader Input\",\n  \"description\": \"Download public Pinterest images, GIFs and videos into the run's file store. Choose a mode, then paste Pin links or search phrases.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What to download\",\n      \"type\": \"string\",\n      \"description\": \"Auto handles both Pin links and search phrases. Choose a specific mode to restrict the run to links or search.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"pinDetail\",\n        \"searchPins\",\n        \"searchVideos\"\n      ],\n      \"enumTitles\": [\n        \"Auto-detect links and search\",\n        \"Pin links only\",\n        \"Search Pins\",\n        \"Search videos\"\n      ],\n      \"default\": \"auto\",\n      \"prefill\": \"pinDetail\"\n    },\n    \"pinUrls\": {\n      \"title\": \"Pinterest Pin URLs or IDs\",\n      \"type\": \"array\",\n      \"description\": \"Public Pin links (https://www.pinterest.com/pin/123...) or numeric Pin IDs. Used by auto and pinDetail.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": [\n        \"112027111109155913\"\n      ]\n    },\n    \"searchTerms\": {\n      \"title\": \"Search phrases\",\n      \"type\": \"array\",\n      \"description\": \"Pinterest search phrases. Used by auto, searchPins and searchVideos.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"mediaType\": {\n      \"title\": \"Media type\",\n      \"type\": \"string\",\n      \"description\": \"Download all media, only images (GIFs count as images), only videos, or only animated GIFs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"images\",\n        \"videos\",\n        \"gifs\"\n      ],\n      \"enumTitles\": [\n        \"All media\",\n        \"Images (including GIFs)\",\n        \"Videos only\",\n        \"Animated GIFs only\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"imageSize\": {\n      \"title\": \"Image size\",\n      \"type\": \"string\",\n      \"description\": \"Preferred image size. The actor falls back to the original or the nearest available size. Animated GIFs are always saved at their original size.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"original\",\n        \"736x\",\n        \"564x\",\n        \"474x\",\n        \"236x\"\n      ],\n      \"enumTitles\": [\n        \"Original\",\n        \"736 px\",\n        \"564 px\",\n        \"474 px\",\n        \"236 px\"\n      ],\n      \"default\": \"original\",\n      \"prefill\": \"736x\"\n    },\n    \"videoQuality\": {\n      \"title\": \"Video quality\",\n      \"type\": \"string\",\n      \"description\": \"Preferred MP4 quality. The actor falls back to the nearest available quality and prefers H.264 MP4 files.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"best\",\n        \"720p\",\n        \"540p\",\n        \"360p\",\n        \"240p\"\n      ],\n      \"enumTitles\": [\n        \"Best available\",\n        \"720p\",\n        \"540p\",\n        \"360p\",\n        \"240p\"\n      ],\n      \"default\": \"best\",\n      \"prefill\": \"best\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum media items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum files to download per Pin URL or search phrase. Set to 0 to follow the available results.\",\n      \"minimum\": 0,\n      \"maximum\": 20000,\n      \"default\": 50,\n      \"prefill\": 1\n    },\n    \"maxPages\": {\n      \"title\": \"Maximum search pages\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum result pages per search phrase. Set to 0 to follow Pinterest's pagination until it ends.\",\n      \"minimum\": 0,\n      \"maximum\": 2000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"minSaves\": {\n      \"title\": \"Minimum saves\",\n      \"type\": \"integer\",\n      \"description\": \"Keep media only when Pinterest reports at least this many saves.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"minCreatorFollowers\": {\n      \"title\": \"Minimum creator followers\",\n      \"type\": \"integer\",\n      \"description\": \"Keep media only when Pinterest reports at least this many creator followers.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"verifiedOnly\": {\n      \"title\": \"Verified creators only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only media whose creator Pinterest marks as verified.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"requireOutboundLink\": {\n      \"title\": \"Require destination link\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only Pins that publish a destination URL.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeAds\": {\n      \"title\": \"Exclude promoted Pins\",\n      \"type\": \"boolean\",\n      \"description\": \"Exclude Pins that Pinterest marks as promoted.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"commerceOnly\": {\n      \"title\": \"Shoppable Pins only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only Pins with Pinterest product or shopping metadata.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeComments\": {\n      \"title\": \"Include comments and activity\",\n      \"type\": \"boolean\",\n      \"description\": \"Also emit public comment and activity rows for every processed Pin.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxComments\": {\n      \"title\": \"Maximum comments per Pin\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum public comment/activity rows per Pin when comments are enabled.\",\n      \"minimum\": 1,\n      \"maximum\": 20000,\n      \"default\": 10,\n      \"prefill\": 10\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration (optional)\",\n      \"type\": \"object\",\n      \"description\": \"Optional proxy override. The actor works without a proxy and only escalates when Pinterest blocks a request.\",\n      \"editor\": \"proxy\"\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Pinterest Media Downloader\n\nTurn public Pinterest Pins into a folder of usable media files. This actor saves the image, animated GIF or MP4 video into the run's Key-Value Store and writes one dataset row per file with the Pin, creator, board, destination and engagement context Pinterest publishes.\n\nIt works without a Pinterest login, without cookies and without a user-supplied proxy. Media is fetched directly from Pinterest's public CDN; the actor only escalates to an Apify proxy when a request is blocked or a search response is empty.\n\n## Modes\n\n| Mode | What it downloads |\n|---|---|\n| `auto` | Pin links from `pinUrls`, then Pinterest results from `searchTerms` |\n| `pinDetail` | Only the Pins in `pinUrls` |\n| `searchPins` | Media from Pinterest Pin search results |\n| `searchVideos` | Videos from Pinterest's video search vertical |\n\nSearch Pins include static images, animated GIFs and video Pins. Search video results often expose only an HLS playlist; the actor derives the sibling public MP4 (`/videos/iht/expMp4/..._720w.mp4`) so those results are still downloadable as real files, and reports the MP4's actual pixel size and duration.\n\n## What you get\n\nEach media row contains:\n\n- `record_type`, `pin_id`, `pinterest_url`, `source_url`\n- `media_url` (the URL actually downloaded), optional `source_media_url` (the original HLS or preferred URL)\n- `media_type` (`image` or `video`) and `media_format` (`image`, `gif` or `video`)\n- `saved_as`, `key_value_store_key`, `download_url`, `file_size_bytes`, `file_sha256`\n- `content_type`, `media_width`, `media_height`, `duration_ms`, `thumbnail_url`\n- `selected_variant`, `downloaded_variant`\n- `scraped_at`\n- a nested `pin` object with title, description, alt text, dates, destination link, image and video variants, creator, board, saves, reactions, promotion and shopping flags\n\nThe nested `imageVariants` and `videoVariants` maps keep Pinterest's own size and quality names (for example `236x`, `736x`, `orig`, `V_720P`). Animated GIFs are always saved from `images.orig`; selecting a thumbnail size would save a static JPEG instead.\n\nWhen `includeComments` is enabled, the dataset can also contain public `comment` and `pin_activity` rows for numeric Pins.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | choice | `auto` | `auto`, `pinDetail`, `searchPins` or `searchVideos`. |\n| `pinUrls` | array | – | Public Pin links or numeric Pin IDs. |\n| `searchTerms` | array | – | Pinterest search phrases. |\n| `mediaType` | choice | `all` | `all`, `images`, `videos` or `gifs`. GIFs count as images. |\n| `imageSize` | choice | `original` | `original`, `736x`, `564x`, `474x` or `236x`. Falls back to the original or the nearest available size. |\n| `videoQuality` | choice | `best` | `best`, `720p`, `540p`, `360p` or `240p`. Falls back to the nearest available quality. |\n| `maxItems` | integer | `50` | Maximum files per Pin URL or search phrase. `0` follows available results. |\n| `maxPages` | integer | `0` | Maximum search pages per phrase. `0` follows Pinterest's pagination. |\n| `minSaves` | integer | – | Keep media only when Pinterest reports at least this many saves. |\n| `minCreatorFollowers` | integer | – | Keep media only when Pinterest reports at least this many creator followers. |\n| `verifiedOnly` | boolean | `false` | Keep only creators Pinterest marks as verified. |\n| `requireOutboundLink` | boolean | `false` | Keep only Pins with a destination link. |\n| `excludeAds` | boolean | `false` | Exclude Pins marked as promoted. |\n| `commerceOnly` | boolean | `false` | Keep only Pins with product or shopping metadata. |\n| `includeComments` | boolean | `false` | Also emit public comment and activity rows. |\n| `maxComments` | integer | `10` | Maximum public comment/activity rows per Pin. |\n| `proxyConfiguration` | object | – | Optional proxy override. The actor works without one. |\n\n### Example: download specific Pins\n\n```json\n{\n  \"mode\": \"pinDetail\",\n  \"pinUrls\": [\n    \"https://www.pinterest.com/pin/112027111109155913/\",\n    \"https://www.pinterest.com/pin/142567144433577360/\"\n  ],\n  \"imageSize\": \"original\"\n}\n```\n\n### Example: search images at a smaller size\n\n```json\n{\n  \"mode\": \"searchPins\",\n  \"searchTerms\": [\"minimalist kitchen\", \"small balcony garden\"],\n  \"mediaType\": \"images\",\n  \"imageSize\": \"736x\",\n  \"maxItems\": 500\n}\n```\n\n### Example: search videos as MP4\n\n```json\n{\n  \"mode\": \"searchVideos\",\n  \"searchTerms\": [\"ocean waves\"],\n  \"videoQuality\": \"720p\",\n  \"maxItems\": 100\n}\n```\n\n### Example: GIFs only\n\n```json\n{\n  \"mode\": \"pinDetail\",\n  \"pinUrls\": [\"142567144433577360\"],\n  \"mediaType\": \"gifs\"\n}\n```\n\n### Example: qualified commercial media\n\n```json\n{\n  \"mode\": \"searchPins\",\n  \"searchTerms\": [\"running shoes\"],\n  \"mediaType\": \"images\",\n  \"commerceOnly\": true,\n  \"requireOutboundLink\": true,\n  \"minSaves\": 25\n}\n```\n\n## Backward compatibility\n\nSaved tasks that still send the old keys keep working. The actor maps `pinterestUrls`, `startUrls`, `urls`, `keywords`, `search`, `queries`, `imageOnly`, `videoOnly` and `proxy` in code. Cookie fields (`cookies`, `cookiesJson`) are accepted but ignored because the shipped actor is cookieless.\n\n## Use cases\n\n- Build a local reference library of public Pinterest images, GIFs and videos.\n- Archive a creator's or board's visual style with source links.\n- Collect product, recipe or design media for content research.\n- Pair downloaded files with creator, board and engagement context.\n- Feed image or video datasets into downstream tagging and analysis.\n\n## FAQ\n\n### Where are the files stored?\n\nEach file is saved as a record in the run's Key-Value Store. The `download_url` field is a public link to that record; `media_url` points at Pinterest's source CDN.\n\n### Do I need a proxy?\n\nNo. Direct Pinterest requests are tried first. The actor falls back to Apify's free `AUTO` datacenter proxy only when Pinterest blocks a request or returns an empty search envelope.\n\n### Why is my GIF a still image?\n\nThat happens only when the Pin is not actually animated. Animated GIF Pins are saved from `images.orig`, never from a JPEG thumbnail.\n\n### Why does a search video become an MP4 when Pinterest shows HLS?\n\nPinterest publishes the same video under both `/videos/iht/hls/` and `/videos/iht/expMp4/`. The actor derives the public MP4 variant so the file is directly playable. It never saves an `.m3u8` playlist as a video file.\n\n### Can I choose quality?\n\nYes. `imageSize` controls image dimensions and `videoQuality` controls MP4 quality. If the requested size or quality is unavailable, the actor uses the original/best or the nearest available variant.\n\n### Why did a Pin produce no file?\n\nIt may be private, deleted, region-blocked, missing public media, or it may expose only a media form Pinterest does not publish for download. The actor never fabricates a file or a download URL.\n\n### Are the media URLs permanent?\n\nPinterest CDN URLs can change or expire. The `download_url` points at the copy saved by this run and is the stable link for the exported file.\n\n### Do filters use estimates?\n\nNo. Metrics filters use only values Pinterest publishes on the same Pin. If a count is missing, the Pin does not pass a minimum-count filter.\n\n### Can I get metadata without downloading files?\n\nThis actor is file-first: every media row corresponds to a saved file. For metadata-only Pin, profile and board collection, use a dedicated Pinterest data actor.\n\n### What is not supported?\n\nCarousel/slide expansion is not performed: the primary Pin media is downloaded. Video fps, codec and audio-track flags are not reported because the lightweight image does not run `ffprobe`. Search result IDs can be opaque, so detail-only fields such as saves or comments are omitted for those rows rather than guessed.\n\n### Is this affiliated with Pinterest?\n\nNo. This is an independent tool that reads Pinterest's public pages and API responses. It is not operated, endorsed or sponsored by Pinterest.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "pinterest-media-downloader-2",
      "title": "Pinterest Media Downloader",
      "description": "Download public Pinterest images, animated GIFs and videos from Pin links or searches, with size and quality control plus source metadata and Key-Value Store links.",
      "version": "1.1",
      "readme": "# Pinterest Media Downloader\n\nTurn public Pinterest Pins into a folder of usable media files. This actor saves the image, animated GIF or MP4 video into the run's Key-Value Store and writes one dataset row per file with the Pin, creator, board, destination and engagement context Pinterest publishes.\n\nIt works without a Pinterest login, without cookies and without a user-supplied proxy. Media is fetched directly from Pinterest's public CDN; the actor only escalates to an Apify proxy when a request is blocked or a search response is empty.\n\n## Modes\n\n| Mode | What it downloads |\n|---|---|\n| `auto` | Pin links from `pinUrls`, then Pinterest results from `searchTerms` |\n| `pinDetail` | Only the Pins in `pinUrls` |\n| `searchPins` | Media from Pinterest Pin search results |\n| `searchVideos` | Videos from Pinterest's video search vertical |\n\nSearch Pins include static images, animated GIFs and video Pins. Search video results often expose only an HLS playlist; the actor derives the sibling public MP4 (`/videos/iht/expMp4/..._720w.mp4`) so those results are still downloadable as real files, and reports the MP4's actual pixel size and duration.\n\n## What you get\n\nEach media row contains:\n\n- `record_type`, `pin_id`, `pinterest_url`, `source_url`\n- `media_url` (the URL actually downloaded), optional `source_media_url` (the original HLS or preferred URL)\n- `media_type` (`image` or `video`) and `media_format` (`image`, `gif` or `video`)\n- `saved_as`, `key_value_store_key`, `download_url`, `file_size_bytes`, `file_sha256`\n- `content_type`, `media_width`, `media_height`, `duration_ms`, `thumbnail_url`\n- `selected_variant`, `downloaded_variant`\n- `scraped_at`\n- a nested `pin` object with title, description, alt text, dates, destination link, image and video variants, creator, board, saves, reactions, promotion and shopping flags\n\nThe nested `imageVariants` and `videoVariants` maps keep Pinterest's own size and quality names (for example `236x`, `736x`, `orig`, `V_720P`). Animated GIFs are always saved from `images.orig`; selecting a thumbnail size would save a static JPEG instead.\n\nWhen `includeComments` is enabled, the dataset can also contain public `comment` and `pin_activity` rows for numeric Pins.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | choice | `auto` | `auto`, `pinDetail`, `searchPins` or `searchVideos`. |\n| `pinUrls` | array | – | Public Pin links or numeric Pin IDs. |\n| `searchTerms` | array | – | Pinterest search phrases. |\n| `mediaType` | choice | `all` | `all`, `images`, `videos` or `gifs`. GIFs count as images. |\n| `imageSize` | choice | `original` | `original`, `736x`, `564x`, `474x` or `236x`. Falls back to the original or the nearest available size. |\n| `videoQuality` | choice | `best` | `best`, `720p`, `540p`, `360p` or `240p`. Falls back to the nearest available quality. |\n| `maxItems` | integer | `50` | Maximum files per Pin URL or search phrase. `0` follows available results. |\n| `maxPages` | integer | `0` | Maximum search pages per phrase. `0` follows Pinterest's pagination. |\n| `minSaves` | integer | – | Keep media only when Pinterest reports at least this many saves. |\n| `minCreatorFollowers` | integer | – | Keep media only when Pinterest reports at least this many creator followers. |\n| `verifiedOnly` | boolean | `false` | Keep only creators Pinterest marks as verified. |\n| `requireOutboundLink` | boolean | `false` | Keep only Pins with a destination link. |\n| `excludeAds` | boolean | `false` | Exclude Pins marked as promoted. |\n| `commerceOnly` | boolean | `false` | Keep only Pins with product or shopping metadata. |\n| `includeComments` | boolean | `false` | Also emit public comment and activity rows. |\n| `maxComments` | integer | `10` | Maximum public comment/activity rows per Pin. |\n| `proxyConfiguration` | object | – | Optional proxy override. The actor works without one. |\n\n### Example: download specific Pins\n\n```json\n{\n  \"mode\": \"pinDetail\",\n  \"pinUrls\": [\n    \"https://www.pinterest.com/pin/112027111109155913/\",\n    \"https://www.pinterest.com/pin/142567144433577360/\"\n  ],\n  \"imageSize\": \"original\"\n}\n```\n\n### Example: search images at a smaller size\n\n```json\n{\n  \"mode\": \"searchPins\",\n  \"searchTerms\": [\"minimalist kitchen\", \"small balcony garden\"],\n  \"mediaType\": \"images\",\n  \"imageSize\": \"736x\",\n  \"maxItems\": 500\n}\n```\n\n### Example: search videos as MP4\n\n```json\n{\n  \"mode\": \"searchVideos\",\n  \"searchTerms\": [\"ocean waves\"],\n  \"videoQuality\": \"720p\",\n  \"maxItems\": 100\n}\n```\n\n### Example: GIFs only\n\n```json\n{\n  \"mode\": \"pinDetail\",\n  \"pinUrls\": [\"142567144433577360\"],\n  \"mediaType\": \"gifs\"\n}\n```\n\n### Example: qualified commercial media\n\n```json\n{\n  \"mode\": \"searchPins\",\n  \"searchTerms\": [\"running shoes\"],\n  \"mediaType\": \"images\",\n  \"commerceOnly\": true,\n  \"requireOutboundLink\": true,\n  \"minSaves\": 25\n}\n```\n\n## Backward compatibility\n\nSaved tasks that still send the old keys keep working. The actor maps `pinterestUrls`, `startUrls`, `urls`, `keywords`, `search`, `queries`, `imageOnly`, `videoOnly` and `proxy` in code. Cookie fields (`cookies`, `cookiesJson`) are accepted but ignored because the shipped actor is cookieless.\n\n## Use cases\n\n- Build a local reference library of public Pinterest images, GIFs and videos.\n- Archive a creator's or board's visual style with source links.\n- Collect product, recipe or design media for content research.\n- Pair downloaded files with creator, board and engagement context.\n- Feed image or video datasets into downstream tagging and analysis.\n\n## FAQ\n\n### Where are the files stored?\n\nEach file is saved as a record in the run's Key-Value Store. The `download_url` field is a public link to that record; `media_url` points at Pinterest's source CDN.\n\n### Do I need a proxy?\n\nNo. Direct Pinterest requests are tried first. The actor falls back to Apify's free `AUTO` datacenter proxy only when Pinterest blocks a request or returns an empty search envelope.\n\n### Why is my GIF a still image?\n\nThat happens only when the Pin is not actually animated. Animated GIF Pins are saved from `images.orig`, never from a JPEG thumbnail.\n\n### Why does a search video become an MP4 when Pinterest shows HLS?\n\nPinterest publishes the same video under both `/videos/iht/hls/` and `/videos/iht/expMp4/`. The actor derives the public MP4 variant so the file is directly playable. It never saves an `.m3u8` playlist as a video file.\n\n### Can I choose quality?\n\nYes. `imageSize` controls image dimensions and `videoQuality` controls MP4 quality. If the requested size or quality is unavailable, the actor uses the original/best or the nearest available variant.\n\n### Why did a Pin produce no file?\n\nIt may be private, deleted, region-blocked, missing public media, or it may expose only a media form Pinterest does not publish for download. The actor never fabricates a file or a download URL.\n\n### Are the media URLs permanent?\n\nPinterest CDN URLs can change or expire. The `download_url` points at the copy saved by this run and is the stable link for the exported file.\n\n### Do filters use estimates?\n\nNo. Metrics filters use only values Pinterest publishes on the same Pin. If a count is missing, the Pin does not pass a minimum-count filter.\n\n### Can I get metadata without downloading files?\n\nThis actor is file-first: every media row corresponds to a saved file. For metadata-only Pin, profile and board collection, use a dedicated Pinterest data actor.\n\n### What is not supported?\n\nCarousel/slide expansion is not performed: the primary Pin media is downloaded. Video fps, codec and audio-track flags are not reported because the lightweight image does not run `ffprobe`. Search result IDs can be opaque, so detail-only fields such as saves or comments are omitted for those rows rather than guessed.\n\n### Is this affiliated with Pinterest?\n\nNo. This is an independent tool that reads Pinterest's public pages and API responses. It is not operated, endorsed or sponsored by Pinterest.\n",
      "dockerfile": "../Dockerfile",
      "input": {
        "title": "Pinterest Media Downloader Input",
        "description": "Download public Pinterest images, GIFs and videos into the run's file store. Choose a mode, then paste Pin links or search phrases.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What to download",
            "type": "string",
            "description": "Auto handles both Pin links and search phrases. Choose a specific mode to restrict the run to links or search.",
            "editor": "select",
            "enum": [
              "auto",
              "pinDetail",
              "searchPins",
              "searchVideos"
            ],
            "enumTitles": [
              "Auto-detect links and search",
              "Pin links only",
              "Search Pins",
              "Search videos"
            ],
            "default": "auto",
            "prefill": "pinDetail"
          },
          "pinUrls": {
            "title": "Pinterest Pin URLs or IDs",
            "type": "array",
            "description": "Public Pin links (https://www.pinterest.com/pin/123...) or numeric Pin IDs. Used by auto and pinDetail.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": [
              "112027111109155913"
            ]
          },
          "searchTerms": {
            "title": "Search phrases",
            "type": "array",
            "description": "Pinterest search phrases. Used by auto, searchPins and searchVideos.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "mediaType": {
            "title": "Media type",
            "type": "string",
            "description": "Download all media, only images (GIFs count as images), only videos, or only animated GIFs.",
            "editor": "select",
            "enum": [
              "all",
              "images",
              "videos",
              "gifs"
            ],
            "enumTitles": [
              "All media",
              "Images (including GIFs)",
              "Videos only",
              "Animated GIFs only"
            ],
            "default": "all",
            "prefill": "all"
          },
          "imageSize": {
            "title": "Image size",
            "type": "string",
            "description": "Preferred image size. The actor falls back to the original or the nearest available size. Animated GIFs are always saved at their original size.",
            "editor": "select",
            "enum": [
              "original",
              "736x",
              "564x",
              "474x",
              "236x"
            ],
            "enumTitles": [
              "Original",
              "736 px",
              "564 px",
              "474 px",
              "236 px"
            ],
            "default": "original",
            "prefill": "736x"
          },
          "videoQuality": {
            "title": "Video quality",
            "type": "string",
            "description": "Preferred MP4 quality. The actor falls back to the nearest available quality and prefers H.264 MP4 files.",
            "editor": "select",
            "enum": [
              "best",
              "720p",
              "540p",
              "360p",
              "240p"
            ],
            "enumTitles": [
              "Best available",
              "720p",
              "540p",
              "360p",
              "240p"
            ],
            "default": "best",
            "prefill": "best"
          },
          "maxItems": {
            "title": "Maximum media items",
            "type": "integer",
            "description": "Maximum files to download per Pin URL or search phrase. Set to 0 to follow the available results.",
            "minimum": 0,
            "maximum": 20000,
            "default": 50,
            "prefill": 1
          },
          "maxPages": {
            "title": "Maximum search pages",
            "type": "integer",
            "description": "Maximum result pages per search phrase. Set to 0 to follow Pinterest's pagination until it ends.",
            "minimum": 0,
            "maximum": 2000,
            "default": 0,
            "prefill": 0
          },
          "minSaves": {
            "title": "Minimum saves",
            "type": "integer",
            "description": "Keep media only when Pinterest reports at least this many saves.",
            "minimum": 0,
            "maximum": 10000000
          },
          "minCreatorFollowers": {
            "title": "Minimum creator followers",
            "type": "integer",
            "description": "Keep media only when Pinterest reports at least this many creator followers.",
            "minimum": 0,
            "maximum": 1000000000
          },
          "verifiedOnly": {
            "title": "Verified creators only",
            "type": "boolean",
            "description": "Keep only media whose creator Pinterest marks as verified.",
            "default": false,
            "prefill": false
          },
          "requireOutboundLink": {
            "title": "Require destination link",
            "type": "boolean",
            "description": "Keep only Pins that publish a destination URL.",
            "default": false,
            "prefill": false
          },
          "excludeAds": {
            "title": "Exclude promoted Pins",
            "type": "boolean",
            "description": "Exclude Pins that Pinterest marks as promoted.",
            "default": false,
            "prefill": false
          },
          "commerceOnly": {
            "title": "Shoppable Pins only",
            "type": "boolean",
            "description": "Keep only Pins with Pinterest product or shopping metadata.",
            "default": false,
            "prefill": false
          },
          "includeComments": {
            "title": "Include comments and activity",
            "type": "boolean",
            "description": "Also emit public comment and activity rows for every processed Pin.",
            "default": false,
            "prefill": false
          },
          "maxComments": {
            "title": "Maximum comments per Pin",
            "type": "integer",
            "description": "Maximum public comment/activity rows per Pin when comments are enabled.",
            "minimum": 1,
            "maximum": 20000,
            "default": 10,
            "prefill": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "Optional proxy override. The actor works without a proxy and only escalates when Pinterest blocks a request.",
            "editor": "proxy"
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Pinterest Media Downloader Output",
        "description": "A dataset row per downloaded Pinterest image, GIF or video file with Pin, creator, board and engagement metadata, plus optional public comment rows.",
        "properties": {
          "mediaDataset": {
            "type": "string",
            "title": "Downloaded Media Dataset",
            "description": "Dataset containing one metadata row for every downloaded media file and optional comment rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "mediaFiles": {
            "type": "string",
            "title": "Downloaded Media Files",
            "description": "Public Key-Value Store records containing the downloaded image, GIF and video files.",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Pinterest Downloaded Media",
          "views": {
            "overview": {
              "title": "Downloaded Media",
              "description": "Pinterest media files downloaded into the run Key-Value Store with their source metadata.",
              "transformation": {
                "fields": [
                  "record_type",
                  "pin_id",
                  "pinterest_url",
                  "media_url",
                  "media_type",
                  "media_format",
                  "media_width",
                  "media_height",
                  "duration_ms",
                  "file_size_bytes",
                  "file_sha256",
                  "saved_as",
                  "download_url",
                  "source_url",
                  "scraped_at",
                  "pin"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "pinterest_url": {
                    "label": "Pinterest URL",
                    "format": "link"
                  },
                  "media_type": {
                    "label": "Type",
                    "format": "text"
                  },
                  "media_format": {
                    "label": "Format",
                    "format": "text"
                  },
                  "media_width": {
                    "label": "Width",
                    "format": "number"
                  },
                  "media_height": {
                    "label": "Height",
                    "format": "number"
                  },
                  "duration_ms": {
                    "label": "Duration (ms)",
                    "format": "number"
                  },
                  "saved_as": {
                    "label": "Filename",
                    "format": "text"
                  },
                  "download_url": {
                    "label": "Download",
                    "format": "link"
                  }
                }
              }
            }
          },
          "fields": {
            "record_type": {
              "type": "string",
              "title": "Record Type",
              "description": "media for a downloaded file, comment or pin_activity for optional activity rows."
            },
            "pin_id": {
              "type": "string",
              "title": "Pin ID",
              "description": "Pinterest Pin ID. Search rows can use an opaque Pinterest ID."
            },
            "pinterest_url": {
              "type": "string",
              "title": "Pinterest URL",
              "description": "URL of the source Pin.",
              "format": "link"
            },
            "source_url": {
              "type": "string",
              "title": "Source URL",
              "description": "URL of the source Pin that produced the record.",
              "format": "link"
            },
            "media_url": {
              "type": "string",
              "title": "Source Media URL",
              "description": "Public Pinterest-hosted media URL that was downloaded.",
              "format": "link"
            },
            "source_media_url": {
              "type": "string",
              "title": "Original Media URL",
              "description": "Original HLS or preferred variant URL when the downloaded file came from a derived or fallback variant.",
              "format": "link"
            },
            "media_type": {
              "type": "string",
              "title": "Media Type",
              "description": "image or video."
            },
            "media_format": {
              "type": "string",
              "title": "Media Format",
              "description": "image, gif or video."
            },
            "selected_variant": {
              "type": "string",
              "title": "Selected Variant",
              "description": "Pinterest image size or video quality selected from the input preference."
            },
            "downloaded_variant": {
              "type": "string",
              "title": "Downloaded Variant",
              "description": "Variant that actually downloaded successfully."
            },
            "media_width": {
              "type": "integer",
              "title": "Width",
              "description": "Pixel width of the downloaded file."
            },
            "media_height": {
              "type": "integer",
              "title": "Height",
              "description": "Pixel height of the downloaded file."
            },
            "duration_ms": {
              "type": "integer",
              "title": "Video Duration (ms)",
              "description": "Duration of the downloaded video in milliseconds."
            },
            "thumbnail_url": {
              "type": "string",
              "title": "Video Thumbnail",
              "description": "Public poster image for a video Pin.",
              "format": "link"
            },
            "content_type": {
              "type": "string",
              "title": "Content Type",
              "description": "MIME type returned by the Pinterest media server."
            },
            "file_size_bytes": {
              "type": "integer",
              "title": "File Size (bytes)",
              "description": "Size of the stored file in bytes."
            },
            "file_sha256": {
              "type": "string",
              "title": "SHA-256",
              "description": "SHA-256 checksum of the stored file."
            },
            "saved_as": {
              "type": "string",
              "title": "Saved As",
              "description": "Filename of the media file in the Key-Value Store."
            },
            "key_value_store_key": {
              "type": "string",
              "title": "Key-Value Store Key",
              "description": "Record key in the run's Key-Value Store."
            },
            "download_url": {
              "type": "string",
              "title": "Download URL",
              "description": "Direct public URL to download the stored file.",
              "format": "link"
            },
            "scraped_at": {
              "type": "string",
              "title": "Scraped At",
              "description": "ISO timestamp when the record was produced."
            },
            "pin": {
              "type": "object",
              "title": "Pin Details",
              "description": "Pinterest-supplied Pin, creator, board, engagement, media variant and destination metadata. Missing values are omitted."
            }
          }
        }
      }
    },
    "buildNumber": "1.1.1",
    "imageDigest": "a6a2bdee002d5f060e1dbe33fe14d826b7f77e6fe28e31124e16263690faa2e0",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.004325555555555556
    }
  }
}