# Groupon UK Scraper - Deals, Prices & Voucher Codes (`studio-amba/groupon-co-uk-scraper`) Actor

Extract live deals, prices and voucher codes from groupon.co.uk by category. Get title, price, was-price, discount %, merchant, rating, redemption location and voucher codes. No login required.

- **URL**: https://apify.com/studio-amba/groupon-co-uk-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Groupon UK Scraper

Extract live deals, prices and voucher codes from groupon.co.uk, the UK's largest local-deals and daily-deals marketplace, by category.

### Why use this actor?

Groupon UK doesn't publish a public API, and its category pages render deals client-side after the initial page load — so a plain HTML scraper sees an empty page. This actor talks directly to the same hidden JSON feed groupon.co.uk's own frontend uses to populate a category page, returning clean, structured deal data: title, current price, "was" price, discount %, merchant name, star rating, redemption location and any attached voucher code. Useful for price-monitoring tools, deal-alert bots, local-market research, or feeding a broader European deals/coupons aggregator.

### How to scrape Groupon UK data

1. Pick a voucher category slug from the groupon.co.uk URL bar — visit `groupon.co.uk/vouchers/{slug}` in a browser and copy the slug (e.g. `restaurants`, `massage`, `hairdressers`, `things-to-do`, `beauty-and-spas`, `spa`, `nail-salon`, `escape-games`, `golf`).
2. Set `category` to that slug, or leave it empty to default to `restaurants`.
3. Set `location` to a UK city/region — this is the same "division" Groupon UK uses to decide which local deals and redemption addresses to show (e.g. `london`, `manchester`, `birmingham`, `glasgow`, `edinburgh`). Leave empty to default to `london`.
4. Set `maxResults` (results load 24 at a time).
5. Run the actor. Each Groupon deal card becomes one row in the output dataset: title, price, was-price, discount %, merchant, star rating, image, voucher code and redemption location.
6. Export the dataset as JSON, CSV, or connect it via API to your own pipeline.

There is no login and no CAPTCHA in the way — the deal-feed API itself is not behind Cloudflare's bot challenge (only direct `/deals/{slug}` page loads are, and this actor never needs to hit those — every field comes from the listing feed itself).

### A note on Groupon UK's data

- **`price` and `originalPrice` are in GBP**, converted from the pence integers the API returns.
- **An unrecognized `category` or `location` doesn't error** — Groupon UK's own site 301-redirects an unknown category slug to a fallback page, and the underlying feed falls back to a broader deals list rather than returning zero results. If a run for a category you expect returns unfamiliar deals, double-check the slug against `groupon.co.uk/vouchers/{slug}` in a browser.
- **`rating` and `ratingCount` are null** on deals with too few reviews to show a score — that's the real site behaviour, not a missing field.
- **`location` is null** on deals with no fixed redemption address (e.g. shippable goods, digital vouchers).

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | String | No | groupon.co.uk voucher category slug from `/vouchers/{slug}` (e.g. `restaurants`, `massage`, `things-to-do`). Default: `restaurants`. |
| `location` | String | No | UK city/region ("division") slug, e.g. `london`, `manchester`, `birmingham`, `glasgow`, `edinburgh`. Default: `london`. |
| `maxResults` | Integer | No | Maximum deals to return (default: 50, loads in pages of 24). |
| `proxyConfiguration` | Object | No | Proxy settings. Automatic Apify proxy is sufficient — see note above. |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `dealId` | String | `"brewdog-burgers-2026"` |
| `title` | String | `"Indulge in BrewDog's Burgers, Beers & Brunch Experience – Great Value"` |
| `url` | String | Full groupon.co.uk deal page URL |
| `price` | Number | null | `23.95` |
| `originalPrice` | Number | null | `47.9` |
| `discountPercentage` | Number | null | `50` |
| `currency` | String | `"GBP"` |
| `merchantName` | String | null | `"BrewDog"` |
| `shopDomain` | String | null | `null` (deals redeem on groupon.co.uk, not an external shop) |
| `imageUrl` | String | null | Deal image on Groupon's static CDN |
| `temperature` | Number | null | `null` (not applicable — no community voting on Groupon) |
| `temperatureLevel` | String | null | `null` |
| `commentCount` | Number | null | `null` |
| `category` | String | null | `"restaurants"` |
| `categorySlug` | String | null | `"restaurants"` |
| `voucherCode` | String | null | `"TOGETHER"` |
| `isExpired` | Boolean | `false` |
| `isHot` | Boolean | `true` |
| `isNew` | Boolean | `false` |
| `freeShipping` | Boolean | null | `null` |
| `publishedAt` | String | null | `null` (not exposed by the API) |
| `expiresAt` | String | null | ISO 8601 timestamp, only when a promotion has an expiry |
| `searchCategory` | String | null | Input echo |
| `rating` | Number | null | `4.8` |
| `ratingCount` | Number | null | `84` |
| `location` | String | null | `"142 Shaftesbury Ave, London"` |
| `division` | String | null | `"london"` (input echo) |
| `scrapedAt` | String | ISO timestamp of the scrape |

