{
  "openapi": "3.0.1",
  "info": {
    "title": "Canadian Retail Price Tracker: Giant Tiger, Brick +70 Stores",
    "description": "Prices, discounts, stock and barcodes from 74 Canadian retailers (Giant Tiger, The Brick, Leon's, Ardene, ALDO, SAIL, Mejuri…) or any Shopify store, always in CAD. Full catalogs, keyword search or collections, plus a changes feed: price drops, restocks, new and removed products.",
    "version": "0.1",
    "x-build-id": "a125tyS7KSaOXXfUG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~canada-retail-price-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-canada-retail-price-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/yugenox~canada-retail-price-tracker/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-canada-retail-price-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/yugenox~canada-retail-price-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-canada-retail-price-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",
        "properties": {
          "stores": {
            "title": "🏬 Canadian retailers",
            "type": "array",
            "description": "Pick one or more of 74 Canadian retailers. Prices come back in CAD. For any other Shopify store, use \"Other Shopify stores\" below.",
            "items": {
              "type": "string",
              "enum": [
                "gianttiger",
                "indigo",
                "mastermind-toys",
                "scholars-choice",
                "the-brick",
                "leons",
                "bouclair",
                "polysleep",
                "ardene",
                "reitmans",
                "penningtons",
                "suzy-shier",
                "rw-co",
                "laura",
                "la-senza",
                "oak-and-fort",
                "knix",
                "sheertex",
                "encircled",
                "kit-and-ace",
                "frank-and-oak",
                "hatley",
                "stanfields",
                "bench",
                "peace-collective",
                "province-of-canada",
                "naked-and-famous",
                "duer",
                "aldo",
                "call-it-spring",
                "globo",
                "browns",
                "pajar",
                "kamik",
                "baffin",
                "cougar",
                "manitobah",
                "chaussures-pop",
                "vessi",
                "moose-knuckles",
                "mackage",
                "rudsak",
                "herschel",
                "mejuri",
                "reigning-champ",
                "tilley",
                "tentree",
                "sail",
                "lole",
                "ciele",
                "saxx",
                "pro-hockey-life",
                "bauer",
                "vitamart",
                "supplement-source",
                "canadian-protein",
                "natural-factors",
                "jamieson",
                "herbaland",
                "canvita",
                "greeniche",
                "saje",
                "skinfix",
                "bushbalm",
                "davidstea",
                "kicking-horse",
                "detour",
                "balzacs",
                "pilot-coffee",
                "laura-secord",
                "global-pet-foods",
                "canada-pooch",
                "peavey-mart",
                "drone-dynamics"
              ],
              "enumTitles": [
                "Giant Tiger — Discount & general merchandise",
                "Indigo — Discount & general merchandise",
                "Mastermind Toys — Discount & general merchandise",
                "Scholar's Choice — Discount & general merchandise",
                "The Brick — Furniture, home & sleep",
                "Leon's — Furniture, home & sleep",
                "Bouclair — Furniture, home & sleep",
                "Polysleep — Furniture, home & sleep",
                "Ardene — Apparel",
                "Reitmans — Apparel",
                "Penningtons / Addition Elle — Apparel",
                "Suzy Shier — Apparel",
                "RW&CO — Apparel",
                "Laura — Apparel",
                "La Senza — Apparel",
                "Oak + Fort — Apparel",
                "Knix — Apparel",
                "Sheertex — Apparel",
                "Encircled — Apparel",
                "Kit and Ace — Apparel",
                "Frank And Oak — Apparel",
                "Hatley — Apparel",
                "Stanfield's — Apparel",
                "Bench — Apparel",
                "Peace Collective — Apparel",
                "Province of Canada — Apparel",
                "Naked & Famous Denim — Apparel",
                "DUER — Apparel",
                "ALDO — Footwear",
                "Call It Spring — Footwear",
                "Globo — Footwear",
                "Browns Shoes — Footwear",
                "Pajar — Footwear",
                "Kamik — Footwear",
                "Baffin — Footwear",
                "Cougar Shoes — Footwear",
                "Manitobah — Footwear",
                "Chaussures POP — Footwear",
                "Vessi — Footwear",
                "Moose Knuckles — Outerwear, bags & jewellery",
                "Mackage — Outerwear, bags & jewellery",
                "Rudsak — Outerwear, bags & jewellery",
                "Herschel Supply — Outerwear, bags & jewellery",
                "Mejuri — Outerwear, bags & jewellery",
                "Reigning Champ — Outerwear, bags & jewellery",
                "Tilley — Outerwear, bags & jewellery",
                "tentree — Outdoor, sport & active",
                "SAIL — Outdoor, sport & active",
                "Lolë — Outdoor, sport & active",
                "Ciele Athletics — Outdoor, sport & active",
                "SAXX — Outdoor, sport & active",
                "Pro Hockey Life — Outdoor, sport & active",
                "Bauer Hockey — Outdoor, sport & active",
                "Vitamart — Health, beauty & supplements",
                "Supplement Source — Health, beauty & supplements",
                "Canadian Protein — Health, beauty & supplements",
                "Natural Factors — Health, beauty & supplements",
                "Jamieson Vitamins — Health, beauty & supplements",
                "Herbaland — Health, beauty & supplements",
                "Canvita — Health, beauty & supplements",
                "Greeniche — Health, beauty & supplements",
                "Saje Natural Wellness — Health, beauty & supplements",
                "Skinfix — Health, beauty & supplements",
                "Bushbalm — Health, beauty & supplements",
                "DAVIDsTEA — Food, coffee & tea",
                "Kicking Horse Coffee — Food, coffee & tea",
                "Detour Coffee — Food, coffee & tea",
                "Balzac's Coffee — Food, coffee & tea",
                "Pilot Coffee Roasters — Food, coffee & tea",
                "Laura Secord — Food, coffee & tea",
                "Global Pet Foods — Pets",
                "Canada Pooch — Pets",
                "Peavey Mart — Farm, hardware & tech",
                "DroneDynamics — Farm, hardware & tech"
              ]
            }
          },
          "storeCategories": {
            "title": "🗂️ Whole categories",
            "type": "array",
            "description": "Add every preset retailer in these categories (e.g. all footwear chains) — handy for market-wide price comparisons.",
            "items": {
              "type": "string",
              "enum": [
                "general",
                "home",
                "apparel",
                "footwear",
                "premium",
                "outdoor",
                "health",
                "food",
                "pets",
                "hardware"
              ],
              "enumTitles": [
                "Discount & general merchandise (4 stores)",
                "Furniture, home & sleep (4 stores)",
                "Apparel (20 stores)",
                "Footwear (11 stores)",
                "Outerwear, bags & jewellery (7 stores)",
                "Outdoor, sport & active (7 stores)",
                "Health, beauty & supplements (11 stores)",
                "Food, coffee & tea (6 stores)",
                "Pets (2 stores)",
                "Farm, hardware & tech (2 stores)"
              ]
            }
          },
          "customStoreUrls": {
            "title": "🔗 Other Shopify stores",
            "type": "array",
            "description": "Any Shopify store that does not show a bot check: a domain (shop.example.ca), a collection URL (…/collections/sale), a product URL (…/products/<handle>) or a store search URL (…/search?q=boots). A collection, product or search URL limits that store to just that page.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "📦 What to get",
            "enum": [
              "products",
              "changes"
            ],
            "type": "string",
            "description": "Products: the current listing with prices, discounts and stock. Changes: only what changed since your previous run of the same setup — new products, price drops and rises, back in stock, out of stock and removed. Schedule it (e.g. daily) for a deal-alert feed. The first changes run for a store saves a baseline.",
            "default": "products"
          },
          "searchTerms": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "Only products matching these words, searched in every selected store. Leave empty for the whole catalog.",
            "items": {
              "type": "string"
            }
          },
          "searchMatch": {
            "title": "🎯 Search matching",
            "enum": [
              "strict",
              "broad"
            ],
            "type": "string",
            "description": "Strict: every word must appear in the product title, type, brand or category tags (precise). Broad: whatever the store's own search box returns (more results, many loosely related).",
            "default": "strict"
          },
          "collectionHandles": {
            "title": "🗃️ Collections",
            "type": "array",
            "description": "Only products in these collections, e.g. \"sale\" or \"clearance\" (the part after /collections/ in the store URL). Applied to every selected store.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerStore": {
            "title": "🔢 Max products per store",
            "minimum": 0,
            "type": "integer",
            "description": "Per store (and per search term / collection). 0 = everything. In Changes mode the whole catalog (or search/collection) is always checked; this setting is ignored.",
            "default": 1000
          },
          "maxItems": {
            "title": "🔢 Max results in total",
            "minimum": 1,
            "type": "integer",
            "description": "Stop the whole run after this many results. Leave empty for no limit."
          },
          "sortBy": {
            "title": "↕️ Order",
            "enum": [
              "newest",
              "oldest",
              "best_selling",
              "price_low",
              "price_high"
            ],
            "type": "string",
            "description": "Which products you get first when a limit applies. Search results are ranked by relevance unless you pick a price order. Applies when \"Max products per store\" is 5,000 or less and no filters are set.",
            "default": "newest"
          },
          "outputLevel": {
            "title": "🧾 One row per",
            "enum": [
              "product",
              "variant"
            ],
            "type": "string",
            "description": "Product: one row per product with all sizes/colours nested. Variant: one row per SKU (size/colour), with its own price, barcode and stock.",
            "default": "product"
          },
          "onlyDiscounted": {
            "title": "Only discounted items",
            "type": "boolean",
            "description": "Keep only items whose price is below the regular (compare-at) price.",
            "default": false
          },
          "minDiscountPct": {
            "title": "Minimum discount (%)",
            "minimum": 0,
            "maximum": 99,
            "type": "integer",
            "description": "Keep only items at least this much off the regular price, e.g. 40."
          },
          "onlyInStock": {
            "title": "Only in-stock items",
            "type": "boolean",
            "description": "Skip items that cannot be bought online right now.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the store currency (CAD for Canadian stores)."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the store currency (CAD for Canadian stores)."
          },
          "changeTypes": {
            "title": "Change types to report",
            "type": "array",
            "description": "Changes mode only. Leave empty for everything except \"New sizes / colours of known products\", which you can add explicitly (it is noisy on stores that list every region as a variant, like Leon's and The Brick).",
            "items": {
              "type": "string",
              "enum": [
                "new",
                "new_variant",
                "price_drop",
                "price_up",
                "back_in_stock",
                "out_of_stock",
                "removed"
              ],
              "enumTitles": [
                "New products",
                "New sizes / colours of known products",
                "Price drops",
                "Price increases",
                "Back in stock",
                "Out of stock",
                "Removed from the store"
              ]
            }
          },
          "stateKey": {
            "title": "Tracker name",
            "type": "string",
            "description": "Optional. Runs with the same name, stores and search terms / collections share one history. Use different names to keep separate trackers (e.g. \"daily\" and \"weekly\")."
          },
          "emitBaseline": {
            "title": "Output everything on the first run",
            "type": "boolean",
            "description": "On the first Changes run for a store, output every product as \"new\" instead of silently saving the baseline.",
            "default": false
          },
          "country": {
            "title": "Price country",
            "type": "string",
            "description": "Prices are requested for this country (2-letter code). CA returns CAD prices even from stores that also sell in the US.",
            "default": "CA"
          },
          "includeDescription": {
            "title": "Include product descriptions",
            "type": "boolean",
            "description": "Turn off for smaller, faster datasets.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 64,
            "type": "integer",
            "description": "Requests in flight across the whole run.",
            "default": 16
          },
          "escalateBlockedStores": {
            "title": "Retry refused stores on residential proxies",
            "type": "boolean",
            "description": "If a store keeps refusing or rate-limiting datacenter IPs, retry it on Canadian residential proxies (only when your Apify account has them). Stores that show a bot check (a Cloudflare \"Just a moment\" page) are not supported and are reported as blocked.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Apify datacenter proxy is the default, comes with every Apify plan and works for almost every store; each request uses a new IP. If the proxy you pick is not available on your account, the run uses datacenter instead and says so.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}