{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Boards Scraper & Pinner Profiles",
    "description": "Scrape Pinterest board data quickly and reliably. This actor gathers board details, pin lists, descriptions, and engagement stats from public boards. Built for marketers, analysts, and developers needing structured Pinterest board data.",
    "version": "0.1",
    "x-build-id": "K7iVYKJVELubddlgi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapio~pinterest-boards-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapio-pinterest-boards-scraper",
        "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/scrapio~pinterest-boards-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapio-pinterest-boards-scraper",
        "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/scrapio~pinterest-boards-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapio-pinterest-boards-scraper",
        "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",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "📌 Boards, profiles or pins to scrape",
            "type": "array",
            "description": "Board URLs (https://www.pinterest.com/<user>/<board>/), profile URLs or bare usernames, and pin URLs or bare pin IDs. One per line — bulk runs are supported. Every pin returned carries the profile of the account that pinned it.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "🔢 Pins to keep per board",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum pins KEPT per board (1–5000), counted after the pinner screens below, so a follower floor still returns the number of usable rows you asked for. In one-row-per-creator mode the emitted rows are the distinct creators among those kept pins, so the row count never exceeds this number.",
            "default": 10
          },
          "fetchLinkDetails": {
            "title": "🔗 Keep the outbound link and domain",
            "type": "boolean",
            "description": "Fill `link` / `externalLink` / `domain` with the destination each pin points at. Turn it off to return the three fields as null.",
            "default": true
          },
          "fetchPinDetails": {
            "title": "🕐 Open each pin for its creation date (1 extra request per pin)",
            "type": "boolean",
            "description": "Open each pin's closeup to fill `date` (ISO 8601 creation time), `commentCount`, `shareCount`, the pin's board section and `pinner.followerCount`. Those five fields are null without it: the board grid carries no creation date.",
            "default": false
          },
          "maxPinDetailFetches": {
            "title": "🧮 Ceiling on pin-closeup requests",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Ceiling on the closeup requests above, across the whole run. Pins past the ceiling are still returned, with the five detail fields null. 0 = no ceiling.",
            "default": 50
          },
          "includeBoardSections": {
            "title": "🗂️ Tag each pin with its board section",
            "type": "boolean",
            "description": "Walk the board's sections and stamp `sectionId` / `sectionTitle` / `sectionSlug` onto each pin. Roughly one request per 50 section pins. Pins that sit outside every section keep a null section.",
            "default": false
          },
          "includePinnerProfiles": {
            "title": "👤 Attach the pinner's public profile",
            "type": "boolean",
            "description": "Fill `pinnerProfile` with the account's public Pinterest profile: follower / following / pin / board counts, bio, website, claimed-domain and merchant / identity verification flags, account creation date and the last time it saved a pin. Turn it off and `pinnerProfile` is null on every row while `pinnerProfileUrl` still resolves.",
            "default": true
          },
          "minPinnerFollowers": {
            "title": "📉 Minimum pinner followers",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Drop pins posted by accounts below this follower count. 0 keeps every account (the default, so a plain run is never silently empty). 1000 is a reasonable floor for a partnership contact list. Pins whose profile could not be fetched are dropped while this is above 0, because the screen cannot be evaluated for them — the counts are in `pinsDroppedByFilter` and in the log.",
            "default": 0
          },
          "verifiedPinnersOnly": {
            "title": "✔️ Verified accounts only",
            "type": "boolean",
            "description": "Keep only pins from accounts carrying Pinterest MERCHANT verification (`isVerifiedMerchant`) or IDENTITY verification (`verifiedIdentity`). Measured on 40 profiles: merchant 13/40, identity 7/40 — so expect most boards to thin out heavily. It deliberately does not screen on `isPartner` (38/40) or `domainVerified` (32/40); either would pass almost everyone and make this switch read as broken.",
            "default": false
          },
          "uniquePinnersOnly": {
            "title": "🧍 One row per creator instead of one per pin",
            "type": "boolean",
            "description": "Collapse the output to one row per account, keeping that creator's highest-saved pin as the representative row and reporting the group size in `pinnerPinsOnThisBoard`. Nothing is summed or averaged — the row still holds the real values of one real pin. This changes what a row means, so it is off by default.",
            "default": false
          },
          "maxProfileFetches": {
            "title": "🧾 Ceiling on profile requests",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Ceiling on UserResource requests across the whole run. 0 = no ceiling, which is the default because the per-account dedupe already makes this cheap. Pins belonging to accounts discovered after the ceiling keep a null `pinnerProfile` and `pinnerProfileFetched: false`.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy configuration",
            "type": "object",
            "description": "Your own proxy selection is honored exactly as configured — groups, country and custom proxy URLs all reach the fetch layer.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}