{
  "openapi": "3.0.1",
  "info": {
    "title": "Asia Foodstore Scraper - Asian Grocery Prices & EANs",
    "description": "Exportiere den Asia-Foodstore-Katalog: Preise, Grundpreis pro Kilo, EAN-Codes, Lagerbestand, Zutaten, Nährwerte und Herkunft für 7.400 Asia-Lebensmittel.",
    "version": "1.0",
    "x-build-id": "hnKBUWh5BdY68GCo5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~asia-foodstore-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-asia-foodstore-product-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/sian.agency~asia-foodstore-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-asia-foodstore-product-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/sian.agency~asia-foodstore-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-asia-foodstore-product-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": {
          "operation": {
            "title": "🎛️ Operation",
            "enum": [
              "catalog",
              "productDetail"
            ],
            "type": "string",
            "description": "Catalogue searches the shop for your keywords, or walks the departments you name, and returns one row per product with price, price per kilo, EAN barcode, brand, article number, image and in-stock state. Product detail reads named product pages and adds ingredients, allergens, the full nutrition table, country of origin, the importer, storage, the best-before date, weight and reviews. Catalogue rows carry the product link, so a catalogue run feeds a detail run directly.",
            "default": "catalog"
          },
          "searchTerms": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "German search words, one per line. The shop is German, so German words find the most: kimchi returned 119 products and sojasauce returned 354. A word the shop does not stock returns an honest empty result rather than an error. Leave this empty and name departments instead to take whole shelves; leave both empty to walk the shop's seven departments and export everything.",
            "default": [
              "kimchi"
            ],
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "📂 Department links",
            "type": "array",
            "description": "Optional. Paste department links such as https://asia-foodstore.de/lebensmittel (4,954 products) or https://asia-foodstore.de/instantnudeln_1 (912) to take whole shelves instead of searching. Sub-shelves work too. https://asia-foodstore.de/laenderkueche is a cuisine cross-cut, not a separate shelf: 6,646 of its 6,675 products already sit in the other seven departments. Rows are de-duplicated across everything you name, so an overlap is never charged twice.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "↕️ Sort listings by",
            "enum": [
              "shopDefault",
              "priceAsc",
              "priceDesc",
              "nameAsc",
              "nameDesc"
            ],
            "type": "string",
            "description": "The order the shop returns products in, which decides what you get when the maximum cuts the run short. Every option here was checked against real listings on both search results and departments before it was offered. The shop's own dropdown lists seven more - GTIN, newest, article number, weight, release date, bestseller, ratings - and every one of them is accepted and then ignored on a search, so none is offered here. Ignored in product detail mode.",
            "default": "shopDefault"
          },
          "availability": {
            "title": "📦 Availability",
            "enum": [
              "all",
              "inStock",
              "outOfStock"
            ],
            "type": "string",
            "description": "All products by default, on purpose. 4,717 of the 7,401 products were in stock when this was built and 2,684 were not, so hiding the sold-out ones would drop more than a third of a live grocery catalogue - and a sold-out line is exactly what an assortment or availability report is looking for. Choose in-stock only when you want what can be ordered today, or sold-out only to watch what has gone missing. Products the filter removes are never charged.",
            "default": "all"
          },
          "productUrls": {
            "title": "🔗 Product page links",
            "type": "array",
            "description": "Product page links to read in detail. Required when the operation is product detail, ignored otherwise. Each link returns one row carrying the ingredient list, the allergen line and the full nutrition table with its basis. It also carries country of origin, the EU importer, storage instructions, the printed best-before date, article weight, pack content, the delivery window, the description, the gallery and the reviews.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "🔢 Maximum products",
            "minimum": 1,
            "maximum": 8000,
            "type": "integer",
            "description": "Upper bound on the products a run returns, and therefore on what it can charge. The shop's seven departments hold 7,401 products, so raise this to 7500 for a complete export and clear both the search terms and the department links. Reached, the run stops and reports the cap in the run report.",
            "default": 25
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}