# Systembolaget Scraper — Swedish Alcohol Catalog & Prices (`studio-amba/systembolaget-scraper`) Actor

Scrape Systembolaget, Sweden's state alcohol retail monopoly. Search 27,000+ wines, beers, and spirits by keyword or category and extract names, prices in SEK, alcohol percentage, volume, country, producer, vintage, and organic labels as clean JSON. No login or cookies required.

- **URL**: https://apify.com/studio-amba/systembolaget-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% 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/platform/actors/running/actors-in-store#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

## Systembolaget Scraper — Swedish Alcohol Catalog & Prices

Scrape product data from [Systembolaget](https://www.systembolaget.se), Sweden's state-owned alcohol retail monopoly. Systembolaget is the only retailer allowed to sell beverages above 3.5% ABV in Sweden, which makes its catalog the single authoritative source for alcohol prices and availability in the country — roughly 27,000 wines, beers, spirits, ciders, and alcohol-free alternatives.

Search by keyword or browse a full category, and get clean JSON with names, prices in SEK, alcohol percentage, volume, country of origin, producer, vintage, and organic labels. No login, no cookies, no browser required.

### What you get

- **Full catalog access** — around 27,000 products across every category Systembolaget sells
- **Prices in SEK** — the official state retail price, updated as Systembolaget updates it
- **Product details** — ABV, volume, country, producer, vintage, organic / ethical flags
- **Stock signal** — whether a product is currently orderable or out of stock
- **Direct product URLs** — deep links to each product page on systembolaget.se

### Use cases

- **Price monitoring** — track Swedish state alcohol prices over time, including yearly price revisions
- **Assortment analysis** — which producers, countries, and styles are listed in the Swedish monopoly
- **Import and export research** — check whether your product (or a competitor's) is in the Swedish assortment and at what price
- **Beverage market intelligence** — Sweden is one of the largest wine markets in the Nordics; the monopoly catalog is its complete picture
- **Whisky, wine, and beer databases** — enrich your own product data with official Swedish pricing

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | string | Search keyword, e.g. `whisky`, `rioja`, `IPA`, or a producer name. Defaults to `whisky` when both query and category are empty. |
| `category` | string | Optional top-level category filter (Swedish): `Öl`, `Vin`, `Sprit`, `Cider & blanddrycker`, `Alkoholfritt`. Works alone or combined with a query. |
| `maxResults` | integer | Maximum number of products to return. Default `100`. |
| `proxyConfiguration` | object | Apify proxy settings. Datacenter proxies work; Swedish residential (`RESIDENTIAL`, country `SE`) is the fallback if you ever see blocks. |

Example input:

```json
{
    "searchQuery": "whisky",
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

Browse a full category instead of searching:

```json
{
    "category": "Öl",
    "maxResults": 5000,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

One dataset item per product:

```json
{
    "productName": "Thy Whisky Distillery",
    "productNameThin": "Danish organic single malt whisky",
    "category": "Sprit > Whisky > Maltwhisky",
    "price": 799,
    "currency": "SEK",
    "alcoholPercent": 48,
    "volumeMl": 700,
    "volumeText": "700 ml",
    "country": "Danmark",
    "producer": "Thy Whisky Distillery",
    "organic": true,
    "inStock": true,
    "productNumber": "8415801",
    "productId": "47346073",
    "url": "https://www.systembolaget.se/produkt/sprit/thy-whisky-distillery-8415801/",
    "imageUrl": "https://product-cdn.systembolaget.se/productimages/47346073/47346073",
    "scrapedAt": "2026-07-11T19:45:30.892Z"
}
```

Wines additionally carry `vintage` when Systembolaget publishes it.

### How to scrape Systembolaget data

1. Open the actor and press **Try for free** (or run it via the Apify API).
2. Enter a `searchQuery` (any language works — the catalog search matches product names, styles, and producers) or set a `category` to browse it in full.
3. Set `maxResults`. For the complete catalog, leave the query empty, leave the category empty per run or loop over categories, and raise `maxResults` accordingly.
4. Run the actor. Results land in the dataset and can be exported as JSON, CSV, or Excel, or fetched through the [Apify API](https://docs.apify.com/api/v2).

To run it on a schedule (for example weekly price tracking), create a Schedule in the Apify Console and point it at this actor with your saved input.

### FAQ

#### Is scraping Systembolaget legal?

The actor only collects publicly available product information (names, prices, attributes) that anyone can see on systembolaget.se. It does not collect personal data and does not log in. Always check that your use of the data complies with applicable law and the site's terms.

#### How current is the data?

Every run fetches live data from Systembolaget's own product API — the same source the website uses. Prices and availability are as fresh as the moment you run the actor.

#### Why do some products have no image or vintage?

Systembolaget does not publish images for every article, and `vintage` only exists for wines where a year is relevant. Fields that are absent at the source are simply omitted from the item.

#### Does it need Swedish proxies?

No. The product API responds to datacenter proxies (the default `useApifyProxy: true` is enough). If Systembolaget ever tightens access, switch the proxy configuration to the `RESIDENTIAL` group with country `SE`.

#### Can I get the whole catalog in one run?

Yes. Set `maxResults` to 30000 with an empty search query and the actor pages through the complete assortment. A full-catalog run takes a few minutes since data comes from a JSON API, not rendered pages.

### Related actors

Scraping the Nordics? These actors pair well with this one:

- [Alko Scraper](https://apify.com/studio-amba/alko-scraper) — Finland's state alcohol monopoly: the same data for the Finnish market
- [Elgiganten Scraper](https://apify.com/studio-amba/elgiganten-se-scraper) — Sweden's largest electronics retailer
- [Gigantti Scraper](https://apify.com/studio-amba/gigantti-fi-scraper) — Finland's largest electronics retailer
- [Apotea Scraper](https://apify.com/studio-amba/apotea-scraper) — Sweden's largest online pharmacy
- [Apoteket Scraper](https://apify.com/studio-amba/apoteket-scraper) — Sweden's state-owned pharmacy chain

### Support

Found an issue or missing a field you need? Open an issue on the actor's **Issues** tab in the Apify Console and it will be picked up quickly.

# Actor input Schema

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

Product search keyword, e.g. 'whisky', 'rioja', 'IPA', or a producer name. Leave empty together with an empty category to get the default 'whisky' search, or set only a category to browse it in full.

## `category` (type: `string`):

Optional top-level category filter (Swedish), e.g. 'Öl', 'Vin', 'Sprit', 'Cider & blanddrycker', 'Alkoholfritt'. Combine with a search query or use alone to browse the whole category.

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

Maximum number of products to scrape. The full catalog is roughly 27,000 products.

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

Proxy settings. The Systembolaget ecommerce API works from datacenter proxies. If you see blocks or 403s, switch to residential proxies with country Sweden (SE).

## Actor input object example

```json
{
  "searchQuery": "whisky",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": "whisky",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/systembolaget-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": "whisky",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/systembolaget-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": "whisky",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/systembolaget-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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