{
  "openapi": "3.0.1",
  "info": {
    "title": "Shopify Store Products, Prices & Stock Tracker",
    "description": "Export products from Shopify stores, each with its variants' prices, compare-at prices, SKUs and stock, via the public products.json feed. Track price drops, restocks, sell-outs, new and removed products between runs. $1 per 1,000 products.",
    "version": "1.1",
    "x-build-id": "kDf450hYFrhAqgCck"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fairfetch~shopify-price-stock-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fairfetch-shopify-price-stock-tracker",
        "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/fairfetch~shopify-price-stock-tracker/runs": {
      "post": {
        "operationId": "runs-sync-fairfetch-shopify-price-stock-tracker",
        "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/fairfetch~shopify-price-stock-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-fairfetch-shopify-price-stock-tracker",
        "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": "Shopify stores (domains or URLs)",
            "type": "array",
            "description": "One store per line (or separated by commas). Accepted forms:\n- Domain: allbirds.com or www.allbirds.com\n- Store URL: https://www.allbirds.com/\n- Collection URL (reads only that collection): https://www.allbirds.com/collections/sale\n- Shopify address: allbirds.myshopify.com\nEnter the domain, not the store's name: an entry with spaces (\"Death Wish Coffee\") or a bare word (\"allbirds\") is reported as invalid. Entries that are not Shopify stores, unknown domains and stores with a disabled feed are listed as free error rows; the other stores still run.",
            "items": {
              "type": "string"
            }
          },
          "collections": {
            "title": "Collection handles (optional)",
            "type": "array",
            "description": "Read only these collections of every store, e.g. \"sale\" or \"new-arrivals\" (the part after /collections/ in a collection URL). Leave empty to read the whole store. A collection given in a store URL takes precedence for that store.",
            "items": {
              "type": "string"
            }
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of products read per store, newest first (collections keep their own order). With \"Output only changed rows\" this is the number of products checked per run. Removed products are only detected when the whole store is read. If a monitor has only ever run with a limit, a product it doesn't know is reported as new only if it was published after the previous run; so raising or removing the limit later doesn't report the whole catalog as new, but older products newly added to a collection aren't reported either. To monitor additions to a collection, run the monitor once without a limit. 0 = no limit.",
            "default": 0
          },
          "outputLevel": {
            "title": "Output level (no longer used)",
            "type": "string",
            "description": "Kept so inputs, tasks and schedules from builds 1.0.x still run. Every row is now one product with its variants nested in \"variants\"; this field is ignored."
          },
          "includeDescription": {
            "title": "Include product description (clean text)",
            "type": "boolean",
            "description": "Add the product description converted from HTML to plain text. Makes rows larger; no extra requests.",
            "default": false
          },
          "trackChanges": {
            "title": "Track price and stock changes",
            "type": "boolean",
            "description": "Remember every store's products in a named key-value store in your account (stored encrypted), so each later run marks products as new, price_down, price_up, back_in_stock, out_of_stock, variant_added, variant_removed or unchanged (`changes` names the variants that changed), and also returns products removed since the previous run (once). Schedule the Actor (e.g. daily) to monitor stores.",
            "default": false
          },
          "onlyChanges": {
            "title": "Output only changed rows",
            "type": "boolean",
            "description": "Return only products that changed since the previous run (new, removed, price or stock changes of any variant). Switches on change tracking. Each product checked costs $0.0001 (product-checked, once per product and run), and each changed product returned costs $0.001. The first run of a store saves a baseline and returns nothing; changes appear from the second run. If a run stops before the whole store is read (for example at your maximum charge), the next run completes the baseline without reporting those products as new.",
            "default": false
          },
          "trackingId": {
            "title": "Tracking ID",
            "pattern": "^[A-Za-z0-9_-]{1,60}$",
            "type": "string",
            "description": "Name of the tracking state. Runs with the same ID compare against each other; use different IDs for independent monitors. Letters, numbers, dashes and underscores.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Stores in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many stores are read at the same time. Each store gets at most one request at a time and at most 2 requests per second.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for a single HTTP request.",
            "default": 30
          },
          "maxRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries for network errors, HTTP 5xx and Shopify's rate limit (HTTP 429), with exponential backoff that honours Retry-After. Shopify's bot protection (HTTP 430) is retried at most once, from another proxy IP address; if it comes again, the store is reported as blocked and not charged.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "On by default (Apify residential proxy, included in the price): Shopify throttles requests from cloud and datacenter IPs heavily (HTTP 429/430). Each store gets its own proxy session. Turning it off is only advised for local runs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}