# Redcare CH Scraper — Swiss Pharmacy Products & Prices (`studio-amba/redcare-ch-scraper`) Actor

Scrape product data from redcare-apotheke.ch (Redcare Pharmacy Switzerland). Extract names, brands, prices, EAN barcodes, ratings, stock, and images for Swiss pharmacy and health products.

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

## Redcare CH Scraper

Scrape product data from Redcare Apotheke Switzerland (redcare-apotheke.ch), the Swiss online pharmacy of the Redcare Pharmacy group (formerly Shop Apotheke). Get product names, brands, prices, list prices, EAN barcodes, ratings, review counts, stock status, images and categories. No login, no cookies.

### What this actor does

Redcare Apotheke is one of Switzerland's largest online pharmacies, with a catalogue of medicines, health, beauty and personal-care products. This actor searches that catalogue by keyword and returns a clean, structured record for every matching product, straight from the store's own search backend.

You give it a German search term (for example `schmerzgel`, `vitamin d`, or `magnesium`) and a result limit. It returns the same products a shopper sees on the site, with pricing in CHF, discounts, EAN barcodes, ratings and availability, ready to export as JSON, CSV or Excel, or to feed into your own pipeline.

### Why use this actor?

- **Price monitoring** — track medicine and health-product prices across the Swiss market.
- **Competitor benchmarking** — compare Redcare Apotheke Switzerland against other pharmacies (see Related Scrapers below).
- **Product matching** — match by EAN barcode, exposed on most non-prescription results.
- **Market research** — pull ratings, review counts and discounts to see what sells and how it is positioned.
- **Catalogue building** — assemble a health-and-beauty product feed with images and categories.

No account is required. The actor reads the store's public product search directly, so results are fast and stable run after run.

### How to scrape Redcare Apotheke Switzerland data

1. Add this actor to your Apify account.
2. Set `searchQuery` to a German keyword, for example `schmerzgel`, `vitamin d`, `magnesium` or `sonnencreme`. Leave it empty and the actor defaults to `schmerzgel` so a blank run still returns data.
3. Set `maxResults` to cap the run (default 100, prefilled 20 for a quick test).
4. Optionally set a proxy. The search API is public and works without one, but a residential CH proxy is available as a safety valve.
5. Run the actor. Results stream to the dataset and can be exported as JSON, CSV, Excel or pulled via the API.

The actor queries the store's Algolia-powered product search, pages through the results up to your limit, deduplicates by product id, and writes one row per product.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | German search term (default `schmerzgel`) |
| `maxResults` | Integer | No | Maximum products to return (default 100) |
| `proxyConfiguration` | Object | No | Optional Apify proxy (residential CH prefilled) |

Example input:

```json
{
  "searchQuery": "vitamin d",
  "maxResults": 50,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Burgerstein Vitamin D3 2000 I.E."` |
| `brand` | String | `"Burgerstein"` |
| `price` | Number | `15.0` |
| `originalPrice` | Number | `16.48` |
| `currency` | String | `"CHF"` |
| `pricePerUnit` | String | `"CHF 0.25 / 1 St"` |
| `ean` | String | `"7640121571329"` |
| `sku` | String | `"CH07777558"` |
| `productId` | String | `"CH07777558"` |
| `inStock` | Boolean | `true` |
| `rating` | Number | `4.0` |
| `reviewCount` | Integer | `1` |
| `category` | String | `"Vitamin D"` |
| `imageUrl` | String | `"https://cdn.redcare-apotheke.ch/images/CH0/777/755/8/CH07777558-p10.jpg"` |
| `url` | String | `"https://www.redcare-apotheke.ch/de/gesundheit/CH07777558/burgerstein-vitamin-d3-2000-i-e.htm"` |
| `description` | String | `"Mit Vitamin D3"` |
| `specs` | Object | `{ "pharmaForm": "Kapseln", "packSize": "60 St", ... }` |
| `scrapedAt` | String | `"2026-07-14T10:00:00.000Z"` |

#### Example output

