Wolt Scraper [Only $1/1K💰] | Restaurants & Menus | 963 Cities avatar

Wolt Scraper [Only $1/1K💰] | Restaurants & Menus | 963 Cities

Pricing

from $0.90 / 1,000 venue scrapeds

Go to Apify Store
Wolt Scraper [Only $1/1K💰] | Restaurants & Menus | 963 Cities

Wolt Scraper [Only $1/1K💰] | Restaurants & Menus | 963 Cities

Extract Wolt restaurant and grocery data with complete menus and prices — cuisines, ratings, delivery estimates, opening hours, dietary tags and VAT — across 963 Wolt cities in 30+ countries, via Wolt's own public JSON APIs. No browser, no paid anti-bot service.

Pricing

from $0.90 / 1,000 venue scrapeds

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

16 days ago

Last modified

Categories

Features

Limited permissions

Share

Wolt Scraper — Restaurant Menus, Prices & Venue Data From 963 Cities

Extract Wolt restaurant and grocery data with complete menus and prices — cuisines, ratings, delivery estimates, opening hours, dietary tags and VAT — across 963 Wolt cities in 30+ countries, via Wolt's own public JSON APIs with no browser and no paid anti-bot service.

Main Use Cases

  • Menu-price monitoring — snapshot full menus with prices and diff scheduled runs to track competitor price changes.
  • Restaurant group & chain audits — verify menus, opening hours and photos across every branch on Wolt.
  • Ghost kitchen & aggregator benchmarking — price bands, cuisines and delivery estimates per city before launch.
  • Food delivery market research — venue counts, cuisine mix, price bands and rating distributions per market.
  • Dietary & allergen data — merchant-declared dietary preferences and allergen warnings per menu item.
  • Exhaustive city coverage — geo-grid probes plus Wolt's venue sitemaps reach past the single-delivery-area limit.

How the Wolt Scraper Works

Wolt's web app is a JavaScript SPA that reads from undocumented but fully public JSON APIs, and its SEO pages are server-rendered with schema.org JSON-LD embedded in the HTML. This Actor talks to those surfaces with plain HTTP — no Playwright, no Puppeteer, no CAPTCHA solving, no paid anti-bot API:

#PurposeEndpointWhy this surface
1City indexGET restaurant-api.wolt.com/v1/citiesAll 963 Wolt cities with slugs, coordinates and country codes — target a city by name.
2Venue discoveryGET consumer-api.wolt.com/v1/pages/front?lat&lon (+ …/pages/restaurants for large runs)The front-page feed is small, fast and reliable; it returns venues near a point with rating, delivery estimate, currency, cuisines and live online flag. The larger restaurants feed supplements it when more venues are requested.
3Text searchPOST restaurant-api.wolt.com/v1/pages/searchWolt's consumer search by venue (target: venues) or by dish (target: items).
4Full menuGET consumer-api.wolt.com/consumer-api/consumer-assortment/v1/venues/slug/{slug}/assortmentThe menu the app renders: categories, items and options with prices, dietary tags, VAT and availability windows. Source of all menu and price data.
5Opening hours & contactwolt.com/{lang}/{country}/{city}/restaurant/{slug} → JSON-LDServer-rendered @type: Restaurant blob carrying openingHours, telephone, priceRange, servesCuisine — none of which exist in the JSON APIs. Read with a regex; no JS execution.

Build Restaurant Databases and Monitor Menu Prices

Every venue row carries name, slug, URL, cuisines, rating and review count, delivery time estimate, street address with lat/lon, opening hours, live open/online flags, price band and phone — with the full menu nested under menuCategories. A second dataset (menus) always emits one row per menu item with item fields hoisted to the top level, so BI tools read price, not item.price. Both grains come from a single run.

How It Works

Wolt Scraper workflow: from city and cuisine searches to venue records with ratings, delivery estimates and complete menus with dish prices, dietary tags and VAT

