{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Price & Stock Monitor – Products Scraper",
    "description": "Shopify price & stock monitor and products scraper for any store's public feed. Input: store domains, collection or product URLs. Output: products, variants, prices, stock, images, or only new, repriced, out-of-stock ones. $0.83/1k items.",
    "version": "0.1",
    "x-build-id": "fg8CXYiMy0KFpoxIs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glidepath~shopify-products-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glidepath-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/glidepath~shopify-products-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glidepath-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/glidepath~shopify-products-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glidepath-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",
        "required": [
          "stores"
        ],
        "properties": {
          "stores": {
            "title": "Store domains or collection URLs",
            "type": "array",
            "description": "One entry per store. Accepts a bare domain (allbirds.com), a full store URL (https://allbirds.com), or a collection URL/path to scrape only that collection (https://allbirds.com/collections/mens-shoes or allbirds.com/collections/mens-shoes). Reads the store's own public products.json feed (no login). Product URLs (…/products/<handle>) return just that product.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (any of)",
            "type": "array",
            "description": "Keep only products whose title, vendor, product type or tags contain one of these (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "onlyAvailable": {
            "title": "Only in-stock products",
            "type": "boolean",
            "description": "Keep only products with at least one purchasable (available) variant.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "type": "number",
            "description": "Keep only products with a variant priced at or above this amount (store's own currency)."
          },
          "maxPrice": {
            "title": "Maximum price",
            "type": "number",
            "description": "Keep only products with a variant priced at or below this amount (store's own currency)."
          },
          "outputMode": {
            "title": "Output: one row per",
            "enum": [
              "products",
              "variants"
            ],
            "type": "string",
            "description": "'Variant' gives one flat row per variant (easier in spreadsheets). You are still charged once per product.",
            "default": "products"
          },
          "onlyChangesSinceLastRun": {
            "title": "Only changes since the last run (price & stock monitoring)",
            "type": "boolean",
            "description": "Remember each store's products (in a key-value store in your own account) and return only products that are new, removed, changed price or changed stock since the previous run. The first run is the baseline and returns every product as 'new'. Schedule it daily to monitor competitors.",
            "default": false
          },
          "stateStoreName": {
            "title": "Memory store name (for monitoring)",
            "type": "string",
            "description": "Named key-value store that holds the last snapshot. Use a different name per watchlist (letters, digits and '-').",
            "default": "glidepath-shopify-state"
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many products per store. Leave empty for all products in the store or collection."
          },
          "maxProducts": {
            "title": "Max products in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop the whole run after this many products. Leave empty for no limit (your maximum cost per run still applies)."
          },
          "includeDescription": {
            "title": "Include description (plain text)",
            "type": "boolean",
            "description": "Adds descriptionText. Turn off for smaller, faster output.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description (HTML)",
            "type": "boolean",
            "description": "Adds descriptionHtml with the original formatting.",
            "default": false
          },
          "includeImages": {
            "title": "Include images",
            "type": "boolean",
            "description": "Adds an images array (URL, width, height) for each product.",
            "default": true
          },
          "maxImagesPerProduct": {
            "title": "Max images per product",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Caps how many images are included per product (they add little value and a lot of size).",
            "default": 5
          },
          "redactContactInfo": {
            "title": "Remove e-mail addresses and phone numbers from descriptions",
            "type": "boolean",
            "description": "Recommended. A merchant's description occasionally contains a support e-mail or phone number; this removes them.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}