VidaXL Scraper icon

VidaXL Scraper

Scrape the vidaXL storefronts by keyword or URL across 6 European markets. Every row carries price, currency, brand, category path, EAN and stock…

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

VidaXL Scraper at a glance

VidaXL Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes recordid, title, brand, price and oldprice, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.50 per 1,000 results on the Apify Free plan and from $1.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
Web data
Pricing
$2.50 per 1,000 results (Free plan), from $1.80 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
20 options

Scrape the vidaXL storefronts by keyword or URL across 6 European markets. Every row carries price, currency, brand, category path, EAN and stock state. Detail enrichment adds description, specifications and the full image gallery. Recurring change tracking is first-class.

What VidaXL Scraper can do

  • Two ways in. Search by keyword across the whole catalogue, or paste product, search and category page links. No need to build URLs by hand.
  • Six markets, local prices. Germany, the United Kingdom, France, the Netherlands, Spain and Italy each quote their own prices and currency on every row.
  • Product depth on demand. Switch the product page read on or off per run: description, specification table, full image gallery and live stock with delivery estimate, billed once per enriched record only.
  • Built for price monitoring. Incremental mode returns only new and changed products on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
  • Honest empty results. A search that matches nothing succeeds quietly with zero rows; a run the store refused fails with a clear connection message, never a silent empty.

Choose what to collect

These inputs let you configure VidaXL Scraper - Products, Prices, Stock & Change Tracking. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringHow to start the scrape. 'search' runs store searches. 'url' processes the store URLs you paste: a product URL is fetched as a single product, and a search or category page URL is paged like a search, its own scope deciding what is read. The filters below apply to every walk in both modes; a pasted product URL is the exception and returns that single product in full.

Choices: search, url

