# Delivery Time Benchmark — Dutch Webshops (`codeclouds/levertijd-benchmark-webshops`) Actor

Compares the promised delivery time on product pages across independent Dutch electronics webshops (Alternate.nl, Azerty.nl).

- **URL**: https://apify.com/codeclouds/levertijd-benchmark-webshops.md
- **Developed by:** [Dennis](https://apify.com/codeclouds) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 levertijd gecontroleerds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Delivery Time Benchmark — Dutch Webshops

Reads the promised delivery time shown on a product page and normalizes it into a comparable
shipping estimate, so you can benchmark logistics claims across independent Dutch electronics
webshops. Currently supports **Alternate.nl** and **Azerty.nl**.

### When should an AI agent use this?

- "Which of these two webshops promises faster shipping for this laptop?"
- "Does this product page say it ships today, or is it on backorder?"
- "Compare the delivery promise on Alternate.nl versus Azerty.nl for these product URLs."
- "Is this product currently in stock, and how fast does the shop claim it ships?"
- "Track how a shop's stated delivery time for this product changes over the coming weeks."

### What this Actor does

- Fetches a list of product page URLs you supply, one or more per supported shop.
- Extracts the product name and the shop's own delivery/stock text — the literal wording as
  shown on the page, kept verbatim in the output.
- Normalizes that text into a `deliveryPromiseType` (e.g. ships today, ships next business day,
  a days range, or backorder/unavailable) plus a `shipMinDays`/`shipMaxDays` range, so results
  from different shops with different wording become directly comparable.
- Does **not** measure actual, real-world delivery performance — only the promise stated on the
  page at the time of the check. See Legal below.

### Input

| Field | Type | Description |
|---|---|---|
| `productUrls` | array of strings | Product page URLs to check (not category/listing pages). Mix shops freely to benchmark the same product category across them. |
| `maxConcurrency` | integer | How many pages to fetch in parallel. Default 3 — kept low deliberately (see Legal). |

### Output

One dataset item per successfully checked product page:

```json
{
  "shop": "alternate.nl",
  "productUrl": "https://www.alternate.nl/HP/EliteBook-8-G2i-DW7K2ET-ABH-14-inch-Copilotplus-laptop/html/product/1950510",
  "productName": "HP EliteBook 8 G2i (DW7K2ET#ABH) 14\" Copilot+ laptop (Zilver | Core Ultra 7 355 | Intel Graphics | 32 GB | 512 GB SSD)",
  "deliveryTextRaw": "Op voorraad voor 22:00 uur besteld, vandaag verzonden",
  "deliveryPromiseType": "ships_same_day",
  "shipMinDays": 0,
  "shipMaxDays": 0,
  "checkedAt": "2026-08-05T14:21:20.501Z"
}
```

`deliveryPromiseType` is one of: `ships_same_day`, `ships_next_business_day`,
`ships_in_days_range`, `backorder_or_unavailable`, `unknown` (text present but not recognized —
`deliveryTextRaw` is always kept so you can read the shop's exact wording yourself).

### Use cases

- Dropshippers and marketplace sellers benchmarking their own delivery promise against
  competing webshops for the same product category.
- Price/logistics comparison sites adding a delivery-speed data point alongside price.
- E-commerce consultants advising clients on their logistics competitiveness versus peers.
- Tracking a shop's own stated delivery time over a season (e.g. around Black Friday/Christmas)
  by scheduling repeated runs on the same product URLs.

### Pricing

This Actor uses Apify's Pay-Per-Event (PPE) pricing model.

- **Actor Start:** $0.00005 (Apify default)
- **Delivery time checked:** $0.003 per successfully checked product page

### Legal

- Data source: the public product pages of Alternate.nl and Azerty.nl — no login required, no
  personal data involved, purely product/stock/delivery text.
- Both shops' `robots.txt` allow general-purpose crawlers on product pages at the time of
  building this Actor (2026-08-05); Azerty.nl explicitly asks crawlers to keep request volume
  low and to identify themselves, which this Actor does via its User-Agent and a low default
  `maxConcurrency`.
- This Actor reports the **promised** delivery time as stated on the page at the moment of the
  check — it does not verify whether a shop actually delivers within that window. Don't use a
  single result as a guarantee of real-world delivery performance.
- Website structures change. If a shop redesigns its product page, extraction may silently
  return `deliveryTextRaw: null` for that shop until the Actor is updated — always sanity-check
  results against a shop's page directly if something looks off.

### FAQ

**Q: Why only two shops?**
A: Both are verified working end-to-end (real product pages, real delivery-time text, checked
live). More independent Dutch shops can be added — this uses a lightweight per-shop adapter, so
new shops are a small addition rather than a rewrite. Suggestions for shops to add next are
welcome.

**Q: Does this tell me when my order will actually arrive?**
A: No — it reports what the shop's product page *claims* at the time of the check ("beloofde
levertijd"). Actual delivery performance would require a separate, real-order-based measurement.

**Q: Can I check a category/listing page instead of individual products?**
A: Not in this version — supply the specific product page URLs you want to compare.

***

*Zoekwoorden: levertijd vergelijken, bezorgtijd webshop, levertijdvergelijking, verzendtijd
concurrent, levertijd benchmark elektronica.*

### Keywords

netherlands, e-commerce, delivery-time, shipping, logistics, benchmark, alternate.nl, azerty.nl,
webshop-monitoring, dropshipping

### Changelog

#### 0.1.0

- Initial release: supports Alternate.nl and Azerty.nl product pages.

# Actor input Schema

## `productUrls` (type: `array`):

Product page URLs to check. Each URL must be a product page on one of the supported shops (currently alternate.nl and azerty.nl) — category/listing pages are not supported. Mixing shops in one run is fine, so you can benchmark the same product category across shops.

## `maxConcurrency` (type: `integer`):

How many product pages to fetch at the same time. Keep this low (2-4) — several supported shops explicitly ask crawlers to keep their request rate low, and a lower value reduces the risk of getting rate-limited or blocked.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.alternate.nl/HP/EliteBook-8-G2i-DW7K2ET-ABH-14-inch-Copilotplus-laptop/html/product/1950510",
    "https://azerty.nl/product/samsung-galaxy-book6-14-w11pro-u7-32gb-512gb-ee/9523559"
  ],
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (type: `string`):

Alle resultaten in het default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "productUrls": [
        "https://www.alternate.nl/HP/EliteBook-8-G2i-DW7K2ET-ABH-14-inch-Copilotplus-laptop/html/product/1950510",
        "https://azerty.nl/product/samsung-galaxy-book6-14-w11pro-u7-32gb-512gb-ee/9523559"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("codeclouds/levertijd-benchmark-webshops").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "productUrls": [
        "https://www.alternate.nl/HP/EliteBook-8-G2i-DW7K2ET-ABH-14-inch-Copilotplus-laptop/html/product/1950510",
        "https://azerty.nl/product/samsung-galaxy-book6-14-w11pro-u7-32gb-512gb-ee/9523559",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("codeclouds/levertijd-benchmark-webshops").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productUrls": [
    "https://www.alternate.nl/HP/EliteBook-8-G2i-DW7K2ET-ABH-14-inch-Copilotplus-laptop/html/product/1950510",
    "https://azerty.nl/product/samsung-galaxy-book6-14-w11pro-u7-32gb-512gb-ee/9523559"
  ]
}' |
apify call codeclouds/levertijd-benchmark-webshops --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,codeclouds/levertijd-benchmark-webshops"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JypuyKxSB3GnbpwIO/builds/tx85drm1mquJwFhjg/openapi.json
