# AS Adventure Scraper — Belgian Outdoor & Sports Products (`studio-amba/asadventure-scraper`) Actor

Scrape products, prices, ratings, and availability from asadventure.com. Belgium's leading outdoor, hiking, camping & sports retailer. Supports search, category browsing, and full catalog via sitemap.

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

## Pricing

from $2.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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AS Adventure Scraper -- Belgian Outdoor & Adventure Gear Products

Scrape products, prices, ratings, and availability from AS Adventure -- Belgium's largest outdoor retailer. Hiking boots, backpacks, tents, climbing gear, ski equipment, and technical apparel from brands like The North Face, Fjallraven, Patagonia, and Arc'teryx.

### What is AS Adventure Scraper?

AS Adventure (asadventure.com) is Belgium's go-to destination for outdoor and sports gear, part of the JBC Group. With 60+ stores and a comprehensive online catalog, they stock everything from a EUR 15 hiking sock to a EUR 800 Gore-Tex jacket. This scraper extracts their product data via both their search API and product page JSON-LD.

Why people use it:

- **Outdoor gear price tracking** -- Monitor prices on technical gear across brands. Track when The North Face jackets go on markdown or when new Fjallraven collections hit the site.
- **Brand distribution monitoring** -- If you manufacture or distribute outdoor brands in Belgium, see how your products are priced and positioned relative to competitors at the country's biggest outdoor retailer.
- **Seasonal trend analysis** -- Outdoor retail is highly seasonal. Track when winter gear goes on clearance, when camping gear launches for spring, and how pricing shifts throughout the year.
- **Product research & comparison** -- Building an outdoor gear comparison site or review platform? AS Adventure's catalog gives you structured data on thousands of products with ratings and specs.
- **Inventory intelligence** -- Track availability of specific products. Know when popular sizes are back in stock or when limited-run gear becomes available.

### What data does AS Adventure Scraper extract?

- 🎒 **Product name** -- full product title
- 🏷️ **Brand** -- The North Face, Fjallraven, Patagonia, Jack Wolfskin, etc.
- 💰 **Price** and currency (EUR)
- 💸 **Original price** -- when items are marked down
- 📦 **SKU and product code**
- ✅ **Stock availability**
- ⭐ **Customer rating** and review count
- 🖼️ **Product images** -- high-resolution CDN images
- 📝 **Description** -- product details
- 📂 **Category breadcrumbs** -- full hierarchy (e.g., Rugzakken > Dagrugzakken)
- 🎨 **Color** -- when available
- 🌐 **Language** -- Dutch, French, or English

### How to scrape AS Adventure

Three input strategies, plus a language selector.

#### Search by keyword

Find products using AS Adventure's search API:

```json
{
    "searchQuery": "rugzak",
    "maxResults": 100,
    "language": "nl"
}
```

Good search terms: brand names ("the north face"), product types ("wandelschoenen", "tent", "slaapzak"), or specific models.

#### Browse categories

Pass one or more category URLs:

```json
{
    "categoryUrls": [
        { "url": "https://www.asadventure.com/nl/c/uitrusting/rugzakken.html" }
    ],
    "maxResults": 200
}
```

Category URLs follow the pattern `https://www.asadventure.com/{lang}/c/{category-path}.html`. Brand pages (`/nl/merken/the-north-face.html`) work the same way. If a category URL no longer exists on the site (AS Adventure moved many categories in 2026), the scraper searches the site for the category name and uses the page the site answers with.

#### Empty input

With no search term and no category URL, the scraper searches for `rugzak` (backpacks). For a large part of the catalogue, list the top-level category pages you need as `categoryUrls`.

#### Language

AS Adventure serves Belgium in three languages:

| Value | Language |
|-------|----------|
| `nl` | Nederlands (default) |
| `fr` | Francais |
| `en` | English |

### Output

A typical outdoor gear product from AS Adventure:

```json
{
    "name": "The North Face Borealis Rugzak 28L",
    "brand": "The North Face",
    "price": 110.00,
    "currency": "EUR",
    "url": "https://www.asadventure.com/nl/p/the-north-face-borealis-rugzak-28l-3KV3.html",
    "scrapedAt": "2025-04-03T08:45:00.000Z",
    "originalPrice": 120.00,
    "productId": "3KV3",
    "inStock": true,
    "rating": 4.6,
    "reviewCount": 215,
    "imageUrl": "https://image.asadventure.com/productimages/1200x1200/the-north-face-borealis-rugzak.jpg",
    "description": "De Borealis is een veelzijdige rugzak met een FlexVent-schorsysteem, gewatteerd laptopvak en meerdere compartimenten. Perfect voor dagelijks gebruik en dagtochten.",
    "category": "Rugzakken",
    "categories": ["Rugzakken en tassen", "Rugzakken"],
    "color": "TNF Black",
    "language": "nl"
}
```

