# Rituals Scraper — Luxury Body Care & Home Fragrance (`studio-amba/rituals-scraper`) Actor

Scrape luxury body care and home fragrance products from Rituals.com. Shower foams, candles, diffusers, gift sets, and limited editions with prices and details.

- **URL**: https://apify.com/studio-amba/rituals-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

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

Learn more: https://docs.apify.com/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

## Rituals Scraper -- Premium Cosmetics, Body Care & Home Fragrance Data

Scrape product data from Rituals.com -- the Dutch luxury cosmetics and lifestyle brand known for its signature collections like The Ritual of Sakura, Karma, and Hammam. Extract prices, ratings, descriptions, and images from their full product line.

### What is Rituals Scraper?

Rituals Cosmetics is a Netherlands-based premium brand with over 1,000 stores worldwide. They sell body care, skincare, home fragrance (candles, diffusers, room sprays), gift sets, and travel essentials -- all organized around thematic "rituals" collections. This scraper turns their online catalog into structured data.

Common use cases:

- **Beauty & cosmetics price tracking** -- Monitor Rituals' pricing across collections. Track seasonal gift set pricing, limited editions, and value packs.
- **Competitive analysis for premium brands** -- If you sell competing body care or home fragrance products, benchmark against Rituals' positioning, price points, and product range.
- **Product catalog monitoring** -- Detect new product launches, discontinued items, and collection refreshes before they appear in newsletters.
- **Review and rating analysis** -- Rituals products carry customer ratings. Track which products are best-rated and how new launches perform over time.
- **Gift market research** -- Rituals is a major player in the gift set market. Analyze their seasonal offerings, bundle pricing, and packaging strategies.

### What data does Rituals Scraper extract?

Each product record includes:

- 🧴 **Product name** -- full product title with collection name
- 🏷️ **Brand** -- always "Rituals" (useful for multi-brand datasets)
- 💰 **Price** and currency
- 💸 **Original price** -- when items are marked down
- 🔢 **EAN code** -- European Article Number (barcode)
- 📦 **SKU** -- internal product identifier
- ✅ **Stock availability**
- ⭐ **Customer rating** -- average score
- 💬 **Review count** -- number of reviews
- 🖼️ **Product images** -- primary and additional angles
- 📝 **Description** -- product details and fragrance narrative
- 📂 **Category** -- product classification

### How to scrape Rituals.com

#### Search by keyword

Find specific types of products:

```json
{
    "searchQuery": "shower gel",
    "maxResults": 50
}
```

Effective search terms include product types ("candle", "body cream", "gift set") or collection names ("sakura", "karma", "hammam").

#### Browse a category

Target a specific product category:

```json
{
    "categoryUrl": "https://www.rituals.com/en-nl/bath-body/shower",
    "maxResults": 100
}
```

#### Discover the full catalog

Leave both fields empty to let the scraper discover products via the sitemap:

```json
{
    "maxResults": 500
}
```

**Tip:** Rituals organizes products by collection (The Ritual of Sakura, Jing, Karma, etc.) and by type (shower, body, home, etc.). Category URLs are the most targeted way to scrape.

### Output

A typical Rituals product record:

```json
{
    "name": "The Ritual of Sakura Foaming Shower Gel",
    "brand": "Rituals",
    "price": 9.50,
    "currency": "EUR",
    "url": "https://www.rituals.com/en-nl/the-ritual-of-sakura-foaming-shower-gel-1116064.html",
    "scrapedAt": "2025-04-03T11:00:00.000Z",
    "ean": "8719134143652",
    "sku": "1116064",
    "inStock": true,
    "rating": 4.7,
    "reviewCount": 342,
    "imageUrl": "https://www.rituals.com/dw/image/v2/BBKL_PRD/on/demandware.static/Sites-rituals/default/product/1116064.jpg",
    "description": "Transform your daily shower into a moment of mindfulness with this foaming shower gel. Enriched with Rice Milk and Cherry Blossom, the creamy formula gently cleanses while the delicate floral scent uplifts your senses.",
    "category": "Shower"
}
```

### How much does it cost?

| Scenario | Estimated cost |
|----------|---------------|
| 50 products (search) | ~$0.02 |
| 200 products (category) | ~$0.08 |
| Full catalog (~500 products) | ~$0.30 |
| Full catalog + proxy | ~$0.50 |