Looking for a Wolt scraper or a practical restaurant menu data alternative? Add one or more city slugs, coordinates, cuisine searches or direct venue URLs, then set venue and menu-item limits. The default dataset returns one row per venue with name, URL, city, country, currency, address, coordinates, cuisines, rating, review count, delivery estimate, price range, opening hours, phone and a nested menu; the menus dataset returns one row per dish with category, price, dietary tags, allergens, VAT and availability.

Use the dataset for menu-price monitoring, chain audits, delivery-market sizing and dietary research. Export as JSON, CSV or Excel, or pull results through the Apify API. Pay from $1.00 per 1,000 venues plus $0.20 per 1,000 menu items.

Input

FieldTypeRequiredDefaultNotes
citiesstringone ofberlinComma-separated Wolt city slugs, e.g. berlin, munich, helsinki. Resolved against Wolt's own city index. Leave empty to use lat/lon or a search query.
lat / lonnumberno–Raw geo point to discover venues around. Used together.
searchQueriesstringno""Comma-separated free-text venue searches, e.g. pizza, sushi, vegan.
venueUrlsstringno""Comma-separated Wolt venue or item URLs, e.g. from wolt.com/sitemap/venues/{country}-{n}.xml.
maxVenuesintegerno25Max venues per run (max 5000). Free accounts capped at 10. One discovery request returns up to ~2,000 venues for a city, so higher values pay off with geoGridPoints.
geoGridPointsintegerno0Extra discovery requests per city, anchored east/south/north/west of the centre. Wolt's listing covers one delivery area, so each probe adds a few hundred venues. 0 = off.
geoGridStepDegnumberno0.08How far each probe sits from the centre, in degrees. 0.08 ≈ 9 km.
maxItemsPerVenueintegerno250Max menu items kept per venue (0 = no limit). Does not change row count.
includeMenubooleannotrueFetch full menus. Turn off for a fast metadata-only crawl.
includeOpeningHoursbooleannotrueAlso fetch each venue's SEO page for hours, phone and price range. Expensive phase — those pages are ~3 MB each, roughly 10–20× the cost per venue vs menus alone.
hoursConcurrencyintegerno10Parallel SEO-page fetches. Pages are fetched directly; lower this if wolt.com starts returning HTTP 429.
flattenMenuItemsbooleannofalseRewrite the default dataset to one row per menu item (venue fields repeated, item under item). Convenient for BI, but you lose the one-row-per-venue view.
proxyobjectnoprefilled onKeep enabled. Wolt rate-limits Apify's shared Cloud egress IP with HTTP 429, so discovery often returns zero venues without a proxy. The Actor retries rate-limited requests itself.

Output: Venues and Menus, Two Grains From One Run

DatasetGrainRows for 5 venues / 374 items
defaultone row per venue, menus nested under menuCategories5
menusone row per menu item, item fields hoisted to top level374

Venue fields: venueId, name, slug, url, city, country, currency, address, latitude, longitude, cuisines, shortDescription, image, rating, ratingCount, ratingStars, deliveryEstimateMin / Max / Range, priceRange, priceRangeText, isOpen, isOnline, supportsDelivery, productLine (restaurant / grocery / gift_card), phone, openingHours, menuCategoryCount, menuItemCount, scrapedAt.

Menu item fields: name, description, price (Wolt returns minor units; divided by 100), currency, originalPrice, unitPrice, soldByWeight, image, isAvailable, unavailableReason, availableFrom / availableUntil, dietaryPreferences, allergenWarnings, tags, vatPercentage, alcoholPercentage, allowedDeliveryMethods, optionNames, hasOptions, itemUrl.

Example default row (trimmed):

