# Shop Apotheke AT Scraper — Austrian Pharmacy Products (`studio-amba/shop-apotheke-at-scraper`) Actor

Scrape product data from shop-apotheke.at (Redcare Pharmacy Austria). Extract names, brands, prices, PZN codes, ratings, stock, and images for Austrian pharmacy and health products.

- **URL**: https://apify.com/studio-amba/shop-apotheke-at-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 0.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

## Shop Apotheke AT Scraper

Scrape product data from Shop Apotheke Austria (shop-apotheke.at), the Austrian online pharmacy of the Redcare Pharmacy group. Get product names, brands, prices, list prices, PZN codes, ratings, review counts, stock status, images and categories. No login, no cookies.

### What this actor does

Shop Apotheke is one of Austria'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 `aspirin`, `vitamin d`, or `nasenspray`) and a result limit. It returns the same products a shopper sees on the site, with pricing, discounts, PZN pharmacy codes, 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 Austrian market.
- **Competitor benchmarking** — compare Shop Apotheke Austria against other pharmacies (see Related Scrapers below).
- **Product matching** — match by PZN (Pharmazentralnummer), the pharmacy product code, exposed on nearly every result.
- **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 Shop Apotheke Austria data

1. Add this actor to your Apify account.
2. Set `searchQuery` to a German keyword, for example `aspirin`, `vitamin d`, `magnesium` or `nasenspray`. Leave it empty and the actor defaults to `aspirin` 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 AT 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 `aspirin`) |
| `maxResults` | Integer | No | Maximum products to return (default 100) |
| `proxyConfiguration` | Object | No | Optional Apify proxy (residential AT prefilled) |

Example input:

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

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Aspirin® Express überzogene Tabletten"` |
| `brand` | String | `"Aspirin"` |
| `price` | Number | `12.19` |
| `originalPrice` | Number | `15.7` |
| `currency` | String | `"EUR"` |
| `pricePerUnit` | String | `"€ 0,30 / 1 St"` |
| `ean` | String | `"9088885536150"` |
| `sku` | String | `"A4208217"` (PZN) |
| `productId` | String | `"A4208217"` |
| `inStock` | Boolean | `true` |
| `rating` | Number | `4.9` |
| `reviewCount` | Integer | `76` |
| `category` | String | `"Schmerzmittel"` |
| `imageUrl` | String | `"https://cdn.shop-apotheke.at/images/A42/082/17/A4208217-p1.jpg"` |
| `url` | String | `"https://www.shop-apotheke.at/arzneimittel/A4208217/aspirin-express.htm"` |
| `description` | String | `"Überzogene Tabletten bei Kopf-, Nacken- und Muskelschmerzen"` |
| `specs` | Object | `{ "pharmaForm": "Tabletten", "packSize": "40 St", ... }` |
| `scrapedAt` | String | `"2026-07-11T10:00:00.000Z"` |

#### Example output

```json
{
  "name": "Aspirin® Express überzogene Tabletten bei Kopf-, Nacken- und Muskelschmerzen",
  "brand": "Aspirin",
  "price": 12.19,
  "originalPrice": 15.7,
  "currency": "EUR",
  "pricePerUnit": "€ 0,30 / 1 St",
  "sku": "A4208217",
  "productId": "A4208217",
  "inStock": true,
  "rating": 4.9,
  "reviewCount": 76,
  "category": "Schmerzmittel",
  "imageUrl": "https://cdn.shop-apotheke.at/images/A42/082/17/A4208217-p1.jpg",
  "url": "https://www.shop-apotheke.at/arzneimittel/A4208217/aspirin-express.htm",
  "description": "Überzogene Tabletten bei Kopf-, Nacken- und Muskelschmerzen",
  "specs": {
    "pharmaForm": "Tabletten",
    "packSize": "40 St",
    "manufacturer": "Bayer Austria GmbH",
    "activeSubstances": "Acetylsalicylsäure",
    "prescriptionMedicine": "no"
  },
  "scrapedAt": "2026-07-11T10:00:00.000Z"
}
```

### About PZN

Austrian pharmacy products carry a PZN (Pharmazentralnummer), the central pharmaceutical number used to identify a specific pack. This actor returns it in the `sku` field, so you can join Shop Apotheke Austria data against other pharmacy sources or your own catalogue by PZN. EAN/GTIN barcodes are not exposed by the store, which is normal for pharmacy listings.

### Prices and discounts

- `price` is the current selling price in EUR.
- `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.
- **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.
- **Austrian storefront.** This actor targets the Austrian (`AT_de`) storefront on shop-apotheke.at, with Austrian pricing and availability. For the German market, use the Shop Apotheke Scraper linked below.
- **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 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
- [Apotheka Scraper](https://apify.com/studio-amba/apotheka-scraper) — Baltic online pharmacy
- [Dr. Max Scraper](https://apify.com/studio-amba/drmax-scraper) — Central-European pharmacy chain
- [Pilulka Scraper](https://apify.com/studio-amba/pilulka-scraper) — Czech 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 Austrian storefront (shop-apotheke.at), prices in EUR with Austrian availability.

**How do I match products across pharmacies?**
Use the `sku` field, which holds the PZN pharmacy 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 shop-apotheke.at (Austrian storefront). Use German keywords, e.g. "aspirin", "vitamin d", "nasenspray".

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

Maximum number of products to scrape

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

Optional Apify proxy. The Shop Apotheke search API is public and works without a proxy; residential AT is available as a safety valve.

## Actor input object example

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

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

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