### How much does it cost?

| Scenario | Estimated cost |
|----------|---------------|
| 100 products (search API) | ~$0.01 |
| 500 products (category + detail pages) | ~$0.10 |
| 1,000 products (large category) | ~$0.20 |

The scraper lists products from the search API or the category page (48-52 per page), then reads each product page for EAN, rating, description and category. That is one request per product. 100 products take about 30 seconds. If the run is about to hit its timeout, the remaining products are delivered with the listing fields only.

### Can I integrate?

Route AS Adventure data into your workflow:

- **Google Sheets** -- maintain a live spreadsheet of outdoor gear prices
- **Webhooks** -- trigger alerts when seasonal sales start
- **Zapier / Make** -- automate price monitoring and alerts
- **Slack** -- notifications for price drops on gear you're watching
- **Amazon S3 / Google Cloud Storage** -- archive seasonal data
- **Databases** -- feed into your product comparison platform

### Can I use it as an API?

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/asadventure-scraper").call(run_input={
    "searchQuery": "wandelschoenen",
    "maxResults": 40,
    "language": "nl",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['brand']} - {item['name']} -- EUR {item['price']}")
```

#### JavaScript

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

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

const run = await client.actor('studio-amba/asadventure-scraper').call({
    searchQuery: 'wandelschoenen',
    maxResults: 40,
    language: 'nl',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(`${item.brand} - ${item.name} -- EUR ${item.price}`));
```

### FAQ

**Does the scraper use AS Adventure's API?**
Yes. A keyword search calls AS Adventure's search API. For most category words the site answers with a category page, and the scraper reads that page's product list. Each product page is then read for its structured product data (EAN, rating, description, breadcrumb category).

**Can I scrape specific brands?**
Use the brand name as your search query, e.g., `"searchQuery": "fjallraven"`. The search API returns products matching that brand.

**Are sale/markdown items included?**
Yes. When a product is on sale, both `price` (current) and `originalPrice` (was) are included in the output.

**What about product variants (sizes, colors)?**
The scraper returns the primary variant visible on the product page. Size-level availability data is partially available through the search API.

**How often does AS Adventure update their catalog?**
New collections launch seasonally (spring/summer, fall/winter). Sales typically start in January and July. Weekly scraping captures most pricing changes.

### Limitations

- A search term the site has no products for ends the run with a "no products found" message instead of returning unrelated products.
- The search API redirects most category and brand words to a category or brand page. The scraper follows that redirect with its filters, so results match what the site shows for the same search.
- Some product pages may lack complete JSON-LD data. The scraper extracts what's available.
- Stock status is for online availability only, not individual store stock.
- Category breadcrumbs require visiting individual product pages and may not be available in search API mode.

### Other retail and fashion scrapers

Expand your outdoor and retail data coverage:

- [Bergfreunde Scraper](https://apify.com/studio-amba/bergfreunde-scraper) -- German specialist for climbing and hiking
- [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 fashion from 200+ designers

### Your feedback

Questions or issues? Reach out through the Apify Store actor page. We maintain this scraper and fix problems quickly.

# Actor input Schema

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

Search for products by keyword (e.g., 'rugzak', 'wandelschoenen', 'the north face'). Uses the AS Adventure search API.

## `categoryUrls` (type: `array`):

One or more AS Adventure category page URLs to scrape. Example: https://www.asadventure.com/nl/c/heren.html

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

Maximum number of products to return.

## `language` (type: `string`):

Language for product data. Affects URL prefix and search locale.

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

Proxy settings for better reliability.

## Actor input object example

```json
{
  "searchQuery": "rugzak",
  "categoryUrls": [
    {
      "url": "https://www.asadventure.com/nl/c/uitrusting/rugzakken.html"
    }
  ],
  "maxResults": 100,
  "language": "nl",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}
```

# Actor output Schema

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

No description

# 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": "rugzak",
    "categoryUrls": [
        {
            "url": "https://www.asadventure.com/nl/c/uitrusting/rugzakken.html"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/asadventure-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": "rugzak",
    "categoryUrls": [{ "url": "https://www.asadventure.com/nl/c/uitrusting/rugzakken.html" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/asadventure-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 '{
  "searchQuery": "rugzak",
  "categoryUrls": [
    {
      "url": "https://www.asadventure.com/nl/c/uitrusting/rugzakken.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}' |
apify call studio-amba/asadventure-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/asadventure-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/ahP5fTmV857pdav5f/builds/dOPmQovICCHxnzAWu/openapi.json
