ResQ Club Scraper at a glance
ResQ Club Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes record type, offer id, offer link, offer and what is in it, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 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
- $2.00 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 25 options
Scrape ResQ Club surplus food offers in Finland, Sweden and Estonia: name, price, current price, discount, portions left, pickup and order windows, tags and photo, plus the venue address, phone, website, coordinates and ratings. Search by area, name or country, or paste venue links.
What ResQ Club Scraper can do
- 46 columns per row, covering the offer (name, description, price, current price, discount, portions left, pickup window, order window, tags, photo) and the venue behind it (name, description, address, country, coordinates, phone, website, rating counts).
- Two ways in. Search by area and radius, by venue name, or by country. Or paste venue links and read exactly those.
- The whole network, not one city. One run can cover Finland, Sweden and Estonia together; the venue list carried 3,403 partners when this actor was built.
- Venue directory on demand. Optionally return partner venues that list nothing right now, so the output is a directory of the network rather than only today's deals.
- Sold-out offers are optional. Off by default you get only what can still be bought; switch them on to measure how fast things go.
- Built for scheduling. Incremental mode returns only NEW, UPDATED, REAPPEARED and EXPIRED rows, so a daily run is cheap and the changes are the output.
Choose what to collect
These inputs let you configure ResQ Club Scraper - Surplus Food Offers & Venues. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search picks venues out of the ResQ Club venue list by area, name and country. URL mode reads only the venue links or venue ids you paste. |
locationsarray | Search mode only. One entry per area: coordinates as lat,lng (60.1699,24.9384), or a place name (Helsinki, Tampere, Tallinn) which is looked up for you and cached. Leave empty to cover every country at once. |
radiusKminteger | Search mode only. How far from each area to look. Ignored when no area is given, and ignored in URL mode. |
searchPhrasestring | Search mode only. Keep only venues whose name contains this text, matched without case. Ignored in URL mode. |
includeVenuesWithoutOffersboolean | Search mode only. Off by default, so only venues that currently advertise surplus are read. Turn it on to get the full partner directory as well, including venues with nothing listed today. This reads every venue in range instead of only the active ones and each directory record is billed as the venue-directory event. Ignored in URL mode, where a pasted venue always comes back. |
urlsarray | URL mode only. One venue per entry: a venue link such as https://resq-club.com/app/#provider/5258 or https://app.resq-club.com/provider/28, the number 145, or an offer share link such as https://app.resq-club.com/offer/17056292 (resolved to the venue that lists that offer right now). Multi-URL supported. Omit the field to scrape the four examples; an empty list scrapes nothing. Area, name and directory settings are ignored here; the filters below still apply. |
countriesarray | Keep only venues in these countries. Applies in BOTH search and URL mode. Leave empty for every country. |
Show 18 more inputs
| Input | What it controls |
|---|---|
tagsarray | Keep only offers carrying at least one of these tags. Applies in BOTH search and URL mode. Use the tag ids the source itself publishes, for example snack, meal, dessert, pastry, sandwich, grocery-bag, lactose-free, gluten-free, vegetarian. Leave empty for every tag. |
includeSoldOutOffersboolean | Off by default, so only offers with portions left are returned. Turn on to also return offers that are listed but already gone. Applies in BOTH search and URL mode. |
maxPricenumber | Keep only offers whose current price is at or below this amount, in the venue's own currency (EUR in Finland and Estonia, SEK in Sweden). Applies in BOTH search and URL mode. Leave empty for no price limit. |
pickupAfterstring | Keep only offers whose pickup window starts at or after this moment (ISO date or date-time, UTC unless an offset is given, e.g. 2026-10-31 or 2026-10-31T16:00:00Z). Applies in BOTH search and URL mode. Leave empty for no limit. |
pickupBeforestring | Keep only offers whose pickup window ends at or before this moment (ISO date or date-time, UTC unless an offset is given). Applies in BOTH search and URL mode. Leave empty for no limit. |
sortBystring | Order of the returned offers. The default keeps the source order. When a sort is chosen the run reads all matching venues first, then returns the first Max items in that order; offers without a value for the chosen field and venue directory records come last. |
sortOrderstring | Direction used when Sort by is set. |
maxItemsinteger | Stop after this many records (0 = no limit; the run then stops when the venue list runs out). |
maxPagesinteger | Optional. Venues are read 25 at a time; 0 means as deep as the list goes, bounded by Max items. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning records already collected there. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search, filter and lookup setup; use State key to name or deliberately share a monitoring campaign. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search and filter settings. |
emitUnchangedboolean | Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have. |
emitExpiredboolean | Off by default. Turn on to also return records 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. |
ignoreFieldsForChangesarray | Incremental mode only. Field names (for example unitsLeft, venueUnitsLeft, venueOffersLeft) whose movement alone should not make a record UPDATED. The fields stay in every row and are simply left out of the change comparison and out of changedFields. Rows already stored are compared with the current list, so adding a field here never causes a one-time wave of UPDATED rows. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output. 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.
recordTypeRecord type (text)offerIdOffer ID (text)urlOffer link (link)offerNameOffer (text)offerDescriptionWhat is in it (text)pricePrice (number)currentPricePrice now (number)currencyCurrency (text)discountPercentDiscount % (number)priceMinorUnitsPrice (smallest unit) (number)currentPriceMinorUnitsPrice now (smallest unit) (number)unitsLeftPortions left (number)Show 34 more fields
isSoldOutSold out (boolean)pickupStartPickup from (text)pickupEndPickup until (text)orderStartOrders open (text)orderEndOrders close (text)tagsTags (array)tagNamesTag names (array)imageUrlPhoto (image)venueIdVenue ID (text)venueUrlVenue link (link)venueNameVenue (text)venueDescriptionAbout the venue (text)addressAddress (text)countryCountry code (text)countryNameCountry (text)latitudeLatitude (number)longitudeLongitude (number)distanceKmDistance (km) (number)phoneVenue phone (text)websiteVenue website (link)isBestOfBest of (boolean)isNewVenueNew venue (boolean)venueLanguageVenue language (text)venueOffersLeftOffers left at venue (number)venueUnitsLeftPortions left at venue (number)reviewsGoodGood ratings (number)reviewsOkayOkay ratings (number)reviewsBadBad ratings (number)reviewsTotalRatings total (number)positiveReviewPercentPositive ratings % (number)changeTypeChange (text)changedFieldsChanged fields (array)firstSeenAtFirst seen (text)lastSeenAtLast seen (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"recordType": "offer",
"offerId": 10000001,
"url": "https://app.resq-club.com/offer/10000001",
"offerName": "Sample Surprise Bag",
"offerDescription": "Sample description of what is inside the bag.",
"price": 5.9,
"currentPrice": 4.9,
"currency": "EUR",
"discountPercent": 16.9,
"priceMinorUnits": 590,
"currentPriceMinorUnits": 490,
"unitsLeft": 2,
"isSoldOut": false,
"pickupStart": "2026-01-01T00:00:00.000Z",
"pickupEnd": "2026-01-01T00:00:00.000Z",
"orderStart": "2026-01-01T00:00:00.000Z",
"orderEnd": "2026-01-01T00:00:00.000Z",
"tags": [
"snack",
"dessert"
],
"tagNames": [
"Snack",
"Dessert"
],
"imageUrl": "https://s3-eu-west-1.amazonaws.com/partner-images.resq-club.com/images/00/000000/sample.jpg",
"venueId": 1,
"venueUrl": "https://resq-club.com/app/#provider/1",
"venueName": "Sample Cafe",
"venueDescription": "Sample venue description.",
"address": "Sample Street 1, 00100 Sample City",
"country": "fin",
"countryName": "Finland",
"latitude": 60.17,
"longitude": 24.94,
"distanceKm": 1.234,
"phone": "+358000000000",
"website": "https://example.com",
"isBestOf": true,
"isNewVenue": false,
"venueLanguage": "fi",
"venueOffersLeft": 2,
"venueUnitsLeft": 3,
"reviewsGood": 22,
"reviewsOkay": 4,
"reviewsBad": 7,
"reviewsTotal": 33,
"positiveReviewPercent": 66.7,
"changeType": "NEW",
"changedFields": [],
"firstSeenAt": "2026-01-01T00:00:00.000Z",
"lastSeenAt": "2026-01-01T00:00:00.000Z"
}Ways to use this data
- Local deals apps and bots: pull live surprise-bag listings by city, radius or venue into your own app, map or chat bot.
- Discount and availability tracking: watch price, current price, discount percent and portions left over time to see how fast a venue's offers move.
- Food waste and sustainability research: measure how many offers, portions and venues are active across Finland, Sweden and Estonia, and how that changes day to day.
- Partner directory and outreach: turn on the venue directory option to build a full list of participating cafes, bakeries, grocery stores and florists, with address, phone and website.
- Daily monitoring and alerting: schedule incremental runs so each morning's run returns only the offers that are new, changed or gone since yesterday, ready to feed a notification.
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 ResQ Club Scraper return?
The documented output for ResQ Club Scraper includes record type, offer id, offer link, offer, what is in it, price, price now and currency. Availability of each field depends on the source page and the selected mode.
How much does ResQ Club Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 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 offers on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode with a stable State key. Each run then returns only new, updated, reappeared and, if you turn on Emit expired, expired records, and unchanged ones are not billed unless you also turn on Emit unchanged.
Why did my run fail instead of returning an empty dataset?
If the venue index, or every venue this run tried to read, could not be reached, the run stops with a clear message so "nothing on sale" is never confused with "nothing could be read". Run it again in a few minutes. If only some venues or pasted entries could not be read, you still get what was found, and the run's status message discloses the shortfall.
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.
