{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Grocery Prices: Tesco, Sainsbury's, Asda, Aldi",
    "description": "Shelf prices as published online for Tesco, Sainsbury's, Asda and Aldi in one schema, with EAN barcodes where published, single-item Tesco Clubcard and Sainsbury's Nectar prices where shown, and promotions. Independent; not affiliated with the retailers named.",
    "version": "0.2",
    "x-build-id": "Kw1sGztvdwb0e9zip"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yappman~uk-supermarket-price-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yappman-uk-supermarket-price-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/yappman~uk-supermarket-price-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yappman-uk-supermarket-price-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/yappman~uk-supermarket-price-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yappman-uk-supermarket-price-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",
        "properties": {
          "retailers": {
            "title": "Retailers",
            "type": "array",
            "description": "The shops to run (ids: aldi, sainsburys, asda, tesco, morrisons). Default is Aldi and Sainsbury's only; set this explicitly to include Tesco, Asda or Morrisons. Search and catalogue modes only: in category and product mode this is ignored, because the shop comes from each URL. Example: [\"tesco\", \"aldi\"] with queries [\"semi skimmed milk\"] prices that product at Tesco and Aldi.",
            "items": {
              "type": "string",
              "enum": [
                "aldi",
                "sainsburys",
                "asda",
                "tesco",
                "morrisons"
              ],
              "enumTitles": [
                "Aldi",
                "Sainsbury's",
                "Asda",
                "Tesco",
                "Morrisons"
              ]
            },
            "default": [
              "aldi",
              "sainsburys"
            ]
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "category",
              "product",
              "catalogue"
            ],
            "type": "string",
            "description": "What the run does. 'search' looks up each query in the selected shops; 'category' and 'product' read the URLs you give; 'catalogue' reads the retailer's category tree and product pages, for Morrisons only (other shops are skipped), takes about 3 to 4 hours and returned about 26,000 rows in the 29 Sep 2026 check run, so set the run timeout to 4 hours and keep Max items low. Example: queries [\"milk\"].",
            "default": "search"
          },
          "queries": {
            "title": "Search queries",
            "maxItems": 50,
            "type": "array",
            "description": "Words to search for, such as milk. Search mode only: each query runs in every selected shop. Up to 50 queries.",
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "default": [
              "milk"
            ]
          },
          "categoryUrls": {
            "title": "Category URLs",
            "maxItems": 250,
            "type": "array",
            "description": "Category page links from tesco.com, sainsburys.co.uk, asda.com, aldi.co.uk or groceries.morrisons.com. Leave empty unless you were given a URL; never make one up. Category mode only: the shop comes from each URL. Up to 250 URLs.",
            "items": {
              "type": "string",
              "maxLength": 2048
            },
            "default": []
          },
          "productUrls": {
            "title": "Product URLs",
            "maxItems": 500,
            "type": "array",
            "description": "Product page links from tesco.com, sainsburys.co.uk, asda.com, aldi.co.uk or groceries.morrisons.com. Leave empty unless you were given a URL; never make one up. Product mode only: the shop comes from each URL. Up to 500 URLs.",
            "items": {
              "type": "string",
              "maxLength": 2048
            },
            "default": []
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "The most rows the run will save, and every row saved is charged, so use a small number first; 0 means no limit, which in catalogue mode is about 26,000 rows (29 Sep 2026 check run). Applies to every mode. The limit is split equally between the shops that run, so 100 across five shops gives up to 20 each.",
            "default": 100
          },
          "asdaStoreId": {
            "title": "Asda store id",
            "pattern": "^[0-9]{1,6}$",
            "type": "string",
            "description": "Asda only: the store whose stock the inStock field reports. Leave empty for store 4565, the store asda.com uses before a postcode is entered. We have not checked whether prices change with the store, and products not sold at the store you choose are left out. Digits only."
          },
          "outputDataset": {
            "title": "Also append rows to a named dataset",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{0,62}$",
            "type": "string",
            "description": "Optional. Name of a dataset in your account that also receives every row the run saves, created on first use, so repeated runs add up in one place. Rows are charged once, and copying is best effort: it never fails the run. Letters, digits and hyphens only. Example: \"my-uk-grocery-prices\", then read that dataset's items after each run."
          },
          "datasetName": {
            "title": "Name this run's dataset",
            "pattern": "^[a-zA-Z0-9{}-]{1,63}$",
            "type": "string",
            "description": "Optional. Names this run's own dataset once the run succeeds, so it is kept until you delete it. Placeholders: {isoWeek} gives 2026-W40, {date} gives 2026-10-08, and {retailer} gives the shop, or multi when several ran. Letters, digits and hyphens only; skipped with a warning if the name is taken, nothing was saved or the run stopped early."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}