searchTermsarrayOne or more things to search the store for, for example 'garden chair', 'greenhouse', 'teak bench'. Each term is scraped independently. Search mode only: in URL mode the scope is read out of each pasted URL instead. Leave this empty and the run browses the whole catalogue of the selected market.
urlsarrayPaste product URLs (https://www.vidaxl.de/e/vidaxl-gartenstuhl-holz-grau/8719883557076.html), search URLs (https://www.vidaxl.de/catalogsearch/result?q=gartenstuhl) or category page URLs (https://www.vidaxl.de/g/4299/gartenmobel) from any supported market. A pasted URL decides its own scope and market. A product URL returns that one product in full. The filters below narrow what listing walks read.
marketstringThe storefront search-mode walks read. Each market quotes its own prices and currency. URL mode reads the market out of each pasted URL instead.

Choices: de, uk, fr, nl, es, it

sortBystringThe store's own server-side ordering, sent with every page of every walk. This orders the walk itself (and therefore which rows a capped run keeps), not just the output. Applies in BOTH search mode and URL mode listing walks.

Choices: relevance, topseller, priceasc, pricedesc, newest

minPricenumberOnly keep rows whose selling price is at least this amount, in the market currency. The store has no parameter for this, so it is applied to the rows this run reads. Applies in BOTH search mode and URL mode.
maxPricenumberOnly keep rows whose selling price is at most this amount, in the market currency. The store has no parameter for this, so it is applied to the rows this run reads. Applies in BOTH search mode and URL mode.
Show 13 more inputs
More input fields
InputWhat it controls
onSaleOnlybooleanOnly keep rows the store sells below their original price. Applied to the rows this run reads. Applies in BOTH search mode and URL mode.
fetchDetailsbooleanRead each product's page for the description, specification table, full image gallery and live stock/delivery state. Charged once per enriched record (the detail-enrichment event); rows whose page could not be read keep their listing fields and are never charged. Turn it off for a fast price-only pull.
maxItemsintegerThe maximum number of product records this run returns across all searches and URLs. Set to 0 for no limit.
maxPagesintegerThe maximum number of listing pages read per search or pasted listing URL. Each page holds 20 products. Set to 0 for no page cap; Max items still bounds the run.
resumeFromRunIdstringContinue an interrupted run: paste a run id or dataset id and this run skips every record it already collected. Leave empty for a fresh run. Cannot be combined with Incremental mode when that mode already tracks this search; pick one.
incrementalModebooleanSchedule this actor against the same search and collect only what changed: every product is classified NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against the remembered baseline for this exact search scope. UNCHANGED rows are skipped unless Emit unchanged rows is on.
stateKeystringName one monitoring campaign so several schedules keep separate baselines. Empty means the baseline is keyed on a hash of this exact search scope.
emitUnchangedbooleanIn Incremental mode, also return rows classified UNCHANGED (marked as such) instead of suppressing them. Off by default: a scheduled monitor then returns only NEW, UPDATED, REAPPEARED and EXPIRED rows.
emitExpiredbooleanIn Incremental mode, after a complete scan also return rows that disappeared from the store, marked EXPIRED. Only runs after a proven complete scan; capped or interrupted runs never tombstone.
ignoreFieldsForChangesarrayExtra top-level record fields that must never mark a row UPDATED in Incremental mode. The image gallery is ignored by default (its framing rotates without the product changing); name further fields here when a scheduled monitor bills noise as changes.
mcpConnectorsarrayConnector ids that receive new records as the run collects them (for example a Notion database). Empty means no export; the dataset always holds every record.
notionParentPageUrlstringWhen exporting to Notion, the parent page new database entries are created under. Only used when MCP connectors includes a Notion connector.
maxNotifyListingsintegerThe maximum number of records forwarded to MCP connectors per run. Only used when MCP connectors is non-empty.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordIdrecordId
titletitle
brandbrand
priceprice
oldPriceoldPrice
onSaleonSale
currencycurrency
availabilityavailability
stockStatusstockStatus
categoryPathcategoryPath
eanean
skusku
Show 15 more fields
imageUrlimageUrl
urlurl
marketmarket
scrapedAtscrapedAt
descriptiondescription
specificationsspecifications
imageUrlsimageUrls
imageCountimageCount
deliveryEstimatedeliveryEstimate
variantsvariants
categoriescategories
changeTypechangeType
changedFieldschangedFields
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordId": "8710000000001",
  "title": "Sample Garden Chair",
  "brand": "vidaXL",
  "price": 49.99,
  "oldPrice": 69.99,
  "onSale": true,
  "currency": "EUR",
  "ean": "8710000000001",
  "sku": "100001",
  "categoryPath": "Furniture > Garden Chairs",
  "imageUrl": "https://example.com/image_1.jpg",
  "imageUrls": [
    "https://example.com/image_1.jpg",
    "https://example.com/image_2.jpg"
  ],
  "imageCount": 2,
  "description": "A sturdy garden chair made from treated wood...",
  "specifications": {
    "Colour": "Grey",
    "Material": "Wood",
    "EAN": "8710000000001"
  },
  "availability": "InStock",
  "stockStatus": "In stock",
  "deliveryEstimate": "2-4 working days",
  "url": "https://www.vidaxl.de/e/sample-garden-chair/8710000000001.html",
  "market": "de",
  "scrapedAt": "2026-10-10T00:00:00Z"
}

Ways to use this data

  • Resellers and dropshippers: collect current vidaXL prices, variants and stock state to compute margins and keep listings in sync.
  • Price monitoring teams: schedule the same search daily and collect only NEW, UPDATED and EXPIRED rows with per-field change lists.
  • Catalogue builders: bulk-collect names, descriptions, specifications and image galleries to populate a store or database.
  • Market researchers: compare the same product across six European storefronts, each with its own price and currency.
  • Content teams: reuse product descriptions and specification tables as the base for your own listings.

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

The documented output for VidaXL Scraper includes recordid, title, brand, price, oldprice, onsale, currency and availability. Availability of each field depends on the source page and the selected mode.

How much does VidaXL Scraper cost?

It costs $2.50 per 1,000 results on the Apify Free plan and from $1.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.

Why did a run return fewer products than the store shows?

The run stops at Max items (or Max pages), cheapest walk order first under your sort. Set them higher, or to 0, to collect the whole search.

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 "no products today" is never confused with "nothing could be read". Run it again in a few minutes.

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 VidaXL Scraper?

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