# Bergfreunde Scraper — Climbing & Outdoor Gear Prices (`studio-amba/bergfreunde-scraper`) Actor

Scrape climbing and outdoor gear from Bergfreunde.de — Germany's specialist retailer for technical mountain equipment, ropes, harnesses, and hiking gear.

- **URL**: https://apify.com/studio-amba/bergfreunde-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Bergfreunde Scraper -- German Outdoor, Climbing & Hiking Gear

Scrape products, prices, ratings, specs, and stock from bergfreunde.de -- Germany's leading specialist retailer for climbing, hiking, alpinism, and technical outdoor equipment. From EUR 40 climbing shoes to EUR 600 hardshell jackets, get the data you need.

### What is Bergfreunde Scraper?

Bergfreunde is a German e-commerce specialist focused squarely on technical outdoor gear. Unlike generalist sports retailers, their catalog goes deep: climbing shoes, harnesses, carabiners, ropes, bouldering gear, alpine backpacks, hardshell jackets, hiking boots, and mountaineering equipment from brands like La Sportiva, Petzl, Black Diamond, Arc'teryx, and Mammut. This scraper extracts that specialist catalog.

Who benefits:

- **Climbing & outdoor gear price monitoring** -- Bergfreunde is a price leader in the German-speaking outdoor market. Track prices on technical gear to find the best buying windows or monitor competitor pricing.
- **Product research for outdoor brands** -- If you manufacture or distribute outdoor equipment, monitor how your products are positioned, priced, and rated against competitors at Germany's top specialist retailer.
- **Technical spec aggregation** -- Bergfreunde provides detailed specs on gear (weight, materials, UIAA certifications, protection ratings). Scrape these for comparison databases or review sites.
- **Seasonal markdown tracking** -- Outdoor gear follows predictable seasonal cycles. Track when last season's models get discounted and by how much.
- **Affiliate content creation** -- Build data-driven gear guides, comparison tables, and deal alerts using structured product data with ratings, specs, and pricing.

### What data does Bergfreunde Scraper extract?

Each product record is rich with technical detail:

- 🧗 **Product name** -- full product title
- 🏷️ **Brand** -- La Sportiva, Petzl, Arc'teryx, Mammut, Black Diamond, etc.
- 💰 **Current price** in EUR
- 💸 **Original price** and discount percentage (e.g., "-30%")
- 🔢 **SKU, EAN barcode, and MPN** -- multiple product identifiers
- ✅ **Stock availability** -- per-variant stock checking
- ⭐ **Customer rating** and review count
- 🖼️ **Product images** -- multiple angles at high resolution
- 📝 **Description** -- detailed product description
- 📂 **Category breadcrumbs** -- e.g., Klettern > Kletterschuhe > Sportkletterschuhe
- 🔧 **Technical specs** -- weight, material, certifications, protection ratings
- 🚻 **Gender** -- men's, women's, unisex

### How to scrape Bergfreunde

#### Search by keyword

Find products using Bergfreunde's search:

```json
{
    "searchQuery": "kletterschuhe",
    "maxResults": 100
}
````

Searches work in German. Good terms: "kletterschuhe" (climbing shoes), "hardshell jacke" (hardshell jacket), "rucksack" (backpack), "kletterhelm" (climbing helmet), "seil" (rope).

#### Browse a category

Pass a Bergfreunde category URL for targeted scraping:

```json
{
    "categoryUrl": "https://www.bergfreunde.de/kletterschuhe/",
    "maxResults": 200
}
```

#### Important

At least one of `searchQuery` or `categoryUrl` is required. The scraper does not have a default crawl mode.

**Tip:** Bergfreunde category URLs are clean slugs like `/kletterschuhe/`, `/hardshell-jacken/`, `/kletterhelme/`. Browse the site to find the category you need.

### Output

A typical climbing gear product:

```json
{
    "name": "La Sportiva Solution Comp - Kletterschuhe",
    "brand": "La Sportiva",
    "price": 169.95,
    "currency": "EUR",
    "url": "https://www.bergfreunde.de/la-sportiva-solution-comp-kletterschuhe/",
    "scrapedAt": "2025-04-03T13:30:00.000Z",
    "originalPrice": 189.95,
    "discount": "-11%",
    "sku": "270101",
    "ean": "8020647745012",
    "mpn": "20Z",
    "inStock": true,
    "rating": 4.8,
    "reviewCount": 156,
    "imageUrl": "https://www.bergfreunde.de/media/la-sportiva-solution-comp.jpg",
    "imageUrls": [
        "https://bfgcdn.com/out/pictures/generated/product/600_600_90/la-sportiva-solution-comp-1.jpg",
        "https://bfgcdn.com/out/pictures/generated/product/600_600_90/la-sportiva-solution-comp-2.jpg",
        "https://bfgcdn.com/out/pictures/generated/product/600_600_90/la-sportiva-solution-comp-3.jpg"
    ],
    "description": "Der La Sportiva Solution Comp ist ein hochpraziser Kletterschuh fur Wettkampf und anspruchsvolles Sportklettern. Die P3-Technologie sorgt fur langanhaltende Downturn-Performance.",
    "categories": ["Klettern", "Kletterschuhe", "Sportkletterschuhe"],
    "category": "Klettern > Kletterschuhe > Sportkletterschuhe",
    "specs": {
        "Gewicht": "210 g (Gr. 40)",
        "Obermaterial": "Leder, Mikrofaser",
        "Sohle": "Vibram XS Grip2",
        "Verschluss": "Schnurung + Velcro",
        "Leisten": "P3 Permanent Power Platform"
    },
    "gender": "Male"
}
```

### How much does it cost?

| Scenario | Estimated cost |
|----------|---------------|
| 50 products (search) | ~$0.03 |
| 200 products (category) | ~$0.10 |
| 1,000 products | ~$0.40 |
| Large catalog crawl | ~$1.00+ |

Each product requires a detail page visit for full data (specs, ratings, multiple images). The scraper uses CheerioCrawler for efficient, browser-free extraction.

### Can I integrate?

Feed Bergfreunde data into your pipeline:

- **Google Sheets** -- track climbing gear prices in a spreadsheet
- **Webhooks** -- get notified when specific gear goes on sale
- **Zapier / Make** -- automate price alerts and comparison workflows
- **Slack** -- alerts for deals on brands you're watching
- **Cloud storage** -- archive seasonal pricing to S3 or Google Cloud
- **Databases** -- power your gear comparison site or app

### Can I use it as an API?

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/bergfreunde-scraper").call(run_input={
    "searchQuery": "hardshell jacke",
    "maxResults": 30,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    specs = item.get('specs', {})
    weight = specs.get('Gewicht', 'N/A')
    print(f"{item['brand']} - {item['name']} -- EUR {item['price']} ({weight})")
```

