# 🍷Millesima Wine data (`jordan-byte/millesima-wine-data`) Actor

finds name, per-bottle and per-case prices, vintage, region, appellation, producer, color, alcohol, classification, stock status, image, and critic ratings from up to 18 wine publications

- **URL**: https://apify.com/jordan-byte/millesima-wine-data.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (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.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Millesima Wine Scraper

### What does Millesima Wine Scraper do?

Millesima Wine Scraper extracts **wine data** from [Millesima.fr](https://www.millesima.fr/), one of Europe's leading online wine merchants. Point it at a category page and it returns clean, structured data for every wine it finds - **name, per-bottle and per-case prices, vintage, region, appellation, producer, color, alcohol, classification, stock status, image, and critic ratings from up to 18 wine publications** (Robert Parker, Wine Spectator, Decanter, James Suckling, and more) - ready to download or pipe into another system.

Try it instantly by clicking **Start** with the default input, which crawls Millesima's full wine catalog.

Because it runs on the Apify platform, you get API access, one-click scheduling (e.g. run daily to track price changes), integrations with Zapier/Make/Google Sheets, automatic proxy rotation, and full run monitoring - none of which you get from a script running on your own machine.

### Why use Millesima Wine Scraper?

- **Price monitoring** - track wine prices across vintages and appellations over time.
- **Investment analysis** - compare critic ratings to identify undervalued wines.
- **Market research** - analyze pricing trends by region, vintage, or producer.
- **Inventory sourcing** - find wines matching specific rating and price criteria.
- **Collection management** - build a database with critic scores for your cellar.

### How to use Millesima Wine Scraper

1. Click **Try for free** or **Start** on the Actor page.
2. In the **Start URLs** field, keep the default all-wines page, or add one or more Millesima.fr category pages you want to scrape instead (e.g. `https://www.millesima.fr/bordeaux.html` for Bordeaux, `https://www.millesima.fr/bourgogne.html` for Bourgogne).
3. Set **Max items** to limit how many wines are extracted per start URL (leave at the default `100` for a quick test, or set to `0` for unlimited).
4. Optionally set **Max pages per start URL** to sample only the first few pages of a category instead of crawling it in full.
5. Click **Start** and wait for the run to finish.
6. Open the **Dataset** tab to browse, filter, and export your results.

### Input

Configure the Actor using the **Input** tab in Apify Console, or by passing a JSON object via the API. The following fields are available:

| Field                 | Type    | Default         | Description                                                                                                                                                         |
| --------------------- | ------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`           | array   | All-wines page  | Millesima.fr category pages to crawl, e.g. `https://www.millesima.fr/bordeaux.html`. Product/detail pages are not supported as start URLs - use a category listing. |
| `maxItems`            | integer | `100`           | Maximum number of wines to extract **per start URL**. Set to `0` for unlimited (bounded only by your per-run spending limit).                                       |
| `maxPagesPerCategory` | integer | `0` (unlimited) | Maximum number of listing pages to crawl per start URL (each page holds up to 44 wines). Set to `0` to follow pagination through the entire category.               |
| `proxyConfiguration`  | object  | No proxy        | Proxy settings. Disabled by default since the site does not require a proxy for reliable scraping - enable it only if you notice blocked or failed requests.        |

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.millesima.fr/bordeaux.html" },
        { "url": "https://www.millesima.fr/bourgogne.html" }
    ],
    "maxItems": 500,
    "maxPagesPerCategory": 20
}
```

### Output

Each scraped wine is saved as one item in the dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output item:

```json
{
    "name": "Louis Latour : Aloxe-Corton 1er cru \"Les Chaillots\" 2018",
    "priceMin": 86,
    "priceMax": 504,
    "vintage": 2018,
    "region": "Bourgogne",
    "subRegion": "Côte de Beaune",
    "appellation": "Aloxe-Corton",
    "producer": "Louis Latour",
    "country": "France",
    "color": "Rouge",
    "alcohol": 13.5,
    "classification": "1er cru",
    "farming": "Agriculture Raisonnée",
    "inStock": true,
    "availability": "2026-08-07",
    "description": "Un 1er Cru charpenté aux notes de cerise confite, d'épices douces et de sous-bois",
    "imageUrl": "https://static.millesima.com/s3/attachements/h280px/E054_2015NM_c.png",
    "partNumber": "E054/18",
    "ratings": {
        "Robert Parker": "88",
        "Wine Spectator": "89",
        "James Suckling": "92",
        "Jancis Robinson": "16.5",
        "Allen Meadows": "88",
        "Wine Decider": "90"
    },
    "formats": [
        {
            "label": "1 Bouteille (75cl)",
            "partNumber": "E054/18/CU/CC/1",
            "listPrice": 86,
            "offerPrice": 86,
            "availability": "2026-08-07",
            "inStock": true,
            "promotion": false
        },
        {
            "label": "Un carton de 6 Bouteilles (75cl)",
            "partNumber": "E054/18/C/CC/6",
            "listPrice": 504,
            "offerPrice": 504,
            "availability": "2026-08-07",
            "inStock": true,
            "promotion": false
        }
    ],
    "promotion": false,
    "productType": "Vin",
    "exclusiveCellar": false,
    "isSpirit": false,
    "url": "https://www.millesima.fr/louis-latour-aloxe-corton-1er-cru-les-chaillots-2018.html"
}
```

#### Data table

| Field             | Type    | Description                                                                                                                          |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `name`            | string  | Full wine name including château/domaine                                                                                             |
| `priceMin`        | number  | Cheapest available format in EUR TTC (typically the single bottle)                                                                   |
| `priceMax`        | number  | Most expensive available format in EUR TTC (typically the full case)                                                                 |
| `vintage`         | integer | Production year                                                                                                                      |
| `region`          | string  | Wine region (Bordeaux, Bourgogne, and more)                                                                                          |
| `subRegion`       | string  | Sub-region (e.g. Côte de Beaune)                                                                                                     |
| `appellation`     | string  | Appellation d'origine                                                                                                                |
| `producer`        | string  | Producer / château / domaine                                                                                                         |
| `country`         | string  | Country of origin                                                                                                                    |
| `color`           | string  | Rouge, Blanc, Rosé, Effervescent or Champagne                                                                                        |
| `alcohol`         | number  | Alcohol content (% vol)                                                                                                              |
| `classification`  | string  | Classification (1er cru, Grand cru, and more)                                                                                        |
| `farming`         | string  | Farming / certification (organic, biodynamic, and more)                                                                              |
| `inStock`         | boolean | Whether at least one format is currently deliverable                                                                                 |
| `availability`    | string  | Earliest deliverable date across formats                                                                                             |
| `description`     | string  | Millesima's short tasting note (French)                                                                                              |
| `imageUrl`        | string  | Bottle image URL                                                                                                                     |
| `partNumber`      | string  | Millesima SKU                                                                                                                        |
| `ratings`         | object  | Critic scores keyed by critic name (Parker, Wine Spectator, and more), or `null` if none available                                   |
| `formats`         | array   | One entry per purchasable format (bottle, case...) with its own `listPrice`, `offerPrice`, `availability`, `inStock` and `promotion` |
| `promotion`       | boolean | Whether the wine is currently on promotion                                                                                           |
| `productType`     | string  | Product type as labeled by Millesima (Vin, and more)                                                                                 |
| `exclusiveCellar` | boolean | Part of Millesima's exclusive cellar selection                                                                                       |
| `isSpirit`        | boolean | Whether the product is a spirit rather than a wine                                                                                   |
| `url`             | string  | Direct link to the wine's product page                                                                                               |

### Which wine critics are included?

The scraper extracts scores from up to 18 major wine publications, wherever Millesima has published a score for that wine:

Robert Parker, Wine Spectator, Decanter, James Suckling, Jancis Robinson, Jeb Dunnuck, Neal Martin, Antonio Galloni, Allen Meadows, Bettane & Desseauve, Le Figaro, Revue du Vin de France, René Gabriel, Jean-Marc Quarin, Wine Enthusiast, Wine Decider, Alexandre Ma, and The Wine Independent.

### How much does it cost to scrape Millesima?

This Actor runs on Apify's standard compute-unit pricing - you pay for the platform resources your run consumes, not a flat per-wine fee. A single listing page returns dozens of wines at once, so extraction is fast and light on compute. Apify's Free plan includes monthly platform credits, which typically cover small and medium test runs.

To estimate cost before a large run, start with a small `maxItems` value (e.g. 50-100), check the **Compute unit usage** shown for that run in the Apify Console, and scale up from there.

### Tips for best results

- **Start with a specific region**: targeting one region (e.g. Bordeaux or Bourgogne) is faster than scraping the entire catalog.
- **Test with a small `maxItems` first**: use 50-100 to verify results before a large run.
- **Use `maxPagesPerCategory`** to sample the first few pages of several categories instead of exhausting one.
- **Full-category runs**: set `maxItems` to `0` and leave `maxPagesPerCategory` at `0` to crawl an entire category (a region like Bourgogne holds 3,000+ wines). Make sure your per-run spending limit covers it.
- **Schedule regular runs**: wine prices change frequently, especially for en primeur offerings.

### FAQ

#### How often is Millesima data updated?

Millesima updates prices and inventory regularly. For the most current data, run the scraper weekly or set up a scheduled run via the Apify platform.

#### Can I scrape specific wine regions only?

Yes. Change the `startUrls` field to target a specific category URL like `https://www.millesima.fr/bordeaux.html` or `https://www.millesima.fr/bourgogne.html`.

