{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Scraper - Catalog, Variants, SKUs & Prices",
    "description": "Shopify product catalog scraper for any store: the full product catalog with every variant, SKU, price and compare-at price, collections, and a store-intelligence record - location, currency, catalogue size, countries shipped to, theme, socials. Prices pinned.",
    "version": "0.1",
    "x-build-id": "0pBhyyis80275dfOv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/flash_scraper~shopify-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-flash_scraper-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/flash_scraper~shopify-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-flash_scraper-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/flash_scraper~shopify-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-flash_scraper-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": {
          "storeUrls": {
            "title": "Shopify store URLs",
            "type": "array",
            "description": "One or more Shopify store URLs (e.g. https://www.allbirds.com). The scraper reads each store's public /products.json feed. Note: some large stores (allbirds.com is a common example) throttle shared cloud IPs and will return HTTP 429 no matter which proxy IP is used - if that happens, try a different store or your own proxy. Leave this as it is when you use <b>Find stores by niche</b> below - that mode searches for stores instead.",
            "default": [
              "https://www.kith.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxProducts": {
            "title": "Max products per store",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum products per store. **0 = the store's entire catalog**, which for a large shop means hundreds of requests and often triggers HTTP 429 throttling - set a limit for a fast sample, raise it or use 0 once you know the store tolerates it.",
            "default": 50
          },
          "oneRowPerVariant": {
            "title": "One row per variant",
            "type": "boolean",
            "description": "ON: emit a row for every variant (best for price/SKU monitoring). OFF: one row per product with a price range.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Shopify blocks Apify's bare run IP, so this Actor routes requests through Apify Proxy by default. The standard datacenter group is enough - verified working - and costs far less than RESIDENTIAL. Leave this on unless you have your own proxy.",
            "default": {
              "useApifyProxy": true
            }
          },
          "includeStoreProfile": {
            "title": "Include store profile record",
            "type": "boolean",
            "description": "Adds one extra row per store (marked record_type: store) with the store's name, city, province, country, base currency, myshopify domain, TOTAL catalogue size, collection count, how many countries it ships to, accepted card brands, Shop Pay availability, theme name and social handles. This is store intelligence for qualifying a merchant - product scrapers do not return it.",
            "default": true
          },
          "includeCollections": {
            "title": "Include the store's collections",
            "type": "boolean",
            "description": "Adds the store's published collections (title, handle, product count, URL) to the store profile row - the merchant's own merchandising structure.",
            "default": false
          },
          "market": {
            "title": "Market / currency to price in",
            "type": "string",
            "description": "Two-letter market code, e.g. US, GB, DE. Shopify localises prices to the requesting IP: the same variant read 1827.00 from a Moroccan exit node and 190.00 (USD) with this pinned. Since proxy exit nodes move between countries, leaving this unset can return a different currency per row.",
            "default": "US"
          },
          "nicheKeywords": {
            "title": "Find stores by niche (keywords)",
            "type": "array",
            "description": "Products or niches to find Shopify stores for, e.g. <code>yoga mats</code>, <code>cork yoga mat</code>, <code>coffee beans</code>. Each keyword is one search on Shop by Shopify (shop.app) and reads one results page (up to about 20 stores), so add several phrasings of the same niche for more stores. When this is filled in, the Actor finds stores instead of scraping the Store URLs above. Every store is checked on its own /meta.json and only confirmed Shopify stores are delivered and charged.",
            "items": {
              "type": "string"
            }
          },
          "maxStores": {
            "title": "Max stores",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Stop after this many confirmed stores (find-stores mode only).",
            "default": 50
          },
          "includeContacts": {
            "title": "Include contacts (public email)",
            "type": "boolean",
            "description": "Return the public email addresses found on each store's homepage and /pages/contact (emails, primary_email, contact_page). Off = no email columns; the store profile, theme and social handles are still returned.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}