{
  "openapi": "3.0.1",
  "info": {
    "title": "momogo Scraper - Asian Grocery Products & Prices",
    "description": "Produkte von momogo.de als sauberes JSON: Preise, Grundpreis, EAN, Lagerbestand, Zutaten, Nährwerte, Bewertungen. Ohne Code, ohne Login.",
    "version": "1.0",
    "x-build-id": "03J3ZE8PkFvHOoaE5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~momogo-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-momogo-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~momogo-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-momogo-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~momogo-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-momogo-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, country of origin, theme and price all applied by the shop itself. Every row already carries the German description, the ingredients list, the nutrition table, the pack size, the rating and the review count - those are fetched in bulk alongside the catalogue, not charged separately.",
            "default": "search"
          },
          "searchTerms": {
            "title": "🔑 Search terms",
            "type": "array",
            "description": "Words to look for. The shop matches them against the product name, the brand and its own product keywords. Terms are combined with OR, and each one is run separately then de-duplicated. Measured on 2026-09-10: 'ramen' matched 257 products, 'mochi' 103, 'tteokbokki' 72, 'bubble tea' 62. Leave this empty to take everything in the chosen category, origin and theme.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "🗂️ Category",
            "enum": [
              "Any",
              "Snack",
              "Drink",
              "Ingredient",
              "Instant Food",
              "Home",
              "Recipe Box",
              "Set",
              "Theme Box"
            ],
            "type": "string",
            "description": "The shop's own top-level product type. Counts in brackets are what each one held on 2026-09-10, sold-out products included. Snacks is the default because it is the largest and the most representative slice of the shop; pick Any to walk all 3,202. Category combines with origin, theme and search terms - Snacks alone returned 1,114, Snacks from South Korea 418, Snacks from Japan 414.",
            "default": "Snack"
          },
          "origin": {
            "title": "🌍 Country of origin",
            "enum": [
              "Any",
              "South Korea",
              "Japan",
              "China",
              "Taiwan",
              "Thailand",
              "Vietnam",
              "Indonesia",
              "India"
            ],
            "type": "string",
            "description": "Take one cuisine's whole range. This is the shop's own country tag, not a guess from the product name, and it covers 3,050 of the 3,202 products. Counts are what each origin held on 2026-09-10. Singapore (13), Malaysia (7) and Hong Kong (1) are left out because a choice that returns almost nothing is worse than no choice - reach those by typing the country into Search terms.",
            "default": "Any"
          },
          "theme": {
            "title": "🏷️ Theme or diet",
            "enum": [
              "Any",
              "Sweets",
              "Instant Noodle",
              "Vegetarian",
              "Halal",
              "Sauce",
              "Low Calorie",
              "Jelly",
              "Crackers & Cookies",
              "Tea",
              "Vegan",
              "Chocolate",
              "Sugar Free",
              "Ramyeon",
              "Seaweed",
              "Alcohol",
              "Anime & Sanrio",
              "Gluten Free",
              "Mochi",
              "Rice",
              "Matcha",
              "Konjac",
              "Tteokbokki",
              "Bubble Tea",
              "Kimchi"
            ],
            "type": "string",
            "description": "The shop's own theme and diet tags, with the count each held on 2026-09-10. These are the tags that describe the product, not the packaging - the shop also tags things like 'Plastic bag' and 'Paper box' internally and those are deliberately not offered. Themes below 40 products are left out. The shop's landing pages under /collection/ are built from exactly these tags, so picking Bubble tea here returns the same 62 products as the shop's own Bubble Tea page.",
            "default": "Any"
          },
          "productUrls": {
            "title": "🔗 Specific products",
            "type": "array",
            "description": "Paste product page addresses copied from the shop, for example https://www.momogo.de/produkt/3-15-pm-brown-sugar-bubble-tea-3er-pack. Only those products come back, each one looked up by name in a single request. A bare product slug works too. When this is set, the search, category, origin and theme 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"
            }
          },
          "inStockOnly": {
            "title": "✅ In-stock products only",
            "type": "boolean",
            "description": "Off by default, because this shop keeps sold-out products in its catalogue and the sold-out half is real data: it is what the shop used to sell and what it is about to restock. Measured on 2026-09-10: 2,074 of 3,202 products (64.8%) were in stock. Switch this on for a feed you can put in front of a shopper. Note the shop's own in-stock filter is broken - asking it for in-stock and for sold-out returns the identical 2,080 products - so this switch reads each product's own stock flag instead,…",
            "default": false
          },
          "onSaleOnly": {
            "title": "🔥 Reduced products only",
            "type": "boolean",
            "description": "Return only products the shop currently sells below their normal price. Measured on 2026-09-10: 368 of 3,202 products (11.5%) carried a crossed-out price. Every row carries both the current price and the crossed-out one plus the discount as a percentage, so the size of each markdown is visible whether or not this is switched on.",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Order",
            "enum": [
              "BEST_SELLING",
              "CREATED_AT",
              "PRICE_ASC",
              "PRICE_DESC",
              "TITLE",
              "UPDATED_AT",
              "SHOP_ORDER"
            ],
            "type": "string",
            "description": "The order the shop serves products in, which decides which ones you get when Max products stops the run early. All seven were checked against real payloads on 2026-09-10 and all seven change the result: cheapest-first and most-expensive-first came back strictly monotonic over 20 rows, and the other five each returned a different set of products from the default. One order the shop offers is deliberately missing - 'oldest first' returns the shop's own order byte for byte, so it would be the…",
            "default": "BEST_SELLING"
          },
          "maxItems": {
            "title": "🔢 Max products",
            "minimum": 1,
            "maximum": 4000,
            "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 3,202 products on 2026-09-10 and 4000 takes all of it with room for the shop to grow. The largest category, Snacks, held 1,114; the largest origin, South Korea, held 1,472.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}