{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Scraper: Products, Prices & Stock",
    "description": "Scrape every product and variant from any Shopify store: prices by country, stock, sales estimates, best-seller rank, store apps, cross-store comparison and changes-only competitor monitoring. From $0.80 per 1,000 products; compact JSON for AI agents.",
    "version": "0.1",
    "x-build-id": "cZdxqjJicqMNusN3u"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cleanpull~shopify-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cleanpull-shopify-store-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/cleanpull~shopify-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cleanpull-shopify-store-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/cleanpull~shopify-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cleanpull-shopify-store-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": {
          "stores": {
            "title": "Stores",
            "type": "array",
            "description": "Shopify stores by domain or URL, one per line, for example \"colourpop.com\". Each store's whole catalogue is read (up to Max products per store). Headless stores are found through their Shopify address.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Collection and product URLs",
            "type": "array",
            "description": "Optional. Collection pages (brand.com/collections/sale) read only that collection; product pages (brand.com/products/x) read only that product. Mix stores freely.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Domains (alias)",
            "type": "array",
            "description": "Optional. Same as Stores; accepted so inputs from other Shopify actors work unchanged.",
            "items": {
              "type": "string"
            }
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 1,
            "maximum": 25000,
            "type": "integer",
            "description": "Products read per store (Shopify serves 250 a page, up to 25,000).",
            "default": 1000
          },
          "maxProducts": {
            "title": "Max products (alias)",
            "minimum": 1,
            "maximum": 25000,
            "type": "integer",
            "description": "Optional. Same as Max products per store."
          },
          "maxItems": {
            "title": "Max results per run",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop after this many records in total (a cost cap). In monitoring mode, unchanged products checked are billed in bulk and are not capped by it."
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only products with a variant at or above this price."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only products with a variant at or below this price."
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Only products with at least one variant available.",
            "default": false
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Only products with a variant below its compare-at price.",
            "default": false
          },
          "vendors": {
            "title": "Vendors / brands",
            "type": "array",
            "description": "Optional. Only these vendors (as the store names them).",
            "items": {
              "type": "string"
            }
          },
          "productTypes": {
            "title": "Product types",
            "type": "array",
            "description": "Optional. Only these product types.",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Optional. Only products with any of these tags.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Optional. Only products whose title contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "publishedWithinDays": {
            "title": "Published within (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Optional. Only products published in the last N days (new arrivals)."
          },
          "includeStock": {
            "title": "Stock and sales",
            "type": "boolean",
            "description": "Exact stock per variant where the store publishes it, and, from the second run on, units sold since the last run, sales per day and days of stock left. One extra request per product; billed per product.",
            "default": false
          },
          "includeInventoryDetails": {
            "title": "Stock (alias)",
            "type": "boolean",
            "description": "Optional. Same as Stock and sales."
          },
          "markets": {
            "title": "Prices in other countries",
            "type": "array",
            "description": "Optional. Country codes (GB, DE, CA, AU…). For stores selling internationally with Shopify Markets, each product's prices in those countries and currencies. One extra request per product and country. A country the store does not sell to separately is skipped (not billed); UK is read as GB.",
            "items": {
              "type": "string"
            }
          },
          "bestSellerRank": {
            "title": "Best-seller rank",
            "type": "boolean",
            "description": "Rank products by the store's own best-selling order, with the change since the last run.",
            "default": false
          },
          "bestSellerDepth": {
            "title": "Best-seller depth",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many top sellers to rank.",
            "default": 100
          },
          "storeSummary": {
            "title": "Store summary",
            "type": "boolean",
            "description": "One record per store: catalogue size, price range and median, share on sale, average discount, new products in 7 and 30 days, top vendors, types and tags, theme, apps detected (reviews, email, subscriptions, payments…), social profiles and top sellers.",
            "default": false
          },
          "compareAcrossStores": {
            "title": "Compare across stores",
            "type": "boolean",
            "description": "Find the same product in several stores (by SKU, else by title) and report who sells it cheapest and the price spread.",
            "default": false
          },
          "monitorMode": {
            "title": "Changes only (monitoring)",
            "type": "boolean",
            "description": "Remember each run and return only products that changed since the last run under the same Monitor name. The first run reports every product as new. Unchanged products cost a fraction of a result.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Runs with the same name compare with each other, and share stock history for sales estimates.",
            "default": "default"
          },
          "changeTypes": {
            "title": "Changes to report",
            "type": "array",
            "description": "Which changes count.",
            "items": {
              "type": "string",
              "enum": [
                "new-product",
                "removed-product",
                "price-drop",
                "price-rise",
                "discount-started",
                "discount-ended",
                "sold-out",
                "back-in-stock",
                "variants-changed",
                "best-seller-move"
              ],
              "enumTitles": [
                "New product",
                "Product removed",
                "Price dropped",
                "Price rose",
                "Discount started (compare-at price set)",
                "Discount ended",
                "Sold out (every variant)",
                "Back in stock",
                "Variants changed (a size sold out or restocked, added or removed)",
                "Best-seller rank moved"
              ]
            },
            "default": [
              "new-product",
              "removed-product",
              "price-drop",
              "price-rise",
              "discount-started",
              "discount-ended",
              "sold-out",
              "back-in-stock",
              "variants-changed",
              "best-seller-move"
            ]
          },
          "priceChangePercent": {
            "title": "Minimum price change (%)",
            "minimum": 0,
            "type": "number",
            "description": "Ignore price moves smaller than this percentage.",
            "default": 0
          },
          "rankChangeMin": {
            "title": "Minimum rank move",
            "minimum": 1,
            "type": "integer",
            "description": "Report a best-seller move only when the rank changes by at least this much.",
            "default": 5
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "products",
              "variants"
            ],
            "type": "string",
            "description": "Products keep variants as a list; variants gives one plain row per variant for CSV and Excel.",
            "default": "products"
          },
          "includeDescriptionHtml": {
            "title": "Description HTML",
            "type": "boolean",
            "description": "Also return the product description as HTML (plain text is always included).",
            "default": false
          },
          "fields": {
            "title": "Only these fields",
            "type": "array",
            "description": "Optional. Keep only these fields, for example [\"title\", \"priceMin\", \"variants.sku\"]. Dotted paths reach into lists.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. The actor picks proxies itself (direct, then datacenter, then residential only if a store blocks the others)."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}