```json
{
  "name": "Burgerstein Vitamin D3 2000 I.E.",
  "brand": "Burgerstein",
  "price": 15.0,
  "originalPrice": 16.48,
  "currency": "CHF",
  "pricePerUnit": "CHF 0.25 / 1 St",
  "ean": "7640121571329",
  "sku": "CH07777558",
  "productId": "CH07777558",
  "inStock": true,
  "rating": 4.0,
  "reviewCount": 1,
  "category": "Vitamin D",
  "imageUrl": "https://cdn.redcare-apotheke.ch/images/CH0/777/755/8/CH07777558-p10.jpg",
  "url": "https://www.redcare-apotheke.ch/de/gesundheit/CH07777558/burgerstein-vitamin-d3-2000-i-e.htm",
  "description": "Mit Vitamin D3",
  "specs": {
    "pharmaForm": "Kapseln",
    "packSize": "60 St"
  },
  "scrapedAt": "2026-07-14T10:00:00.000Z"
}
```

### About EAN codes

Swiss pharmacy and health products in this catalogue mostly carry a standard EAN/GTIN barcode, returned in the `ean` field, so you can join Redcare CH data against other pharmacy sources or your own catalogue by barcode. A smaller internal Redcare product code is also returned in `sku`.

### Prices and discounts

- `price` is the current selling price in CHF.
- `originalPrice` is the list/strike-through price, present only when it is higher than the selling price (so you can compute the discount).
- `pricePerUnit` is the base price per unit (for example per tablet or per 100 ml), useful for comparing pack sizes.

### Notes and limitations

- **Search-based.** The actor scrapes by keyword. Broad terms return more products; specific terms return fewer, more relevant ones.
- **Stock varies by term.** Some search terms (for example many individual Ibuprofen SKUs) are largely pharmacy-pickup-only in Switzerland and show as out of stock or not in the online catalogue online, so they carry no price. This actor only emits products that have a resolvable price; use a broader OTC/health term if a specific brand query comes back thin.
- **Result window.** A single keyword returns up to roughly 1,000 products (the search backend's pagination window). For a fuller pull, run several targeted queries.
- **Swiss storefront.** This actor targets the Swiss (`CH_de`) storefront on redcare-apotheke.ch, with Swiss pricing and availability. The site is also available in French and Italian; this actor reads the German-language index.
- **No prescription checkout.** This reads public product data only; it does not place orders or handle prescriptions.

### Related Scrapers

Building a pharmacy or health price comparison? Pair this with the other Studio AMBA pharmacy actors:

- [Shop Apotheke AT Scraper](https://apify.com/studio-amba/shop-apotheke-at-scraper) — Austrian storefront of the same group
- [Redcare Pharmacy FR Scraper](https://apify.com/studio-amba/redcare-pharmacy-fr-scraper) — French storefront of the same group
- [Redcare IT Scraper](https://apify.com/studio-amba/redcare-it-scraper) — Italian storefront of the same group
- [Shop Apotheke Scraper](https://apify.com/studio-amba/shop-apotheke-scraper) — German storefront of the same store
- [DocMorris Scraper](https://apify.com/studio-amba/docmorris-scraper) — German/EU online pharmacy
- [Farmaline Scraper](https://apify.com/studio-amba/farmaline-scraper) — Belgian online pharmacy

### FAQ

**Do I need an account or cookies?**
No. The actor reads the store's public product search directly.

**Which country does this cover?**
The Swiss storefront (redcare-apotheke.ch), prices in CHF with Swiss availability.

**How do I match products across pharmacies?**
Use the `ean` field where present, or the `sku` field for the Redcare internal product code.

**Can I scrape the whole catalogue?**
Run a set of category or keyword queries. Each query returns up to about 1,000 products, so split broad ranges into narrower terms for full coverage.

# Actor input Schema

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

Search term to find products on redcare-apotheke.ch (Swiss storefront). Use German keywords, e.g. "schmerzgel", "vitamin d", "magnesium".

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

Maximum number of products to scrape

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

Optional Apify proxy. The Redcare CH search API is public and works without a proxy; residential CH is available as a safety valve.

## Actor input object example

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

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/haQxaVjEQdOdYkj9e/builds/zU2pUIdj3s7Yx4hnI/openapi.json