{
"venueId": "65df270d220b01038977a7c5",
"name": "Croissant Couture",
"slug": "croissant-couture",
"url": "https://wolt.com/en/deu/berlin/restaurant/croissant-couture",
"city": "berlin",
"country": "DEU",
"currency": "EUR",
"address": "Weinbergsweg 4",
"latitude": 52.53066696,
"longitude": 13.40226343,
"cuisines": ["dessert"],
"rating": 8.6,
"ratingCount": 284,
"deliveryEstimateRange": "45-55",
"priceRangeText": "€",
"isOpen": true,
"isOnline": true,
"phone": "+493025735205",
"openingHours": ["Mo 08:00-19:45", "Tu 08:00-19:45"],
"menuCategoryCount": 8,
"menuItemCount": 24,
"scrapedAt": "2026-09-27T07:31:12.482Z",
"menuCategories": [
{
"id": "b544d0b50acffb105bc77824",
"name": "WOLT SPECIALS",
"items": [
{
"name": "Iced Latte 0,4 l",
"price": 5.2,
"currency": "EUR",
"isAvailable": true,
"dietaryPreferences": ["vegetarian"],
"vatPercentage": 7,
"allowedDeliveryMethods": ["takeaway", "homedelivery"]
}
]
}
]
}

Example menus row (trimmed):

{
"venueId": "5f903fb21e968e9b217b43e2",
"venueName": "Monsieur Vuong",
"city": "berlin",
"country": "DEU",
"category": "VORSPEISEN",
"id": "60783c0e9b0eaa45f33f76b5",
"name": "Cha Gio",
"price": 9,
"currency": "EUR",
"isAvailable": true,
"tags": ["popular"],
"vatPercentage": 7,
"itemUrl": "https://wolt.com/en/deu/berlin/venue/monsieur-vuong/monsieur-vuong-itemid-60783c0e9b0eaa45f33f76b5"
}

Example Input

{
"cities": "berlin, munich",
"maxVenues": 50,
"geoGridPoints": 2,
"maxItemsPerVenue": 0,
"includeOpeningHours": true
}

Pricing: Lowest Venue Price and $0.20 per 1,000 Menu Items

Wolt's APIs are public and un-walled, so no paid anti-bot service is required. The Actor defaults to 512 MB of RAM (the city-discovery response is a few MB per city and parsed as a unit) — still ~8× cheaper than the 4 GB template default.

  • Start: $0.00005 per run
  • Venue scraped: $0.001 — $1.00 per 1,000 venues ($0.90 on silver and above)
  • Menu item: $0.0002 — $0.20 per 1,000 menu items ($0.19 on gold and above)
  • Free tier: capped at 10 venues per run.
  • Proxy: billed only if you enable it; the datacenter group is enough (included in paid plans).

Two things dominate the bill: opening hours (a ~3 MB SEO page per venue, roughly 10–20× a menu fetch) and geo-grid probes (one cheap discovery request each). Turning off includeOpeningHours for a large venue sweep is by far the biggest saving. Because the Actor is billed per venue/menu-item event, what you see in the datasets is exactly what was charged.

Integrations & Automation

Runs on the Apify platform with REST API access, webhooks, scheduled runs, dataset exports (JSON, CSV, Excel) and Zapier/Make integrations. Recommended schedules:

  • Menu-price monitoring: daily snapshot per city, diff price in the menus dataset between runs.
  • Chain audits: weekly per-branch sweep using venueUrls from the venue sitemaps.
  • Market sizing: monthly run per city with geoGridPoints: 2–4 and includeOpeningHours: false to keep it cheap.

FAQ

Is there a Wolt API for restaurants and menus — why use this Actor?

Wolt publishes no documented public partner API. This Actor uses the same undocumented public JSON endpoints (consumer-api, restaurant-api) that Wolt's own web app calls, plus the server-rendered JSON-LD on venue SEO pages for opening hours — the cheapest reliable way to get complete menu data without a browser.

Does this need Playwright or a paid anti-bot API?

No. Plain HTTP is sufficient, which is why this Actor is HTTP-only and cheap. It uses the standard Apify Proxy option (included in your plan, pre-enabled) — not a separate anti-bot vendor. There is no Cloudflare, Akamai or challenge page on these endpoints.

Why did my first run return nothing?

Almost always rate limiting: Wolt answers Apify's shared Cloud egress IP with HTTP 429, so discovery comes back empty without a proxy. Check the run log for rate-limited and make sure proxy is enabled (it is pre-enabled). If you still get nothing, the city slug may not exist in Wolt's city index.

