{
  "openapi": "3.0.1",
  "info": {
    "title": "Spicelands Scraper - Indian Grocery Products & Prices",
    "description": "Produkte von spicelands.de als sauberes JSON: Preise, Grundpreis, Marken, Herkunftsland, Kategorien und Lagerbestand. Ohne Code, ohne Login.",
    "version": "1.0",
    "x-build-id": "IHV4GNiRHA8AcmkVR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~spicelands-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-spicelands-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~spicelands-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-spicelands-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~spicelands-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-spicelands-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": "🎯 What do you want to scrape?",
            "enum": [
              "search"
            ],
            "type": "string",
            "description": "One operation. Catalogue Search walks the shop and returns many products per call, with search terms, category, brand, sale and stock all applied by the shop itself rather than filtered afterwards.",
            "default": "search"
          },
          "searchTerms": {
            "title": "🔑 Search terms",
            "type": "array",
            "description": "Words to look for. The shop matches them against the product name, the short description and the article number, so 'masala' catches 'Garam Masala' and 'MDH Chana Masala' alike. Terms are combined with OR. Measured on 2026-09-10: 'masala' matched 107 products, 'curry' 44, 'basmati' 38, 'paneer' 13. The shop does not search the long ingredients text, only the name, the short description and the article number. Leave this empty to take everything in the chosen category.",
            "default": [
              "masala"
            ],
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "🗂️ Category",
            "enum": [
              "Any",
              "namkeens",
              "fertigmischungen",
              "snacks-und-biscuits",
              "feinkost-antipasti",
              "gewuerze",
              "nudeln",
              "eigenmarke",
              "frische-kuehlung",
              "bestseller",
              "kaffee-tee",
              "fertiggerichte",
              "saucen",
              "reis",
              "health-personal-care",
              "huelsenfruechte",
              "mehl",
              "dessert-mix",
              "neue-produkte",
              "nusse-trockenfruchte",
              "getraenke",
              "papadam-soya-dried-chilli",
              "afrikanische_lebensmittel",
              "mamra-pawa-vermicelli",
              "south_indian_rice",
              "oel-essig-fette",
              "konserven",
              "pooja-temple",
              "angebote",
              "mhd-angebote"
            ],
            "type": "string",
            "description": "Take one of the shop's own categories instead of the whole catalogue. The counts in brackets are what each one held in stock on 2026-09-10. A parent category includes its sub-categories, so Gewürze returns 108 products rather than the 38 filed directly under it. Categories under 15 products are left out, and so are the two that had nothing in stock at all (Tiefkühl, Chapatti & Naan): a choice that returns no rows is worse than no choice. Search terms and brand still apply on top.",
            "default": "Any"
          },
          "brand": {
            "title": "🏭 Brand",
            "enum": [
              "Any",
              "spicelands",
              "trs",
              "haldirams",
              "mtr",
              "ashoka",
              "mdh",
              "bikano",
              "aachi",
              "shan",
              "ajmi",
              "pataks",
              "annam",
              "uttam",
              "cock",
              "mama",
              "priya",
              "periyar",
              "britannia",
              "telugu-foods",
              "balaji",
              "heera",
              "nong-shim"
            ],
            "type": "string",
            "description": "Take one brand's whole range. The shop carries 238 brands; the 22 largest are listed here with the number of articles each had in stock on 2026-09-10. Every other brand is reachable by typing its name into Search terms instead. Brand combines with category and search terms — MDH alone returned 29 products, MDH inside Gewürze returned 1, MDH plus the term 'masala' returned 24.",
            "default": "Any"
          },
          "productUrls": {
            "title": "🔗 Specific products",
            "type": "array",
            "description": "Paste product page addresses copied from the shop, for example https://spicelands.de/produkt/periyar-dry-tapioca-908g/. Only those products come back. Up to 40 addresses are looked up in a single request, so watching 40 prices daily costs one request a day. A bare product slug works too. When this is set, the search, category and brand fields are ignored. An address the shop no longer publishes comes back as 'no longer in the shop', not as an error.",
            "items": {
              "type": "string"
            }
          },
          "includeOutOfStock": {
            "title": "📦 Include sold-out articles",
            "type": "boolean",
            "description": "Off by default, and off is what you want for pricing, sourcing or a product feed. The shop hides sold-out articles from its own catalogue, so the default already gives you the sellable assortment: 1,514 articles in stock on 2026-09-10 out of 2,610 in total. Switch this on to get the other 1,096 as well. That is useful for tracking what the shop used to carry and for spotting restocks, though those rows cannot be bought today.",
            "default": false
          },
          "onSaleOnly": {
            "title": "🔥 Reduced articles only",
            "type": "boolean",
            "description": "Return only articles the shop currently sells below their normal price. Measured on 2026-09-10: 48 of the 1,514 in-stock articles were reduced, and none of the sold-out ones were. The row carries both the current price and the crossed-out one, so you can see the size of every markdown. This combines with category, brand and search terms.",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Order",
            "enum": [
              "date",
              "price",
              "popularity",
              "title",
              "menu_order"
            ],
            "type": "string",
            "description": "The order the shop serves products in, which decides which ones you get when Max products stops the run early. Four orders were checked against real payloads and all four behave. Two the shop offers are deliberately missing: sorting by rating does nothing, because every article in the shop has no rating at all, and 'most expensive first' came back genuinely unsorted when it was tested, so offering it would quietly give you the wrong products.",
            "default": "date"
          },
          "maxItems": {
            "title": "🔢 Max products",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "Stop after this many products. The run ends as soon as the number is reached, so this is also your spending ceiling. For scale: the whole shop was 1,514 in-stock articles on 2026-09-10 and 2,610 including sold-out ones, so 3000 takes everything even as the shop grows. The largest category, Namkeens, held 198.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}