# Sweetdeal.dk Scraper (`lexis-solutions/sweetdeal-dk-scraper`) Actor

Scrape Sweetdeal.dk (Denmark) deal data – restaurant, hotel, travel, local deals and shopping – with this Danish deals marketplace web scraper for price monitoring, market research and competitor analysis.

- **URL**: https://apify.com/lexis-solutions/sweetdeal-dk-scraper.md
- **Developed by:** [Lexis Solutions](https://apify.com/lexis-solutions) (community)
- **Categories:** E-commerce, Travel, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$35.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![banner](https://i.ibb.co/fdSyJBwn/sweetdeal.png)

## Sweetdeal.dk Scraper

Sweetdeal.dk is a Danish deals marketplace (similar to Groupon) that lists time-limited discounts and vouchers
for restaurant visits, experiences, travel, and practical home products. The platform curates handpicked offers
across multiple categories and enables users to purchase discounted vouchers directly online.

### Introduction

This Apify scraper extracts structured deal data from Sweetdeal.dk without requiring any account or API key.
You can scrape search results, category listings, or individual deal pages and receive clean, structured output
covering titles, prices, discounts, images, and availability — ready for analysis, price monitoring, or
integration into your own applications.

### Use Cases

- **Price monitoring**: Track deal prices and discount levels over time to identify patterns or alert on new offers.
- **Market research**: Analyse which categories and deal types are most active on the Danish deals market.
- **Competitor intelligence**: Monitor specific categories (hotels, restaurants, experiences) for competitive pricing insights.
- **Lead generation**: Identify active businesses offering deals and use the data to build targeted contact lists.

### Input

Provide the following fields:

- `startUrls` (array, required): One or more URLs to start scraping from. Three URL formats are supported:
  - **Search page**: `https://www.sweetdeal.dk/search?query=hotel`
  - **Category page**: `https://www.sweetdeal.dk/ophold/`
  - **Deal detail page**: `https://www.sweetdeal.dk/ophold/hotel-marie-115816/`
- `maxItems` (integer, optional): Maximum number of items to scrape per start URL. Default: `5`.
- `proxyConfiguration` (object, optional): Proxy settings. No proxy is required for this site.

#### Supported category URLs

| Category                    | URL                                      |
| --------------------------- | ---------------------------------------- |
| Lokale deals                | `https://www.sweetdeal.dk/lokale-deals/` |
| Ophold (Hotels & stays)     | `https://www.sweetdeal.dk/ophold/`       |
| Rejser (Travel)             | `https://www.sweetdeal.dk/rejser/`       |
| Shopping                    | `https://www.sweetdeal.dk/shopping/`     |
| Mad & drikke (Food & drink) | `https://www.sweetdeal.dk/mad-drikke/`   |
| Alle deals (All deals)      | `https://www.sweetdeal.dk/alle-deals/`   |

### Input Examples

**1) Search for hotel deals**

```json
{
  "startUrls": [{ "url": "https://www.sweetdeal.dk/search?query=hotel" }],
  "maxItems": 20
}
````

**2) Scrape all deals in a category**

```json
{
  "startUrls": [{ "url": "https://www.sweetdeal.dk/ophold/" }],
  "maxItems": 50
}
```

**3) Scrape a specific deal page**

```json
{
  "startUrls": [
    { "url": "https://www.sweetdeal.dk/ophold/hotel-marie-115816/" }
  ],
  "maxItems": 1
}
```

### Output

Each dataset item contains the following fields:

```json
{
  "url": "https://www.sweetdeal.dk/ophold/hotel-example-123456/",
  "title": "2 nights for 2 at Hotel Example with breakfast",
  "price": 799,
  "originalPrice": 1100,
  "discountPercentage": 27.36,
  "currency": "DKK",
  "description": "Enjoy a relaxing stay at Hotel Example in the heart of Copenhagen.",
  "coverImageUrl": "https://cdn.sweetdeal.dk/media/example-image.jpg",
  "available": true,
  "active": true,
  "sales": 142,
  "createdAt": "2024-09-10T08:00:00.000Z",
  "scrapedAt": "2025-01-15T14:32:00.000Z"
}
```

| Field                | Type            | Description                                          |
| -------------------- | --------------- | ---------------------------------------------------- |
| `url`                | string          | Public URL of the deal page                          |
| `title`              | string | null  | Deal title                                           |
| `price`              | number | null  | Current price in DKK                                 |
| `originalPrice`      | number | null  | Original list price in DKK (null if no discount)     |
| `discountPercentage` | number | null  | Discount percentage (null if no discount)            |
| `currency`           | string          | Always `"DKK"`                                       |
| `description`        | string | null  | Short deal description                               |
| `coverImageUrl`      | string | null  | CDN URL of the cover image                           |
| `available`          | boolean | null | Whether the deal is currently available for purchase |
| `active`             | boolean | null | Whether the deal is active on the platform           |
| `sales`              | number | null  | Number of vouchers sold                              |
| `createdAt`          | string | null  | ISO 8601 date when the deal was created              |
| `scrapedAt`          | string          | ISO 8601 timestamp of when the item was scraped      |

### Why use the Sweetdeal.dk Scraper?

- **No browser required**: Scrapes run fast and lightweight without launching a browser.
- **Easy to use**: Just provide one or more Sweetdeal.dk URLs and set your desired item limit — no configuration needed.
- **Reliable**: Automatic retries handle transient failures gracefully.
- **Well-maintained**: Actively maintained by a certified Apify partner.

### FAQ

- **Do I need a Sweetdeal.dk account to use this scraper?**

  No. The scraper accesses only publicly available data and requires no account or API key.

- **How many items can I scrape?**

  There is no hard limit. Use the `maxItems` field to control the number of results per start URL.

- **Is this scraper compliant with Sweetdeal.dk's terms?**

  This scraper accesses only publicly available data. Always review the website's terms of service before scraping at scale.

- **Why does a detail page return no results?**

  Some deals may have expired or been deactivated. Expired deals will be reported as warnings in the Actor log.

***

Got feedback or need an extension?

Lexis Solutions is a [certified Apify Partner](https://apify.com/partners/find).
We can help you with custom solutions or data extraction projects.

Contact us over [Email](mailto:scraping@lexis.solutions) or
[LinkedIn](https://www.linkedin.com/company/lexis-solutions)

### Support Our Work

If you're happy with our work and scrapers, you're welcome to leave us a
company review [here](https://apify.com/partners/find/lexis-solutions/review)

### Image Credit

Image credit: [sweetdeal.dk](https://www.sweetdeal.dk/)

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start scraping from. Supported formats: search pages (e.g. https://www.sweetdeal.dk/search?query=hotel), category pages (e.g. https://www.sweetdeal.dk/ophold/), and deal detail pages (e.g. https://www.sweetdeal.dk/ophold/hotel-marie-115816/).

## `maxItems` (type: `integer`):

Maximum number of deal items to scrape per start URL.

## `proxyConfiguration` (type: `object`):

Proxy settings for the scraper. No proxy is required for this site.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.sweetdeal.dk/search?query=hotel"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.sweetdeal.dk/search?query=hotel"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lexis-solutions/sweetdeal-dk-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [{ "url": "https://www.sweetdeal.dk/search?query=hotel" }] }

# Run the Actor and wait for it to finish
run = client.actor("lexis-solutions/sweetdeal-dk-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.sweetdeal.dk/search?query=hotel"
    }
  ]
}' |
apify call lexis-solutions/sweetdeal-dk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lexis-solutions/sweetdeal-dk-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Sweetdeal.dk Scraper",
        "description": "Scrape Sweetdeal.dk (Denmark) deal data – restaurant, hotel, travel, local deals and shopping – with this Danish deals marketplace web scraper for price monitoring, market research and competitor analysis.",
        "version": "1.0",
        "x-build-id": "c8sAqGBqiBce6WABe"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lexis-solutions~sweetdeal-dk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lexis-solutions-sweetdeal-dk-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/lexis-solutions~sweetdeal-dk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lexis-solutions-sweetdeal-dk-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/lexis-solutions~sweetdeal-dk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lexis-solutions-sweetdeal-dk-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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "URLs to start scraping from. Supported formats: search pages (e.g. https://www.sweetdeal.dk/search?query=hotel), category pages (e.g. https://www.sweetdeal.dk/ophold/), and deal detail pages (e.g. https://www.sweetdeal.dk/ophold/hotel-marie-115816/).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum number of items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of deal items to scrape per start URL.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for the scraper. No proxy is required for this site.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