How do I get all restaurants in a city, not just one delivery area?

A single discovery request covers one delivery zone (Berlin returns ~2,000 venues). Set geoGridPoints to 2–4 to probe east/south/north/west as well — in Berlin the first east probe alone added 470 venues for the price of one small request — or feed batches of wolt.com/sitemap/venues/{country}-{n}.xml URLs into venueUrls for exhaustive coverage.

Can I get delivery fees?

No. Wolt computes the delivery fee from the customer's address and basket, and no public endpoint returns it. The Actor returns the delivery time estimate (deliveryEstimateMin / Max) from the same response instead.

Are dietary and allergen tags reliable?

They are merchant-supplied and frequently empty — many venues simply do not declare them. Treat a missing tag as "not declared", not "contains none".

How often can I run it?

Use Apify scheduling. For price monitoring, daily snapshots are usually plenty. Keep volume reasonable and keep the proxy enabled for large crawls.

For AI Agents & LLM Apps

Purpose: returns one dataset row per Wolt venue (with nested menus) plus a second menus dataset with one row per menu item, across 963 Wolt cities.

Minimal working input:

{ "cities": "berlin", "maxVenues": 25 }

Variants:

  • Full menus + hours across cities: { "cities": "berlin, munich", "maxVenues": 50, "includeMenu": true, "includeOpeningHours": true }
  • Cheap metadata-only market sweep: { "cities": "helsinki", "maxVenues": 200, "geoGridPoints": 2, "includeMenu": false, "includeOpeningHours": false }

Output field list (venue): venueId, name, slug, url, city, country, currency, address, latitude, longitude, cuisines, shortDescription, image, rating, ratingCount, ratingStars, deliveryEstimateMin, deliveryEstimateMax, deliveryEstimateRange, priceRange, priceRangeText, isOpen, isOnline, supportsDelivery, productLine, phone, openingHours, menuCategoryCount, menuItemCount, scrapedAt, menuCategories. Output field list (menu item, menus dataset): venueId, venueName, venueSlug, city, country, categoryId, category, id, name, description, price, currency, isAvailable, dietaryPreferences, tags, vatPercentage, itemUrl.

Behaviors an agent should know:

  • Keep the proxy enabled — without it Apify Cloud runs usually list zero venues (HTTP 429 on the shared egress IP).
  • maxVenues above ~2,000 per city needs geoGridPoints — one discovery request only covers a single delivery area.
  • includeOpeningHours: true is the expensive phase (~3 MB page/venue, 10–20× a menu fetch) — turn it off for volume sweeps; use false plus includeMenu: false for the cheapest metadata crawl.
  • hoursConcurrency defaults to 10 — pages are fetched directly; lower it if wolt.com returns HTTP 429.
  • Two datasets per run (default + menus) are always written. The menus dataset is per-run, not an archive.
  • Prices in the menu API are minor units — the Actor divides by 100, so price is in major currency units.

Billing: pay-per-event — start $0.00005, then $0.001 per venue and $0.0002 per menu item ($1/1K venues, $0.20/1K items); free tier caps at 10 venues.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Wolt Food Delivery. It reads only publicly served data — public JSON APIs and server-rendered venue pages — with no login bypass, CAPTCHA solving, or private endpoints. You are responsible for complying with Wolt's Terms of Service and robots.txt (Wolt's robots.txt is fully open) and with data-protection law. Output includes business contact data such as venue phone numbers and addresses; handle it in line with GDPR and other applicable rules. This information is not legal advice.

SEO Keywords

wolt scraper, wolt restaurant data, wolt menu prices, wolt menu scraper, restaurant menu data api, restaurant menu scraping, food delivery price monitoring, menu price monitoring, food delivery market research, wolt api alternative, restaurant competitor pricing, ghost kitchen benchmark, restaurant group branch audit, wolt cities list, opening hours scraping, dietary tags allergen data, delivery time estimate data, restaurant venue metadata, wolt grocery data, wolt germany, wolt netherlands, wolt finland, wolt israel, food delivery aggregator data