{
  "openapi": "3.0.1",
  "info": {
    "title": "Groupon Deal Scraper (12 Countries)",
    "description": "Scrape deals from Groupon across DE, US, UK, FR, IT, ES, NL, BE, AT, PL, AU, IE. Extract prices, discounts, merchant info, ratings, locations with GPS coordinates, and images. Optional detail pages for descriptions, options, reviews, and fine print. HTTP-only, ~100MB RAM, fast and lightweight.",
    "version": "1.0",
    "x-build-id": "VgtanA7SehPSGp3eE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~groupon-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-groupon-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/santamaria-automations~groupon-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-groupon-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/santamaria-automations~groupon-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-groupon-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": [
          "country",
          "city"
        ],
        "properties": {
          "country": {
            "title": "Country",
            "enum": [
              "DE",
              "US",
              "UK",
              "FR",
              "IT",
              "ES",
              "NL",
              "BE",
              "AT",
              "PL",
              "AU",
              "IE"
            ],
            "type": "string",
            "description": "Groupon country to scrape deals from",
            "default": "DE"
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City name for browsing deals (e.g., 'berlin', 'chicago', 'london'). Used in the URL path."
          },
          "category": {
            "title": "Category Filter",
            "type": "string",
            "description": "Optional category slug to filter deals (e.g., 'essen-und-trinken', 'beauty-und-wellness'). Leave empty to scrape all categories.",
            "default": ""
          },
          "query": {
            "title": "Search Query",
            "type": "string",
            "description": "Optional search keyword. When set, uses Groupon search instead of browse (e.g., 'restaurant', 'spa'). Overrides city/category.",
            "default": ""
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of deals to scrape. With category fan-out, up to ~80 unique deals per city.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include Full Deal Details",
            "type": "boolean",
            "description": "Fetch individual deal pages for full descriptions, options, all locations, reviews. Slower but more data. SERP cards already include title, prices, discount, merchant, closest location.",
            "default": false
          },
          "enableContactExtraction": {
            "title": "Extract Contacts (add-on)",
            "type": "boolean",
            "description": "After scraping, automatically extract contacts (names, emails, phone numbers) from each company's website using AI. Requires at least one LLM API key.",
            "default": false
          },
          "enableJobExtraction": {
            "title": "Extract Job Listings (add-on)",
            "type": "boolean",
            "description": "After scraping, automatically extract job listings from each company's website/career page using AI. Requires at least one LLM API key.",
            "default": false
          },
          "enableBrowserFallback": {
            "title": "Browser Fallback for JS Sites (add-on)",
            "type": "boolean",
            "description": "When contact or job extraction is enabled: automatically re-scrape websites that require JavaScript (React, Vue, Angular) with a full browser. Higher cost but catches ~25% more sites.",
            "default": false
          },
          "outputLanguage": {
            "title": "Enrichment Output Language",
            "enum": [
              "en",
              "de",
              "fr",
              "it",
              "es",
              "pt",
              "nl",
              "auto"
            ],
            "type": "string",
            "description": "Language for AI-extracted text fields. Passed to Contact/Job extraction add-ons.",
            "default": "en"
          },
          "geminiApiKey": {
            "title": "Gemini API Key (recommended)",
            "type": "string",
            "description": "Google Gemini Flash — best quality/cost ratio, 1M tokens/min free tier. Get a key at https://aistudio.google.com/app/apikey"
          },
          "groqApiKey": {
            "title": "Groq API Key (optional)",
            "type": "string",
            "description": "Groq — ultra-fast inference. Used as fallback if Gemini key is also provided."
          },
          "openrouterApiKey": {
            "title": "OpenRouter API Key (optional)",
            "type": "string",
            "description": "OpenRouter — access to 100+ models. Used as last fallback."
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify proxy settings. Datacenter proxy usually works.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}