# Flaconi Product Search Scraper (`stealth_mode/flaconi-product-search-scraper`) Actor

Scrape product data from Flaconi.at and Flaconi.de search results instantly. Extract product IDs, names, variants, pricing, color options, and more — perfect for beauty retailers, price comparison platforms, and market researchers tracking cosmetics trends.

- **URL**: https://apify.com/stealth\_mode/flaconi-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 1 total users, 0 monthly users, 96.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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

## Flaconi Beauty Products Scraper: Search Results Extraction at Scale

***

### What Is Flaconi?

Flaconi is a leading European e-commerce platform specializing in beauty, cosmetics, and personal care products. Operating across multiple German-speaking markets (Austria, Germany, and beyond), Flaconi aggregates thousands of SKUs from luxury and mainstream beauty brands. For market researchers, competitors, and aggregator platforms, manually tracking product availability, variants, and pricing across Flaconi's catalog is impractical — the **Flaconi Products Search Scraper** automates this entirely, delivering structured product data from search results in seconds.

***

### Overview

The **Flaconi Products Search Scraper** extracts product listings from Flaconi search result pages, converting unstructured e-commerce content into clean, machine-readable records. It captures product identifiers, variant information, color options, and pricing data — everything needed for price monitoring, competitive analysis, or product catalog aggregation.

**Ideal for:**

- **Price aggregators** comparing cosmetics across retailers
- **Dropshippers & resellers** sourcing product feeds
- **Market researchers** studying beauty product trends and availability
- **Developers** building beauty product databases or recommendation engines
- **Retailers** monitoring competitor product launches and pricing strategies

Key advantages include bulk URL processing, configurable item limits, and error resilience via `ignore_url_failures` — essential for large-scale scraping campaigns.

***

### Input Format

The Actor supports **two scraping modes** — use only **one at a time**:

1. **Scrape by URLs** — scrape data directly from a list of Flaconi search result page URLs.

```json
{
  "urls": [
    "https://www.flaconi.at/search/?offset=48&q=lip",
    "https://www.flaconi.de/search/?offset=0&q=foundation"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
```

2. **Scrape by search filters** — scrape data using a keyword and additional filters (region, gender, color, price range, etc.) instead of providing URLs.

```json
{
  "region": "de",
  "keyword": "lip",
  "gender": "Unisex",
  "color": "Gold",
  "price_range": "19900,100500",
  "sort_by": "variants.scopedPrice.value.centAmount",
  "page": 1,
  "max_items_per_url": 200
}

```

There is also a **General settings** group that applies to both modes.

#### 1. Scrape by URLs

Use this mode when you already have specific search result URLs. When this mode is used, all options in the "Scrape by search filters" section will be disabled.

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | `array` | *(required)* | Direct links to Flaconi search result pages. You can paste URLs one by one, or use the Bulk edit section to add a prepared list. |
| `ignore_url_failures` | `boolean` | `true` | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. If `false`, it stops on the first error. Recommended `true` for bulk jobs. |

##### How to Build Search URLs

Flaconi search URLs follow this pattern:

```
https://www.flaconi.at/search/?q=KEYWORD&offset=OFFSET
```

- **`q` parameter:** Product search term (e.g., `q=lip%20balm`, `q=foundation`)
- **`offset` parameter:** Pagination position (e.g., `offset=0`, `offset=48`) — increment by 48 for each page
- **Country domain:** Use `.at` for Austria, `.de` for Germany, `.it` for Italy, etc.

> **Tip:** Build multiple URLs with different keywords and offsets to cover your target product range (e.g., "mascara", "foundation", "skincare").

#### 2. Scrape by search filters

Use this mode when you want to search using a keyword and additional filter attributes instead of scraping by URLs. If you use this mode, leave the `urls` field above empty.

| Field | Type | Default | Description |
|---|---|---|---|
| `keyword` | `string` | — | The keyword to search for. |
| `region` | `string` (`at`, `de`) | — | The region/store to search in: **Austria** (`at`) or **Germany** (`de`). |
| `sort_by` | `string` (`""`, `variants.scopedPrice.value.centAmount`, `createdAt`) | — | Sort results by **Relevance** (empty), **Price**, or **Published date**. |
| `gender` | `string` (`""`, `Frauen`, `Unisex`, `Herren`) | — | Filter by gender: **All** (empty), **Women**, **Unisex**, **Men**. |
| `color` | `string` | — | Filter by product color. One of: Black, White, Transparent, Blue, Gold, Pink, Green, Brown, Beige, Red, Violet, Silver, Orange, Yellow, Grey (leave empty for all). |
| `price_range` | `string` | — | Price range filter in `min,max` format, e.g. `10,20`. |
| `page` | `integer` | — | The page number to start scraping from. |

