# Bike24 Scraper: Cycling Product Prices, Stock & Specs (`fayoussef/bike24-result-scraper`) Actor

Our bike24.com scraper effortlessly gathers URLs from all pages and extracts detailed information from each product page

- **URL**: https://apify.com/fayoussef/bike24-result-scraper.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Categories:** Automation, E-commerce, Developer tools
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### What does the Bike24 Scraper do?

The **Bike24 Scraper** lets you **scrape Bike24.com product data at scale**: names, brands, gross and net prices, RRP and discount, images, SKUs/GTINs, ratings, category paths, and **real-time per-variant stock levels**, exported as JSON, CSV, or Excel. Point it at any [Bike24.com](https://www.bike24.com/) category or listing URL and it returns clean, structured data at **$0.50 per 1,000 results**, the lowest rate in this category.

Built on the Apify platform, it comes with a **REST API, scheduling, residential proxy rotation, integrations, and run monitoring** out of the box, so you can automate recurring Bike24 price and stock tracking without maintaining any scraping infrastructure yourself.

### Why use the Bike24 Scraper?

Whether you sell, resell, or analyze cycling gear, up-to-date Bike24 data drives better decisions:

- **Price monitoring**: track Bike24 prices daily across brands and categories for competitive positioning.
- **Stock & availability intelligence**: read live per-size/variant stock from Bike24's internal API, not just page-level "in stock" flags.
- **E-commerce market research**: build cycling-gear catalogs with prices, images and stock for analysis or resale.
- **Drop-shipping & fulfillment**: check availability across hundreds of products to spot fulfillment opportunities.
- **Data aggregation**: feed a product database or price-comparison site with structured Bike24 data.

### How to scrape Bike24 data (step by step)

1. Open the **Input** tab.
2. Paste one or more **Bike24 URLs** (category/listing pages, or direct product pages).
3. (Optional) Set **Max concurrency** and keep the **Germany residential proxy** default for the fewest blocks.
4. Click **Start** and watch results stream into the dataset.
5. Download your data as **JSON, CSV, HTML, or Excel**, or pull it via the Apify API.

The Actor auto-detects each URL: **listing pages are paginated automatically** and give the full product record. Direct product URLs (ending in `/pXXXXX.html`) are also accepted, but Bike24 serves single product pages behind a browser check, so those return the product ID and live stock only. **For complete data, use category or listing URLs.**

### Input

| Field | Description |
|---|---|
| `start_urls` | One or more Bike24 category or product URLs to scrape. |
| `max_results` | Stop after this many products. Leave empty to scrape everything on the start URLs. |
| `max_concurrency` | Parallel requests (default 20). Higher is faster; lower it if you get blocked. |
| `proxy_configuration` | Proxy settings. Defaults to Apify **Residential** proxies in **Germany (DE)** to avoid 403 blocks. |

```json
{
  "start_urls": [
    { "url": "https://www.bike24.com/cycling/shoes" }
  ],
  "max_results": 100,
  "max_concurrency": 20,
  "proxy_configuration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Output

Each product becomes one dataset record. Download as **JSON, CSV, HTML, or Excel** from the dataset UI or REST API.

```json
{
  "id": "703883",
  "url": "https://www.bike24.com/p2703883.html",
  "name": "Deuter Mondego HB 8 Handlebar Bag - black",
  "shortName": "Mondego HB 8 Handlebar Bag - black",
  "brand": "Deuter",
  "price": 66.99,
  "priceNet": 56.2941,
  "currency": "EUR",
  "oldPrice": null,
  "recommendedRetailPrice": 75,
  "discountInPercent": 10,
  "isInSale": false,
  "skus": ["4046051149165"],
  "categories": ["Cycling", "Bike Accessories", "Bicycle Bags", "Handlebar Bags"],
  "averageRating": 5,
  "ratingCount": 1,
  "imageUrl": "https://images.bike24.com/media/510/i/mb/c5/43/7c/deuter-mondego-hb-8-handlebar-bag-black-1-1442746.jpg",
  "imageUrls": ["https://images.bike24.com/media/510/i/mb/c5/43/7c/deuter-mondego-hb-8-handlebar-bag-black-1-1442746.jpg"],
  "storeOnly": false,
  "isBulkyGood": false,
  "availability_details": [
    {
      "variant_id": "703883",
      "size_label": "",
      "stock_count": 3,
      "stock_status": "3 in stock now",
      "delivery_time": "Delivery time to Germany 1-3 working days**",
      "is_shippable": true
    }
  ]
}
```

### Data fields

| Field | Description |
|---|---|
| `id` | Bike24 internal product ID |
| `url` | Direct product page URL |
| `name` | Full product name, brand included |
| `shortName` | Product name without the brand |
| `brand` | Brand name |
| `price` / `currency` | Shelf price including VAT, and its currency (EUR) |
| `priceNet` | Price excluding VAT |
| `oldPrice` / `recommendedRetailPrice` / `discountInPercent` / `isInSale` | Pricing history and discount details |
| `skus` | EAN/GTIN codes for the product |
| `categories` | Category path, from department down to product type |
| `averageRating` / `ratingCount` | Customer rating and number of reviews |
| `imageUrl` / `imageUrls` | Main image and every gallery image |
| `storeOnly` / `isBulkyGood` | Availability and shipping flags |
| `availability_details[]` | Per size/variant: `variant_id`, `size_label`, `stock_count`, `stock_status`, `delivery_time`, `is_shippable` |

### How much does it cost to scrape Bike24?

Billing is pay-per-result at **$0.50 per 1,000 results**, half the cost of comparable Bike24 Actors, with no monthly base fee.

| Products scraped | Approx. cost |
|---|---|
| 1,000 | $0.50 |
| 10,000 | $5.00 |

**Your first results are free**, so you can test the output before any paid run.

### Tips for faster, cheaper scraping

- Raise **Max concurrency** (up to 50) for large jobs; the Actor uses HTTP/2 connection pooling to move quickly.
- Keep the **Germany residential proxy** default, since same-country IPs are the least likely to be blocked.
- Scope your **start URLs** to the exact categories you need so you don't spend compute on irrelevant products.
- Set **Max results** when you only need a sample. The Actor stops crawling the moment it hits the limit, so it never pays to fetch products it will not return.
- Use Apify **Scheduling** to re-run price/stock monitoring automatically.

### How to scrape Bike24 from an AI agent (Apify MCP)

This Actor is available as an **MCP server**, so AI agents like **Claude, ChatGPT, and Cursor** can call it directly:

```
https://mcp.apify.com/actors/fayoussef/bike24-result-parser
```

It's also callable via the standard **Apify REST API**. Full docs: <https://docs.apify.com/api/v2>.

### FAQ

**Is scraping Bike24 legal?**
Scraping publicly available product data is generally permissible, but you are responsible for complying with Bike24's terms and applicable laws. Use the data responsibly and consult legal advice for your specific use case. This Actor collects only public product information, no personal or login-gated data.

**Why was I getting a 403 error, and is it fixed?**
403 errors happen when a site blocks datacenter IPs. This Actor defaults to **Germany residential proxies**, and when a request is blocked it now retries on a **fresh exit IP** instead of giving up. If your Apify plan has no residential proxies, the Actor falls back to the proxy groups your account does have and says so in the log; a residential proxy is still the reliable option for Bike24.

**Does it return stock per size/variant?**
Yes. The `availability_details` array has one entry per size/variant with stock count, delivery time, and shippability, pulled live from Bike24's internal API.

**What output formats are available?**
JSON, CSV, HTML, and Excel, from the Apify dataset UI and REST API.

**Does it support scheduling?**
Yes. Use Apify's built-in scheduler for recurring price or stock monitoring.

**Can I scrape a single Bike24 product URL?**
Yes, but with less data. Bike24 puts single product pages behind a browser check, so a direct `/pXXXXX.html` URL returns the product ID and its live per-variant stock. Names, brands, prices and images come from listing pages, so point the Actor at the product's category URL to get the complete record.

**Is this a Bike24 API alternative?**
Yes. Bike24 has no public product API, so this Actor gives you structured, exportable data from any category or product page.

**Can I use this via API or MCP?**
Yes, via the Apify REST API or as an MCP server for AI agents (Claude, ChatGPT, Cursor).

**Can you add more fields?**
Additional fields can be added on request: open the **Issues** tab or contact support below.

### Support & custom solutions

- **Found a bug or need a new field?** Open the **Issues** tab on the Actor page.
- **Need a bigger data solution?** Combine Bike24 with other European cycling retailers, delivered on a schedule and integrated with your pricing system, email **youssefarhan24@gmail.com**.
- **Want a specific site scraped?** Suggest it at [automationbyexperts.com/apify](https://automationbyexperts.com/apify).
- **Ready to scale?** Unlock full pages and higher limits with an [Apify plan](https://apify.com/pricing?fpr=youssef).

*Disclaimer: This Actor is an independent tool and is not affiliated with or endorsed by Bike24. Scrape responsibly and in line with applicable terms and laws.*

# Actor input Schema

## `start_urls` (type: `array`):

URLs to start scraping (Listing or Product URLs).

## `max_results` (type: `integer`):

Stop after this many products. Leave empty to scrape every product on the start URLs. The Actor stops crawling as soon as the limit is reached, so a small number here means a short, cheap run.

## `max_concurrency` (type: `integer`):

Number of pages/products fetched in parallel. Higher is faster; 20 is a good balance for residential proxies. Lower it if you hit blocks.

## `proxy_configuration` (type: `object`):

Proxy settings. bike24.com blocks datacenter IPs, so RESIDENTIAL proxies from Germany (DE) are strongly recommended to avoid 403 errors.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.bike24.com/cycling/accessories/bike-bags/handlebar-bags?minPrice=63&maxPrice=83"
    }
  ],
  "max_results": 100,
  "max_concurrency": 20,
  "proxy_configuration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

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

Bike24 Result Parser

# 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 = {
    "start_urls": [
        {
            "url": "https://www.bike24.com/cycling/accessories/bike-bags/handlebar-bags?minPrice=63&maxPrice=83"
        }
    ],
    "max_results": 100,
    "proxy_configuration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/bike24-result-scraper").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 = {
    "start_urls": [{ "url": "https://www.bike24.com/cycling/accessories/bike-bags/handlebar-bags?minPrice=63&maxPrice=83" }],
    "max_results": 100,
    "proxy_configuration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/bike24-result-scraper").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 '{
  "start_urls": [
    {
      "url": "https://www.bike24.com/cycling/accessories/bike-bags/handlebar-bags?minPrice=63&maxPrice=83"
    }
  ],
  "max_results": 100,
  "proxy_configuration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call fayoussef/bike24-result-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fayoussef/bike24-result-scraper"
        }
    }
}

```

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/itIAm46I3aIIRRdpV/builds/RmBWb0E9gsZoKYOQN/openapi.json
