# Multipharma Scraper — Belgian Pharmacy Products & Prices (`studio-amba/multipharma-scraper`) Actor

Scrape health and pharmacy products from Multipharma.be — one of Belgium's largest pharmacy chains with 230+ locations. Medicines, vitamins, beauty, and baby care.

- **URL**: https://apify.com/studio-amba/multipharma-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/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

## Multipharma Scraper

Scrape health and pharmacy products, prices, ratings, and availability from Multipharma.be — one of Belgium's largest pharmacy chains with 230+ locations.

### What is Multipharma Scraper?

Multipharma is a cooperative of over 230 pharmacies across Belgium, operating both physical stores and a full-featured online shop. Their product range covers OTC medicines, prescription-related information, vitamins and supplements, homeopathy, baby care, beauty, and personal hygiene. As one of the biggest pharmacy brands in Belgium, their pricing and product selection is a key benchmark for the Belgian pharmaceutical retail market.

This scraper crawls Multipharma.be's search results and product detail pages using lightweight Cheerio-based parsing. It extracts structured data from JSON-LD markup and HTML, handling pagination automatically.

**Common use cases:**

- **Belgian pharmacy price benchmarking** — Compare Multipharma's prices against Farmaline, Viata, and independent pharmacies to understand the market
- **OTC medicine monitoring** — Track pricing trends for common over-the-counter medications like paracetamol, ibuprofen, and antihistamines
- **Supplement market analysis** — Study the vitamins, minerals, and supplements market in Belgium through Multipharma's extensive catalog
- **Homeopathic product research** — Multipharma has a notably strong homeopathy section, useful for niche market analysis
- **Retail pharmacy intelligence** — Understand how a cooperative pharmacy chain prices and promotes products compared to online-only pharmacies

### What data does Multipharma Scraper extract?

- 💊 **Product name & brand** — Full product name with brand/manufacturer
- 💰 **Price & original price** — Current selling price and crossed-out original price when on sale
- ⭐ **Ratings & reviews** — Aggregate customer rating and review count (from JSON-LD)
- 📦 **Stock availability** — Whether the product is in stock online
- 🏷️ **Identifiers** — EAN/GTIN barcode and SKU when available in JSON-LD
- 🗂️ **Category breadcrumbs** — Full category path extracted from page navigation
- 🖼️ **Product images** — Primary product image from JSON-LD or Open Graph tags
- 📝 **Product description** — Full description text from the product detail page

### How to scrape Multipharma.be

#### Search by keyword

Enter a search term like "vitamines", "paracetamol", or "zonnecreme" and the scraper will search Multipharma.be and crawl the resulting product pages.

#### Browse by category URL

Paste any Multipharma.be category or search URL directly. For example: `https://www.multipharma.be/nl/search?q=homeopathie` or a category navigation URL.

#### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQuery` | String | `vitamines` | Search keyword (e.g., "paracetamol") |
| `categoryUrl` | String | — | Multipharma.be category or search URL |
| `maxResults` | Integer | 100 | Maximum products to return (up to 50,000) |
| `proxyConfiguration` | Object | — | Proxy settings for better reliability |

**Tip:** The `categoryUrl` takes priority over `searchQuery` when both are provided. Use category URLs for more targeted scraping.

### Output

```json
{
    "name": "Metagenics Vitamin D3 2000IU Tabletten 168 Stuks",
    "brand": "Metagenics",
    "price": 21.95,
    "originalPrice": 25.90,
    "currency": "EUR",
    "ean": "5400433282137",
    "sku": "META-VD3-2000-168",
    "inStock": true,
    "rating": 4.5,
    "reviewCount": 67,
    "url": "https://www.multipharma.be/nl/product/metagenics-vitamin-d3-2000iu-168-tabletten",
    "imageUrl": "https://www.multipharma.be/media/catalog/product/metagenics-vitamine-d3-2000.jpg",
    "description": "Metagenics Vitamin D3 2000IU levert een hoge dosis vitamine D3 in een klein, makkelijk in te nemen tablet. Vitamine D draagt bij tot de normale werking van het immuunsysteem.",
    "category": "Vitamines",
    "categories": ["Gezondheid", "Vitamines en supplementen", "Vitamines"],
    "scrapedAt": "2026-04-03T10:15:00.000Z"
}
```

### How much does it cost?

Multipharma Scraper uses a two-step approach: listing pages to discover product URLs, then product detail pages for rich data extraction. Both use lightweight Cheerio parsing (no browser).

| Volume | Estimated CU | Estimated Cost |
|--------|-------------|----------------|
| 50 products | ~0.03 CU | ~$0.02 |
| 200 products | ~0.1 CU | ~$0.05 |
| 1,000 products | ~0.5 CU | ~$0.25 |
| 5,000 products | ~2.5 CU | ~$1.25 |

Costs scale linearly with the number of product pages crawled. Actual costs depend on your Apify subscription.

### Can I integrate?

Yes. Standard Apify integrations work seamlessly:

- **Google Sheets** — Maintain an up-to-date Multipharma price sheet
- **Webhooks** — Get HTTP callbacks when scraping completes
- **Zapier / Make / n8n** — Feed pharmacy data into automated workflows
- **Amazon S3 / Google Cloud** — Archive product datasets for longitudinal price analysis
- **Slack / Email** — Alert on price changes for tracked medications or supplements

### Can I use it as an API?

Yes. Integrate Multipharma product data into your applications or data pipelines.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/multipharma-scraper").call(run_input={
    "searchQuery": "paracetamol",
    "maxResults": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    sale = f" (was EUR {item['originalPrice']})" if item.get('originalPrice') else ""
    print(f"{item['name']} — EUR {item['price']}{sale}")