#### 3. General settings

Applies to both scraping modes above.

| Field | Type | Default | Description |
|---|---|---|---|
| `max_items_per_url` | `integer` | `20` | Maximum number of products to extract per URL/search (1–200). Increase for broader datasets. |
| `proxy` | `object` | Apify Proxy, `RESIDENTIAL` group, country `US` | Proxy configuration used by the scraper. Defaults to Apify Proxy with residential IPs. |

***

### Output Format

#### Sample Output Record

```json
{
  "product_id": "d3feac4f-6973-459e-b24e-c446ee533b81",
  "name": "MAC MACXimal Matte Lipstick Mini Lippenstift",
  "slug": "make-up/mac/macximal/mac-macximal-matte-lipstick-mini-lippenstift",
  "variants": [
    {
      "sku": "90007058-0010710",
      "price": 1275,
      "attributes": {
        "series": "MACXimal",
        "sub_series": "Matte Lipstick Mini",
        "brand": "MAC",
        "fl_product_type": "Lippenstift",
        "size": 1.7,
        "unit": {
          "label": "g"
        },
        "display_base_unit": {
          "label": "g"
        },
        "exclusive": false,
        "base_amount": 10,
        "display_base_amount": 10
      },
      "images": [
        "https://cdn.flaconi.at/media/catalog/product/7/7/773602697113.jpg?r=1Sj8Cb"
      ],
      "is_on_stock": true,
      "key": "90007058-C",
      "stock_amount": 0,
      "is_new": false,
      "is_limited": false,
      "is_sustainable": false,
      "price_info": {
        "discount_percentage": 0.29,
        "price_per_size_amount": 7500,
        "base_price": 1800,
        "is_special_price": false,
        "is_on_sale": true,
        "reference_price": 1230,
        "reference_price_percentage": "3.66",
        "reference_price_discount_amount": -45
      }
    }
  ],
  "key": "90007058-C",
  "variant_count": 7,
  "make_up_color_option_list": [
    {
      "hex_code": "#890c23",
      "makeup_color": "Ruby Woo"
    },
    {
      "hex_code": "#844d44",
      "makeup_color": "Warm Teddy"
    },
    {
      "hex_code": "#985c5f",
      "makeup_color": "Mehr"
    },
    {
      "hex_code": "#8a2d1f",
      "makeup_color": "Chili"
    },
    {
      "hex_code": "#561c24",
      "makeup_color": "Diva"
    },
    {
      "hex_code": "#90504a",
      "makeup_color": "Velvet Teddy"
    },
    {
      "hex_code": "#773673",
      "makeup_color": "Everybody´s Heronie"
    }
  ],
  "price_variant": "90007058-0010710",
  "from_url": "https://www.flaconi.at/search/?offset=48&q=lip&ajax=true"
}
```

Each product record contains 8 fields capturing essential product and variant information:

#### Core Product Information

| Field | Data Type | Description | Example |
|---|---|---|---|
| `Product ID` | String/Number | Unique identifier for the product in Flaconi's system | `"12345678"` |
| `Name` | String | Product name/title as displayed on Flaconi | `"MAC Fix+"` or `"Charlotte Tilbury Magic Cream"` |
| `Slug` | String | URL-friendly identifier; used in product detail page URLs | `"mac-fix-plus"` |

#### Variant & Color Data

| Field | Data Type | Description | Example |
|---|---|---|---|
| `Variants` | Array | List of available product variants (e.g., sizes, quantities, formulas) | `["30ml", "100ml", "Travel Size"]` |
| `Variant Count` | Integer | Total number of variant options for this product | `3` |
| `Key` | String | Internal variant key or SKU identifier | `"MAC_FIX_PLUS_30ML"` |
| `Make Up Color Option List` | Array | Available colors/shades if the product is makeup or color-dependent | `["Fair", "Light", "Medium", "Deep"]` or `["Rose Gold", "Warm Bronze"]` |
| `Price Variant` | Object/Array | Pricing data segmented by variant; typically includes base price and currency | `{"30ml": {"price": 24.99, "currency": "EUR"}, "100ml": {"price": 44.99, "currency": "EUR"}}` |