Rituals has a relatively compact catalog (hundreds, not thousands of products), making full catalog scrapes affordable.

### Can I integrate?

Push Rituals data wherever you need it:

- **Google Sheets** -- live spreadsheet of product prices and ratings
- **Webhooks** -- get notified when new products launch
- **Zapier / Make** -- automate workflows based on price or availability changes
- **Slack** -- alerts for limited edition releases
- **Cloud storage** -- archive product data to S3 or Google Cloud
- **Databases** -- store in PostgreSQL, MySQL, or MongoDB

### Can I use it as an API?

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/rituals-scraper").call(run_input={
    "searchQuery": "candle",
    "maxResults": 20,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} -- EUR {item['price']} ({item.get('rating', 'N/A')} stars)")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/rituals-scraper').call({
    searchQuery: 'candle',
    maxResults: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(`${item.name} -- EUR ${item.price}`));
```

### FAQ

**Can I scrape Rituals stores in other countries?**
The scraper targets the Dutch (`en-nl`) storefront. Rituals operates country-specific sites, but the product catalog is largely identical. Pricing may vary by region.

**Does it capture ingredients or detailed product specs?**
The description field includes the product narrative. Full ingredient lists may be available on some product pages depending on how Rituals structures the data.

**How do I scrape only a specific collection (e.g., Sakura)?**
Use the search query with the collection name: `"searchQuery": "sakura"`. Or use a category URL like `https://www.rituals.com/en-nl/the-ritual-of-sakura`.

**Are gift sets included?**
Yes. Gift sets appear in search results and categories like any other product. Search for "gift set" to target them specifically.

**How frequently does Rituals update their catalog?**
Rituals launches new collections seasonally and updates limited editions periodically. Monthly scraping captures most changes, though weekly catches limited editions faster.

### Limitations

- The scraper targets the Netherlands English storefront (`en-nl`). Other regional storefronts are not directly supported.
- Rituals uses Salesforce Commerce Cloud (Demandware). The site's internal search may behave differently from what you see in a browser.
- Some product pages may not have JSON-LD structured data, in which case the scraper falls back to HTML meta tags with slightly less detail.
- The sitemap discovery mode may include non-product pages that get filtered out automatically.

### Other retail and fashion scrapers

Build a complete picture of the European beauty and retail landscape:

- [ICI PARIS XL Scraper](https://apify.com/studio-amba/iciparisxl-scraper) -- Belgium's leading beauty and perfume retailer
- [Kruidvat Scraper](https://apify.com/studio-amba/kruidvat-scraper) -- Drugstore, beauty, and health products
- [Mytheresa Scraper](https://apify.com/studio-amba/mytheresa-scraper) -- Luxury fashion from 200+ designers
- [Action Scraper](https://apify.com/studio-amba/action-scraper) -- Europe's biggest discount retailer
- [AS Adventure Scraper](https://apify.com/studio-amba/asadventure-scraper) -- Outdoor and adventure gear
- [Bergfreunde Scraper](https://apify.com/studio-amba/bergfreunde-scraper) -- German climbing and hiking equipment
- [Intersport Scraper](https://apify.com/studio-amba/intersport-scraper) -- European sports retail
- [Helly Hansen Scraper](https://apify.com/studio-amba/hellyhansen-scraper) -- Norwegian outdoor and sailing apparel

### Your feedback

Questions, bugs, or feature requests? Reach out through the actor's Apify Store page. We respond quickly and keep this scraper up to date with Rituals' site changes.

# Actor input Schema

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

Search for products by keyword (e.g., 'shower gel', 'candle', 'gift set').

## `categoryUrl` (type: `string`):

A rituals.com category page URL to scrape. Example: https://www.rituals.com/en-nl/bath-body/shower. If empty, uses search query.

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

Maximum number of products to return.

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

Proxy settings for better reliability on large runs.

## Actor input object example

```json
{
  "searchQuery": "shower gel",
  "maxResults": 100
}
```

# 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": "shower gel"
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/rituals-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": "shower gel" }

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/rituals-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": "shower gel"
}' |
apify call studio-amba/rituals-scraper --silent --output-dataset

```

## MCP server setup

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