# Tesco UK & Ireland Scraper (`radeance/tesco-scraper`) Actor

Extract product details like UPC / GTIN, price, competitor price, category, availability, promotions, nutrition, and images from Tesco UK & IE at scale. Scrape by product or category listing URLs with auto-pagination. Export data as HTML Table, JSON, JSONL, CSV, Excel, XML, or RSS.

- **URL**: https://apify.com/radeance/tesco-scraper.md
- **Developed by:** [Radeance](https://apify.com/radeance) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 354 total users, 14 monthly users, 100.0% runs succeeded, 15 bookmarks
- **User rating**: 4.29 out of 5 stars

## Pricing

Pay per event

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 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

## 💎 Tesco UK & Ireland Grocery Scraper

<img src="https://i.imgur.com/BY72JQL.png" alt="Tesco Grocery Products Scraper Cover Image" style="border-radius: 15px;" />
<br><br>

<table style="border-collapse: collapse; width: 100%;">
  <tr>
    <th style="border-bottom: 2px solid #333; padding: 12px 16px; text-align: left; font-weight:600;">
      Discover more ➤
    </th>
        <td style="border-bottom: 1px solid #ddd; padding: 12px 16px;">
      <a href="https://apify.com/radeance/amazon-price-history-api" style="color:#007354; text-decoration:none; font-weight:600;">
        Amazon Price History API
      </a>
    </td>
    <td style="border-bottom: 1px solid #ddd; padding: 12px 16px;">
      <a href="https://apify.com/radeance/junglescout-scraper" style="color:#007354; text-decoration:none; font-weight:600;">
        Jungle Scout Scraper
      </a>
    </td>
    <td style="border-bottom: 1px solid #ddd; padding: 12px 16px;">
      <a href="https://apify.com/radeance/ahrefs-scraper" style="color:#007354; text-decoration:none; font-weight:600;">
        Ahrefs Scraper
      </a>
    </td>
    <td style="border-bottom: 1px solid #ddd; padding: 12px 16px;">
      <a href="https://apify.com/radeance/similarweb-scraper" style="color:#007354; text-decoration:none; font-weight:600;">
        Similarweb Scraper
      </a>
  </tr>
</table>
<br>

This blazing fast & powerful scraper is designed to effortlessly scrape grocery product data from **Tesco UK** & **Tesco Ireland**, the UK’s largest supermarket. Perfect for shoppers, market researchers, and retail businesses, it extracts **detailed product insights**, including **UPCs / GTINs** , **prices**, **promotions**, **nutrition**, **allergens**, **manufacturer details**, and **competitor matching price data**.

It supports **category listing** pages and **product** URLs in one go, making it easy to scrape any grocery product with automatic pagination at scale.
<br><br>Get the data you need in record time and stay ahead of the market!

### ❶ Key Features

- **🔍 Product Data**
    - Scrapes any grocery product from Tesco UK
    - Extracts detailed product data in seconds
    - Provides key details such as - **Product title**, - **UPC/GTIN**, - **Price**, - **Offer / Promotion prices**, - **Unit prices**, - **Description**, - **Main / Sub / Product Categories**, - **Nutritional information**, - **Allergens**, - **Manufacturer information**, - **Price matching data**
      <br>
- **⚡ Fast and Efficient:**
    - Extremely fast, scraping 1000 data entries in a minute
      <br>
- **📝 Product Category Listings Support**
    - Scrape grocery product categories by providing one or multiple category urls
    - Automatic pagination until customizable `max_pages`or `max_items` limit is reached
      <br>

- **📊 Flexible Data Output**
    - Outputs data in various formats including CSV, XLSX, JSON, JSONL, XML, and RSS

### ❷ Output

**Table View**
![Tesco Scraper Output](https://i.imgur.com/0fVDSMW.png)
**JSON**

```json
{
    "product_id": "317764532",
    "base_product_id": "93601340",
    "sku": "317764532",
    "gtin": "04025500294618",
    "brand_name": "Müller",
    "name": "MULLER X MY PROTEIN Mousse Chocolate Flavour 200g",
    "description": "High protein low fat chocolate flavour mousse with sweeteners.",
    "price": 2.25,
    "currency": "GBP",
    "isLowEverydayPricing": false,
    "isLowPricePromise": false,
    "in_stock": true,
    "promotion": null,
    "price_matches_competitor": false,
    "competitors": null,
    "unit": "G",
    "unit_price": 11.25,
    "unit_quantity": "200",
    "servings": null,
    "netContents": "200g ℮",
    "drainedWeight": null,
    "dosage": null,
    "prepartionAndUsage": null,
    "preparationGuidelines": null,
    "cookingInstructions": [],
    "freezingInstructions": null,
    "directions": null,
    "features": ["Low Fat", "20g Protein", "Müllerlicious Since 1896"],
    "healthClaims": null,
    "boxContents": null,
    "nutritionalClaims": ["Low Fat"],
    "otherInformation": [
        "Müller is a registered trade mark of the Müller Group.",
        "Mycon is a registered trade mark of Myprotein®"
    ],
    "additives": ["Contains Sweeteners"],
    "recyclingInfo": "Foil. Recycle\nPot. Recycle\nSleeve. Recycle",
    "safetyWarning": null,
    "warnings": ["Contains a source of phenylalanine."],
    "originInformation": null,
    "image_url": "https://digitalcontent.api.tesco.com/v2/media/ghs/d558938c-a828-407e-b4fc-f4d850e7a337/f0ffa888-673e-4121-b198-f9e68c92e141.jpeg",
    "url": "https://www.tesco.com/groceries/en-GB/products/317764532",
    "buy_limit": 99,
    "buy_limit_message": "Max allowed is 99.",
    "is_new": false,
    "sale_type": "SingleProduct",
    "main_category": "Fresh Food",
    "sub_category": "Yogurts",
    "product_category": "High Protein Yogurts & Skyr Yogurts",
    "product_type": "High Protein Puddings & Desserts",
    "product_attributes": ["Low Fat"],
    "ingredients": "Water, Milk Proteins, Skimmed Milk Powder, Fat Reduced Cocoa Powder (4%), Cream (Milk), Emulsifier: E471;, Beef Gelatine, Acidity Regulator: Sodium Citrates;, Sweeteners: Aspartame, Acesulfame K",
    "allergens": "See ingredients in bold",
    "storage_instructions": ["Best before see lid.Keep refrigerated."],
    "usage_instructions": null,
    "nutrition": {
        "Measure": "per: 100g",
        " Energy": " 350kJ (84kcal)",
        " Fat": " 2.7g",
        " of which saturates ": "2.0g",
        " Carbohydrate": " 3.9g",
        " of which sugars": " 3.5g",
        " Protein": " 10.2g",
        " Salt": " 0.26g"
    },
    "nutrition_per_serving": {
        "Measure": "Per Pot: 200g",
        " Energy": " 700kJ (168kcal)",
        " Fat": " 5.4g",
        " of which saturates ": " 4.0g",
        " Carbohydrate": " 7.8g",
        " of which sugars": " 7.0g",
        " Protein": " 20.4g",
        " Salt": " 0.52g"
    },
    "manufacturer": {
        "name": "Müller,",
        "adress": "Müller,TF9 3SQ,UK.,or,Müller Dairy Ireland Ltd,8th Floor,Block E Iveagh Court,Harcourt Road,Dublin 2.",
        "email": null,
        "phone": null,
        "website": null
    },
    "additional_information": [
        "Müller is a registered trade mark of the Müller Group.",
        "Mycon is a registered trade mark of Myprotein®"
    ],
    "marketing_text": [
        "Enjoy Muller My Protein delicious low fat dairy mousse, each pot packed with 20g of protein. Available in two irresistible flavours, the perfect treat any time, whether that’s a delicious dessert or after a workout."
    ],
    "total_reviews": 35,
    "overall_rating": 4.6,
    "ratings_distribution": [
        {
            "rating": 3.0,
            "count": 2,
            "share": 0.06
        },
        {
            "rating": 4.0,
            "count": 10,
            "share": 0.29
        },
        {
            "rating": 5.0,
            "count": 23,
            "share": 0.66
        }
    ],
    "reviews": [
        {
            "review_id": "8b89f65c-5dc2-40de-9e2a-7a455ac1b846",
            "posted_at": "2026-03-11T21:23:08.473000Z",
            "verified_buyer": false,
            "promotional_review": false,
            "sampled_review": false,
            "rating": 5.0,
            "title": "Yum!",
            "text": "Totally yummy! Doesn't have that horrible protein taste/texture. Large portion, low calories and feels like a proper pudding. My husband loves these."
        }
    ]
}
````

### ❸ Input

##### Supported URL Formats

| URLs                                                        | Type    | Supported |
| ----------------------------------------------------------- | ------- | --------- |
| `https://www.tesco.com/groceries/en-GB/products/272202380`  | Product | ✅        |
| `https://www.tesco.com/groceries/en-GB/shop/fresh-food/all` | Listing | ✅        |
| `https://www.tesco.com/groceries/en-GB/search?query=milk`   | Search  | ✅        |

##### Supported Tesco Regions

| Region                           | Supported |
| -------------------------------- | --------- |
| Tesco United Kingdom (tesco.com) | ✅        |
| Tesco Ireland (tesco.ie)         | ✅        |

#### Search Parameters

<img src="https://i.imgur.com/rI5hoyj.png" alt="Tesco Scraper Input Image" style="border-radius: 15px;" />
<br><br>

| Parameter                 | Type           | Default      | Description                                                                                                                      |
| ------------------------- | -------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| `category`                | string         | `fresh-food` | Category slug to scrape products from (e.g. `fresh-food`, `bakery`, `drinks`). Ignored if `categories` is used.                  |
| `categories`              | array (string) | —            | Select the product categories you want to scrape. The `category` field will be ignored if this is used. ⚠️ Paid-only feature.    |
| `region`                  | string         | `UK`         | Tesco region to target for scraping (e.g. `UK`). Determines product availability and pricing.                                    |
| `keyword`                 | string         | —            | Keyword used to search Tesco products (e.g. `chicken`, `protein bars`). Scrapes results from search listings.                    |
| `urls`                    | array (string) | —            | List of product, category, or search URLs for bulk scraping (e.g. `["https://tesco.com/..."]`).                                  |
| `include_product_details` | boolean        | `true`       | When enabled, fetches detailed product page data such as descriptions, nutrition, and specifications.                            |
| `include_reviews`         | boolean        | `false`      | If enabled, includes all reviews for each product. ⚠️ Additional costs may apply and processing time can increase significantly. |
| `review_posted`           | string         | `90 days`    | Filters product reviews by the timespan given. For example `7 days`, `1 month`, `3 years`                                        |
| `only_unique`             | boolean        | `true`       | If enabled, returns only unique products based on product identifier. Useful for large scrapes to avoid duplicates.              |
| `max_items`               | number         | `100`        | Maximum number of products to retrieve. ⚠️ Free users are limited to 100 items.                                                  |
| `max_pages`               | number         | `1`          | Number of listing/search result pages to crawl. ⚠️ Free users are limited to 5 pages.                                            |
| `page_offset`             | number         | `1`          | Page number to start scraping from. ⚠️ Paid-only feature; free users limited to page 1.                                          |

***

#### 📄 Field Reference

| Field                      | Type           | Description                                                      |
| -------------------------- | -------------- | ---------------------------------------------------------------- |
| `product_id`               | string         | Unique identifier for the product.                               |
| `base_product_id`          | string         | Base identifier shared across product variants.                  |
| `sku`                      | string         | Stock keeping unit identifier.                                   |
| `gtin`                     | string         | Global Trade Item Number                                         |
| `brand_name`               | string         | Brand of the product.                                            |
| `name`                     | string         | Full product name.                                               |
| `description`              | string         | Product description text.                                        |
| `price`                    | number         | Current product price.                                           |
| `currency`                 | string         | Currency code (e.g. `GBP`).                                      |
| `isLowEverydayPricing`     | boolean        | Indicates if product has everyday low pricing.                   |
| `isLowPricePromise`        | boolean        | Indicates if product is part of Tesco price promise.             |
| `in_stock`                 | boolean        | Availability status of the product.                              |
| `promotion`                | object or null | Promotion details if available.                                  |
| `price_matches_competitor` | boolean        | Indicates if Tesco matches competitor pricing.                   |
| `competitors`              | array or null  | Competitor pricing data if available.                            |
| `unit`                     | string         | Measurement unit (e.g. `G`, `ML`).                               |
| `unit_price`               | number         | Price per unit.                                                  |
| `unit_quantity`            | string         | Quantity corresponding to the unit.                              |
| `servings`                 | number or null | Number of servings per product.                                  |
| `netContents`              | string         | Net content information.                                         |
| `drainedWeight`            | string or null | Drained weight if applicable.                                    |
| `dosage`                   | string or null | Dosage instructions (if applicable).                             |
| `prepartionAndUsage`       | string or null | Preparation and usage instructions.                              |
| `preparationGuidelines`    | string or null | Additional preparation guidelines.                               |
| `cookingInstructions`      | array          | Cooking instructions list.                                       |
| `freezingInstructions`     | string or null | Freezing instructions.                                           |
| `directions`               | string or null | General usage directions.                                        |
| `features`                 | array (string) | Key product features.                                            |
| `healthClaims`             | array or null  | Health-related claims.                                           |
| `boxContents`              | string or null | Box/package contents.                                            |
| `nutritionalClaims`        | array (string) | Nutritional claims (e.g. `Low Fat`).                             |
| `otherInformation`         | array (string) | Additional product-related information.                          |
| `additives`                | array (string) | Additives present in the product.                                |
| `recyclingInfo`            | string         | Recycling instructions.                                          |
| `safetyWarning`            | string or null | Safety warnings if available.                                    |
| `warnings`                 | array (string) | Important warnings.                                              |
| `originInformation`        | string or null | Origin details of the product.                                   |
| `image_url`                | string (URL)   | URL of the product image.                                        |
| `url`                      | string (URL)   | Tesco product page URL.                                          |
| `buy_limit`                | number         | Maximum allowed purchase quantity.                               |
| `buy_limit_message`        | string         | Message describing purchase limit.                               |
| `is_new`                   | boolean        | Indicates if the product is newly listed.                        |
| `sale_type`                | string         | Type of sale (e.g. `SingleProduct`).                             |
| `main_category`            | string         | Top-level category.                                              |
| `sub_category`             | string         | Sub-category classification.                                     |
| `product_category`         | string         | Product category grouping.                                       |
| `product_type`             | string         | Specific product type.                                           |
| `product_attributes`       | array (string) | Additional product attributes.                                   |
| `ingredients`              | string         | Ingredients list.                                                |
| `allergens`                | string         | Allergen information.                                            |
| `storage_instructions`     | array (string) | Storage instructions.                                            |
| `usage_instructions`       | string or null | Usage instructions.                                              |
| `nutrition`                | object         | Nutritional values per standard measure (e.g. 100g).             |
| `nutrition_per_serving`    | object         | Nutritional values per serving.                                  |
| `manufacturer`             | object         | Manufacturer details including name and address.                 |
| `additional_information`   | array (string) | Additional manufacturer or product notes.                        |
| `marketing_text`           | array (string) | Marketing descriptions or promotional text.                      |
| `total_reviews`            | number         | Total number of reviews.                                         |
| `overall_rating`           | number         | Average product rating.                                          |
| `ratings_distribution`     | array (object) | Breakdown of ratings by score including count and share.         |
| `reviews`                  | array (object) | List of individual reviews including rating, title, and content. |

### ❹ Use Cases

- **Bulk Product Data Collection**: Efficiently scrape large volumes of grocery product data
- **Price Comparison**: Extract and compare prices across different products and brands to find the best deals.
- **Market Analysis**: Analyze product data to understand market trends, popular brands, and product categories.
- **Promotion Tracking**: Identify and track promotional offers and discounts on various products.
- **Product Detail Extraction**: Collect comprehensive details such as product ID, SKU, GTIN, brand name, description, price, and unit quantity.
- **Stock Availability Monitoring**: Check the in-stock status of products to maintain up-to-date availability information.
- **Nutritional Information**: Extract and store nutritional data for health and diet analysis.
- **Allergen Warnings**: Gather allergen information to ensure product safety for consumers with specific dietary requirements.
- **Manufacturer Details**: Collect manufacturer information including name, address, email, and website for reference and contact purposes.
- **Categorization**: Classify products into main categories, sub-categories, and product types for better organization and searchability.

### ❺ Usage Limits

This service has different usage limits depending on your subscription status:

| User Type | Monthly Runs | # Bulk URLs Supported | Reset Period |
| --------- | ------------ | --------------------- | ------------ |
| **Free**  | 10 runs      | 3 per run             | 30 days      |
| **Paid**  | Unlimited    | Unlimited per run     | N/A          |

### ❻ FAQ

#### What data can you get from the Tesco UK & Ireland Grocery Scraper?

The scraper can extract a wide range of data points for each grocery product, including but not limited to product ID, SKU, GTIN, brand name, product name, description, price, currency, stock status, promotions, unit price, nutritional information, allergens, manufacturer details, and customer reviews.

#### Is Bulk URL processing supported?

Yes, the scraper supports bulk URL processing. You can provide a list of product, category, or search URLs in the `urls` input parameter to scrape multiple pages in one go.

### ❼ While the scraper is running

During the run, the actor will output log messages letting you know what is going on at any point. Each message always contains specific information about the process including which url / page the actor is working on.

If you provide invalid inputs to the actor, it will immediately stop with a failure state and output log messages explaining what is wrong. If you are unsure what went wrong feel free to open up an issue in the issue tab.

### ❽ Legality of web scraping

The **Tesco UK & Ireland Grocery Scraper** is designed to ethically extract **only publicly available product data and manufacturer information**, and it **does not** scrape private user data such as personal email addresses or personal identifiers.

Our services are ethical and **do not extract any private user data**. They only extract **what individuals or companies chose to share publicly**. We therefore believe that our services, when used for ethical purposes by our users, are safe to use. However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. For more information you can read this [blog post](https://blog.apify.com/is-web-scraping-legal/) from Apify for more information on the legality of web scraping

### ❾ Feedback and Support

**Your satisfaction** is **important** to us! Therefore we are constantly striving to enhance the performance of our services.

If you have any technical feedback or encounter any bugs within the **Tesco UK & Ireland Grocery Scraper**, please create an issue in the Actor’s Issues tab on the Apify Console to let us know about it. We will look into it as soon as possible.

You can also contact us directly for **general help** on **issues** or **integrations** at suppport@radeance.com. <br> For **custom projects**, **general suggestions** or **new use cases** feel free to reach out to us at business@radeance.com

# Actor input Schema

## `category` (type: `string`):

Select the grocery category you want to scrape

## `region` (type: `string`):

Select the region for Tesco UK or Tesco IE. This will be disregarded when using the 'urls' field. Default: UK

## `keyword` (type: `string`):

Enter a product keyword to search for a product. This will be disregarded when using the 'urls' field.

## `categories` (type: `array`):

Select the product categories you want to scrape. The `category` field will be ignored if you use this. This is a paid-only feature.

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

Add product page or category listing page URLs you want to scrape. You can add multiple URLs by clicking the '+' button.

## `include_product_details` (type: `boolean`):

If checked, the scraper will include detailed product information from the product page such as ingredients, allergens, and nutritional information. This option will be considered for listing urls. Default: true

## `only_unique` (type: `boolean`):

If checked, the scraper will only return unique products based on the product identifier. This is useful for large scrapes to avoid duplicates. Default: true

## `stream_output` (type: `boolean`):

If checked, the scraper will stream the data as it processing your query. This is useful for long running queries. Default: true

## `max_items` (type: `integer`):

Maximum number of products to scrape. Free Users are limited to 100 Default: 1000

## `max_pages` (type: `integer`):

Maximum number of pages to scrape (Listing mode). Default: 1

## `page_offset` (type: `integer`):

The page number the scraper should scrape from. Paid-Only Feature. Defaults to 1

## `include_reviews` (type: `boolean`):

If checked, the scraper will include either all reviews or reviews within `review_posted` for each product. Note: Additional costs may apply! This can significantly increase the processing time. Default: false

## `review_posted` (type: `string`):

Select relative date in format: {number} {unit}

## Actor input object example

```json
{
  "category": "fresh-food",
  "region": "UK",
  "include_product_details": true,
  "only_unique": true,
  "stream_output": true,
  "max_items": 1000,
  "max_pages": 1,
  "page_offset": 1,
  "include_reviews": false,
  "review_posted": "90 days"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "review_posted": "90 days"
};

// Run the Actor and wait for it to finish
const run = await client.actor("radeance/tesco-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 = { "review_posted": "90 days" }

# Run the Actor and wait for it to finish
run = client.actor("radeance/tesco-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 '{
  "review_posted": "90 days"
}' |
apify call radeance/tesco-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tesco UK & Ireland Scraper",
        "description": "Extract product details like UPC / GTIN, price, competitor price, category, availability, promotions, nutrition, and images from Tesco UK & IE at scale. Scrape by product or category listing URLs with auto-pagination. Export data as HTML Table, JSON, JSONL, CSV, Excel, XML, or RSS.",
        "version": "0.0",
        "x-build-id": "UWqHEPD5tCD8hEIbf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/radeance~tesco-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-radeance-tesco-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/radeance~tesco-scraper/runs": {
            "post": {
                "operationId": "runs-sync-radeance-tesco-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/radeance~tesco-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-radeance-tesco-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",
                "required": [
                    "category",
                    "region"
                ],
                "properties": {
                    "category": {
                        "title": "Category",
                        "enum": [
                            "all",
                            "clothing-and-accessories",
                            "marketplace",
                            "electronics-and-gaming",
                            "fresh-food",
                            "bakery",
                            "treats-and-snacks",
                            "food-cupboard",
                            "frozen-food",
                            "garden-diy-and-car-care",
                            "drinks",
                            "baby-and-toddler",
                            "health-and-beauty",
                            "pets",
                            "household",
                            "home-and-furniture",
                            "home-and-living",
                            "tesco-finest",
                            "parties-and-seasonal",
                            "toys-and-games",
                            "sports-and-leisure",
                            "hobbies-and-stationery",
                            "kiosk",
                            "inspiration-and-events"
                        ],
                        "type": "string",
                        "description": "Select the grocery category you want to scrape",
                        "default": "fresh-food"
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "UK",
                            "IE"
                        ],
                        "type": "string",
                        "description": "Select the region for Tesco UK or Tesco IE. This will be disregarded when using the 'urls' field. Default: UK",
                        "default": "UK"
                    },
                    "keyword": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Enter a product keyword to search for a product. This will be disregarded when using the 'urls' field."
                    },
                    "categories": {
                        "title": "Select multiple categories (Bulk)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select the product categories you want to scrape. The `category` field will be ignored if you use this. This is a paid-only feature.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "clothing-and-accessories",
                                "marketplace",
                                "electronics-and-gaming",
                                "fresh-food",
                                "bakery",
                                "treats-and-snacks",
                                "food-cupboard",
                                "frozen-food",
                                "garden-diy-and-car-care",
                                "drinks",
                                "baby-and-toddler",
                                "health-and-beauty",
                                "pets",
                                "household",
                                "home-and-furniture",
                                "home-and-living",
                                "tesco-finest",
                                "parties-and-seasonal",
                                "toys-and-games",
                                "sports-and-leisure",
                                "hobbies-and-stationery",
                                "kiosk",
                                "inspiration-and-events"
                            ],
                            "enumTitles": [
                                "Clothing & Accessories (UK only)",
                                "Marketplace (UK only)",
                                "Electronics & Gaming (UK only)",
                                "Fresh Food",
                                "Bakery",
                                "Treats and Snacks",
                                "Food Cupboard",
                                "Frozen Food",
                                "Garden, DIY & Car Care (UK only)",
                                "Drinks",
                                "Baby and Toddler",
                                "Health and Beauty",
                                "Pets",
                                "Household",
                                "Home and Furniture (UK only)",
                                "Home and Living (IE only)",
                                "Tesco Finest (IE only)",
                                "Parties and Seasonal (UK only)",
                                "Toys & Games (UK only)",
                                "Sports & Leisure (UK only)",
                                "Hobbies & Stationery (UK only)",
                                "Kiosk (UK only)",
                                "Inspiration & Events"
                            ]
                        }
                    },
                    "urls": {
                        "title": "Product, Listing or Search URL(s)",
                        "type": "array",
                        "description": "Add product page or category listing page URLs you want to scrape. You can add multiple URLs by clicking the '+' button.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "include_product_details": {
                        "title": "Include Product Page Data",
                        "type": "boolean",
                        "description": "If checked, the scraper will include detailed product information from the product page such as ingredients, allergens, and nutritional information. This option will be considered for listing urls. Default: true",
                        "default": true
                    },
                    "only_unique": {
                        "title": "Only Unique Products",
                        "type": "boolean",
                        "description": "If checked, the scraper will only return unique products based on the product identifier. This is useful for large scrapes to avoid duplicates. Default: true",
                        "default": true
                    },
                    "stream_output": {
                        "title": "Stream Output",
                        "type": "boolean",
                        "description": "If checked, the scraper will stream the data as it processing your query. This is useful for long running queries. Default: true",
                        "default": true
                    },
                    "max_items": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of products to scrape. Free Users are limited to 100 Default: 1000",
                        "default": 1000
                    },
                    "max_pages": {
                        "title": "Max Pages",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of pages to scrape (Listing mode). Default: 1",
                        "default": 1
                    },
                    "page_offset": {
                        "title": "Page Offset",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "The page number the scraper should scrape from. Paid-Only Feature. Defaults to 1",
                        "default": 1
                    },
                    "include_reviews": {
                        "title": "Include Reviews",
                        "type": "boolean",
                        "description": "If checked, the scraper will include either all reviews or reviews within `review_posted` for each product. Note: Additional costs may apply! This can significantly increase the processing time. Default: false",
                        "default": false
                    },
                    "review_posted": {
                        "title": "Review(s) posted in last",
                        "pattern": "^(\\d+)\\s*(day|week|month|year)s?$",
                        "type": "string",
                        "description": "Select relative date in format: {number} {unit}"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
