{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Profile Scraper — Shop Products & Prices",
    "description": "Scrape Pinterest profile data quickly and reliably. This actor gathers boards, pins, engagement metrics, and profile details from public accounts. Built for marketers, analysts, and developers needing structured Pinterest data.",
    "version": "0.1",
    "x-build-id": "WBp3Iirl7V6cxlrRV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapio~pinterest-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapio-pinterest-profile-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-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapio-pinterest-profile-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-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapio-pinterest-profile-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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🛍️ Pinterest Store Or Creator Profiles",
            "type": "array",
            "description": "One entry per account. Accepts a bare username (`etsy`), a profile URL (`https://www.pinterest.com/potterybarn/`), a regional domain (`https://au.pinterest.com/etsy/`), or any sub-path below the profile root — a board URL or a `/_created/` tab URL both resolve to the parent profile. Search phrases are not supported: this actor reads accounts you name, it does not discover them; anything that is not a username produces an uncharged row with `errorReason: invalid_input`. Retail accounts such as `etsy`, `macys`, `potterybarn`, `target` and `nike` are the ones that publish priced products.",
            "items": {
              "type": "string"
            }
          },
          "includeShopProducts": {
            "title": "🏷️ Return The Account's Shop Products",
            "type": "boolean",
            "description": "Read the account's pin grid and return every product carried by its collection pins in `shopProducts[]` — product title, description, published price, currency, store name, destination URL and image. Switch this off to get the profile record and nothing else (that is exactly what the base Pinterest Profile Scraper returns). On by default: the catalogue is the reason to pick this actor.",
            "default": true
          },
          "maxProductsPerProfile": {
            "title": "🔢 Maximum Products Per Account",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many products to keep per account, applied AFTER the store-domain and price filters so the cap counts products you actually asked for. `shopProductsTruncated` is set to true when the account had more. Example: 50 keeps the first 50 matching products and flags the rest as truncated. Default 50.",
            "default": 50
          },
          "maxPinsScannedPerProfile": {
            "title": "📌 Maximum Pins To Read Per Account",
            "minimum": 25,
            "maximum": 1000,
            "type": "integer",
            "description": "How deep to page through each account's pin grid while looking for products and destination links. Pinterest serves 25 pins per request, so 100 costs at most four requests per account. Scanning stops early once the product cap is filled or Pinterest stops issuing a pagination bookmark. `pinsScanned` on every row reports what was actually read. Default 100, minimum 25.",
            "default": 100
          },
          "productDomains": {
            "title": "🌐 Only Products Landing On These Stores",
            "type": "array",
            "description": "Keep only products whose destination URL lands on one of these hosts — `etsy.com`, `macys.com`, the brand's own domain. Matched on the host with subdomains included, so `etsy.com` also matches `shop.etsy.com`. Leave empty to keep every store. This is the direct-seller vs marketplace question: caveat — Pinterest sometimes publishes a tracking redirect (`etsy.me`) instead of the final host on the PIN, so the raw `product_url` always ships unchanged next to `product_domain` and the call can be checked.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "💵 Minimum Published Price",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only products at or above this price, compared against the number Pinterest publishes for that product in the merchant's own currency — nothing here converts currencies, so filter one currency at a time. LEAVE EMPTY for no floor: a floor of 0 is a real bound, not 'unset'. When either price bound is set, products with no published price are dropped and counted separately in `shopProductsDroppedNoPrice`, because an unpriced product is not a $0 product."
          },
          "maxPrice": {
            "title": "💰 Maximum Published Price",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only products at or below this price. Leave empty for no ceiling. Set both ends to get the price band you actually buy in. Same currency caveat as the floor: raw numbers are compared, never converted."
          },
          "merchantProfilesOnly": {
            "title": "🏪 Keep Only Accounts That Sell",
            "type": "boolean",
            "description": "Drop accounts that show no sign of selling. An account passes when Pinterest flags it `is_verified_merchant` or `is_inspirational_merchant`, OR when at least one scanned pin carries a shop product. The verdict is taken on the UNFILTERED product count, so a store-domain or price filter never changes whether an account counts as a seller. Skipped accounts are not pushed and NOT charged. OFF by default on purpose — `is_verified_merchant` was false on every creator account measured, so defaulting this on would silently empty the dataset for anyone running a mixed list. It does NOT screen on a Shop tab: Pinterest publishes none logged-out.",
            "default": false
          },
          "maxProfiles": {
            "title": "👥 Maximum Accounts To Scrape",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on how many of the supplied accounts are processed, so a long list cannot run away with your budget. Every charged row counts against it and no row is emitted outside it. Example: 40 accounts with 10 here scrapes the first 10. Set 0 to scrape every account supplied."
          },
          "proxyConfiguration": {
            "title": "🌍 Proxy Configuration",
            "type": "object",
            "description": "Whatever you choose here is used for every request in the run — there is no hidden proxy ladder and no silent fallback to a direct connection. Pinterest served both the profile endpoint and the pin grid to a bare Apify datacenter IP in testing, so a proxy is optional; switch Apify Proxy on if you see `blocked` accounting rows."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}