{
  "openapi": "3.0.1",
  "info": {
    "title": "Pinterest Boards Scraper With Product Prices & Stores",
    "description": "Scrape Pinterest boards to extract pins, product prices, store names, product links, titles, descriptions, images, and engagement data. Discover products, analyze competitors, monitor pricing, research trends, and build datasets for e-commerce, affiliate marketing, and market research.",
    "version": "0.1",
    "x-build-id": "Gkjb0tXc8aeGZz8ng"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~pinterest-boards-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-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/scrapier~pinterest-boards-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-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/scrapier~pinterest-boards-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-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 shop",
            "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. Merchant catalog boards carry the most product data (measured: /etsy/artwork-for-your-home/ 25.3% of pins priced, /HGTV/hgtv-dream-home/ 0%).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "📊 Max KEPT pins per URL",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum pins returned per target (1–5000), counted AFTER the store/price screens below — so a tight filter keeps scrolling instead of returning three rows. Product rows are extra and are capped separately.",
            "default": 10
          },
          "includeProductDetails": {
            "title": "🏷️ Include merchant & product details",
            "type": "boolean",
            "description": "Read the merchant/store record and every product item Pinterest publishes on the pin, and fill `store`, `merchantName`, `products`, `productCount`, `productPriceMin` / `productPriceMax`. Zero extra requests — this data is already in the board feed payload. Turn it off to get the plain base row.",
            "default": true
          },
          "includeProductRows": {
            "title": "🧾 Emit one row per product",
            "type": "boolean",
            "description": "Also push a separate `type: \"product\"` row for each item on a Shop-the-look pin, carrying price, list price, discount %, in-stock, merchant and purchase URL. Each product row is billed like a pin row. Turn it off to keep the products only as the nested `products` array on the pin row.",
            "default": true
          },
          "maxProductsPerPin": {
            "title": "🔢 Max products per pin",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Ceiling on the product items kept per pin (also caps the nested `products` array). Measured: a Shop-the-look pin publishes 1–8 items. 0 = no ceiling.",
            "default": 20
          },
          "productPinsOnly": {
            "title": "🛍️ Only pins that carry a product record",
            "type": "boolean",
            "description": "Keep only pins that actually publish a product (a Shop-the-look / collection pin). MEASURED SELECTIVITY: 6.1% of pins across 886 board rows publish a price, 12% carry a product record at all — on an inspiration board it is 0%, so this is off by default. It is NOT a filter for 'has an outbound link' (that is 99% of pins and would filter nothing).",
            "default": false
          },
          "linkDomains": {
            "title": "🌐 Only these store domains",
            "type": "array",
            "description": "Keep only pins whose destination lands on one of these hosts — e.g. etsy.com, amazon.com, a competitor's own domain. Subdomains included, matched case-insensitively against the pin's domain, its tracked/UTM link, the store's site and canonical host, and every product item's link. Empty keeps every domain. Caveat: for affiliate and shortener links the host Pinterest published is the redirector, not the shop behind it — the raw `link` ships unchanged so you can check.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "💵 Minimum price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep only pins publishing at least one product at or above this price, in the currency the pin reports (currencies are NOT converted; one board can mix $, € and £). 0 = no floor. Setting any price band drops every pin with no published price — the log reports how many.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Maximum price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep only pins publishing at least one product at or below this price. 0 = no ceiling. Set both ends to get the slice of the category you actually trade in.",
            "default": 0
          },
          "fetchStoreDetails": {
            "title": "🏪 Open the pin to enrich the store (1 extra request per pin)",
            "type": "boolean",
            "description": "Open each pin's closeup to add `store.pageTitle`, `store.pageDescription`, `store.locale` and `store.linkStatus` — the destination page as Pinterest indexed it. Measured on a West Elm board: those four go from 0/40 to 37/40. Without it, `store.merchantName` and `store.siteUrl` still come free from the board feed. Pinterest's `canonical_url` is deliberately NOT offered: it is null on 100/100 pins from every Apify exit tested, so it would be an always-empty column.",
            "default": false
          },
          "maxStoreLookups": {
            "title": "🔢 Max store lookups per run",
            "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 closeup-only store fields null. 0 = no ceiling.",
            "default": 100
          },
          "fetchPinDetails": {
            "title": "🕒 Fetch pin engagement details (1 extra request per pin)",
            "type": "boolean",
            "description": "Base option, unchanged. Fills `date` (ISO 8601 creation time), `commentCount`, `shareCount` and the pinner's follower count. These are null without it — the board grid carries no creation date. Shares the same closeup request as the store lookup above, so enabling both costs one request per pin, not two.",
            "default": false
          },
          "maxPinDetailFetches": {
            "title": "🔢 Max pin detail requests per run",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Base option, unchanged. Ceiling on the engagement closeups above. Pins past the ceiling are still returned with those fields null. 0 = no ceiling.",
            "default": 50
          },
          "fetchLinkDetails": {
            "title": "↗️ Include the outbound link & domain",
            "type": "boolean",
            "description": "Base option, unchanged. Fills `link` / `externalLink` / `domain` with the destination each pin points at. Turn it off to return those three as null — the store and product records are unaffected, and the `linkDomains` screen still works.",
            "default": true
          },
          "includeBoardSections": {
            "title": "📁 Attribute pins to board sections",
            "type": "boolean",
            "description": "Base option, unchanged. Walks the board's sections and stamps `sectionId` / `sectionTitle` / `sectionSlug` onto each pin. Costs roughly one request per 50 section pins. Pins outside every section keep a null section.",
            "default": false
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}