Fruugo Scraper icon

Fruugo Scraper

Scrape Fruugo marketplace products by keyword or URL across country storefronts. Extract product names, prices, currencies, merchants, seller counts,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Fruugo Scraper at a glance

Fruugo Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes record id, product link, product id, title and brand, 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.60 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
Web data
Pricing
$2.00 per 1,000 results (Free plan), from $1.60 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
19 options

Scrape Fruugo marketplace products by keyword or URL across country storefronts. Extract product names, prices, currencies, merchants, seller counts, GTIN/EAN product identifiers and images.

What Fruugo Scraper can do

  • Two ways in. Search by keyword, or paste Fruugo product and search links. No need to build URLs by hand.
  • Country storefront pricing. Prices, currency, merchant offers and availability are served per country. The Australian storefront is verified end to end; the United Kingdom storefront also serves and is offered on the same basis. Every storefront sits behind the same protective challenge whose availability opens and closes in short windows, Australia included: a closed window fails the run loudly instead of returning an empty dataset, and a retry a few minutes later usually lands in an open window.
  • Seller depth on demand. Switch product details on for the merchant name, shipping cost, stock state, GTIN/EAN, description, attributes and the full image gallery, and pay the surcharge only for what you enrich.
  • Discounts included. List price and discount percent ride on every enriched row, ready for price monitoring and MAP tracking.
  • GTIN/EAN on every enriched row. Join Fruugo rows with your other retail datasets on the barcode.
  • Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a refused run fails loudly instead of returning an empty dataset.

Choose what to collect

These inputs let you configure Fruugo Scraper - Products, Prices, Sellers & GTIN/EAN. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to start the scrape. 'search' runs store searches. 'url' processes the store URLs you paste: a product URL returns that single product in full, and a search URL is paged like a search, its own query deciding the scope. The price bounds apply to the rows this run reads in both modes; a pasted product URL is the one exception and returns that single product in full.

Choices: search, url

searchTermsarrayOne or more things to search Fruugo for, for example 'lego', 'vitamins', 'phone case'. Each term is scraped independently. Search mode only: in URL mode the scope is read out of each pasted URL instead.
urlsarrayPaste product URLs or search URLs; every link shape the store uses is accepted. Product links end in /p-307014223, or the longer /p-307014223-687617615 offer form. Search links contain /search?q=watch; add &page=3 to start that walk further in, and a sorting= on the link is honored for that walk when present (otherwise Sort results by below applies). A pasted URL decides its own scope and its own storefront: a product URL returns that one product in full, a search URL is paged like a search, and both are read on the storefront their host names (a fruugo.co.uk link returns UK-priced rows stamped country GB, whatever the Country storefront input says). A Fruugo link whose storefront cannot be mapped fails the run loudly.
countrystringCountry storefront to scrape: prices, currency, merchant offer and availability are served per country. Australia is verified end to end; the United Kingdom storefront also serves through the actor's connection handling and is offered on the same basis. Every storefront sits behind the same protective challenge whose availability opens and closes in short windows, Australia included: a refused run fails loudly instead of returning an empty dataset, and a retry a few minutes later usually lands in an open window. The United States storefront is not offered yet: recent probe attempts through the shipped connection handling were all refused and it has not been verified. Product and search links pasted in URL mode are honored for the storefront they name (a fruugo.co.uk link walks the UK storefront and returns UK-priced rows); a Fruugo link whose storefront cannot be mapped fails the run loudly instead of returning wrong-country data.

Choices: AU, GB

sortstringThe store's own server-side ordering, sent with every page of every walk. 'recommended' is the store default and sends no parameter. 'prasc' (price low to high) is verified live: note the store's price-sorted cards omit the from-price line, so keep Fetch product details on to fill the exact price, merchant and currency. Applies in BOTH search mode and URL mode.

Choices: recommended, prasc

