{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Search Scraper API: Pins by Keyword, Board or Profile",
    "description": "Pinterest scraper without login: get pins from a keyword, a board URL or profile, one row per pin: alt text, image, outbound link, source domain, board, pinner, reaction count. No cookies. Monitor only new pins, find source websites behind pins. Export to CSV, Google Sheets, n8n, Make, Clay, MCP.",
    "version": "1.0",
    "x-build-id": "Ng24fllMCclNUz79F"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~pinterest-search-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-pinterest-search-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/accountable_eel~pinterest-search-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-pinterest-search-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/accountable_eel~pinterest-search-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-pinterest-search-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "queries": {
            "title": "Pinterest searches to run",
            "type": "array",
            "description": "One search term per line, the same words you would type into Pinterest's own search box. A Pinterest search URL pasted from your browser works too. Accepted formats: kitchen ideas, minimalist living room, https://www.pinterest.com/search/pins/?q=cottagecore%20bedroom. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "boardUrls": {
            "title": "Pinterest boards",
            "type": "array",
            "description": "Board URLs, one per line, e.g. https://www.pinterest.com/TileBar/tiles-backsplashes/. Returns that board's pins. Private boards and board sections are not available.",
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "Pinterest profiles",
            "type": "array",
            "description": "Usernames or profile URLs, one per line, e.g. TileBar or https://www.pinterest.com/TileBar/. Returns the pins that profile created (its Created tab), not the pins it saved to boards.",
            "items": {
              "type": "string"
            }
          },
          "maxPins": {
            "title": "Most pins to return per search",
            "type": "integer",
            "description": "Pinterest hands out 25 pins at a time. You pay per pin returned, so this is also your budget control. Capped at 50. Applies to each search, board and profile.",
            "default": 25
          },
          "linkedPinsOnly": {
            "title": "Only pins that link to a website",
            "type": "boolean",
            "description": "Keep only pins with an outbound source URL, and drop the ones a user uploaded straight to Pinterest. About a third of pins on a typical search have a link. Filtered pins are never billed.",
            "default": false
          },
          "skipDuplicatePins": {
            "title": "Never return the same pin twice",
            "type": "boolean",
            "description": "On by default. Overlapping searches routinely surface the same pin, and Pinterest repeats pins between pages of one search. With this on, each pin is returned, and billed, exactly once per run.",
            "default": true
          },
          "deltaMode": {
            "title": "Only return pins that are new since the last run",
            "type": "boolean",
            "description": "Turns this actor into a monitor. A pin is new when its Pinterest pin ID has not been returned by an earlier run of the same watchlist, for the same search, board or profile. Pins already seen are dropped before you are billed, so a quiet run costs only the run fee. The first run has nothing to compare against, so (unless \"Seed silently\" is on) it returns everything and remembers it. Each pin gets \"Is this pin new?\" and \"First seen\" columns.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and one is derived from this run's settings. Type your own name to keep one memory across a settings change, or to share it between schedules. Naming a watchlist with monitoring off still stamps every pin with \"Is this pin new?\" and \"First seen\" and returns all of them, so you can filter downstream in Sheets, n8n or Make.",
            "default": ""
          },
          "skipFirstRun": {
            "title": "Seed silently (no pins on the first run)",
            "type": "boolean",
            "description": "Instead of returning every current pin as new the first time a watchlist runs, bank them silently and start alerting from the second run. Nothing is charged for the seeding run apart from the run fee.",
            "default": false
          },
          "alertOnChangeOnly": {
            "title": "Return nothing when there are no new pins",
            "type": "boolean",
            "description": "When on, a search, board or profile with no new pin adds no row at all to the results, and nothing is billed for it. Needs monitoring on or a watchlist name, since there is nothing to compare against otherwise.",
            "default": false
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "searchQuery",
                "source",
                "sourceValue",
                "sourceName",
                "sourcePinCount",
                "pinCount",
                "truncated",
                "medianReactions",
                "medianReactionsPerDay",
                "risingPinCount",
                "topDomains",
                "topBoards",
                "pins",
                "pinId",
                "title",
                "description",
                "altText",
                "imageUrl",
                "link",
                "domain",
                "boardName",
                "boardUrl",
                "pinnerName",
                "pinnerUsername",
                "reactionCount",
                "createdAt",
                "url",
                "ageDays",
                "reactionsPerDay",
                "isNew",
                "firstSeenAt",
                "newPinCount",
                "monitorStatus"
              ],
              "enumTitles": [
                "Search submitted",
                "Source",
                "Search, board or profile",
                "Board or profile name",
                "Pins on the board or profile",
                "Pins returned",
                "More pins were available",
                "Median reactions",
                "Median reactions per day",
                "Rising pins (under 30 days)",
                "Top source domains",
                "Top boards",
                "All pins found (full list)",
                "Pin ID",
                "Pin title",
                "Description",
                "Image alt text",
                "Image",
                "Links to",
                "Source domain",
                "Board",
                "Board link",
                "Pinned by",
                "Pinner username",
                "Reactions",
                "Pinned on",
                "Pin link",
                "Pin age (days)",
                "Reactions per day",
                "Is this pin new?",
                "First seen by this watchlist",
                "New pins this run",
                "Monitoring status"
              ]
            },
            "default": [
              "searchQuery",
              "source",
              "sourceValue",
              "sourceName",
              "sourcePinCount",
              "pinCount",
              "truncated",
              "medianReactions",
              "medianReactionsPerDay",
              "risingPinCount",
              "topDomains",
              "topBoards",
              "pins",
              "pinId",
              "title",
              "description",
              "altText",
              "imageUrl",
              "link",
              "domain",
              "boardName",
              "boardUrl",
              "pinnerName",
              "pinnerUsername",
              "reactionCount",
              "createdAt",
              "url",
              "ageDays",
              "reactionsPerDay",
              "isNew",
              "firstSeenAt",
              "newPinCount",
              "monitorStatus"
            ]
          },
          "expandRows": {
            "title": "One row per pin (recommended) — turn off for one row per search instead",
            "type": "boolean",
            "description": "When on, each pin found gets its own row instead of being grouped under its search. You're still only charged once per search, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}