VidaXL Scraper - Products, Prices, Stock & Change Tracking avatar

VidaXL Scraper - Products, Prices, Stock & Change Tracking

Pricing

from $1.80 / 1,000 product records

Go to Apify Store
VidaXL Scraper - Products, Prices, Stock & Change Tracking

VidaXL Scraper - Products, Prices, Stock & Change Tracking

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.

Pricing

from $1.80 / 1,000 product records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

VidaXL Scraper: Products, Prices and Stock

VidaXL Scraper turns the vidaXL storefronts into a clean product data API. Search garden, furniture and home products by keyword or paste store links across six European markets, and get prices in the local currency, brand, category path, EAN identity, image gallery, specifications and live stock state for every row. Export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • 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.

Use Cases

  • 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.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
recordId"8710000000001"
title"Sample Garden Chair"
brand"vidaXL"
price / oldPrice / onSale49.99 / 69.99 / true
currency"EUR" (also "GBP" on the UK storefront)
ean / sku / masterProductId"8710000000001" / "100001" / "M1000000"
categories / categoryPath["Furniture", "Garden Chairs"] / "Furniture > Garden Chairs"
variants{"variationAttribute1": "Grey"}
imageUrl / imageUrls / imageCounttile image / full gallery / 6
availability / stockStatus / deliveryEstimate"InStock" / "In stock" / "2-4 working days"
description"A sturdy garden chair made from..."
specifications{"Colour": "Grey", "Material": "Wood"}
urlproduct page link on the market storefront
market / marketHost"de" / "www.vidaxl.de"
changeType / changedFields / firstSeenAt / lastSeenAtincremental mode: "UPDATED" / ["price"] / timestamps

How to Use

  1. Pick a mode: search (by keyword) or url (paste links).
  2. Pick the market whose prices you want, set the ordering and price filters, and switch product details on or off.
  3. Set Max items to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search for garden chairs:

{
"mode": "search",
"searchTerms": ["garden chair"],
"market": "de",
"maxItems": 20,
"fetchDetails": true
}

Paste links (product, search or category page):

{
"mode": "url",
"urls": [
"https://www.vidaxl.de/catalogsearch/result?q=gartenstuhl"
],
"maxItems": 20,
"fetchDetails": true
}

Compare UK prices on a schedule:

{
"mode": "search",
"searchTerms": ["garden chair"],
"market": "uk",
"maxItems": 50,
"fetchDetails": false,
"incrementalMode": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/vidaxl-com-scraper").call(run_input={"mode": "search", "searchTerms": ["garden chair"], "market": "de", "maxItems": 5})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["title"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/vidaxl-com-scraper').call({ mode: 'search', searchTerms: ['garden chair'], market: 'de', maxItems: 5 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips everything already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same scope. Each record is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only after a run that scanned the whole scope, and only with emitExpired). stateKey names or shares the stored state. With incremental mode off, output is exactly as before.
  • Ignore fields for changes (ignoreFieldsForChanges) names extra record fields that must never mark a row UPDATED. The image gallery is ignored by default because its framing rotates without the product changing.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch or url.
searchTermsarray["garden chair"]Keywords to search (search mode).
urlsarraysampleProduct, search or category page links (url mode).
marketstringdeStorefront: de, uk, fr, nl, es or it.
sortBystringrelevanceStore ordering: relevance, topseller, priceasc, pricedesc or newest.
minPricenumber(none)Keep rows priced at or above this (market currency).
maxPricenumber(none)Keep rows priced at or below this (market currency).
onSaleOnlybooleanfalseKeep only discounted rows.
fetchDetailsbooleantrueRead each product page (description, specifications, gallery, stock). Billed once per enriched record.
maxItemsinteger20Stop after this many records (0 = no limit).
maxPagesinteger0Stop after this many listing pages per search (0 = no page cap).
resumeFromRunIdstring(none)Continue one interrupted run.
incrementalModebooleanfalseReturn only new and changed records on scheduled runs.
stateKeystring(none)Name or share an incremental-mode state.
emitUnchangedbooleanfalseAlso return (and bill) unchanged records.
emitExpiredbooleanfalseAlso return (and bill) expired records.
ignoreFieldsForChangesarray(none)Extra record fields that never mark a row UPDATED.
proxyConfigurationobjectApify ProxyConnection settings.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

A detail-enriched row (details on):

{
"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"
}

Plan Requirement

The default proxy setting works out of the box, and the actor rotates connections automatically when one is refused. For large or frequent runs, the residential proxy group gives more headroom; pick it under Connection. If your Apify plan does not include proxy access, the run fails with a clear message instead of returning an empty result; a paid plan with proxy access is required.

FAQ

How much does it cost?

You pay per record returned, with product details billed only when Fetch product details is on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available product data. You are responsible for how you use it: follow the store's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices and specifications are generally facts, but descriptions and photos may be subject to third-party rights.

Can I monitor prices on a schedule?

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

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.

🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

🧩 Digitec Galaxus Scraper
Scrape Digitec Galaxus, Switzerland's largest online retailer: products with local...
🏷️ bol.com Scraper
Scrape bol.com products: title, price, list price and discount, EAN, brand, images...
🧩 Miravia Spain Scraper
Scrape Miravia Spain by keyword, seller store or URL. Every row carries the selling price...
🧩 Falabella Scraper
Scrape Falabella, Latin America's leading retail marketplace: products with local prices...
🔌 Currys UK Scraper
Scrape Currys UK electronics by keyword or URL. Extract prices, brands, stock status...
🧩 eBay Scraper
Scrape eBay by keyword, category, seller or pasted link across 16 country storefronts...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.