# Matas Scraper — Danish Beauty, Health & Pharmacy Products (`studio-amba/matas-scraper`) Actor

Scrape products, prices, ratings, and reviews from Matas.dk. Denmark's leading beauty, health & pharmacy retailer. Supports search queries and category browsing.

- **URL**: https://apify.com/studio-amba/matas-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 3 total users, 0 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/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

## Matas Scraper

Extract products, prices, ratings, and beauty data from Matas.dk — Denmark's leading health, beauty, and pharmacy retailer with 260+ stores.

### What is Matas Scraper?

Matas is Denmark's dominant beauty and health retailer, operating over 260 stores nationwide and a comprehensive online shop. Their catalog spans premium skincare, makeup, haircare, fragrances, vitamins, natural health products, and personal care — from luxury brands like Clinique and Estee Lauder to Danish favorites and Matas' own private-label products.

This scraper crawls Matas.dk's search results and product detail pages, extracting structured data from JSON-LD markup and HTML. It handles search queries, category browsing, pagination, and product detail enrichment automatically.

**Common use cases:**

- **Nordic beauty market intelligence** — Track product launches, pricing, and brand positioning in the Danish beauty market
- **Competitive pricing analysis** — Compare Matas prices against other Nordic retailers like Normal, Kicks, or online pharmacies
- **Skincare & cosmetics research** — Build datasets of beauty products with ratings, prices, and brand information for trend analysis
- **Private-label monitoring** — Track Matas' own-brand products and their pricing relative to branded alternatives
- **Cross-border price comparison** — Compare Danish health and beauty prices (in DKK) against German, Belgian, or other European markets

### What data does Matas Scraper extract?

- 🧴 **Product name & brand** — Full product name with brand attribution
- 💰 **Price in DKK** — Current price and original/sale price when applicable
- ⭐ **Ratings & reviews** — Customer rating (normalized to 5-point scale) and review count
- 📦 **Stock availability** — Whether the product is in stock, available online, or pre-order
- 🏷️ **Product identifiers** — EAN/GTIN barcode, SKU, and MPN where available
- 🗂️ **Category & breadcrumbs** — Product category extracted from page navigation
- 🖼️ **Product images** — Primary image and gallery URLs when available
- 📝 **Product description** — Cleaned text description stripped of HTML

### How to scrape Matas.dk

#### Search by keyword

Enter any search term in Danish or English — "shampoo", "mascara", "solcreme" (sunscreen), "vitaminer" (vitamins). The scraper fetches search results from Matas.dk's search page.

#### Browse by category

Paste a Matas category URL like `https://www.matas.dk/hudpleje` (skincare) or `https://www.matas.dk/makeup` to scrape all products in that section.

#### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQuery` | String | `shampoo` | Search keyword (e.g., "mascara", "solcreme") |
| `categoryUrl` | String | — | Matas.dk category URL to scrape |
| `maxResults` | Integer | 100 | Maximum products to return (up to 50,000) |
| `proxyConfiguration` | Object | — | Proxy settings for better reliability |

**Tip:** For best results, use Danish search terms. Matas.dk's search works well with Danish product names and categories.

### Output

```json
{
    "name": "CeraVe Moisturising Cream 340 g",
    "brand": "CeraVe",
    "price": 129.95,
    "originalPrice": 159.95,
    "currency": "DKK",
    "ean": "3337875597395",
    "sku": "MAT-87539",
    "inStock": true,
    "rating": 4.6,
    "reviewCount": 892,
    "url": "https://www.matas.dk/cerave-moisturising-cream-340g",
    "imageUrl": "https://www.matas.dk/media/catalog/product/cerave-moisturising-cream.jpg",
    "description": "CeraVe Moisturising Cream er en fugtighedscreme til toer til meget toer hud. Indeholder tre essentielle ceramider og hyaluronsyre.",
    "category": "Hudpleje",
    "categories": ["Hudpleje", "Ansigtspleje", "Fugtighedscreme"],
    "scrapedAt": "2026-04-03T10:15:00.000Z"
}
```

### How much does it cost?

Matas Scraper uses Cheerio-based crawling (no browser) for both listing and product pages. It costs $0.02 per run plus $0.002 per product scraped, regardless of whether detail pages are fetched.

| Volume | Estimated Cost |
|--------|----------------|
| 50 products | ~$0.12 |
| 200 products | ~$0.42 |
| 1,000 products | ~$2.02 |
| 5,000 products | ~$10.02 |

Usage cost only settles after the run reports **SUCCEEDED** — a run that fails or is aborted mid-way is not charged for items it never wrote.

### Can I integrate?

Yes. Connect Matas product data to your existing workflows:

- **Google Sheets** — Track Danish beauty product prices in a shared spreadsheet
- **Webhooks** — Get notified when scraping completes or when specific products change price
- **Zapier / Make / n8n** — Automate data flows from Matas into your tools
- **Amazon S3 / Google Cloud** — Store beauty product datasets for long-term analysis
- **Slack / Email** — Set up price drop alerts on watched products

### Can I use it as an API?

Yes. Call the scraper from your code and process Danish beauty data programmatically.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/matas-scraper").call(run_input={
    "searchQuery": "solcreme",
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    price_eur = round(item['price'] / 7.46, 2)  # DKK to EUR estimate
    print(f"{item['brand']} — {item['name']}: {item['price']} DKK (~{price_eur} EUR)")
