{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Data Scraper — Products API, Prices, Stock | $0.90/1k",
    "description": "Scrape any Shopify store by domain: products, variants, prices, compare-at prices, stock, SKUs, images, vendor, type, tags, dates and store currency. Many stores per run, collections, product URLs, filters, product or variant rows. No API key.",
    "version": "0.1",
    "x-build-id": "X77FpYktpnXaUTbqE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glasswing~shopify-products-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glasswing-shopify-products-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/glasswing~shopify-products-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glasswing-shopify-products-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/glasswing~shopify-products-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glasswing-shopify-products-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": {
          "startUrls": {
            "title": "Store URLs or domains",
            "uniqueItems": true,
            "type": "array",
            "description": "Shopify stores to scan, one per line: a bare domain (`colourpop.com`), a store URL (`https://www.allbirds.com`), a collection URL (`https://colourpop.com/collections/best-sellers`) or a product URL. A domain or store URL reads the whole public catalog. A site that is not a Shopify store gets one free `not_found` row explaining why.",
            "default": [
              "https://colourpop.com",
              "https://allbirds.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Product URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Individual product pages to read (`https://store.com/products/<handle>`), for example to track the price and stock of specific items. These rows also carry per-variant stock counts and barcodes when the store publishes them. When you give only product URLs, the example stores above are skipped.",
            "items": {
              "type": "string"
            }
          },
          "collections": {
            "title": "Collection handles",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Read only these collections of every store in Store URLs, e.g. `best-sellers`, `sale`, `new-arrivals` (the part after `/collections/` in the store's URL). A collection that does not exist gives one free `not_found` row.",
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "One row per",
            "enum": [
              "product",
              "variant",
              "store"
            ],
            "type": "string",
            "description": "`product` (default): one row per product with its variants in a `variants` array and min/max prices. `variant`: one row per variant (size, colour...) with its own price, compare-at price, SKU and availability - handy for price and stock tracking in a spreadsheet. `store`: one summary row per store and no product rows - product and collection counts, price range and median, currencies, top vendors and product types, theme, apps seen on the home page, the store's social links and the last product update. Use it to research or qualify many stores quickly.",
            "default": "product"
          },
          "includeStoreSummary": {
            "title": "Add a store summary row",
            "type": "boolean",
            "description": "Also write one store-summary row per store (source `store_summary`) next to the product rows. Always on when One row per is Store summary. Summary rows count toward Maximum results; a slot is kept for each store's summary.",
            "default": false
          },
          "storeSummarySampleSize": {
            "title": "Products sampled per store summary",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many products per store (newest updates first) the summary reads for its price, vendor, product type and tag statistics. Product and collection counts always cover the whole store. 250 is one feed page; up to 1000.",
            "default": 250
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many rows in total. Each row with status `ok` is one billable result. A large store has thousands of products; raise this to read whole catalogs.",
            "default": 20
          },
          "maxItemsPerStore": {
            "title": "Maximum results per store",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop reading a store after this many rows, so one huge store cannot use up the whole run. Product URLs you list are always returned. Leave empty for no per-store limit."
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Keep only products with at least one available variant (in variant mode: only available variants).",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep products with at least one variant priced at or above this amount, in the store's own currency (in variant mode: variants at or above it). Whole units, e.g. 20."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep products with at least one variant priced at or below this amount, in the store's own currency (in variant mode: variants at or below it). Whole units, e.g. 100."
          },
          "productTypes": {
            "title": "Product types",
            "type": "array",
            "description": "Keep only these product types, as the store names them (case-insensitive exact match), e.g. `Shoes`, `Lipstick`.",
            "items": {
              "type": "string"
            }
          },
          "vendors": {
            "title": "Vendors / brands",
            "type": "array",
            "description": "Keep only products from these vendors (case-insensitive exact match), e.g. `Nike`, `Apple`. Useful for multi-brand stores.",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Keep products that carry at least one of these tags (case-insensitive exact match), e.g. `sale`, `new-arrival`.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep products whose title contains at least one of these words or phrases (case-insensitive), e.g. `hoodie`.",
            "items": {
              "type": "string"
            }
          },
          "updatedSince": {
            "title": "Updated since",
            "type": "string",
            "description": "Keep products the store changed on or after this date: `YYYY-MM-DD`, or relative such as `7 days` or `24 hours`. The store's own product feed is newest-first, so the scan stops early once it reaches older products."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The Actor reads Shopify's public JSON directly and works from Apify's datacenter IPs. Enable Apify Proxy (datacenter group is the default) only if a store rate-limits you; residential proxies are not needed.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}