# Conad Scraper — Italian Grocery Prices (`studio-amba/conad-it-scraper`) Actor

Scrape products, prices, unit prices, and categories from conad.it, Italy's largest grocery co-op chain by market share. Search any Italian keyword and export clean structured grocery data.

- **URL**: https://apify.com/studio-amba/conad-it-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 $1.20 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Conad Scraper — Italian Grocery Prices

Scrape grocery products, prices, unit prices, and categories from **conad.it**, Italy's largest grocery co-op chain by market share. Search any Italian keyword and export clean, structured grocery data — no login, no anti-bot bypass required.

### Why use this actor?

Conad is Italy's biggest supermarket network by market share, run as a co-op of independently owned stores under one national catalogue and pricing structure. Its online catalogue prices, categories, and unit prices are useful for price monitoring, competitor analysis, product matching, and Italian grocery market research. This actor turns a keyword search into a structured dataset you can drop straight into a spreadsheet, database, or price-comparison pipeline.

### How to scrape Conad data

1. Enter a **search query** in Italian (for example `pasta`, `latte`, `caffè`, or `olio`).
2. Set **Max Results** to how many products you want (each search page returns up to 30 products; the actor paginates automatically).
3. Run the actor. Results stream into the dataset and can be exported as JSON, CSV, Excel, or via the API.

conad.it carries no anti-bot protection (verified live — no Cloudflare, DataDome, Akamai, or PerimeterX challenge on the storefront or its search endpoint), so no API key or proxy configuration is required to get started.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Search keyword in Italian (default: `pasta`) |
| `maxResults` | Integer | No | Maximum products to return (default: 100) |
| `proxyConfiguration` | Object | No | Optional — the default Apify proxy is sufficient since conad.it has no anti-bot protection |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Pasta di Semola di Grano Duro N°45 Ditali Lisci 500 g Conad"` |
| `brand` | String | `"CONAD"` |
| `price` | Number | `0.59` |
| `currency` | String | `"EUR"` |
| `pricePerUnit` | String | `"1,18 € / Kg"` |
| `quantity` | String | `"500 g"` |
| `category` | String | `"Pasta e riso"` |
| `categories` | Array | `["Pasta e riso", "Pasta di semola", "Di semola"]` |
| `productId` / `sku` | String | `"300937"` |
| `inStock` | Boolean or null | `null` (conad.it never exposes stock state without a selected delivery store) |
| `imageUrl` | String | Primary product image URL |
| `language` | String | `"it"` |
| `searchQuery` | String | The keyword that returned this product |
| `url` | String | Full product page URL |
| `scrapedAt` | String | ISO 8601 timestamp |

### Example output

```json
{
    "name": "Pasta di Semola di Grano Duro N°45 Ditali Lisci 500 g Conad",
    "brand": "CONAD",
    "price": 0.59,
    "currency": "EUR",
    "pricePerUnit": "1,18 € / Kg",
    "productId": "300937",
    "sku": "300937",
    "imageUrl": "https://spesaonline.conad.it/assets/products/pasta-di-semola-di-grano-duro-n45-ditali-lisci-500-g-conad--300937/ID-Shot.jpeg/renditions/medium.jpeg",
    "category": "Pasta e riso",
    "categories": ["Pasta e riso", "Pasta di semola", "Di semola"],
    "quantity": "500 g",
    "language": "it",
    "searchQuery": "pasta",
    "url": "https://spesaonline.conad.it/p/pasta-di-semola-di-grano-duro-n45-ditali-lisci-500-g-conad--300937",
    "scrapedAt": "2026-09-17T09:14:35.506Z",
    "inStock": null
}
```

### No anti-bot protection

conad.it's storefront (`spesaonline.conad.it`) is a server-rendered Adobe AEM site. Every product card renders a JSON payload directly in a `data-product` HTML attribute — no JavaScript execution or hidden API key is needed to read it. Verified live: the root domain, the storefront, and the search AJAX endpoint all return clean HTML with no bot-challenge headers or markup. The actor fetches pages directly with a browser user agent and the default Apify proxy.

### Cost estimate

Roughly one request per 30 products, plus Apify compute. Scraping 1,000 products is about 34 requests — fast and cheap, with no anti-bot service fees. Usage cost for a run only settles once the run has SUCCEEDED.

### How pagination works

The actor calls conad.it's own search partial (`/tutti-i-prodotti/_jcr_content/root/search.loader.html?query=<keyword>&page=<N>`), the same endpoint the site's own "Tutti i prodotti" browse page uses internally for pagination. It starts at page 1 and requests the next page until it reaches your Max Results or runs out of products. Each page yields up to 30 products, deduplicated by product code so the same item is never exported twice.

### Limitations

- Prices are Conad's national catalogue values. Conad is a co-op of independently owned stores, so a small share of items (products on active local promotions) may not render a final price without a selected delivery store — those cards are skipped rather than exporting a fabricated price.
- `inStock` is always `null` — conad.it does not expose per-product stock state on the listing/search page without a selected delivery address.
- Data is scraped from the public website and may change without notice.
- Respect the website's terms of service and use responsibly.

### Related Scrapers

- [Carrefour France Scraper](https://apify.com/store) — French grocery prices and EAN barcodes
- [Carrefour Belgium Scraper](https://apify.com/store) — Belgian grocery prices
- [Carrefour Spain Scraper](https://apify.com/store) — Spanish grocery prices
- [UK Grocery Price Matrix](https://apify.com/store) — Cross-retailer UK grocery price comparison

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

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

Search conad.it for products by keyword, in Italian (e.g. 'pasta', 'latte', 'caffè', 'olio'). Each search page returns 30 products; the scraper paginates until it reaches Max Results.

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

Maximum number of products to return.

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

Proxy settings for fetching pages. conad.it has no anti-bot protection, so the default Apify proxy (no residential group needed) works fine.

## Actor input object example

```json
{
  "searchQuery": "pasta",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchQuery": "pasta",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/conad-it-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": "pasta",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/conad-it-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": "pasta",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/conad-it-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/conad-it-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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