***

### How to Use

#### Step 1: Identify Search Terms

Determine which product categories or keywords you want to track (e.g., "lipstick", "sunscreen", "foundation"). You can add one search URL per keyword or paginate across results.

#### Step 2: Build Your URLs

For each keyword, construct Flaconi search URLs:

- Start with `offset=0`
- Increment by 48 for each subsequent page
- Example: `https://www.flaconi.at/search/?q=mascara&offset=0`, then `offset=48`, then `offset=96`, etc.

#### Step 3: Configure Input

Paste your URLs into the `urls` array, set `max_items_per_url` to your desired limit (typically 50–200), and enable `ignore_url_failures` for robustness.

#### Step 4: Run the Scraper

Start the actor and monitor progress. The scraper will process each URL and return product records.

#### Step 5: Export & Analyze

Download results as JSON, CSV, or Excel. Import into your database, price comparison tool, or analytics platform.

#### Best Practices

- **Pagination:** If you need all results from a category, create multiple URLs with `offset=0`, `48`, `96`, etc.
- **Rate limiting:** Space out large runs to avoid overwhelming Flaconi's servers.
- **Keyword variety:** Mix specific searches (e.g., "MAC mascara") with broad ones (e.g., "mascara") to capture diverse product ranges.
- **Regular runs:** Re-scrape periodically to track price changes and new product launches.

#### Troubleshooting Common Issues

| Issue | Solution |
|---|---|
| URL returns no products | Verify the search term is correct and products exist on Flaconi; check the domain (.at vs .de) |
| High variant count but no prices | Some products may have limited pricing data; filter if needed in post-processing |
| Timeouts on large batches | Reduce `max_items_per_url` or split URLs into smaller runs |

***

### Use Cases & Business Value

#### Price Monitoring & Competitive Analysis

Track competitor pricing across beauty product lines. Monitor how prices fluctuate across regions (Austria vs. Germany) and seasons (e.g., holiday promotions).

#### Product Feed Aggregation

Feed Flaconi product data into your own beauty product database or e-commerce catalog. Enrich your platform with real-time color/variant information.

#### Market Research & Trend Analysis

Analyze which beauty brands, categories, and price points dominate Flaconi's inventory. Identify emerging product trends and fast-movers.

#### Dropshipping & Reseller Operations

Build your sourcing list with live Flaconi inventory, variants, and pricing. Identify high-margin or fast-turning products.

#### SEO & Content Creation

Harvest product names, descriptions (via additional scraper configuration), and color options for beauty blog content, guides, and product comparison articles.

The **Flaconi Products Search Scraper** eliminates hours of manual browsing and copy-pasting, delivering production-ready data that drives smarter business decisions.

***

### Conclusion

The **Flaconi Products Search Scraper** is an essential tool for anyone operating in the beauty e-commerce ecosystem. Whether you're aggregating prices, monitoring competitors, or building product databases, this scraper delivers reliable, structured data from Flaconi.at and Flaconi.de at scale. Configure your search terms, set your parameters, and start collecting actionable product intelligence instantly.

# Actor input Schema

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

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

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

Enter the keyword to search for items

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

Enter the region to search for items

## `sort_by` (type: `string`):

Sort items by options

## `gender` (type: `string`):

Enter the gender to search for items

## `color` (type: `string`):

Enter the color to search for items

## `price_range` (type: `string`):

Enter the price range to search for items

## `page` (type: `integer`):

Specify the page number to start scraping from

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## `proxy` (type: `object`):

Select proxies to be used by your scraper.

## Actor input object example

```json
{
  "urls": [
    "https://www.flaconi.at/search/?offset=48&q=lip"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "urls": [
        "https://www.flaconi.at/search/?offset=48&q=lip"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/flaconi-product-search-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 = {
    "urls": ["https://www.flaconi.at/search/?offset=48&q=lip"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/flaconi-product-search-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 '{
  "urls": [
    "https://www.flaconi.at/search/?offset=48&q=lip"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call stealth_mode/flaconi-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/flaconi-product-search-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/FkDIB6IzBP4mAvEuP/builds/bdKCJAhrQQHwZngzY/openapi.json
