# Makeup Product Search Scraper (`stealth_mode/makeup-product-search-scraper`) Actor

Scrape product listings from Makeup.ro — a major beauty e-commerce platform — and collect titles, prices, ratings, variants, stock status, media, and 20+ structured fields per product. Perfect for price monitoring, catalog analysis, and market research.

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

## Pricing

from $2.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Makeup Product Scraper: Extract Beauty Product Data at Scale

---

### What Is Makeup.ro (And all other Countries site)?

Makeup.ro is one of Eastern Europe's prominent online beauty and cosmetics retailers, offering thousands of products across skincare, makeup, haircare, and personal care categories. The platform serves multiple countries and carries a wide range of international and local brands. With its extensive catalog and frequently updated inventory, manually collecting product data from Makeup.ro is impractical at scale.

The **Makeup Product Search Scraper** automates this process — turning category and search listing pages into clean, structured datasets ready for analysis, integration, or monitoring.

---

### Overview

This scraper is built to extract product cards from Makeup.ro (And all other Countries site) search and category listing pages. It navigates paginated results and collects comprehensive product-level data including pricing, availability, ratings, media assets, and variant information.

Ideal users include:

- **E-commerce analysts** benchmarking pricing and product assortment
- **Brand managers** monitoring how their products appear on the platform
- **Data scientists** building beauty market datasets
- **Developers** feeding product data into comparison engines or dashboards

The scraper supports bulk URL input, configurable item limits, and graceful failure handling — making it suitable for both small spot-checks and large-scale catalog extractions.

---

### Input Format

The scraper accepts a JSON configuration object with the following fields:

```json
{
  "urls": [
    "https://makeup.ro/categorys/2419/#sort=date&offset=36",
    "https://makeup.fr/categorys/3/",
    "https://makeup.uk/search/?q=lip"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

#### Field Definitions

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | `array` of strings | — | One or more Makeup.ro **category or search listing page URLs** to scrape. Supports bulk input. Each URL should point to a product list page (e.g., `/categorys/`, `/search/`), not an individual product page. |
| `ignore_url_failures` | `boolean` | `true` | When `true`, the scraper continues processing remaining URLs even if one fails. Recommended for bulk runs. |
| `max_items_per_url` | `integer` | `20` | Maximum number of products to collect per URL. Increase up to `200` or more for full category extraction. |

#### Input Tips

- **Pagination via URL:** Makeup.ro supports offset-based pagination in the URL hash (e.g., `#sort=date&offset=36`). You can add multiple paginated URLs to the `urls` array to cover a full category.
- **Sort parameters:** Use `#sort=date` for newest listings, `#sort=popularity` for top sellers, or `#sort=price` for price-ordered results.
- **Bulk editing:** Paste multiple URLs line by line using the Bulk edit mode when using the Apify console.

***

### Output Format

#### Sample Output (abbreviated)

