# Carrefour Romania Scraper (Product Prices) (`studio-amba/carrefour-ro-scraper`) Actor

Scrape product prices from carrefour.ro, the Carrefour online store in Romania. Grocery and non-food departments with brand, price in RON, original price, discount, stock status and category. No login, no API key.

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

## Carrefour Romania Scraper (Product Prices)

Scrape product prices from [carrefour.ro](https://carrefour.ro), the Carrefour online store in Romania. Pick a department such as groceries and drinks, or give the actor category pages and product pages. Every product comes back with name, brand, SKU, price in RON, original price, discount, stock status, category and image. No login and no API key.

### How to scrape Carrefour Romania data

1. Open the actor and press **Try for free**.
2. Pick a **Department**. The default is Grocery and drinks.
3. Or paste one or more **Category URLs** from carrefour.ro, for example `https://carrefour.ro/bacanie-carrefour/alimente/ulei/`.
4. Or paste **Product URLs** to read single products.
5. Set **Max results** and start the run.
6. Download the dataset as JSON, CSV or Excel, or read it through the Apify API.

#### Input

| Input | What it does |
|---|---|
| Department | The department to scrape when no category URLs are given. Grocery and drinks, beauty, baby, home and garden, appliances, TV and audio, IT and phones, sports, auto, fashion, books, toys, or all departments |
| Category URLs | Listing pages on carrefour.ro. When filled, these replace the department |
| Product URLs | Product pages on carrefour.ro. Each one returns one product |
| Max results | Maximum number of products to return |
| Proxy configuration | Not required. Switch it on only if the site starts blocking runs |

#### How the actor finds products

The actor reads the public sitemap of carrefour.ro and takes the most specific category pages of the chosen department. It opens each category page with 48 products per page and follows the pagination until the category ends. A product that appears in more than one category is returned once.

The search pages of carrefour.ro are excluded in the site's robots.txt, so the actor does not use them. Use category URLs or a department instead of a search term.

### What data does the Carrefour Romania Scraper extract?

| Field | Description |
|---|---|
| `productId` | Internal product id on carrefour.ro |
| `sku` | Carrefour SKU |
| `name` | Product name |
| `brand` | Brand |
| `url` | Link to the product page |
| `imageUrl` | Product image |
| `price` | Current price in RON |
| `originalPrice` | Price before the discount, when the product is discounted |
| `discountPercent` | Discount in percent, when shown |
| `currency` | RON |
| `inStock`, `availability` | Stock status. `inStock` is empty when the site does not say |
| `department`, `categoryName`, `categoryPath`, `categoryUrl` | Where the product was found |
| `isBio`, `madeInRomania`, `expressDelivery` | Badges shown on the product tile |
| `description` | Product text. Only filled when the product is read from a product URL |
| `scrapedAt` | Time of the scrape |

Prices on carrefour.ro are shown in RON including VAT. The prices are the public online prices. Prices that depend on a loyalty card or on a delivery address are not collected.

### Example output

```json
{
  "productId": "1280414",
  "sku": "14527628",
  "name": "Ulei de floarea soarelui ecologic presat la rece nerafinat Carrefour Bio 500ml",
  "brand": "Carrefour Bio",
  "url": "https://carrefour.ro/produse/ulei-de-floarea-soarelui-ecologic-presat-la-rece-nerafinat-carrefour-bio-500ml-19-14527628",
  "price": 15.4,
  "originalPrice": 19.25,
  "discountPercent": 20,
  "currency": "RON",
  "inStock": true,
  "availability": "available",
  "department": "bacanie-carrefour",
  "categoryName": "Ulei",
  "categoryPath": ["alimente", "ulei"],
  "isBio": true,
  "madeInRomania": false,
  "expressDelivery": true
}
```

### Input examples

The first 500 grocery and drink products:

```json
{ "department": "bacanie-carrefour", "maxResults": 500 }
```

All cooking oils:

```json
{ "categoryUrls": [{ "url": "https://carrefour.ro/bacanie-carrefour/alimente/ulei/" }], "maxResults": 500 }
```

Two single products:

```json
{
  "productUrls": [
    { "url": "https://carrefour.ro/produse/lapte-uht-ladorna-1-5-200ml-19-15507320" }
  ]
}
```

### Use cases

- Price monitoring: track Carrefour prices on a schedule and compare runs by `sku`.
- Promotion tracking: filter on `discountPercent` to see which products are discounted and by how much.
- Market research: price levels by brand and category in the Romanian retail market.
- Retail and brand teams: check how your products are listed, priced and stocked at Carrefour.
- Price comparison sites: a daily Romanian grocery feed with SKU, brand and image.

### How much does it cost?

The actor is billed per result: a small fee per run start and a fee per product returned, as shown on the pricing tab. The most a run can cost in results is the per-result price times **Max results**. The actor uses plain HTTP requests without a proxy, so compute use is low. The usage cost of a run settles after the run has SUCCEEDED, so it does not show on a run that is still in progress.

### Data source and limits

The data comes from the public category and product pages of carrefour.ro. The actor does not log in and does not collect personal data. Product pages carry less information than the listing tile for some fields, so `originalPrice`, `discountPercent` and the badges are only filled when the product is read from a category page. Stock status reflects the default online catalogue and not a single store.

The department Grocery and drinks holds several thousand products. The other departments are much larger, and the option All departments covers the whole catalogue of the site, including marketplace sellers. Use **Max results** to cap a run.

### FAQ

**Does it work without a proxy?** Yes. The site answers plain requests.

**Can I search by keyword?** No. The search pages of carrefour.ro are excluded in the site's robots.txt, so the actor works from categories and product URLs.

**How fresh is the data?** Each run reads the live site, so results are current at the time of the run.

**Why is `originalPrice` empty for most products?** It is only filled for products that are discounted when the run reads them.

**Can I run it on a schedule?** Yes, use Apify schedules and compare runs by `sku`.

**Does it cover marketplace products?** The non-grocery departments include products from marketplace sellers, as the site lists them. Grocery products are sold by Carrefour.

### Support

Questions or a missing field? Open an issue on the actor page and we reply quickly.

# Actor input Schema

## `department` (type: `string`):

Department to scrape when no category URLs are given. Grocery and drinks holds about 6,000 products. Other departments are much larger.

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

Listing pages on carrefour.ro, for example https://carrefour.ro/bacanie-carrefour/alimente/ulei/. When filled, these are scraped instead of the department.

## `productUrls` (type: `array`):

Individual product pages on carrefour.ro. Returns name, brand, SKU, price, stock and description for each.

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

Maximum number of products to return.

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

Not required. Plain requests are answered. The default Apify datacenter proxy is pre-selected and can be switched off.

## Actor input object example

```json
{
  "department": "bacanie-carrefour",
  "maxResults": 50,
  "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 = {
    "department": "bacanie-carrefour",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/carrefour-ro-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 '{
  "department": "bacanie-carrefour",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/carrefour-ro-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/carrefour-ro-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/Ppzj6GrMwl5WtmT3y/builds/OzdCAaISxaZeADrNd/openapi.json
