{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Profile Scraper With Email & Website Contacts",
    "description": "Collect actionable insights from Pinterest profiles automatically. This scraper fetches board data, pins, descriptions, and audience metrics. Useful for trend discovery, competitive research, and large-scale data extraction.",
    "version": "0.1",
    "x-build-id": "ObPkFqKacb1ydSIl7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~pinterest-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-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/simpleapi~pinterest-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-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/simpleapi~pinterest-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-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 Accounts To Build Contacts For",
            "type": "array",
            "description": "One entry per account you want contact details for. Accepts a bare username (`refreshrestyle1`), a profile URL (`https://www.pinterest.com/marthastewart/`), a regional domain (`https://au.pinterest.com/etsy/`), or any sub-path below the profile root — a board URL such as `https://www.pinterest.com/chrislovesjulia/holiday-recipes/` and a tab URL such as `https://www.pinterest.com/target/_created/` both resolve to the parent profile. Search phrases are NOT supported: this actor works the accounts you name, it does not discover them. Anything that is not a username produces an uncharged row with `errorReason: invalid_input`.",
            "items": {
              "type": "string"
            }
          },
          "maxProfiles": {
            "title": "🔢 Outreach List Size Cap",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on how many of the supplied accounts are worked, so a long prospect list cannot run away with your budget. Every charged row counts against it. Example: 200 usernames with a cap of 25 works the first 25. Set 0 to work every account supplied."
          },
          "extractContactDetails": {
            "title": "📇 Read Contact Details From The Bio",
            "type": "boolean",
            "description": "Parse the account's own `about` bio and SEO description for email addresses, phone numbers and handles on other platforms. This pass costs ZERO extra requests — those strings are already downloaded with the profile and were simply never opened. Honest yield: on a 68-profile sample only 2 bios carried an email and none carried a phone number, so this pass alone is thin; the website hop below is where the contacts actually are. Turn this off to get the plain profile record with all nine contact columns emitted empty.",
            "default": true
          },
          "followProfileWebsite": {
            "title": "🌐 Follow The Account's Own Linked Website",
            "type": "boolean",
            "description": "Fetch the site the account links from its own profile (`website_url`, falling back to `domain_url`) and read the contact details off it. Measured on 43 accounts that link a site: 10 yielded an email this way against 2 from bios, and 26 yielded at least one social profile link. When the account publishes an `impressum_url` that legally mandated page is fetched FIRST and the path list below is skipped. Turn this off for a bio-only run at one request per profile.",
            "default": true
          },
          "contactPagePaths": {
            "title": "🔗 Pages To Try On That Website",
            "type": "array",
            "description": "Paths tried on the linked site, in this order, until the page cap is hit. The email is rarely on the front page; it is on `/contact`. `/impressum` is here because German and Austrian sites are legally required to publish contact details there. No other page is ever fetched: there is no link discovery and no recursion, so the actor cannot wander off into someone else's site.",
            "default": [
              "/",
              "/contact",
              "/contact-us",
              "/about",
              "/impressum"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxContactPagesPerProfile": {
            "title": "🔢 Page Budget Per Website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages may be fetched on one account's site before the actor moves on. 3 covers the homepage plus two candidates, which is where nearly every published address sits. Raising it multiplies the run's request count by the number of accounts. `robots.txt` is fetched once per host and does not count against this budget.",
            "default": 3
          },
          "requireContact": {
            "title": "✅ Keep Only Accounts With A Contact",
            "type": "boolean",
            "description": "Drop every account where no email address, no phone number and no social profile was found, so the export goes straight into an outreach tool without cleaning. A website that merely answered does NOT count as a contact — that is reported separately by the `website_reachable` column. Dropped accounts are NOT charged. Off by default, because a partnerships rep usually wants the unreachable accounts in the picture too. If this screen removes every account the run still finishes, logs the removal at error level and returns an empty dataset rather than pretending it found something.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy For The Pinterest Requests",
            "type": "object",
            "description": "Applies to the PINTEREST requests only. Third-party websites are always fetched over a direct connection with a truthful bot user agent — a Pinterest block says nothing about a creator's Shopify store and paying residential rates for a stranger's homepage is wasted spend. A single proxied retry fires when an external page answers 403 or 429 and a proxy is configured here. Pinterest served this endpoint to a bare Apify datacenter IP in testing, so a proxy is optional."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}