minPricenumberOnly keep rows whose price is at least this amount, in the storefront currency. Applied to the rows this run reads. Applies in BOTH search mode and URL mode.
maxPricenumberOnly keep rows whose price is at most this amount, in the storefront currency. Applied to the rows this run reads. Applies in BOTH search mode and URL mode.
Show 12 more inputs
More input fields
InputWhat it controls
fetchDetailsbooleanFetch each item's product page for the description, merchant name, shipping cost, availability, GTIN/EAN, image gallery, category trail and return terms. Slower, and charged once per record. Leave off for a fast crawl: title, brand, price, currency, seller count and the product link are included either way.
maxItemsintegerThe single cap on this run: stop after collecting this many records across all search terms and URLs. Set 0 for unlimited.
maxPagesintegerSafety bound on how many result pages to walk per search term or URL. Leave empty (0) for no page limit: the run then stops at Max items, not here. Does not impose a separate cap below Max items.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl without returning or charging for records already collected there. Use this after an interrupted or capped run. For recurring monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or weekly recurring monitoring of the same search, for example a price watch. The first run returns everything matching as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Price moves and stock changes ARE reported as UPDATED: on a store they are the signal, not noise. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately per search, URL and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. 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 search terms, URLs and filters, so two different searches never mix state.
emitUnchangedbooleanOff 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, so leave it off unless you specifically want a full snapshot every run.
emitExpiredbooleanOff 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: not when Max items capped it, not when Resume was used, and not when the run was refused. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Extra top-level field names to exclude from incremental change detection, on top of the built-in list. Use when a field moves every run without the product changing.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a page per record; other connectors get a best-effort write or digest. Each connector receives a condensed summary per record, not the full record; the complete record always stays in the dataset. Leave empty to skip; this 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).
notionParentPageUrlstringURL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on records 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.

recordIdRecord ID (text)
urlProduct link (text)
productIdProduct ID (text)
titleTitle (text)
brandBrand (text)
categoryCategory (text)
pricePrice (text)
priceCurrencyCurrency (text)
priceTextPrice text (text)
listPriceList price (text)
discountPercentDiscount % (text)
availabilityAvailability (text)
Show 22 more fields
inStockIn stock (text)
merchantNameMerchant (text)
sellerCountSeller count (text)
eanEAN (text)
gtinGTIN (text)
imageUrlImage (text)
countryCountry (text)
scrapedAtScraped at (text)
fruugoIdStore ID (text)
skuIdOffer ID (text)
breadcrumbsCategory trail (text)
shippingPriceShipping price (text)
shippingTextShipping text (text)
descriptionDescription (text)
skuSKU (text)
imageUrlsImages (text)
attributesAttributes (text)
returnDaysReturn days (text)
changeTypeChange type (text)
changedFieldsChanged fields (text)
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.

{
  "recordId": "fruugo:AU:000000000",
  "url": "https://www.fruugoaustralia.com/sample-product/p-000000000",
  "productId": "000000000",
  "title": "Sample Eye Drops 15ml",
  "brand": "Sample Brand",
  "category": "Eye Drops",
  "price": 18.95,
  "priceCurrency": "AUD",
  "listPrice": 24.95,
  "discountPercent": 24,
  "availability": "In Stock",
  "inStock": true,
  "merchantName": "Sample Merchant",
  "sellerCount": 2,
  "shippingPrice": 15.99,
  "description": "Sample product description.",
  "ean": "9312345678901",
  "gtin": "9312345678901",
  "imageUrl": "https://img.fruugo.com/product/1/28/0000000000_max.jpg",
  "imageUrls": [
    "https://img.fruugo.com/product/1/28/0000000000_max.jpg"
  ],
  "attributes": [
    "Age Group: adult"
  ],
  "returnDays": 14,
  "country": "AU"
}

Ways to use this data

  • Local-market pricing: read the catalogue at Australian shopper prices, with currency, merchant offers and availability exactly as local shoppers see them.
  • Brand and MAP monitoring: track list prices, discounts and merchant offers per product over time.
  • Dropshipping and sourcing research: find merchants, seller counts and shipping costs behind any listing.
  • Catalog enrichment: fill GTIN/EAN codes, descriptions, attributes and image galleries into your own product database.
  • Market analytics and data science: build historical price and availability datasets for modelling.

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 Fruugo Scraper return?

The documented output for Fruugo Scraper includes record id, product link, product id, title, brand, category, price and currency. Availability of each field depends on the source page and the selected mode.

How much does Fruugo Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 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 products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated records, and unchanged ones are not billed.

Why did a run return fewer products than Max items?

The walk stops at the natural end of the results. Set a higher Max items, or 0, to collect the whole scope. Sorted searches return the store order, so a capped run keeps the cheapest rows first.

Why did my run fail instead of returning an empty dataset?

If the store refuses every request, the run stops with a clear message so "nothing matched" is never confused with "nothing could be read". Run it again in a few minutes. If only some sources could be read, you still get what was found.

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.

Ready to collect with Fruugo Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.