# Boots Scraper - UK Health, Pharmacy & Beauty (`studio-amba/boots-scraper`) Actor

Scrape products from Boots.com, the UK's largest health and pharmacy retailer. Extract names, prices, brands, EAN, ratings, stock. No login required.

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

## Boots Scraper

Scrape products from [Boots.com](https://www.boots.com), the UK's largest health and pharmacy retailer with thousands of stores and one of Britain's most-visited retail sites. Search by keyword and pull clean, structured product data: names, prices, brands, EAN barcodes, ratings, stock status, and images.

No login. No cookies. No account required.

### Why use this scraper?

- **Price monitoring** — Track Boots prices for medicines, vitamins, skincare and beauty products over time and spot promotions.
- **Competitive analysis** — Compare Boots pricing against Superdrug, Amazon, and supermarket pharmacies on matching EAN codes.
- **Market research** — Analyse assortment, brand coverage, and pricing across health, pharmacy, and beauty categories.
- **Retail intelligence** — Monitor stock availability and "3 for 2" style promotions across large product ranges.
- **Catalogue enrichment** — Match products by EAN/UPC to enrich your own catalogue with images, ratings, and descriptions.
- **Brand monitoring** — Track how your brand's products are priced, rated, and merchandised on Boots.
- **Data journalism & academia** — Build datasets on UK health and beauty retail pricing and consumer ratings.
- **Reselling & arbitrage** — Find discounted lines and price gaps against other UK and EU health retailers.

### How to scrape Boots data

1. **Create an Apify account** — Sign up at [apify.com](https://apify.com) (free tier available).
2. **Open the Boots Scraper** — Navigate to this actor's page in the Apify Store.
3. **Enter a search term** — Type a product keyword (e.g., "paracetamol", "vitamin d", "no7 serum"). The scraper searches the full Boots catalogue.
4. **Refine (optional)** — Filter by brand, price range, stock status, or choose a sort order (price, rating, best selling, newest).
5. **Set a result limit** — Choose how many products you want (default: 100).
6. **Run the actor** — Click "Start". Most searches finish in well under a minute.
7. **Download your data** — Export as JSON, CSV, or Excel from the Dataset tab, or pull it via the Apify API for automated workflows.

### How it works

Boots serves its storefront behind Imperva bot protection, but its product catalogue is powered by a public product-search index that the site's own search box queries directly from your browser. This scraper reads from that same index, so it is fast and reliable and does not need a headless browser or residential proxies for normal use. Each request returns up to 200 fully hydrated products.

### Input parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `searchQuery` | string | Product search term (e.g., "paracetamol", "vitamin d") | `paracetamol` |
| `maxResults` | integer | Maximum products to return (1–2000) | 100 |
| `sort` | string | `price_asc`, `price_desc`, `newest`, `rating`, `bestselling` | Relevance |
| `brand` | string | Filter to a single brand (exact match, e.g., "No7") | — |
| `inStockOnly` | boolean | Only return products currently in stock | `false` |
| `minPrice` | integer | Minimum price in GBP | — |
| `maxPrice` | integer | Maximum price in GBP | — |
| `proxyConfiguration` | object | Legacy proxy settings (not required) | Apify Residential GB |

### Output fields

| Field | Type | Description | Example |
|-------|------|-------------|---------|
| `name` | string | Full product name | `Boots Paracetamol 500mg Tablets 16 Tablets` |
| `brand` | string | Brand name | `Boots` |
| `price` | number | Current selling price | `0.49` |
| `originalPrice` | number | Price before discount (if on offer) | `null` |
| `currency` | string | ISO currency code | `GBP` |
| `pricePerUnit` | string | Unit price | `£0.03 per 1UNI` |
| `ean` | string | EAN/UPC barcode | `5045098199934` |
| `sku` | string | Boots product identifier | `10276369` |
| `inStock` | boolean | Stock status | `true` |
| `rating` | number | Average review score (out of 5) | `4.58` |
| `reviewCount` | number | Number of reviews | `73` |
| `category` | string | Most specific catalogue category | `pain relief` |
| `promotion` | string | Promotional message | `3 for 2 on selected Vitamins` |
| `imageUrl` | string | Product image URL | `https://boots.scene7.com/is/image/Boots/10276369` |
| `url` | string | Product page URL | `https://www.boots.com/boots-paracetamol-...` |
| `description` | string | Product description / offer details | `For the relief of mild to moderate pain...` |
| `scrapedAt` | string | ISO timestamp of the scrape | `2026-07-06T10:00:00.000Z` |

### Example output

```json
{
    "name": "Boots Paracetamol 500mg Tablets 16 Tablets",
    "brand": "Boots",
    "price": 0.49,
    "originalPrice": null,
    "currency": "GBP",
    "pricePerUnit": "£0.03 per 1UNI",
    "ean": "5045098199934",
    "sku": "10276369",
    "inStock": true,
    "rating": 4.58,
    "reviewCount": 73,
    "category": "pain relief",
    "promotion": "",
    "imageUrl": "https://boots.scene7.com/is/image/Boots/10276369?op_sharpen=1",
    "url": "https://www.boots.com/boots-paracetamol-500mg-caplets-16s-10276369",
    "description": "For the relief of mild to moderate pain, influenza, colds and feverishness. Adults & children aged 6 years & over.",
    "scrapedAt": "2026-07-06T10:00:00.000Z"
}
```

### Cost estimate

Pricing is pay-per-result. Because each request returns up to 200 products from the search index, runs are fast and cheap: a 100-product search completes in seconds. Expect several hundred products per $1 of Apify credits depending on your plan and the per-result rate shown on this actor's pricing tab.

### Limitations / known issues

- **Search-driven** — Results come from Boots' search index, so you scrape by keyword rather than crawling a category tree. Broad terms (e.g., "vitamin") return the widest catalogue slice.
- **Pagination depth** — The search index limits how deep pagination can go, so extremely broad queries cap out at a few thousand of the most relevant products. Use specific terms or price/brand filters to narrow large result sets.
- **Prices exclude in-store-only offers** — Reflects online Boots.com pricing; store-specific promotions may differ.
- **Medicine restrictions** — Pharmacy-only medicines list their catalogue data but may require a pharmacy interaction to purchase; this scraper reports the listing, not purchase eligibility.
- **Not affiliated with Boots** — This is an independent tool for publicly available product data. Respect Boots' terms and applicable laws when using scraped data.

### Related actors

Building a UK health and beauty price dataset? Pair this with our other UK retail and pharmacy scrapers to compare pricing across chains on matching EAN codes.

# Actor input Schema

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

Product search term (e.g., 'paracetamol', 'vitamin d', 'no7 serum', 'ibuprofen').

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

Maximum number of products to scrape.

## `sort` (type: `string`):

Sort order for results.

## `brand` (type: `string`):

Filter to a single brand (exact match, e.g., 'No7', 'Boots', 'Nurofen').

## `inStockOnly` (type: `boolean`):

Only return products currently in stock.

## `minPrice` (type: `integer`):

Only return products at or above this price.

## `maxPrice` (type: `integer`):

Only return products at or below this price.

## `brightDataApiKey` (type: `string`):

Optional: your own Bright Data Web Unlocker API key. Only used as a fallback to refresh the built-in search credentials if they ever rotate. Not needed for normal use.

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

Legacy proxy settings. The product catalogue is fetched from a public search API, so this can be left at its default.

## Actor input object example

```json
{
  "searchQuery": "paracetamol",
  "maxResults": 20,
  "sort": "",
  "inStockOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

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