```

#### JavaScript

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

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

const run = await client.actor('studio-amba/matas-scraper').call({
    searchQuery: 'solcreme',
    maxResults: 100,
});

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

### FAQ

**Why DKK instead of EUR?**
Denmark uses the Danish Krone (DKK), not the Euro. All Matas prices are in DKK. The exchange rate is approximately 1 EUR = 7.46 DKK (fixed within a narrow band due to Denmark's ERM II peg).

**Does Matas sell prescription medicines?**
No. Matas is a health and beauty retailer, not a licensed pharmacy. They sell OTC health products, vitamins, supplements, skincare, and cosmetics — but no prescription medicines. For prescription drug data, see our Farmaline or Shop Apotheke scrapers.

**Can I scrape product reviews?**
The scraper extracts aggregate rating and review count. Individual review text is not currently extracted but could be added as a feature. Contact us if you need full review text.

**How does the scraper handle Matas product pages?**
The scraper first extracts product URLs from search/category listing pages, then visits each product page individually to get rich JSON-LD data (ratings, EAN, brand, description). If JSON-LD is not available, it falls back to HTML parsing.

**Does Matas have a loyalty program that affects prices?**
Matas has the "Club Matas" loyalty program, but loyalty prices are only visible when logged in. The scraper extracts public (non-member) prices only.

**Can I search in English?**
Matas.dk's search is optimized for Danish. English brand names work (e.g., "CeraVe", "L'Oreal"), but product categories and descriptions are in Danish. Use Danish terms for category searches.

**What are the most popular Matas product categories?**
Matas is strongest in skincare ("hudpleje"), makeup ("makeup"), haircare ("haarpleje"), fragrances ("parfume"), vitamins ("vitaminer"), sun care ("solpleje"), and personal hygiene. They also carry a growing range of organic and natural products ("naturlig pleje").

**How does Matas handle sale prices?**
When a product is on sale, the scraper captures both the current selling price in the `price` field and the original price in the `originalPrice` field. Matas runs regular promotional campaigns, especially around Danish holidays and seasonal transitions. The scraper detects strikethrough/old prices from both JSON-LD data and HTML markup.

### Tips for Nordic beauty market analysis

Matas data is particularly valuable for beauty and personal care market research:

1. **Track seasonal trends** — Danish beauty buying patterns shift dramatically with seasons. Sunscreen ("solcreme") peaks in spring, skincare ("hudpleje") in winter. Schedule monthly runs to capture these cycles.
2. **Compare DKK to EUR pricing** — Denmark's fixed exchange rate to the Euro (approximately 7.46 DKK = 1 EUR) makes cross-border price comparison straightforward. Compare Matas prices to the same brands on dm.de or Farmaline.be.
3. **Monitor brand performance** — Use the `brand` field to track how many products each brand has listed, their average pricing, and their rating distribution. This reveals which brands are gaining or losing shelf space.
4. **Use ratings as quality signals** — Products with 100+ reviews and 4.5+ ratings are strong performers. Filter for these to identify top-selling items in each category.
5. **Combine search and category approaches** — Use `searchQuery` for specific products (brand names, ingredients) and `categoryUrl` for broad category sweeps.

### Limitations

- Matas.dk uses a modern JavaScript-heavy frontend; the Cheerio-based scraper extracts data from HTML and JSON-LD, which covers most products but may miss some dynamically loaded content
- Pagination relies on detecting "next page" links in the HTML, which may not work for all page layouts
- Club Matas member prices and exclusive offers are not accessible through public scraping
- Product availability may differ between online and physical stores
- The scraper does not extract ingredient lists or detailed product specifications beyond what JSON-LD provides

### Other pharmacy scrapers

Expand your health and beauty data coverage across Europe:

- [Farmaline Scraper](https://apify.com/studio-amba/farmaline-scraper) — Belgium's largest online pharmacy (70,000+ products, bilingual NL/FR)
- [dm Scraper](https://apify.com/studio-amba/dm-scraper) — Germany's largest drugstore chain (beauty, health, household)
- [Shop Apotheke Scraper](https://apify.com/studio-amba/shopapotheke-scraper) — Europe's leading online pharmacy (DE/AT/CH/BE/FR/IT)
- [Viata Scraper](https://apify.com/studio-amba/viata-scraper) — Belgian online pharmacy with health and wellness products
- [Apotheek.be Scraper](https://apify.com/studio-amba/apotheek-scraper) — Belgian pharmacy directory with locations and opening hours
- [Multipharma Scraper](https://apify.com/studio-amba/multipharma-scraper) — One of Belgium's largest pharmacy chains

### Your feedback

Interested in Nordic beauty market data? Need deeper product detail extraction from Matas? Have suggestions for improving the scraper? [Open an issue](https://console.apify.com/actors/studio-amba/matas-scraper/issues) or contact us on Apify. We welcome all feedback.

# Actor input Schema

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

Search for products by keyword (e.g., 'shampoo', 'mascara', 'solcreme').

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

A Matas category page URL to scrape. Example: https://www.matas.dk/hudpleje. Leave empty to use search.

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

Maximum number of products to return.

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

Proxy settings for better reliability.

## Actor input object example

```json
{
  "searchQuery": "shampoo",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DK"
  }
}
```

# 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": "shampoo",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DK"
    }
};

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

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

```

## MCP server setup

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