{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Product Scraper — Variants & Prices",
    "description": "Extract Shopify products, variants, prices, inventory signals, images, descriptions, and collections into structured ecommerce data.",
    "version": "1.1",
    "x-build-id": "lKoQfG2FawDGfDjlb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/muhammadafzal~shopify-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-muhammadafzal-shopify-product-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/muhammadafzal~shopify-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-muhammadafzal-shopify-product-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/muhammadafzal~shopify-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-muhammadafzal-shopify-product-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "url",
              "discovery"
            ],
            "type": "string",
            "description": "Choose URL mode when the user provides Shopify store URLs, such as https://www.allbirds.com. Choose discovery mode when the user asks to find Shopify stores by category first. Default is url. Do not use discovery mode for scraping one known store.",
            "default": "url"
          },
          "storeUrls": {
            "title": "Shopify Store URLs",
            "type": "array",
            "description": "Use this when the user provides one or more Shopify storefronts. Accepts store homepages such as https://www.allbirds.com; product paths are normalized to the store origin. Default scrapes Allbirds so health checks produce output. Not used in discovery mode.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "Store URL",
                  "description": "A Shopify store homepage or product URL, for example https://www.allbirds.com. The actor normalizes product paths to the store origin before scraping."
                }
              }
            },
            "default": [
              {
                "url": "https://www.allbirds.com"
              }
            ]
          },
          "category": {
            "title": "Discovery Category",
            "enum": [
              "",
              "fashion",
              "fashion/shoes",
              "fashion/jewellery",
              "fashion/bags",
              "fashion/lingerie",
              "fashion/outerwear",
              "fashion/swimwear",
              "fashion/activewear",
              "fashion/kids",
              "beauty",
              "skincare",
              "skincare/serum",
              "skincare/mask",
              "skincare/cleanser",
              "skincare/sunscreen",
              "skincare/acne",
              "skincare/toner",
              "skincare/exfoliant",
              "haircare",
              "haircare/shampoo",
              "haircare/conditioner",
              "haircare/styling",
              "haircare/tools",
              "food",
              "food/snack",
              "food/candy",
              "food/bakery",
              "food/meat",
              "food/seafood",
              "food/vegan",
              "food/organic",
              "food/glutenfree",
              "food/coffee",
              "food/tea",
              "food/alcohol",
              "electronics",
              "electronics/phone",
              "electronics/computer",
              "electronics/camera",
              "electronics/audio",
              "electronics/wearable",
              "home",
              "home/furniture",
              "home/lighting",
              "home/decor",
              "home/storage",
              "kitchen",
              "kitchen/appliance",
              "kitchen/cookware",
              "kitchen/utensil",
              "kitchen/storage",
              "kitchen/tableware",
              "kitchen/drinkware",
              "sports",
              "sports/equipment",
              "sports/clothing",
              "pets",
              "pets/food",
              "pets/accessory",
              "pets/health",
              "baby",
              "baby/clothing",
              "baby/gear",
              "baby/feeding",
              "baby/toys",
              "bedding",
              "bathroom",
              "bath-body",
              "dental",
              "eyewear",
              "watches",
              "bags",
              "accessories",
              "gifts",
              "flowers",
              "party",
              "books",
              "music",
              "art",
              "crafts",
              "outdoors",
              "automotive",
              "tools",
              "office",
              "safety",
              "cleaning",
              "energy",
              "alcohol"
            ],
            "type": "string",
            "description": "Use this only in discovery mode to filter Shopify stores by niche. Examples include fashion, skincare, food/coffee, electronics, and pets. Leave empty to discover stores across all categories. This is not a product category filter inside one store.",
            "default": ""
          },
          "maxStores": {
            "title": "Max Stores to Discover",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of stores to collect from the discovery directory before scraping products. Use a small number for tests, such as 10. Default is 100 and maximum is 5000. Only used in discovery mode.",
            "default": 100
          },
          "maxPages": {
            "title": "Max Discovery Pages",
            "minimum": 1,
            "maximum": 220,
            "type": "integer",
            "description": "Maximum number of discovery directory pages to inspect. Each page may contain many stores depending on the category. Default is 10 and maximum is 220. Only used in discovery mode, not for Shopify product pagination.",
            "default": 10
          },
          "maxProducts": {
            "title": "Max Products per Store",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of products to extract from each Shopify store. Use 10 for quick tests and higher values for full catalog research. Default is 100 and maximum is 10000. This limit applies per store, not across all stores combined.",
            "default": 100
          },
          "includeReviews": {
            "title": "Include Reviews and Sales Estimates",
            "type": "boolean",
            "description": "When enabled, the actor fetches each product page and reads JSON-LD aggregate ratings where available. This adds rating, review_count, review_source, and estimated_monthly_sales fields. Default is true. Disable this for faster catalog-only runs.",
            "default": true
          },
          "reviewConversionRate": {
            "title": "Review Conversion Rate",
            "minimum": 0.001,
            "maximum": 1,
            "type": "number",
            "description": "Estimated share of buyers who leave reviews, used to convert review counts into conservative monthly sales estimates. Example: 0.02 means 2 percent of buyers review. Default is 0.02. This is an estimate, not verified revenue data.",
            "default": 0.02
          },
          "requestDelayMs": {
            "title": "Request Delay Milliseconds",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Delay between successful HTTP requests. Use 0 for fastest runs or 500-2000 for gentler scraping on larger catalogs. Default is 500 and maximum is 10000. This is not a timeout setting.",
            "default": 500
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of retry attempts for temporary HTTP, proxy, or network failures. Default is 3 and maximum is 10. A 404 product catalog still produces no products rather than retrying forever. This does not bypass private stores or password walls.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy Settings",
            "type": "object",
            "description": "Apify proxy settings for large catalogs or protected storefronts. The default uses Apify Proxy for better reliability. Use custom proxy URLs only when you need a dedicated premium proxy. This is optional for small public Shopify stores.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}