{
  "openapi": "3.0.1",
  "info": {
    "title": "Thalia.de Scraper: Books, Prices, ISBNs & Reviews",
    "description": "Scrape Thalia.de books, eBooks, audiobooks, toys and stationery. Search by keyword or category, browse Schnäppchen deals, or paste product and listing URLs. Get prices, original prices, discounts, ISBN/EAN, author, publisher, format, ratings and full reviews.",
    "version": "1.0",
    "x-build-id": "HUHsEPBiczGfad9JP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~thalia-de-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-thalia-de-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~thalia-de-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-thalia-de-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~thalia-de-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-thalia-de-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",
              "url"
            ],
            "type": "string",
            "description": "'search' finds products by keyword and/or category with Thalia's own filters, including Schnäppchen (sale) items. 'url' scrapes any product, category, search-result, or sale page URL you paste, walking pagination forward automatically.",
            "default": "search"
          },
          "searchTerm": {
            "title": "Search keyword",
            "type": "string",
            "description": "Free-text keyword, title, author, or stichwort, e.g. 'krimi' or 'fantasy roman'. Combine with Category below to narrow, or leave empty and set only Category (and/or Specials only) to browse a whole department."
          },
          "category": {
            "title": "Category ID (optional)",
            "type": "string",
            "description": "A Thalia category id, e.g. '3' (Romane & Erzählungen) or '4893' (eBooks). Find it as the trailing number in a category page URL: thalia.de/kategorie/<name>-<id>/. Narrows a keyword search, or browses the whole category when Search keyword is left empty. Search mode only: URL mode reads this from the link you paste."
          },
          "urls": {
            "title": "URLs to scrape",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste one or more Thalia product pages (/shop/home/artikeldetails/<id>), category pages (/kategorie/<name>-<id>/), search-result pages (/suche?sq=<term>), or the sale page (/themenwelten/sale/). Pagination continues forward automatically from any page number already in the URL. The keyword and category fields are ignored here. The fields in the Filters and sort section still apply to a pasted listing, category, search or specials URL.",
            "items": {
              "type": "string"
            }
          },
          "specialsOnly": {
            "title": "Specials only (Schnäppchen)",
            "type": "boolean",
            "description": "Only return items currently on sale (Thalia's own 'Schnäppchen' price-reduction facet): a real strike-through original price + discount. Combine with a keyword and/or category, or leave those empty to browse all current sale items (mirrors thalia.de/themenwelten/sale/). Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product.",
            "default": false
          },
          "einband": {
            "title": "Format / binding",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return this exact binding/format, e.g. 'Taschenbuch', 'gebundene Ausgabe', 'ePUB 3', 'MP3', 'Hörbuch-Download'. Match the exact value as shown on the site (visible in each result's 'format' field). Leave empty for every format. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products priced at or above this amount. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products priced at or below this amount. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product."
          },
          "availability": {
            "title": "Availability filter",
            "enum": [
              "",
              "GL",
              "SL",
              "VB"
            ],
            "type": "string",
            "description": "Narrow by delivery/availability status. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "sfmd",
              "sfpa",
              "sfpd",
              "sfea",
              "sfed",
              "sfsd"
            ],
            "type": "string",
            "description": "Order of the returned results. Applies in BOTH search mode and URL mode: the listing request is rebuilt for a pasted listing, category, search or specials URL, so the filter is sent with it. It does not narrow a pasted product URL, which returns that one product.",
            "default": "sfmd"
          },
          "fetchDetails": {
            "title": "Fetch full product detail",
            "type": "boolean",
            "description": "Adds ISBN/EAN, full author list, publisher, description, flattened technical specifications (pages, language, release date, dimensions — varies per product), full breadcrumb category path, media gallery, and the format-variant matrix (e.g. Hardcover/Taschenbuch/eBook siblings of the same title). Current price, was-price/discount and rating are already included without this toggle on search/category results.",
            "default": false
          },
          "fetchReviews": {
            "title": "Fetch reviews",
            "type": "boolean",
            "description": "Fetch each product's full review history: overall rating, review count, 1-5 star rating breakdown, and per-review author/date/rating/title/body. Products with no reviews simply return an empty list.",
            "default": true
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on reviews fetched per product when 'Fetch reviews' is on. 0 = all available reviews.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many result pages per search/category/URL entry. Leave empty for as many pages as needed (bounded by Max products total)."
          },
          "maxItems": {
            "title": "Max products total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total products returned across every search/category/URL entry. 0 = unlimited (still bounded by Max pages per search).",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The default connection works on every Apify plan, including the free tier. A residential connection is optional and only needed for very large or sustained runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}