# Apohem Product Search Scraper (`stealth_mode/apohem-product-search-scraper`) Actor

Scrape product data from Apohem.se with precision. Extract prices, stock status, brand info, promotions, medical classifications, and 40+ fields per product — perfect for price monitoring, market research, and product aggregation.

- **URL**: https://apify.com/stealth\_mode/apohem-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Developer tools, Automation, 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 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Apohem Product Search Scraper: Extract Pharmacy & Health Data Fast

***

### What Is Apohem?

Apohem.se is Sweden's leading online pharmacy and health products retailer, offering thousands of over-the-counter medications, wellness products, medical devices, and health-related goods. With frequent price changes, inventory fluctuations, and promotional updates, manually tracking products across Apohem is inefficient. The **Apohem Product Search Scraper** automates product data collection, delivering structured records that fuel competitive analysis, price monitoring, and market intelligence.

***

### Overview

The **Apohem Product Search Scraper** extracts comprehensive product data from Apohem.se search result pages, converting unstructured product listings into clean, machine-readable records. It is ideal for:

- **Price monitors** tracking competitor pricing and promotions
- **Market researchers** analyzing health product trends in the Nordic region
- **E-commerce aggregators** building multi-vendor product catalogs
- **Supply chain analysts** monitoring stock levels and product availability
- **Pharmaceutical analysts** studying OTC and medical device markets

The scraper handles multiple search queries in a single run, respects rate limits with configurable item limits, and gracefully skips failed URLs — ensuring reliable data collection even at scale.

***

### Input Configuration

The scraper accepts a JSON configuration object specifying which Apohem search results to collect:

```json
{
  "urls": [
    "https://www.apohem.se/sok?q=ome"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
```

#### Input Parameters Explained

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | Apohem.se search result page URLs. Each URL should contain a search query (e.g., `q=ome` for "ome" products). You can add multiple URLs to collect data from different search categories in one run. |
| `max_items_per_url` | Integer | Maximum number of products to extract per URL (e.g., `200`). Set lower values to test configuration; increase for bulk data collection. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running if some URLs fail. If `false`, the entire run stops on the first error. Recommended: `true` for production runs. |

**Tips:**

- Use realistic search terms: `q=vitamin`, `q=antihistamine`, `q=sunscreen`
- Each URL's result set can contain 50-1000+ products depending on the search
- Combine `max_items_per_url: 200` with multiple URLs for efficient large-scale collection

***

### Output Format

**Sample output**

```json
{
  "link_identifier": "Oy9zZWFyY2gtcGFnZS9wcm9kdWN0LWhpdHM7Iztwcm9kdWN0X2tleTtwYTExODU1MF9zdi1zZTt2X2ExMTg1NTBfc3Ytc2U7T0JKRUNUSVZFJDtOT05FOk5PTkU7NDc7",
  "url": "/vitaminer-kosttillskott/omega-3-fettsyror/biosalma-omega-3-forte-70-1000mg-132-kapslar",
  "should_cache": true,
  "meta": {
    "title": null,
    "elements": {}
  },
  "images": [
    {
      "width": 1073,
      "height": 1920,
      "url": "/globalassets/raderas-ej/produktbilder-radera-ej/07350014910202_c1n1.jpg?ref=F70F4EF55A"
    },
    {
      "width": 1920,
      "height": 1310,
      "url": "/globalassets/raderas-ej/produktbilder-radera-ej/miljlobild.png?ref=91614312AC"
    },
    {
      "width": 240,
      "height": 246,
      "url": "/globalassets/raderas-ej/produktbilder-radera-ej/friendofthesea.jpeg?ref=2F590FFDAD"
    }
  ],
  "price": {
    "current": {
      "incl_vat": 90,
      "excl_vat": 84.91,
      "vat_percent": 6
    },
    "original": {
      "incl_vat": 113,
      "excl_vat": 106.6,
      "vat_percent": 6
    },
    "previous": {
      "incl_vat": 72,
      "excl_vat": 67.92,
      "vat_percent": 6
    },
    "member": {
      "incl_vat": 90,
      "excl_vat": 84.91,
      "vat_percent": 6
    },
    "non_member": {
      "incl_vat": 90,
      "excl_vat": 84.91,
      "vat_percent": 6
    }
  },
  "display_name": "BioSalma Omega-3 Forte 70% 1000mg 132 kapslar",
  "name_without_brand": "Omega-3 Forte 70% 1000mg 132 kapslar",
  "stock": "high",
  "lifecycle_type": null,
  "is_coming_soon": false,
  "brand_name": "BioSalma",
  "code": "PA118550",
  "variation_code": "A118550",
  "variation_ean": null,
  "buyable": true,
  "is_new": false,
  "isotc": false,
  "is_valvald": false,
  "is_diklofenak": false,
  "max_quantity": 0,
  "is_eco": false,
  "is_free_shipping_variant": false,
  "has_member_price": false,
  "is_random_color": false,
  "recommendations": {
    "type": "Avensia.Common.Features.Product.ProductPageRecommendationsViewModel,Avensia.Common",
    "context": {
      "product_code": "PA118550"
    },
    "resolve_mode": "manual",
    "preload_behavior": "overrideCache",
    "preloaded": null
  },
  "accessory_products": null,
  "upsell": {
    "type": "Avensia.Common.Features.Product.ProductPageUpsellViewModel,Avensia.Common",
    "context": {
      "product_code": "PA118550"
    },
    "resolve_mode": "manual",
    "preload_behavior": "overrideCache",
    "preloaded": null
  },
  "blog_post_recommendations": {
    "type": "Avensia.Common.Features.Product.ProductPageBlogPostRecommendationsViewModel,Avensia.Common",
    "context": {
      "blog_post_recommendations_content_references": null
    },
    "resolve_mode": "manual",
    "preload_behavior": "overrideCache",
    "preloaded": null
  },
  "promotion_splash": "Nice Price",
  "promotion_discount_percentage": 20,
  "member_discount_percentage": null,
  "is_prescription_product": false,
  "is_medical_device_product": false,
  "promotion_splash_member": "",
  "product_badge": null,
  "is_videoly": false,
  "is_previous_price_lower_then_discount_price": true,
  "has_nice_price_splash": true,
  "active_substance": null,
  "from_url": "https://www.apohem.se/sok?q=ome"
}
```

