Groupon Deal Scraper (12 Countries)
Pricing
from $3.00 / 1,000 search results
Groupon Deal Scraper (12 Countries)
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.
Pricing
from $3.00 / 1,000 search results
Rating
0.0
(0)
Developer

Alessandro Santamaria
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Groupon Deal Scraper — International
Scrapes deals from Groupon across 12 countries: DE, US, UK, FR, IT, ES, NL, BE, AT, PL, AU, IE.
How it works
- Loads Groupon browse pages which contain
__NEXT_DATA__with the full Apollo GraphQL cache - Extracts deal cards (9 per page) from the SSR data — no browser needed
- Category fan-out: Discovers category sub-pages and loads each one to collect ~80 unique deals per city
- Deduplicates by UUID across categories
- Optionally fetches detail pages for full descriptions, options, locations, and reviews
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
country | enum | DE | Country code (DE, US, UK, FR, IT, ES, NL, BE, AT, PL, AU, IE) |
city | string | berlin | City name for URL path |
category | string | "" | Optional category slug filter |
query | string | "" | Optional search keyword (overrides browse) |
maxResults | integer | 100 | Max deals to return |
includeDetails | boolean | false | Fetch detail pages for full data |
proxyConfiguration | object | Apify proxy | Proxy settings |
Output fields
SERP (always available)
title, deal_url, deal_id, deal_slug, merchant_name, merchant_rating, merchant_rating_count, price, original_price, currency, discount_percent, location_name, location_address, latitude, longitude, locations_total, image_url, category
Detail (with includeDetails: true)
description, highlights, fine_print, sold_quantity, expiry_date, merchant_website, merchant_phone, merchant_address, opening_hours, review_rating, review_count, options[], locations[]
Performance
- HTTP-only — CheerioCrawler, ~128MB RAM
- ~80 deals per city via category fan-out (no API calls needed)
- Datacenter proxy works fine
Enrichment add-ons
After the scrape completes, this actor can automatically trigger AI-powered extraction on every merchant website found in the results. Each add-on runs as a separate actor and produces its own dataset.
Contact extraction
Extracts team member names, email addresses, phone numbers, positions, and departments from merchant websites. Powered by the Website Contact Extractor.
Enable it by setting enableContactExtraction: true and providing at least one LLM API key. The sub-actor run ID is stored in the key-value store as CONTACT_EXTRACTOR_RUN_ID.
Job listing extraction
Extracts open positions, job titles, locations, departments, and career page URLs from merchant websites. Powered by the Website Job Extractor.
Enable it by setting enableJobExtraction: true and providing at least one LLM API key. The sub-actor run ID is stored in the key-value store as JOB_EXTRACTOR_RUN_ID.
Browser fallback
Some websites are built with JavaScript frameworks (React, Vue, Angular) that require a full browser to render. When enableBrowserFallback is set to true, the contact/job extractors will automatically re-scrape these sites with Playwright. This catches ~25% more sites but increases cost and runtime. Only applies when contact or job extraction is enabled.
LLM API keys
Both add-ons use LLMs to extract structured data. Provide one or more API keys. When multiple keys are provided, the system uses them in priority order with automatic fallback:
- Gemini (recommended) -- Best quality-to-cost ratio. Free tier includes 1M tokens/min. Get a key at Google AI Studio.
- Groq (optional) -- Ultra-fast inference. Get a key at Groq Console.
- OpenRouter (optional) -- Access to 100+ models. Get a key at OpenRouter.
One key is sufficient. With multiple keys, if the primary provider hits a rate limit, the system falls back to the next available provider automatically.
Support
Found a bug or have a feature request? Open an issue.