Wolt Scraper at a glance
Wolt Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes venue id, slug, name, brand and change type (incremental mode), which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Automation, Developer Tools
- Pricing
- $1.80 per 1,000 results (Free plan), from $0.80 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 26 options
Scrape Wolt restaurants and full menus by city or URL. Extract 60+ fields including restaurant names, addresses, GPS coordinates, opening hours, ratings, tags, menu items, images, prices, delivery zones, fees, minimum orders and merchant details.
What Wolt Scraper can do
- 70+ named fields per venue, covering address, GPS, contact info, opening and delivery hours, ratings, delivery fees, order minimum, tipping configuration and the merchant's legal block (registered name, business ID, registered address).
- Full menu surface, on or off per run. Categories and items with images and blurhashes, current and original prices, discount and lowest-price fields, VAT rate, dietary tags, alcohol content and per-unit pricing for items sold by weight.
- Brand identity fields (brand slug, brand name, brand logo image and its blurhash) so the same chain scraped across different cities can be matched up later.
- Delivery polygon as full GeoJSON, plus opening hours and delivery hours kept as two separate weekly schedules.
- Two ways to find venues: search by city name, with a geocoding fallback for places outside Wolt's own city directory, or paste Wolt venue and city-listing URLs directly.
- Cuisine, minimum rating and minimum review count filters, plus a sort order, to narrow a city listing before every venue is enriched.
Choose what to collect
These inputs let you configure Wolt Scraper - Restaurants, Menus, Prices & Delivery Details. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Pick how to find venues. Search uses a list of cities or free-text place queries. URL mode pastes ready-made Wolt URLs (single venue or city restaurant page). |
citiesarray | City names or free-text places (e.g. "Helsinki", "Graz, Austria", "Stockholm"). Slugs from Wolt's own city directory are matched first; anything else falls back to geocoding. Leave blank in URL mode. |
latitudenumber | Search around an exact point (use with Longitude). Added to any cities listed; leave Cities empty to search only this point. |
longitudenumber | Longitude of the search point (use with Latitude). |
urlsarray | Ready-made Wolt URLs. Accepted: venue pages (/restaurant/ or legacy /venue/), city pages (/ and //restaurants, optionally ?sorting=), category pages (//category/) and brand pages (//brand/), with any language prefix such as en, de or de-at. A discovery URL has no city and is skipped with a warning; language-less URLs are not valid. Multi-URL supported. Leaving this field untouched scrapes five distinct examples (a venue, two city listings, a category and a brand); the other prefilled links are alternate forms of the same targets, so they are shown but not run by default. |
primaryCategoriesarray | Filter city listings by primary cuisine tag. Examples: pizza, burgers, sushi, vegan, kebab, asian, italian, breakfast, dessert, bbq, indian. Leave empty to include all. |
minRatinginteger | Minimum Wolt rating score (0-10 scale). Records below this are skipped. Leave empty for no minimum. |
Show 19 more inputs
| Input | What it controls |
|---|---|
minRatingVolumeinteger | Minimum number of ratings a venue must have to be included. Leave empty or 0 for no minimum. |
categoryFilterstring | Keep only venues whose category or tag name contains this text, e.g. burger, pizza, sushi, asian. Case-insensitive. |
sortBystring | Order of venues within each city. Wolt's algorithmic default is the venue order Wolt's app shows. Other options sort the SERP client-side using the sortable scores Wolt returns per venue. |
fetchMenuboolean | When ON, every venue is enriched with the full menu (categories, items, prices, images, blurhashes, deal flags). Adds ~1 HTTP request per venue. Turn off for fast venue-only runs. |
includeDetailsboolean | ON: full records with menu. OFF: basic listing rows without the menu fetch (same as turning Fetch menu off). |
includeReviewsboolean | When ON, the rating score, rating bucket (1-5), and review count are populated on every record. Turn off if you don't need any rating data in the output. |
languagestring | ISO language code passed to Wolt for menu and venue text (en, de, fi, sv, fr, es, etc.). Defaults to en. |
maxVenuesinteger | Hard cap on total venues across the whole run. 0 means unlimited. |
maxItemsinteger | Alias of Max venues; when set it takes precedence. 0 means unlimited. |
maxVenuesPerCityinteger | Per-city cap. Wolt city pages return 100-200 venues; lower this for fast smoke runs. 0 means unlimited per city. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of venues without returning or charging for venues already collected there. Use this after an interrupted run, or when continuing a large city/catalogue pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching venues as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED venues. A venue is UPDATED when any venue field changes (details, opening hours, delivery fees, menu items, prices and discounts), listed in changedFields; these live counters are excluded automatically: scrapedAt, deliveryEstimateMinutes, deliveryTimeRangeMin, deliveryTimeRangeMax, serpSortable, estimateMinutes, estimateRange, online and delivers; you can exclude more with Ignore fields below. Turn on "Emit unchanged" or "Emit expired" only when you also want those venues returned (and billed). State is kept separately for each city/URL/filter/menu setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the cities/URLs/filters/menu settings, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return venues that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return venues that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max venues capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Field names that must NOT make a venue count as UPDATED. They stay in the output, they just do not trigger a change or appear in changedFields. Use a dot for nested fields and it applies to every element of a list, for example menuItems.blurhash or menuItems.imageUrl. Already excluded automatically (live counters that change on every scrape): scrapedAt, deliveryEstimateMinutes, deliveryTimeRangeMin, deliveryTimeRangeMax, serpSortable, estimateMinutes, estimateRange, online, delivers. Changing this list never causes a one-time wave of UPDATED rows. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
venueIdVenue IDslugSlugnameNamebrandNameBrandchangeTypeChange type (incremental mode)ratingRating (1-5)ratingScoreScore (0-10)ratingVolumeReviewspriceRangePrice tierisWoltPlusWolt+addressAddresscityCityShow 30 more fields
postCodeZIPcountryCodeCountryphonePhonewebsiteWebsite (link)woltUrlWolt URL (link)currencyCurrencytimezoneTimezonelatitudeLatlongitudeLngdeliveryBasePriceDelivery feeorderMinimumOrder minfoodTagsTagscategoriesCategoriesmenuCategoryCountMenu catsmenuItemCountMenu itemsscrapedAtScrapedchangedFieldsChanged fields (incremental mode)firstSeenAtFirst seen (incremental mode)lastSeenAtLast seen (incremental mode)workingHoursOpening hoursdeliveryHoursDelivery hoursserviceFeeMinService fee minserviceFeeMaxService fee maxserviceFeePercentageService fee %tippingTippingmerchantMerchantdigitalServicesActDSA infoallowedPaymentMethodsPayment methodsdeliveryMethodsDelivery methodsmenuItemsmenuItemsWays to use this data
- Food delivery market research: compare menu prices, delivery fees and order minimums for the same cuisine across several cities.
- Franchise and chain tracking: consolidate a brand's presence and pricing across every city it operates in, using the brand slug shared by all its venues.
- Competitive menu intelligence: track price changes, discounts and new menu items on competitor restaurants over time with incremental mode.
- Compliance and legal research: collect the merchant legal block (registered business name, business ID, registered address) that Wolt publishes for each venue.
- Local directories and apps: build a directory of restaurants with hours, ratings, delivery zones and contact details for a city or region.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Wolt Scraper return?
The documented output for Wolt Scraper includes venue id, slug, name, brand, change type (incremental mode), rating (1-5), score (0-10) and reviews. Availability of each field depends on the source page and the selected mode.
How much does Wolt Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed restaurants on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Later runs return only NEW and UPDATED venues; unchanged ones are suppressed and not billed. REAPPEARED rows only ever occur for a venue that a previous run had already marked EXPIRED, which itself only happens when Emit expired venues was on for a run that scanned its search completely. If you never turn on Emit expired venues, you will never see REAPPEARED.
What's the difference between Resume and Incremental mode?
resumeFromRunId continues one specific interrupted run and is a one-time thing: paste a run or dataset ID and this run skips venues already collected there. incrementalMode is for running the exact same search again and again on a schedule; the actor remembers state itself, no ID needed. See "Resume vs incremental mode" above for the full behavior, including how the two combine.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