```json
{
  "id": 616067,
  "brand": {
    "id": 1455206,
    "link": "/brand/1455206/",
    "title": "LAMEL Make Up"
  },
  "title": "LAMEL Make Up All in One Lip Tinted Plumping Oil",
  "category": {
    "id": 674787,
    "title": "Tint de buze",
    "description": "<p><strong>Tint de buze</strong> este alegerea potrivită pentru un machiaj rapid, proaspăt și ușor de purtat &icirc;n fiecare zi. Spre deosebire de un ruj clasic, acesta colorează buzele &icirc;ntr-un mod mai subtil și se simte lejer, fără senzație &icirc;ncărcată. Poate fi purtat singur, pentru un efect natural, sau combinat cu balsam, gloss ori creion de buze atunci c&acirc;nd &icirc;ți dorești un look mai definit.</p>\r\n<h3>Culoare naturală pentru rutina de zi cu zi</h3>\r\n<p>Un tint pentru buze se potrivește foarte bine &icirc;n machiajele simple, alături de BB creams, cushions, mascara discretă și puțin blush. Este genul de produs care adaugă prospețime feței fără să pară prea intens, fiind ideal pentru birou, facultate, ieșiri rapide sau zilele &icirc;n care preferi un machiaj minim.</p>\r\n<p>Nuanțele variază de la rozuri delicate și tonuri piersică p&acirc;nă la roșu fructat, berry sau nude cald. Unele formule oferă o culoare abia vizibilă, ca după aplicarea unui balsam colorat, &icirc;n timp ce altele lasă un efect mai intens, potrivit și pentru machiaje de seară. Un lip tint poate fi aplicat &icirc;n strat subțire pentru un rezultat discret sau reaplicat pentru mai multă intensitate.</p>\r\n<h3>Formule lejere, confortabile și ușor de purtat</h3>\r\n<p>Tinturile moderne vin &icirc;n mai multe variante, de la formule apoase și geluri fine p&acirc;nă la produse cremoase, asemănătoare unui balsam. Pentru buze care se usucă ușor, un tint de buze hidratant poate fi o opțiune plăcută, mai ales dacă preferi o senzație moale și confortabilă pe parcursul zilei. Există și variante cu aspect mat, potrivite pentru un machiaj mai curat și mai fix, dar și produse cu efect lucios, pentru buze mai pline vizual.</p>\r\n<p>Un ruj tint este apreciat pentru modul &icirc;n care se estompează treptat și natural, fără contururi dure. &Icirc;n funcție de formulă, poate lăsa pe buze o pată fină de culoare care rezistă mai bine dec&acirc;t multe produse lucioase obișnuite. Pentru zile lungi, un tint de buze rezistent ajută la menținerea unui aspect &icirc;ngrijit chiar și atunci c&acirc;nd nu ai timp de retușuri dese.</p>\r\n<h3>Potrivit pentru machiaje rapide și combinații simple</h3>\r\n<p>Un tint buze se integrează ușor &icirc;n rutina de dimineață, după pașii de bază precum cleanser, serum, cremă și sunscreen. Se aplică rapid, nu ocupă mult spațiu &icirc;n geantă și este potrivit pentru retușuri discrete &icirc;n timpul zilei. Formatele travel-friendly, cu aplicator mic sau ambalaj compact, sunt practice pentru vacanțe, sală, birou sau pentru trusa de machiaj purtată zilnic.</p>\r\n<p>Poate fi folosit și pentru efecte diferite, &icirc;n funcție de stilul preferat. Aplicat doar &icirc;n centrul buzelor și estompat ușor, oferă un look tineresc și delicat. Purtat pe toată suprafața buzelor, creează un aspect mai uniform și mai expresiv. Se potrivește at&acirc;t cu eye makeup foarte simplu, c&acirc;t și cu eyeliner, farduri neutre sau mascara intensă.</p>\r\n<h3>Un produs mic, cu impact vizibil</h3>\r\n<p>Produsele pentru buze au devenit esențiale &icirc;n orice rutină de beauty, iar tinturile sunt apreciate tocmai pentru echilibrul dintre culoare, confort și simplitate. Nu cer precizie perfectă la fiecare aplicare și nu transformă machiajul &icirc;ntr-un look rigid. Buzele arată mai vii, mai &icirc;ngrijite și mai proaspete, cu un efect care poate răm&acirc;ne natural chiar și &icirc;n nuanțe mai intense.</p>\r\n<p>&Icirc;n zilele &icirc;n care pielea are nevoie doar de c&acirc;teva produse de bază, precum o cremă lejeră, un sunscreen și un cushion subțire, tintul completează machiajul fără efort. Iar &icirc;n serile &icirc;n care rutina include măști, serums sau &icirc;ngrijire mai bogată, poate răm&acirc;ne produsul de culoare rapid pe care &icirc;l folosești pentru un plus de prospețime &icirc;nainte de a ieși din casă.</p>",
    "link": "/categorys/674787/",
    "banners_variant": "carousel",
    "banners": [],
    "sections": [],
    "breadcrumbs": [],
    "reviews": []
  },
  "in_stock": true,
  "rating": {
    "average": 4,
    "total": 113
  },
  "feedback": {
    "comments_count": 113,
    "questions_count": 0,
    "reviewers_count": 108,
    "average_rating": 4
  },
  "price": {
    "currency": "RON",
    "current": 24.82,
    "old": 28.29,
    "side": "right",
    "symbol": "lei"
  },
  "variants": [],
  "not_available_variants": [],
  "link": "/product/616067/",
  "characteristics": [],
  "informations": [],
  "sections": [],
  "breadcrumbs": [
    {
      "id": 1,
      "title": "MAKEUP",
      "link": "/"
    },
    {
      "id": 2,
      "title": "Produse cosmetice decorative",
      "link": "/categorys/2419/"
    },
    {
      "id": 3,
      "title": "Buze",
      "link": "/categorys/23438/"
    },
    {
      "id": 4,
      "title": "Tint de buze",
      "link": "/categorys/674787/"
    },
    {
      "id": 5,
      "title": "LAMEL Make Up All in One Lip Tinted Plumping Oil",
      "link": "/product/616067/"
    }
  ],
  "series": {
    "id": 31763,
    "link": "/brand/1455206/#o[2245][]=31763",
    "title": "Buze"
  },
  "sub_title": "Tint de buze",
  "type": "product",
  "favorites": [],
  "media": [
    {
      "sizes": {
        "sm": {
          "url": "https://i.makeup.ro/x/xz/xzrfzj7amfhe.jpg",
          "thumbnail": "https://i.makeup.ro/z/zz/zz9nunygij5g.jpg"
        },
        "lg": {
          "url": "https://i.makeup.ro/s/sw/swizulosdjik.jpg",
          "thumbnail": "https://i.makeup.ro/z/zz/zz9nunygij5g.jpg"
        }
      },
      "id": 1,
      "type": "image",
      "thumbnail": "https://i.makeup.ro/z/zz/zz9nunygij5g.jpg",
      "url": "https://i.makeup.ro/x/xz/xzrfzj7amfhe.jpg",
      "default": true
    },
    {
      "sizes": {
        "sm": {
          "url": "https://i.makeup.ro/m/m4/m4bwwb7hpvwj.jpg",
          "thumbnail": "https://i.makeup.ro/b/bb/bbyfziuvqhjp.jpg"
        },
        "lg": {
          "url": "https://i.makeup.ro/u/uc/ucirortpwcsx.jpg",
          "thumbnail": "https://i.makeup.ro/b/bb/bbyfziuvqhjp.jpg"
        }
      },
      "id": 2,
      "type": "image",
      "thumbnail": "https://i.makeup.ro/b/bb/bbyfziuvqhjp.jpg",
      "url": "https://i.makeup.ro/m/m4/m4bwwb7hpvwj.jpg",
      "default": false
    },
    {
      "sizes": {
        "sm": {
          "url": "https://i.makeup.ro/g/gh/gh1byexyhftr.jpg",
          "thumbnail": "https://i.makeup.ro/o/o7/o77ktoj3xucn.jpg"
        },
        "lg": {
          "url": "https://i.makeup.ro/g/gw/gw7ubzh2hjyr.jpg",
          "thumbnail": "https://i.makeup.ro/o/o7/o77ktoj3xucn.jpg"
        }
      },
      "id": 3,
      "type": "image",
      "thumbnail": "https://i.makeup.ro/o/o7/o77ktoj3xucn.jpg",
      "url": "https://i.makeup.ro/g/gh/gh1byexyhftr.jpg",
      "default": false
    }
  ],
  "is_gift": false,
  "has_variants": true,
  "default_variant": {
    "id": 1775616,
    "type": "color",
    "title": "404",
    "price": {
      "currency": "RON",
      "current": 24.82,
      "old": 28.29,
      "side": "right",
      "symbol": "lei",
      "min": 24.29
    },
    "in_stock": true,
    "in_favorites": false,
    "is_default": true,
    "availability_text": "Disponibil!",
    "media": {
      "sizes": {
        "sm": {
          "url": "https://i.makeup.ro/e/eo/eo4qyzoreg6l.jpg",
          "thumbnail": "https://i.makeup.ro/x/xo/xokzd5fcdvvc.jpg"
        },
        "lg": {
          "url": "https://i.makeup.ro/e/eo/eo4qyzoreg6l.jpg",
          "thumbnail": "https://i.makeup.ro/x/xo/xokzd5fcdvvc.jpg"
        }
      },
      "id": 1,
      "type": "image",
      "thumbnail": "https://i.makeup.ro/x/xo/xokzd5fcdvvc.jpg",
      "url": "https://i.makeup.ro/e/eo/eo4qyzoreg6l.jpg",
      "default": true
    },
    "has_promotional_discount": false,
    "has_action": false,
    "link": "/product/616067/#/option/1775616/",
    "meta": {
      "name": "Tint de buze - LAMEL Make Up All in One Lip Tinted Plumping Oil 404",
      "price_valid_until": "2026-12-31"
    }
  },
  "analytics": {
    "product_id": 616067,
    "product_list_index": 1,
    "in_product_list": 1,
    "product_list_name": "",
    "product_list_title": "",
    "product_group": "Tint pentru buze",
    "category": "Tint de buze",
    "category_id": 674787,
    "category1": "Buze",
    "category1_id": 23438,
    "category2": "Produse cosmetice decorative",
    "category2_id": 2419,
    "category3": "ROOT",
    "category3_id": 1,
    "category4": null,
    "category4_id": null,
    "category5": null,
    "category5_id": null,
    "category6": null,
    "category6_id": null,
    "category7": null,
    "category7_id": null,
    "price": 24.82,
    "old_price": "28.29",
    "currency": "RON",
    "brand": "LAMEL Make Up",
    "brand_id": 1455206,
    "supplier_id": 37,
    "supplier_hash": "bfbf0a2fd9661c361a9adbbf7e0e1139",
    "product_reviews": 113,
    "product_star_rating": 4,
    "variant_id": 1775616,
    "variant": "404",
    "variants": {
      "1469825": "401",
      "1775616": "404"
    },
    "variants_data": {
      "1469825": {
        "price": 25.830000000000002,
        "price_old": 0,
        "value": "401"
      },
      "1775616": {
        "price": 24.82,
        "price_old": "28.29",
        "value": "404"
      }
    },
    "slider_list_description": "Tint de buze",
    "slider_list_name": "Tint de buze - LAMEL Make Up All in One Lip Tinted Plumping Oil",
    "makeup_ads": 0,
    "product_campaign_id": null,
    "product_campaign_click_cost": null,
    "product_item_attention_id": null,
    "product_item_attention": null,
    "product_label": "HIT",
    "product_label_color": "#792c9b",
    "product_label_border_top_color": "#792c9b",
    "global_variant_id": "C01575052",
    "global_product_id": 667432,
    "personalize": false,
    "require_options": null,
    "parent_category": "Produse cosmetice decorative/Tint pentru buze"
  },
  "from_url": "https://makeup.ro/search/?q=lip#offset=36"
}
```

