{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Profile Scraper By Niche Keyword",
    "description": "Scrape Pinterest profiles by niche keywords to discover relevant creators, businesses, and influencers. Extract usernames, profile URLs, bios, follower counts, boards, pins, and engagement data for influencer research, competitor analysis, audience discovery, and targeted marketing.",
    "version": "0.1",
    "x-build-id": "TJBRnw3r3q0kdUJzL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~pinterest-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-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/scrapier~pinterest-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-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/scrapier~pinterest-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-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",
        "properties": {
          "startUrls": {
            "title": "📋 Accounts You Already Know (URLs Or Usernames)",
            "type": "array",
            "description": "Accounts you want scraped no matter what the search returns. Every entry here is scraped FIRST and is never dropped by the follower floor or the avatar screen — those apply only to keyword-discovered accounts. Accepts a bare username (`marthastewart`), a profile URL, a regional domain (`https://au.pinterest.com/etsy/`), a board URL (`.../marthastewart/holiday-recipes/`) or a tab URL (`.../nike/_created/`) — the last two resolve to the parent profile. A search phrase typed HERE is not a search: it produces an uncharged `invalid_input` row. Put phrases in the keyword list below. Leave this empty to run on keywords alone.",
            "items": {
              "type": "string"
            }
          },
          "maxProfiles": {
            "title": "🧾 Total Profile Budget For The Whole Run",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard ceiling on charged profile rows for the ENTIRE run, across the account list and every keyword combined. Accounts you supplied are counted first, then discovered ones, so a runaway search can never crowd out the accounts you named. Example: 1 supplied account + 3 keywords x 30 = 91 planned, with this set to 40 the run scrapes 40. Set 0 for no overall ceiling and let the per-keyword cap govern."
          },
          "searchKeywords": {
            "title": "🔎 Niche Keywords To Find Accounts With",
            "type": "array",
            "description": "Phrases describing the niche you want accounts in — `sourdough baking`, `scandinavian interiors`, `van conversion`. Each phrase is searched separately against Pinterest's people results and every account found is scraped with the same profile fetch used for the list above. Accounts appearing under two keywords are scraped ONCE, with both phrases recorded in `matched_keyword`. Leave empty and this actor behaves exactly like the plain profile scraper.",
            "items": {
              "type": "string"
            }
          },
          "maxProfilesPerKeyword": {
            "title": "🔢 Accounts To Keep Per Keyword",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many accounts each keyword contributes, counted AFTER the screens below — so a follower floor cannot quietly turn a cap of 30 into 4 rows. Pinterest returns ~50 accounts per page and pagination continues until this cap is met or the results run out. Depth is query-dependent and measured: `wedding photographer` and `home office` were still paginating at 299 unique accounts, while `scandinavian interiors` ran out at 70 and `sourdough baking` at 49. Setting 500 buys volume on broad phrases only; relevance decays well before that.",
            "default": 30
          },
          "minFollowerCount": {
            "title": "👥 Minimum Followers To Keep An Account",
            "minimum": 0,
            "type": "integer",
            "description": "Drops keyword-discovered accounts below this follower count. Pinterest's people results are heavily padded with dormant accounts: across 892 measured search results, 417 (47%) had fewer than 500 followers. Checked twice — once on the search result before any request is made, then again on the real profile record. Set 0 to keep everything. Never applied to accounts you supplied yourself.",
            "default": 500
          },
          "excludeDefaultAvatarProfiles": {
            "title": "🚫 Skip Accounts With No Avatar Set",
            "type": "boolean",
            "description": "Drops keyword-discovered accounts still showing Pinterest's placeholder avatar — a reliable dormant-account signal, true on 82 of 892 measured search results (9.2%). Off by default so nothing is removed unless you ask. Note this flag exists only on Pinterest's search results, not on the profile record, so it is a discovery-stage screen and `has_default_avatar` is null on accounts you supplied yourself.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Whatever you pick here is used for every request in the run — both the keyword searches and the profile fetches. There is no hidden proxy ladder and no silent fallback to a direct connection. Pinterest served both endpoints to a bare Apify datacenter IP in testing, so a proxy is optional; switch Apify Proxy on if you start seeing `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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}