Each scraped product returns a rich record with 40+ fields covering pricing, inventory, medical classifications, and promotional data:

#### Product Identification

| Field | Meaning |
|---|---|
| `Link Identifier` | Unique internal identifier for the product listing |
| `URL` | Direct link to the product detail page on Apohem.se |
| `Display Name` | Product name as shown to customers |
| `Name Without Brand` | Product name stripped of brand prefix |
| `Brand Name` | Manufacturer or brand owner |
| `Code` | SKU or internal product code |
| `Variation Code` | Identifier for product variants (size, strength, etc.) |
| `Variation EAN` | EAN barcode for this specific variant |

#### Pricing & Availability

| Field | Meaning |
|---|---|
| `Price` | Current retail price in SEK |
| `Stock` | Current inventory status (in stock, low stock, out of stock) |
| `Buyable` | Whether the product is currently purchasable |
| `Max Quantity` | Maximum units a customer can order per transaction |
| `Has Member Price` | Whether member/loyalty discounts apply |
| `Member Discount Percentage` | Discount percentage for members |
| `Promotion Discount Percentage` | Active promotional discount (if any) |
| `Is Free Shipping Variant` | Whether this variant qualifies for free shipping |
| `Is Previous Price Lower Than Discount Price` | Flag for misleading pricing (quality control) |
| `Has Nice Price Splash` | Whether the product has a promotional badge |

#### Product Classification & Regulation

| Field | Meaning |
|---|---|
| `Is OTC` | Whether the product is over-the-counter (no prescription required) |
| `Is Prescription Product` | Whether a prescription is required for purchase |
| `Is Medical Device Product` | Whether classified as a medical device |
| `Is Diklofenak` | Contains diclofenac (anti-inflammatory medication) |
| `Is Valvald` | Contains valproic acid (specialized medication) |
| `Active Substance` | Main active pharmaceutical ingredient |
| `Lifecycle Type` | Product status (active, discontinued, seasonal) |
| `Is Coming Soon` | Whether the product is pre-launch |
| `Is New` | Whether the product is newly added |

#### Product Attributes & Features

| Field | Meaning |
|---|---|
| `Is Eco` | Whether the product meets eco-friendly standards |
| `Is Random Color` | Whether the product comes in random/assorted colors |
| `Product Badge` | Special badges or labels (e.g., bestseller, new, eco) |
| `Promotion Splash` | Active promotional message or tag |
| `Promotion Splash Member` | Member-exclusive promotional message |

#### Related Products & Content

| Field | Meaning |
|---|---|
| `Images` | Product image URLs |
| `Meta` | Metadata including description, SEO keywords, tags |
| `Recommendations` | Similar products recommended by Apohem |
| `Accessory Products` | Complementary products bundled suggestions |
| `Upsell` | Higher-value alternative products |
| `Blog Post Recommendations` | Health tips or educational content links |

#### Specialized Flags

| Field | Meaning |
|---|---|
| `Is Videoly` | Indicates video product demonstrations available |
| `Should Cache` | Caching recommendation for optimization |

***

### How to Use

1. **Prepare search URLs** — Visit Apohem.se, perform a search (e.g., "vitamin C"), and copy the full URL from the address bar
2. **Configure input** — Paste URL(s) into the `urls` array. Common searches: vitamins, pain relief, skincare, supplements
3. **Set limits** — Adjust `max_items_per_url` (20–500) based on your data needs
4. **Enable error handling** — Keep `ignore_url_failures: true` for uninterrupted runs
5. **Run the scraper** — Start the actor and monitor progress
6. **Export & analyze** — Download results as JSON, CSV, or Excel for analysis

**Troubleshooting:**

- If no products return, verify the URL is a *search results* page, not a category or home page
- For large collections, break into multiple URLs to avoid timeouts

***

### Use Cases & Business Value

- **Competitive price tracking:** Monitor competitor pricing, discounts, and stock levels in real-time
- **Market research:** Analyze product availability, promotions, and pricing trends across Nordic health markets
- **Product aggregation:** Feed Apohem data into multi-vendor e-commerce platforms or comparison sites
- **Inventory analysis:** Track stock status and product lifecycle for supply chain optimization
- **Regulatory compliance:** Extract medical device and prescription product classifications for reporting

The Apohem Product Search Scraper eliminates manual product hunting, delivering consistent, actionable data that drives smarter business decisions.

***

### Conclusion

The **Apohem Product Search Scraper** is a powerful tool for anyone needing reliable pharmacy and health product data from Sweden's largest online retailer. Extract 40+ fields per product, monitor prices and promotions, and unlock insights that manual browsing cannot deliver. Start scraping today and turn Apohem data into competitive advantage.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.apohem.se/sok?q=ome"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.apohem.se/sok?q=ome"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/apohem-product-search-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 = {
    "urls": ["https://www.apohem.se/sok?q=ome"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/apohem-product-search-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 '{
  "urls": [
    "https://www.apohem.se/sok?q=ome"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/apohem-product-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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