Disclosure: I build TubeText. This post uses our idealo Actor on Apify. The sample prices below are from the original October 15, 2026 post, not live quotes. Documentation reviewed October 23, 2026; the sample was not rerun for this update.
For a retailer comparing competitor offers or a pricing analyst preparing a daily snapshot, the Idealo Price Scraper returns shop offers and a price summary as JSON, CSV or Excel. Start with idealo product links, product IDs or keywords, then choose Germany, Austria, France, Italy, Spain or the UK.
The Actor checks the supplied product ID in the selected markets and returns offers up to maxOffersPerMarket. Availability and offer counts can differ by market. Before treating two prices as comparable, review the offer title, variant, condition, currency and shipping terms.
Idealo API example: one product, three markets
curl -X POST "https://api.apify.com/v2/acts/tubetext~idealo-price-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"products":["https://www.idealo.de/preisvergleich/OffersOfProduct/202092559_-airpods-pro-2-apple.html"],"markets":["de","fr","it"],"maxOffersPerMarket":20}'
The original example contains 45 shop offers plus one summary row per market. These historical rows illustrate the output for Apple AirPods Pro 2; they are not today's prices or a speed guarantee:
| Market | Offers | Shops | Lowest | Median | Highest | Lowest incl. shipping | Cheapest shop |
|---|---|---|---|---|---|---|---|
| DE | 17 | 14 | €183.00 | €244.41 | €387.99 | €188.99 | eBay |
| FR | 10 | 8 | €199.98 | €246.26 | €387.99 | €199.98 | Cdiscount.com (Marketplace) |
| IT | 18 | 16 | €195.99 | €238.03 | €387.99 | €202.99 | prezzoforte.it |
Read these as summaries of the offers returned, not an exhaustive market census:
-
Keep price and shipping together. The sample German minimum is €183 before shipping and €188.99 including listed shipping. Check
totalPriceWithShippingand the delivery destination; this field alone does not establish cross-border landed cost or account for every tax, duty or discount. - Keep the comparison consistent. The three sample medians are within €10 of each other, but one snapshot cannot establish price stability. Use the same product, market, currency and offer limit for repeated comparisons. UK prices are in GBP; the other five markets use EUR. Do not rank those raw numbers as if they were the same currency.
What an offer row looks like
{
"type": "offer",
"productName": "Apple AirPods Pro 2",
"market": "de",
"position": 1,
"shopName": "eBay",
"offerTitle": "Apple AirPods Pro 2 mit USB-C MagSafe Case",
"price": 183,
"shippingCost": 5.99,
"totalPriceWithShipping": 188.99,
"currency": "EUR",
"deliveryTime": "Do. 15.10.–Di. 20.10.2026",
"shopRating": 5,
"shopReviews": 2012
}
Export competitor shop offers to CSV
If you need a spreadsheet of competing shops' offers, first distinguish that task from publishing your own catalogue. Idealo's merchant integration FAQ describes sending your product and offer data to idealo through its offer API or an exported feed. That merchant-upload workflow does not answer the competitor-read question here. TubeText's Actor is a third-party tool, not idealo's official merchant API.
Build a reviewable shop-level export
Use reviewed product links or IDs, select the markets, keep includeOfferRows: true, and choose a consistent maxOffersPerMarket. After a completed run, choose the Offers view and export CSV. If you export the mixed dataset instead, keep type: "offer" rows for the offer table and retain summary/error/no-offer rows separately. A summary row is not another shop.
Keep these columns from the documented output. Fields are optional; a column name is not a guarantee that every row contains a value.
| Comparison column | Documented field | How to use it |
|---|---|---|
| Product reference |
productId, productName
|
Preserve the reviewed input ID/link alongside the export. If an offer row lacks its ID, attach it only from unambiguous run context, never from a name-only guess. |
| Market and currency |
market, marketSite, currency
|
Partition comparisons by market and currency. |
| Shop and offer |
shopName, offerTitle, offerUrl
|
Retain the title and source link for variant, condition and offer checks. |
| Item price | price |
Compare the item's stated price separately from delivery. |
| Shipping | shippingCost |
Keep missing or unclear shipping unknown, not zero. |
| Listed delivered total | totalPriceWithShipping |
Use only when the amount and delivery basis are comparable; this is not a guaranteed checkout or cross-border landed cost. |
Add your own observation timestamp and run/dataset reference beside each export. These are bookkeeping columns you maintain, not timestamp fields promised by this output schema. Preserve position if useful, but do not use a changing rank as an offer identifier.
Worked example: item price and delivered price give different orders
Everything in this table is fictional: the shops, product and prices are invented to demonstrate a comparison, not collected results. Assume one reviewed product, the same variant and condition, market de, currency EUR, and the same delivery destination and terms. The labels below correspond to shopName, price, shippingCost and totalPriceWithShipping.
| Fictional shop | Item price (EUR) | Listed shipping (EUR) | Listed delivered total (EUR) | Delivered-price treatment |
|---|---|---|---|---|
| Demo Shop A | 189.00 | 8.00 | 197.00 | Comparable |
| Demo Shop B | 192.00 | 0.00 | 192.00 | Comparable |
| Demo Shop C | 188.00 | Unknown | Unknown | Retain, but do not rank |
Sorting item prices gives C, A, B. Sorting the comparable delivered totals gives B, A, with C unresolved. B is the lowest known delivered total among these rows, not a proven cheapest offer across all shops. C's missing shipping must not silently become free delivery. In CSV, leave unknown numeric cells empty and add a separate review/status note; do not insert a numeric zero or mix the word “Unknown” into a numeric calculation.
Where price and shipping are both explicit, you can check their sum against the returned total. If values conflict, or shipping terms are unclear, flag the row for source review rather than silently replacing the returned value. The current input caps returned offers at your selected limit, so this table describes the collected set, not every seller in the market. EUR totals from different countries still need delivery, tax and product checks; GBP and EUR require a recorded exchange-rate date and conversion method before any cross-currency ranking.
Compare two snapshots you collected yourself
- Save both original exports, their collection times and run references. Keep the reviewed product list, markets and offer limit consistent. A later keyword search can select different products, so it is not a substitute for a fixed-product watchlist.
- Match the product and market, then review the shop, offer title and source link for the same variant, condition and delivery basis. The Actor's FAQ says marketplace offers are recorded under the marketplace name; individual seller names are not collected. The schema does not document a durable seller ID or offer ID. Do not merge all rows named eBay, or assume an unchanged title/link proves the same underlying seller. Keep ambiguous matches unresolved.
- Calculate changes only for reviewed matches with comparable values at both times. For example, if fictional Shop B changes from item 192 + shipping 0 = 192 EUR at observation A to 190 + 5 = 195 EUR at observation B, its item price fell by 2 EUR but its delivered total rose by 3 EUR. If Shop C has a total only in the second snapshot, its delivered-price change remains unknown.
- Label unmatched rows “newly observed,” “not observed in this snapshot” or “needs review.” Missing rows, errors or a position outside the offer limit do not prove a shop stopped selling, and they are not zero prices. Compare each offer separately before summarizing the market.
This builds history from your own saved observations. It does not retrieve earlier dates you never collected, establish native historical backfill, or make a run-completion webhook into a price-change alert. The comparisons are downstream work in your spreadsheet or database. No new Actor run was performed for this worked example; review the cost below before collecting your first small snapshot.
Cost
As verified on October 23, 2026, the Apify Free-plan rate is $0.003 per delivered product-market, including its summary and shop offers up to your selected limit. Three delivered product-markets therefore incur $0.009 in result-event fees; 1,000 products in two markets incur $6 in result-event fees if all 2,000 checks deliver results.
Actor Start is additional: $0.00005 per GB of allocated memory, with a minimum of one event. At the current default 512 MB allocation, that is $0.00005 per start. A market with no offers has no product-market result fee, but that does not make the whole run free. Check the current Pricing tab for your plan and any other applicable account or service charges before scheduling.
If you only need the price summary, turn off offer rows (includeOfferRows: false); billing remains per product-market. Without product links, searchQueries discovers top matches on idealo.de. Review those matches before using them for a fixed-product comparison.
Running it daily
Save a reviewed input as an Apify task and use an Apify schedule when you need recurring snapshots. Keep each run's dataset and collection time so your own spreadsheet or database can compare dates. A run-completion webhook reports that a run finished; detecting a price change or sending a threshold alert requires downstream comparison logic.
Missing offers or failed rows should stay separate from comparable prices, not become a zero price or an assumption that nothing changed. Start with a small product list, inspect the source offers, and review the cost before enabling a recurring schedule.
Questions or a market you need? Open an issue on the Actor's page. I read every one.
Top comments (0)