### Example output

```json
{
    "dealId": "brewdog-burgers-2026",
    "title": "Indulge in BrewDog's Burgers, Beers & Brunch Experience – Great Value",
    "url": "https://www.groupon.co.uk/deals/brewdog-burgers-2026",
    "scrapedAt": "2026-08-20T09:14:53.151Z",
    "price": 23.95,
    "originalPrice": 47.9,
    "discountPercentage": 50,
    "currency": "GBP",
    "merchantName": "BrewDog",
    "shopDomain": null,
    "imageUrl": "https://img.grouponcdn.com/deal/PuSgoQxZNBrafbqXiQasEX/3k-1467x880/v1/t600x362.webp",
    "temperature": null,
    "temperatureLevel": null,
    "commentCount": null,
    "category": "restaurants",
    "categorySlug": "restaurants",
    "voucherCode": null,
    "isExpired": false,
    "isHot": false,
    "isNew": false,
    "freeShipping": null,
    "publishedAt": null,
    "expiresAt": null,
    "searchCategory": "restaurants",
    "rating": 4.8,
    "ratingCount": 84,
    "location": "142 Shaftesbury Ave, London",
    "division": "london"
}
```

### Cost estimate

This actor uses **1 request per ~24 results** (one feed page = 24 deals), plus a single warm-up request per run. That's among the cheapest scrapers in the fleet per item — well under $0.01 per 24 deals in Apify compute alone.

### Limitations

- No robots.txt-compliant free-text search exists — this actor browses by voucher category, the same path a visitor takes from Groupon's own category menu.
- An unrecognized category or location slug falls back to a broader deals list instead of erroring — see the note above.
- `rating` and `location` are null on deals without a review score or a fixed redemption address — that's real site data, not a missing DOM fallback.
- A run's usage cost only settles after the run reports SUCCEEDED — checking cost mid-run under-reports actual spend.
- Data is scraped from the public website and may change without notice.

### Related Scrapers

- [hotukdeals-scraper](https://apify.com/studioamba/hotukdeals-scraper) — UK community deals board, same country, different deal model (user-posted vs. merchant vouchers)
- [mydealz-scraper](https://apify.com/studioamba/mydealz-scraper) — German deals community, Pepper Group network
- [dealabs-scraper](https://apify.com/studioamba/dealabs-scraper) — French deals community, Pepper Group network
- [pepper-pl-scraper](https://apify.com/studioamba/pepper-pl-scraper) — Polish deals community, Pepper Group network

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email <hello@studioamba.dev> for a free data sample. We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `category` (type: `string`):

groupon.co.uk voucher category slug, taken from the URL /vouchers/{slug} (e.g. 'restaurants', 'massage', 'hairdressers', 'things-to-do', 'beauty-and-spas', 'spa', 'nail-salon', 'escape-games', 'sightseeing-and-tours', 'golf'). Leave empty to scrape the 'restaurants' category.

## `location` (type: `string`):

UK city/region slug used by Groupon's own 'division' system (e.g. 'london', 'manchester', 'birmingham', 'glasgow', 'edinburgh', 'leeds', 'bristol'). Controls which deals and redemption locations are shown, same as picking a location on the site. Leave empty to use 'london' (the largest division).

## `maxResults` (type: `integer`):

Maximum number of deals to return. Results load in pages of 24.

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

Proxy settings. The default automatic Apify proxy works fine — the deal-listing JSON API groupon.co.uk uses is not behind Cloudflare's bot challenge (only direct /deals/ page loads are, and this actor never hits those directly).

## Actor input object example

```json
{
  "category": "restaurants",
  "location": "london",
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "category": "restaurants",
    "location": "london",
    "maxResults": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/groupon-co-uk-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 = {
    "category": "restaurants",
    "location": "london",
    "maxResults": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/groupon-co-uk-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "category": "restaurants",
  "location": "london",
  "maxResults": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/groupon-co-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/groupon-co-uk-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VKRXgx2VZ2A24eL9E/builds/u2ByFNtkTculsIvAf/openapi.json