Each scraped product returns a structured record with 24 fields:

#### Core Identification

| Field | Meaning |
|---|---|
| `ID` | Unique internal Makeup.ro product identifier |
| `Title` | Full product name as displayed on the listing |
| `Sub Title` | Secondary product descriptor or tagline (e.g., shade name, size) |
| `Brand` | Brand or manufacturer name |
| `Series` | Product line or collection name (e.g., "Hydra Boost Series") |
| `Type` | Product type classification within its category |
| `Link` | Direct URL to the product detail page on Makeup.ro |

#### Categorization & Discovery

| Field | Meaning |
|---|---|
| `Category` | Primary category the product belongs to |
| `Breadcrumbs` | Full navigation path (e.g., `Beauty > Skincare > Moisturizers`) |

#### Pricing & Availability

| Field | Meaning |
|---|---|
| `Price` | Current listed price, may include promotional pricing |
| `In Stock` | Boolean or status indicating whether the product is currently available |
| `Is Gift` | Whether the product is flagged as a gift item or part of a gift set |

#### Ratings & Social Proof

| Field | Meaning |
|---|---|
| `Rating` | Average customer rating score |
| `Feedback` | Number of customer reviews or feedback entries |
| `Favorites` | Number of times the product has been saved/wishlisted by users |

#### Variants