```

#### JavaScript

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

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

const run = await client.actor('studio-amba/multipharma-scraper').call({
    searchQuery: 'paracetamol',
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    const sale = item.originalPrice ? ` (was EUR ${item.originalPrice})` : '';
    console.log(`${item.name} — EUR ${item.price}${sale}`);
});
```

### FAQ

**How does Multipharma compare to Farmaline?**
Farmaline is an online-only pharmacy with ~70,000 products. Multipharma is a cooperative of 230+ physical pharmacies with a smaller but curated online catalog. Multipharma tends to focus more on traditional pharmacy products, homeopathy, and Belgian health brands. Running both scrapers gives you complementary perspectives on Belgian pharmacy pricing.

**Does Multipharma sell prescription medicines online?**
Multipharma lists some prescription-related products for information, but actual prescription fulfillment happens in their physical pharmacies. The scraper extracts whatever is publicly listed on the website.

**Why does the scraper visit individual product pages?**
Multipharma's listing pages show product links but limited data. The scraper follows each link to the product detail page where it extracts rich JSON-LD structured data including ratings, EAN codes, full descriptions, and precise pricing. This two-step approach yields much higher quality data.

**Is the data available in French?**
Multipharma.be has both Dutch (/nl/) and French (/fr/) versions. Currently the scraper defaults to Dutch. To scrape French content, provide a French category URL (e.g., `https://www.multipharma.be/fr/search?q=vitamines`).

**Can I scrape Multipharma's physical store locations?**
This actor focuses on online product data. For Belgian pharmacy locations, use our [Apotheek.be Scraper](https://apify.com/studio-amba/apotheek-scraper) which covers all registered pharmacies in Belgium including Multipharma locations.

**Does the scraper extract homeopathic product data?**
Yes. Multipharma has a strong homeopathy section and all listed products are scraped the same way. Search for "homeopathie" or use a category URL to target this segment specifically.

**What makes Multipharma different from online-only pharmacies?**
Multipharma is a cooperative of 230+ physical pharmacy locations across Belgium. Their online store reflects the product range and pricing of their brick-and-mortar network. This means their pricing may differ from online-pure-players like Farmaline or Viata, as they balance online competitiveness with in-store economics. For market researchers, this distinction is important when analyzing the Belgian pharmacy pricing landscape.

### Tips for Belgian pharmacy market analysis

Multipharma data is most valuable when combined with other Belgian pharmacy sources:

1. **Three-way price comparison** — Run Farmaline, Viata, and Multipharma scrapers with the same search query. Join results on EAN code to build a side-by-side price comparison. This covers the three major Belgian online pharmacy channels.
2. **Cooperative vs. online pricing** — Multipharma is a cooperative of physical pharmacies, while Farmaline is online-only. Comparing their pricing reveals the premium (or discount) consumers pay for the convenience of physical pharmacies.
3. **Homeopathy market sizing** — Multipharma has one of Belgium's strongest homeopathy sections. Search for "homeopathie" to get a comprehensive view of this niche segment.
4. **Track promotional patterns** — Monitor `originalPrice` vs. `price` over time to understand Multipharma's promotional calendar and depth of discounting.
5. **Use breadcrumb categories for taxonomy** — The `categories` array provides Multipharma's internal product taxonomy, useful for understanding how Belgian pharmacies organize their product ranges.

### Limitations

- The scraper depends on Multipharma.be's HTML structure for product link discovery and JSON-LD availability on detail pages
- Product data richness varies: some products have full JSON-LD with ratings and EAN, others only provide basic name and price from HTML
- Pagination depends on detecting "Volgende" (Next) links in the HTML
- No price-per-unit data is extracted (unlike Farmaline)
- The scraper does not currently support filtering by brand or category through input parameters — use search queries or category URLs instead

### Other pharmacy scrapers

Build a comprehensive Belgian pharmacy dataset by combining multiple sources:

- [Farmaline Scraper](https://apify.com/studio-amba/farmaline-scraper) — Belgium's largest online pharmacy (70,000+ products, bilingual NL/FR)
- [Viata Scraper](https://apify.com/studio-amba/viata-scraper) — Belgian online pharmacy with rich pharmaceutical attributes
- [Apotheek.be Scraper](https://apify.com/studio-amba/apotheek-scraper) — Belgian pharmacy directory with locations and opening hours
- [Shop Apotheke Scraper](https://apify.com/studio-amba/shopapotheke-scraper) — Europe's leading online pharmacy (includes Belgian store)
- [dm Scraper](https://apify.com/studio-amba/dm-scraper) — Germany's largest drugstore chain (beauty, health, household)
- [Matas Scraper](https://apify.com/studio-amba/matas-scraper) — Denmark's leading beauty and pharmacy retailer

### Your feedback

Using Multipharma data for pharmacy price comparison in Belgium? Want French language support as a dedicated input option? Have ideas for improving data quality? [Open an issue](https://console.apify.com/actors/studio-amba/multipharma-scraper/issues) or message us on Apify. We actively maintain all our pharmacy scrapers and prioritize user requests.

# Actor input Schema

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

A Multipharma.be category or search results page URL to scrape. Leave empty to use the Search Query instead.

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

Search for products by keyword. Used if no categoryUrl is provided.

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

Maximum number of products to return.

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

Proxy settings for better reliability on large runs.

## Actor input object example

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

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

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

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

```

## MCP server setup

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