#### JavaScript

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/bergfreunde-scraper').call({
    searchQuery: 'hardshell jacke',
    maxResults: 30,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    const weight = item.specs?.Gewicht || 'N/A';
    console.log(`${item.brand} - ${item.name} -- EUR ${item.price} (${weight})`);
});
```

### FAQ

**Is search in German only?**
Yes. Bergfreunde.de is a German-language site. Use German search terms for best results. Brand names and model names work regardless of language.

**Does it extract size-specific availability?**
The scraper checks variant-level stock from the JSON-LD ProductGroup data. In-stock status reflects whether at least one variant is available.

**Can I get data from bergfreunde.eu (international)?**
This scraper targets bergfreunde.de (German site). Other country versions have different URL structures.

**How detailed are the specs?**
Very detailed for technical gear. Climbing shoes include sole type, closure system, and last technology. Jackets include waterproof ratings, breathability, and weight. The level of detail depends on the product category.

**How do I track price history?**
Schedule the scraper to run daily or weekly. Each run captures current prices. Compare datasets over time to build price history charts.

**What about product reviews?**
The scraper extracts aggregate rating and review count. Individual review text is not extracted.

### Limitations

- The scraper requires either a `searchQuery` or `categoryUrl`. There is no default "scrape everything" mode.
- Product URLs on Bergfreunde are clean slugs without IDs, which makes them harder to match across runs. Use the `sku` or `ean` field for reliable product matching.
- Bergfreunde may rate-limit aggressive scraping. The scraper uses browser-like headers to mitigate this.
- Some older or clearance products may have incomplete JSON-LD data. The scraper falls back to HTML extraction in these cases.
- Specs are extracted from definition lists in HTML and may vary in format between product categories.

### Other retail and fashion scrapers

Build comprehensive outdoor and sports retail intelligence:

- [AS Adventure Scraper](https://apify.com/studio-amba/asadventure-scraper) -- Belgium's biggest outdoor retailer
- [Intersport Scraper](https://apify.com/studio-amba/intersport-scraper) -- Europe's largest sports retail chain
- [Helly Hansen Scraper](https://apify.com/studio-amba/hellyhansen-scraper) -- Norwegian outdoor and sailing apparel
- [Action Scraper](https://apify.com/studio-amba/action-scraper) -- Pan-European discount retailer
- [Kruidvat Scraper](https://apify.com/studio-amba/kruidvat-scraper) -- Belgian drugstore and beauty
- [ICI PARIS XL Scraper](https://apify.com/studio-amba/iciparisxl-scraper) -- Belgian beauty and perfume
- [Rituals Scraper](https://apify.com/studio-amba/rituals-scraper) -- Premium cosmetics and home fragrance
- [Mytheresa Scraper](https://apify.com/studio-amba/mytheresa-scraper) -- Luxury designer fashion

### Your feedback

Spotted an issue or need a feature? Let us know on the Apify Store actor page. We keep this scraper maintained and respond to feedback.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by keyword (e.g., 'kletterschuhe', 'hardshell jacke', 'rucksack'). Uses bergfreunde.de search.

## `categoryUrl` (type: `string`):

A bergfreunde.de category page URL to scrape all products from. Example: https://www.bergfreunde.de/kletterschuhe/

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `proxyConfiguration` (type: `object`):

Proxy settings. Recommended for large crawls to avoid rate limiting.

## Actor input object example

```json
{
  "searchQuery": "kletterschuhe",
  "maxResults": 100
}
```

# 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 = {
    "searchQuery": "kletterschuhe"
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/bergfreunde-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 = { "searchQuery": "kletterschuhe" }

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/bergfreunde-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "kletterschuhe"
}' |
apify call studio-amba/bergfreunde-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/bergfreunde-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bergfreunde Scraper — Climbing & Outdoor Gear Prices",
        "description": "Scrape climbing and outdoor gear from Bergfreunde.de — Germany's specialist retailer for technical mountain equipment, ropes, harnesses, and hiking gear.",
        "version": "0.1",
        "x-build-id": "Ol33WJOGbDRBOicIQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~bergfreunde-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-bergfreunde-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~bergfreunde-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-bergfreunde-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~bergfreunde-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-bergfreunde-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search for products by keyword (e.g., 'kletterschuhe', 'hardshell jacke', 'rucksack'). Uses bergfreunde.de search."
                    },
                    "categoryUrl": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "A bergfreunde.de category page URL to scrape all products from. Example: https://www.bergfreunde.de/kletterschuhe/"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of products to return.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Recommended for large crawls to avoid rate limiting."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
