# Farmacosmo Scraper — Italian Online Pharmacy Products & Prices (`studio-amba/farmacosmo-scraper`) Actor

Scrape product data from farmacosmo.it, an Italian online pharmacy and parapharmacy. Extract names, brands, prices, EAN codes, ratings, availability, and images for supplements, medicines, cosmetics, and beauty products. No login or cookies required.

- **URL**: https://apify.com/studio-amba/farmacosmo-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 $5.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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Farmacosmo Scraper

Collect product data from [farmacosmo.it](https://www.farmacosmo.it), one of Italy's larger online pharmacies and parapharmacies. It covers supplements (integratori), over-the-counter medicines, dermocosmetics, skincare, baby and mother care, veterinary products, and beauty.

This scraper returns clean, structured product records: names, brands, prices, discounts, EAN barcodes, ratings, stock status, categories, and images. No login, no cookies, no account required.

### What this actor does

Point it at Farmacosmo with a search keyword or with direct category / search URLs. It walks the listing pages, follows each product link to its detail page, and reads the product's structured `Product` JSON-LD (with HTML fallbacks) to build one row per product.

Because Farmacosmo runs on PrestaShop with fully server-rendered pages, the scraper uses a fast HTTP crawler (no headless browser), which keeps runs cheap and quick.

### How to scrape Farmacosmo data

1. Enter a **Search Query** in Italian, for example `vitamina c`, `integratori`, `crema viso`, or `protezione solare`.
2. Optionally paste one or more **Category or Search URLs** from the site (e.g. `https://www.farmacosmo.it/integratori/`).
3. Set **Max Results** to cap how many products you want.
4. Leave the residential Italian proxy prefilled for reliable access.
5. Run the actor. Results stream into the dataset and can be exported as JSON, CSV, Excel, or fed to an API.

If you run it with no input at all, it defaults to searching `vitamina c` so you always get data back.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Product keyword in Italian, e.g. `"vitamina c"`, `"integratori"`, `"crema viso"` |
| `categoryUrls` | Array | No | Direct Farmacosmo category or search-result URLs |
| `maxResults` | Integer | No | Result limit (default: 100) |
| `proxyConfiguration` | Object | No | Apify proxy settings (residential Italian IPs recommended) |

Defaults to searching `"vitamina c"` if nothing is provided.

#### Example input

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

### Output

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Oti Oti K Vitamina K2 Gocce - Integratore alimentare 20 ml"` |
| `brand` | String | `"Oti"` |
| `price` | Number | `18.8` |
| `originalPrice` | Number | `24.6` |
| `discount` | String | `"-23,57%"` |
| `currency` | String | `"EUR"` |
| `pricePerUnit` | String | Unit price when shown |
| `ean` | String | `"8051882690294"` |
| `sku` | String | `"FRCM083588"` |
| `mpn` | String | `"972686265"` |
| `rating` | Number | `4.9` |
| `reviewCount` | Integer | `27` |
| `inStock` | Boolean | `true` |
| `url` | String | Product page URL |
| `imageUrl` | String | Primary product image |
| `imageUrls` | Array | All gallery images |
| `category` | String | `"Integratori"` |
| `itemDescription` | String | Product description |
| `specs` | Object | Extra attributes (e.g. weight) |
| `scrapedAt` | String | ISO 8601 timestamp |

#### Example output

```json
{
    "name": "Oti Oti K Vitamina K2 Gocce - Integratore alimentare 20 ml",
    "brand": "Oti",
    "price": 18.8,
    "originalPrice": 24.6,
    "discount": "-23,57%",
    "currency": "EUR",
    "ean": "8051882690294",
    "sku": "FRCM083588",
    "mpn": "972686265",
    "rating": 4.9,
    "reviewCount": 27,
    "inStock": true,
    "url": "https://www.farmacosmo.it/integratori/oti-k-vitamina-k2-gocce-20-ml-083588/",
    "imageUrl": "https://www.farmacosmo.it/1813488-home_default/oti-k-vitamina-k2-gocce-20-ml-083588.jpg",
    "category": "Integratori",
    "scrapedAt": "2026-07-06T12:00:00.000Z"
}
```

### Common use cases

- **Price monitoring** — track prices and discounts across supplements, medicines, and cosmetics.
- **Competitive analysis** — compare Farmacosmo's assortment and pricing against other Italian and EU pharmacies.
- **Catalog building** — pull names, EANs, brands, and images to seed a product database.
- **Availability tracking** — watch stock status on specific products.
- **Market research** — study ratings and review counts to gauge popularity.

### Cost

Runs on a lightweight HTTP crawler with no browser overhead. Roughly **$1 per 1,000 products** including proxy usage. Exact cost depends on how many results you request and your proxy choice.

### Tips

- Search terms are Italian: use `integratori`, `viso`, `capelli`, `solari`, `bambino`, and brand names like `La Roche-Posay` or `Collistar`.
- `ean` is present on most products (the site's GTIN-13). `mpn` is the manufacturer / AIC code.
- `rating` and `reviewCount` appear only on products that have customer reviews.
- `originalPrice` and `discount` appear only on products currently on sale.
- Prices come back as clean numbers (the site shows Italian `18,80 €` format, which is normalized to `18.8`).

### Things to keep in mind

- Italian-language content throughout.
- Pagination follows the site's `next` link automatically.
- The scraper reads each product's structured data, so field coverage is high and stable even if the page layout shifts.
- No login or cookies are needed — it only reads public product pages.

### Related Scrapers

Other pharmacy and health scrapers in this collection:

- [APONEO Scraper](https://apify.com/studio-amba/aponeo-scraper) — German online pharmacy
- [Shop Apotheke Scraper](https://apify.com/studio-amba/shop-apotheke-scraper) — European online pharmacy
- [Dr. Max Scraper](https://apify.com/studio-amba/drmax-scraper) — Central European pharmacy chain
- [Apotea Scraper](https://apify.com/studio-amba/apotea-scraper) — Swedish online pharmacy
- [Mifarma Scraper](https://apify.com/studio-amba/mifarma-scraper) — Spanish online parapharmacy
- [Newpharma Scraper](https://apify.com/studio-amba/newpharma-scraper) — Belgian online pharmacy

Need a pharmacy or e-commerce site that isn't covered yet? Check the full Studio AMBA collection on Apify.

# Actor input Schema

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

Search term to find products on farmacosmo.it (e.g. "vitamina c", "integratori", "crema viso").

## `categoryUrls` (type: `array`):

Optional list of Farmacosmo category or search-result URLs to scrape instead of (or in addition to) a search query.

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

Maximum number of products to scrape.

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

Apify proxy configuration. Residential Italian IPs are recommended for reliable access.

## Actor input object example

```json
{
  "searchQuery": "vitamina c",
  "categoryUrls": [
    {
      "url": "https://www.farmacosmo.it/ricerca?s=integratori"
    }
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}
```

# 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": "vitamina c",
    "categoryUrls": [
        {
            "url": "https://www.farmacosmo.it/ricerca?s=integratori"
        }
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/farmacosmo-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": "vitamina c",
    "categoryUrls": [{ "url": "https://www.farmacosmo.it/ricerca?s=integratori" }],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/farmacosmo-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": "vitamina c",
  "categoryUrls": [
    {
      "url": "https://www.farmacosmo.it/ricerca?s=integratori"
    }
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}' |
apify call studio-amba/farmacosmo-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Farmacosmo Scraper — Italian Online Pharmacy Products & Prices",
        "description": "Scrape product data from farmacosmo.it, an Italian online pharmacy and parapharmacy. Extract names, brands, prices, EAN codes, ratings, availability, and images for supplements, medicines, cosmetics, and beauty products. No login or cookies required.",
        "version": "0.1",
        "x-build-id": "CEbZfCYaJOlVx8TfK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~farmacosmo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-farmacosmo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~farmacosmo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-farmacosmo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~farmacosmo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-farmacosmo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search term to find products on farmacosmo.it (e.g. \"vitamina c\", \"integratori\", \"crema viso\")."
                    },
                    "categoryUrls": {
                        "title": "Category or Search URLs",
                        "type": "array",
                        "description": "Optional list of Farmacosmo category or search-result URLs to scrape instead of (or in addition to) a search query.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of products to scrape.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. Residential Italian IPs are recommended for reliable access."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