#### What if a wine has no critic rating?

Wines without any critic scores have `ratings: null`. Not all wines on Millesima have been reviewed by all critics.

#### Is the data extracted in English or French?

Wine names, regions, and appellations are kept in their original French form as displayed on Millesima.fr.

#### Can I schedule automated runs?

Yes. Use the Apify platform's scheduling feature to run the scraper daily, weekly, or at any custom interval. Combined with webhooks or integrations (Zapier, Make), you can automate your wine data pipeline.

#### Is it legal to scrape Millesima?

This scraper only extracts publicly available data that any visitor can see on Millesima.fr: wine prices, vintages, critic ratings, and product descriptions. It does not access private accounts, bypass authentication, or extract personal user data.

When used for legitimate purposes such as market research, price comparison, or wine collection management, web scraping of publicly available data is generally considered acceptable. However, scraped data may be subject to Millesima's Terms of Service and applicable data protection regulations (GDPR in the EU).

Always use scraped data responsibly and in compliance with your local laws. If you run into an issue or have a feature request, open a ticket in the Actor's **Issues** tab.

# Actor input Schema

## `startUrls` (type: `array`):

Millesima.fr category pages to crawl, e.g. <code>https://www.millesima.fr/bordeaux.html</code> or <code>https://www.millesima.fr/bourgogne.html</code>. Leave the default in place to crawl every wine on the site.

## `maxItems` (type: `integer`):

Maximum number of wines to extract per start URL. Set to 0 for unlimited (bounded only by your per-run spending limit).

## `maxPagesPerCategory` (type: `integer`):

Maximum number of listing pages to crawl for each start URL (each page holds up to 44 wines). Set to 0 for unlimited - the Actor then follows pagination until every page of the category has been crawled or Max items is reached.

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

The Actor works reliably without a proxy, so this is disabled by default to minimize run costs. Enable it only if you notice blocked or failed requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.millesima.fr/tous-nos-vins.html"
    }
  ],
  "maxItems": 20,
  "maxPagesPerCategory": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.millesima.fr/tous-nos-vins.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/millesima-wine-data").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 = { "startUrls": [{ "url": "https://www.millesima.fr/tous-nos-vins.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/millesima-wine-data").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 '{
  "startUrls": [
    {
      "url": "https://www.millesima.fr/tous-nos-vins.html"
    }
  ]
}' |
apify call jordan-byte/millesima-wine-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/millesima-wine-data"
        }
    }
}

```

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/2QoTKucoOzhkthGTq/builds/IGvsZFByViddidIR0/openapi.json