| Field | Meaning |
|---|---|
| `Has Variants` | Boolean indicating whether the product comes in multiple variants |
| `Variants` | List of available variants (e.g., shades, sizes, formats) with their details |
| `Not Available Variants` | Variants that exist but are currently out of stock |
| `Default Variant` | The variant pre-selected or displayed by default on the listing |

#### Content & Details

| Field | Meaning |
|---|---|
| `Characteristics` | Structured product attributes (e.g., skin type, finish, volume) |
| `Informations` | Extended product information such as ingredients or usage notes |
| `Sections` | Structured content blocks from the product page (e.g., "How to use", "Benefits") |

#### Media & Tracking

| Field | Meaning |
|---|---|
| `Media` | Image and video assets associated with the product |
| `Analytics` | Tracking or event metadata associated with the product listing |

***

### How to Use

1. **Find a category or search URL** — Browse Makeup.ro to your target category or search results page. Copy the full URL including any `#sort` or `#offset` parameters.
2. **Configure the input** — Paste one or more URLs into the `urls` array. Set `max_items_per_url` based on how many products you need (default is `20`; increase for full-category scraping).
3. **Set failure handling** — Keep `ignore_url_failures: true` for bulk runs to prevent a single broken URL from stopping the entire job.
4. **Run the scraper** — Start the actor and monitor logs for progress.
5. **Export your data** — Download results as JSON, CSV, or Excel for use in spreadsheets, databases, or BI tools.

