{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Price Tracker & Stock Monitor - New Products",
    "description": "Shopify price tracker and stock monitor. Each run compares the store's public catalog with the last run and returns only what changed: new products, price drops and increases, sell-outs, restocks, removals. Pay per change. No login or browser. No stock quantities. Not affiliated with Shopify.",
    "version": "1.0",
    "x-build-id": "S8U15wth5kLewQFEU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mmdincer~shopify-store-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mmdincer-shopify-store-monitor",
        "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/mmdincer~shopify-store-monitor/runs": {
      "post": {
        "operationId": "runs-sync-mmdincer-shopify-store-monitor",
        "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/mmdincer~shopify-store-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-mmdincer-shopify-store-monitor",
        "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": "Stores",
            "minItems": 1,
            "maxItems": 200,
            "type": "array",
            "description": "Shopify stores to watch, one per line: a domain such as <code>allbirds.com</code> or a store URL. A collection URL such as <code>https://allbirds.com/collections/mens</code> watches only that collection. The store must publish its catalog at <code>/products.json</code> (most Shopify stores do). Up to 200 stores per run.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "changes",
              "snapshot"
            ],
            "type": "string",
            "description": "<b>Changes</b> compares each store with the previous run and returns only what changed (the first run saves a baseline). <b>Snapshot</b> returns every product of the store as it is now, without comparing or saving anything.",
            "default": "changes"
          },
          "changeTypes": {
            "title": "Change types to report",
            "type": "array",
            "description": "Which changes become rows (changes mode only). Leave all selected to get everything. Changes you leave out are not reported and are not charged, and they are not reported later either.",
            "items": {
              "type": "string",
              "enum": [
                "NEW_PRODUCT",
                "PRICE_DROP",
                "PRICE_INCREASE",
                "OUT_OF_STOCK",
                "BACK_IN_STOCK",
                "REMOVED_PRODUCT"
              ],
              "enumTitles": [
                "New product",
                "Price drop",
                "Price increase",
                "Sold out (out of stock)",
                "Back in stock",
                "Removed product"
              ]
            },
            "default": [
              "NEW_PRODUCT",
              "PRICE_DROP",
              "PRICE_INCREASE",
              "OUT_OF_STOCK",
              "BACK_IN_STOCK",
              "REMOVED_PRODUCT"
            ]
          },
          "minPriceChangePercent": {
            "title": "Minimum price change (%)",
            "minimum": 0,
            "maximum": 1000,
            "type": "number",
            "description": "Ignore price changes smaller than this percentage, for example <code>5</code> to report only moves of 5% or more. <code>0</code> reports every price change.",
            "default": 0
          },
          "includeKeywords": {
            "title": "Only watch products matching",
            "type": "array",
            "description": "Optional. Watch only products whose title, brand, product type or tags contain at least one of these words (not case sensitive), for example <code>sneaker</code>. Leave empty to watch the whole catalog. Changing this list saves a new baseline on the next run.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Ignore products matching",
            "type": "array",
            "description": "Optional. Skip products whose title, brand, product type or tags contain any of these words, for example <code>gift card</code>. Changing this list saves a new baseline on the next run.",
            "items": {
              "type": "string"
            }
          },
          "monitorName": {
            "title": "Watchlist name",
            "type": "string",
            "description": "Name of the saved baseline (changes mode). Runs with the same name compare against each other. Use different names to keep separate watchlists on the same stores, for example <code>competitors</code> and <code>suppliers</code>.",
            "default": "default"
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Upper limit of products read from one store. Stores with more products are cut off, and removed-product detection is switched off for that run because products beyond the limit would look removed.",
            "default": 5000
          },
          "includeVariants": {
            "title": "Include variants (snapshot mode)",
            "type": "boolean",
            "description": "In snapshot mode, add the list of variants (SKU, price, compare-at price, availability) to every product row. Change rows always contain the variants that changed.",
            "default": false
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Read each store's <code>robots.txt</code> first and skip stores that disallow the catalog path. Recommended. Stores that are skipped are not charged.",
            "default": true
          },
          "requestsPerSecond": {
            "title": "Requests per second (per store)",
            "minimum": 0.2,
            "maximum": 5,
            "type": "number",
            "description": "How fast pages are requested from one store. Each page holds up to 250 products. Lower it if a store starts answering with HTTP 429. The Actor also slows down by itself when a store pushes back.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Direct requests work for almost all stores. Turn on Apify Proxy only if a store refuses requests from the Apify platform. Proxy traffic is billed by Apify separately.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}