{
  "openapi": "3.0.1",
  "info": {
    "title": "Digitec Galaxus Scraper - Products, Prices & Specs (CH/DE)",
    "description": "Scrape Digitec Galaxus, Switzerland's largest online retailer: products with local prices, discounts, ratings, stock state and full specification tables across the galaxus.ch, galaxus.de and digitec.ch storefronts. Search keywords or paste links, and monitor price changes with recurring updates.",
    "version": "0.1",
    "x-build-id": "98ExmHfGPY1vu9vvV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~galaxus-marketplace-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-galaxus-marketplace-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/abotapi~galaxus-marketplace-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-galaxus-marketplace-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/abotapi~galaxus-marketplace-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-galaxus-marketplace-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "urls"
            ],
            "type": "string",
            "description": "Where to collect from: a keyword search on one storefront, or your own product and category links.",
            "default": "search"
          },
          "market": {
            "title": "Storefront",
            "enum": [
              "galaxus-ch",
              "galaxus-de",
              "digitec-ch"
            ],
            "type": "string",
            "description": "Which storefront to search. Each storefront is its own catalogue with its own currency (Swiss Francs on the Swiss shops, euros on the German shop).",
            "default": "galaxus-ch"
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Only read when mode = keyword search. One entry per search; each search is walked forward, and all searches share the record cap.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Ordering",
            "enum": [
              "relevance",
              "newest",
              "lowest-price",
              "highest-price",
              "rating",
              "availability"
            ],
            "type": "string",
            "description": "Order in which products are returned for each source. Ranking pages (toplist links) keep their own ranking order.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price (optional)",
            "type": "integer",
            "description": "Only return products at or above this price, in the selected storefront's currency. Applied by the store in both modes, except ranking pages (toplist links), whose price range is applied to the ranked rows; price ranges on very large categories are server-side counts, so a wide range narrows strongly."
          },
          "maxPrice": {
            "title": "Max price (optional)",
            "type": "integer",
            "description": "Only return products at or below this price, in the selected storefront's currency. Applied by the store in both modes, except ranking pages (toplist links), whose price range is applied to the ranked rows."
          },
          "includeOutOfStock": {
            "title": "Include out-of-stock products",
            "type": "boolean",
            "description": "Off drops products whose list data says they cannot be bought; products with unknown stock are always kept.",
            "default": true
          },
          "urls": {
            "title": "Product or category links",
            "type": "array",
            "description": "Only read when mode = my own links. Paste search links (/search?q=), category links (product type, tag, sector, promotion or sale pages, with sortOrder / priceFrom / priceTo in the link honoured) for a forward walk, or single product page links for one enriched product each. Each link is read on its own storefront (galaxus.ch, galaxus.de, digitec.ch). Left untouched, the field scrapes one example of each link shape.",
            "default": [
              "https://www.galaxus.ch/en/search?q=laptop",
              "https://www.galaxus.ch/de/search?q=laptop",
              "https://galaxus.ch/en/search?q=usb+cable",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6",
              "https://www.galaxus.de/de/s1/producttype/notebooks-6",
              "https://www.digitec.ch/en/s1/producttype/notebooks-6",
              "https://www.galaxus.ch/en/s1/tag/audio-591",
              "https://www.galaxus.ch/en/s2/sector/home-kitchen-2",
              "https://www.galaxus.ch/en/s1/promotion/producttype/notebooks-6",
              "https://www.galaxus.ch/en/s1/sale/producttype/notebooks-6",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6?sorting=PRICE_ASC",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6?pf=price_min_500_max_1000",
              "https://www.galaxus.ch/en/s1/product/logitech-mx-master-3s-wireless-mouse-61318913",
              "https://www.digitec.ch/en/s1/product/61318913",
              "https://www.galaxus.ch/en/s1/search?q=logitech+mx+master+3s",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6/brand/lenovo-5",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6/filter/operating-system-windows-35549",
              "https://www.galaxus.ch/en/s1/producttype/notebooks-6/subtype/notebook-type-gaming-laptop-14",
              "https://www.galaxus.ch/en/s1/sector/it-multimedia-1",
              "https://www.galaxus.ch/en/s1/promotion",
              "https://www.galaxus.ch/en/s1/sale",
              "https://www.galaxus.ch/en/s1/secondhand/producttype/notebooks-6",
              "https://www.galaxus.ch/en/s1/producttype/toplist/relevance/notebooks-6",
              "https://www.galaxus.ch/en/brand/benq-2"
            ],
            "items": {
              "type": "string"
            }
          },
          "categoryUrl": {
            "title": "Category link (optional)",
            "type": "string",
            "description": "One category page link, walked like a pasted link. When set and no search terms are given, the run reads this category instead of searching."
          },
          "categorySlug": {
            "title": "Category slug (optional)",
            "type": "string",
            "description": "A product-type slug such as notebooks-6, read on the selected storefront. Ignored when a category link is set."
          },
          "fetchDetails": {
            "title": "Read product detail pages",
            "type": "boolean",
            "description": "Read each product's own page data and add the description, summary bullets, full specification table, key specifications, warranty, gallery images, data-sheet link and test-report grade to the record. Off by default: a run without it is cheaper and still carries prices, discounts, ratings, availability and promotion info.",
            "default": false
          },
          "maxItems": {
            "title": "Max records",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many records across the whole run (default 1000, at most 1000000; 0 = no limit and the walk then ends when the catalogue runs out).",
            "default": 1000
          },
          "maxPages": {
            "title": "Max pages per source",
            "minimum": 0,
            "type": "integer",
            "description": "Guardrail bound on how many reads any single search or category walk may spend. Leave 0 to go as deep as the source serves, with the record cap above as the only real limit.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Connection used for every request. The storefront answers ordinary connections, so the plain default works; you can also paste your own connection links.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Continue a previous run",
            "type": "string",
            "description": "Paste the run id (or dataset id) of an earlier run of this Actor to continue it. Records that run already returned are skipped, so an interrupted large collection can finish without paying for the same rows twice. Leave empty for a normal run."
          },
          "incrementalMode": {
            "title": "Recurring updates (only return what changed)",
            "type": "boolean",
            "description": "Turn this on for daily or weekly monitoring. The first run returns everything as NEW. Later runs return only NEW, UPDATED and REAPPEARED records, each labelled in a changeType column. What is compared: every output column except the ones excluded below, so a change in price, old price, discount, rating, review count, availability, stock, labels, promotion type or detail data makes a record UPDATED, and changedFields names what moved. What is excluded: scrapedAt, position, the source columns, promotionRemainingDays and soldCount (they change on their own every day); they stay in the output but never decide UPDATED. Add more with the ignore-fields input below, or compare price and stock only with Change scope. Leave off for a normal one-off run.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, recurring updates only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its memory stable, or to deliberately share one memory across differently configured runs. Leave empty and the memory is keyed on the run setup automatically."
          },
          "emitUnchanged": {
            "title": "Also return unchanged records (recurring updates only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, labelled UNCHANGED. This returns, and bills, rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return records that are gone (recurring updates only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present before and are no longer found, labelled EXPIRED. Only produced when a run covered its whole setup, so a capped or continued run never reports records as gone. This returns, and bills, extra rows.",
            "default": false
          },
          "changeScope": {
            "title": "Change scope (recurring updates only)",
            "enum": [
              "all",
              "priceAndStock"
            ],
            "type": "string",
            "description": "All (default) compares every column except the excluded ones. Price and stock only compares price, price without VAT, old price, discount, currency, availability, stock and the can-add-to-cart flag, so a changed name, image, label, rating or description never creates a billable UPDATED row. Switching scope under an automatic state key starts a fresh baseline (the first run returns everything as NEW); set a State key to keep one baseline.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Slim UPDATED and EXPIRED rows (recurring updates only)",
            "type": "boolean",
            "description": "Off by default. When on, UPDATED rows carry only the identifiers, the current price and stock and priceChanges (old and new per moved field), and EXPIRED rows only the identifiers and last price and stock. NEW rows stay full. A slim row does not carry detail data, so it does not trigger the per-product detail surcharge.",
            "default": false
          },
          "expireAfterMissedScans": {
            "title": "Missed scans before EXPIRED (recurring updates only)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "With Also return records that are gone on, a record is reported EXPIRED only after it was missing from this many complete scans in a row (1 = the first complete scan that misses it). EXPIRED means the product was not found in the listing; without a detail check a listing drop and a delisting look the same, so read the stock fields for availability.",
            "default": 1
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Column names that must never make a record UPDATED, for example labels or ratingCount. Use a dotted path such as specifications.value for a key inside a nested list. The ignored columns still appear in the output. Changing this under an automatic state key starts a fresh baseline; set a State key to keep one.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}