**Best practices:**

- For full category coverage, generate multiple paginated URLs (incrementing `offset` by the page size) and add them all to the `urls` array.
- Run during off-peak hours for more stable results on large batches.
- If a URL returns zero results, verify it loads correctly in a browser — Makeup.ro category URLs can change over time.

***

### Use Cases & Business Value

- **Price monitoring:** Track price changes across beauty categories over time
- **Competitor analysis:** Understand brand assortment, availability, and positioning
- **Catalog enrichment:** Pull structured product data for internal databases or comparison sites
- **Trend research:** Identify top-rated or most-favorited products within a category
- **Inventory intelligence:** Monitor stock availability across product variants

The Makeup.ro Product Search Scraper replaces hours of manual browsing with a single automated run — delivering consistent, machine-readable records that integrate directly into any downstream workflow.

***

### Conclusion

Whether you are tracking beauty market trends, building a product comparison tool, or conducting competitive research, the **Makeup.ro Product Search Scraper** gives you fast, reliable access to structured product data across the platform's full catalog. With flexible URL input, configurable limits, and rich 24-field output, it is a practical tool for anyone working with beauty e-commerce data.

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

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

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://makeup.ro/categorys/2419/#sort=date&offset=36"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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://makeup.ro/categorys/2419/#sort=date&offset=36"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/makeup-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://makeup.ro/categorys/2419/#sort=date&offset=36"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/makeup-product-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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://makeup.ro/categorys/2419/#sort=date&offset=36"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/makeup-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/makeup-product-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Makeup Product Search Scraper",
        "description": "Scrape product listings from Makeup.ro — a major beauty e-commerce platform — and collect titles, prices, ratings, variants, stock status, media, and 20+ structured fields per product. Perfect for price monitoring, catalog analysis, and market research.",
        "version": "0.0",
        "x-build-id": "NDPi4VjyW8FFgGs3s"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~makeup-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-makeup-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~makeup-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-makeup-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~makeup-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-makeup-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the product search list urls to scrape",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
