{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Products Scraper — New, Removed & Price Changes",
    "description": "Scrape any Shopify store's full product catalog and get only what changed: new products, removed products, price moves, stock flips, variant adds and drops. Each scheduled run returns the delta against the last. Reads the store's public catalog feeds; sitemap fallback if products.json is off.",
    "version": "0.0",
    "x-build-id": "EwXskbUbPC8SuQbMF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kaz_kakyo~shopify-catalog/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kaz_kakyo-shopify-catalog",
        "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/kaz_kakyo~shopify-catalog/runs": {
      "post": {
        "operationId": "runs-sync-kaz_kakyo-shopify-catalog",
        "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/kaz_kakyo~shopify-catalog/run-sync": {
      "post": {
        "operationId": "run-sync-kaz_kakyo-shopify-catalog",
        "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": "Shopify store domains",
            "type": "array",
            "description": "Store domains to monitor, e.g. gymshark.com. One row per store; up to 50 per run. No https://, no path.",
            "default": [
              "deathwishcoffee.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Names the saved snapshot this run compares against. Keep it the same across scheduled runs to keep getting deltas; change it to start a fresh baseline. Separate IDs never see each other's snapshots.",
            "default": "default"
          },
          "maxProductObservations": {
            "title": "Max product observations to charge (spend cap)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard ceiling on billable product observations for this run, at $1 per 1,000. A store is skipped rather than started once the ceiling is used up, so a big catalog can never surprise you.",
            "default": 25000
          },
          "maxChangeEvents": {
            "title": "Max changes to charge (spend cap)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard ceiling on billable change rows for this run, at $5 per 1,000. Changes found beyond the ceiling are still delivered, just not charged.",
            "default": 2000
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 100,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop scanning a store past this many products. A store that overruns it is reported as an incomplete scan — no changes, no charge, snapshot untouched.",
            "default": 25000
          },
          "storeConcurrency": {
            "title": "Stores scanned at once",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many stores to scan in parallel. Lower it if a store starts rate-limiting you.",
            "default": 3
          },
          "changeTypes": {
            "title": "Change types to report",
            "type": "array",
            "description": "Only report these kinds of change. Leave empty for all of them. Anything filtered out is never charged, and the snapshot still moves forward so you do not get it again later.",
            "items": {
              "type": "string",
              "enum": [
                "new",
                "removed",
                "price_change",
                "availability_change",
                "variant_added",
                "variant_removed"
              ],
              "enumTitles": [
                "New product",
                "Product removed",
                "Price change",
                "In/out of stock",
                "Variant added",
                "Variant removed"
              ]
            },
            "default": []
          },
          "emitBaselineRow": {
            "title": "Emit a baseline row on the first run",
            "type": "boolean",
            "description": "On the first run for a store there is nothing to compare against. Leave this on to get one free row confirming the snapshot was stored.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}