# Shafa Product Search Scraper (`stealth_mode/shafa-product-search-scraper`) Actor

Scrape product listings from Shafa.ua search results with complete metadata. This scraper collects prices, images, seller info, ratings, sizes, and 25+ fields per product — ideal for price monitoring, market research, and fashion e-commerce analytics.

- **URL**: https://apify.com/stealth\_mode/shafa-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, 0 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

## Shafa Product Search Scraper: Extract Fashion Listings at Scale

---

### What Is Shafa.ua?

Shafa.ua is a leading Ukrainian online marketplace specializing in fashion, apparel, and lifestyle products. The platform aggregates listings from multiple sellers, offering everything from contemporary fashion to vintage and secondhand items. With millions of active listings, Shafa is a goldmine for fashion market data — but manually extracting product information across search results is inefficient. The **Shafa Product Search Scraper** automates this, transforming search pages into structured, analysis-ready datasets.

---

### Overview

The **Shafa Product Search Scraper** extracts product listings directly from Shafa.ua search results pages, delivering comprehensive product metadata in a single run. It is built for:

- **E-commerce analysts** tracking competitor pricing and inventory
- **Fashion retailers** monitoring market trends and supply
- **Price comparison platforms** aggregating Ukrainian fashion data
- **Researchers** studying secondhand fashion markets
- **Dropshippers and resellers** identifying sourcing opportunities

Key features include configurable item limits per search page, resilient error handling via `ignore_url_failures`, and detailed product attributes including pricing, seller data, and customer engagement metrics.

---

### Input Format

The scraper accepts a JSON configuration object specifying which search results to extract:

```json
{
  "urls": [
    "https://shafa.ua/uk/women?search_text=fitch&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Parameter | Type | Description | Example |
|---|---|---|---|
| `urls` | Array | Search result page URLs from Shafa.ua | `["https://shafa.ua/uk/women?search_text=nike&page=1"]` |
| `max_items_per_url` | Integer | Maximum products to extract per URL (1–200) | `200` |
| `ignore_url_failures` | Boolean | If `true`, skips failed URLs without stopping the run | `true` |

**How to build URLs:**

1. Visit Shafa.ua and select a category (e.g., `/women`, `/men`, `/shoes`)
2. Enter a search term and apply filters
3. Copy the full URL including query parameters (e.g., `?search_text=brand&page=1`)
4. Add multiple URLs to scrape across different searches or pages

> **Tip:** Use pagination (`page=1`, `page=2`, etc.) to collect data across multiple result pages in a single run.

***

### Output Format

**Example output:**

```json
{
  "id": 212137874,
  "url": "/uk/women/rubashki-i-bluzy/bluzy/212137874-bluza-z-shtuchnogo-shovku-brendu-zara-women-zamiripog-60-sm-dovzhina",
  "thumbnail": "https://image-thumbs.shafastatic.net/2312059010_310_430",
  "name": "Блуза з штучного шовку бренду zara women .\nзаміри:пог-60 см, довжина виробу - 67 см, довжина рукава -57 см(рукав мишка)",
  "price": 199.0,
  "old_price": null,
  "status_title": "AVAILABLE",
  "discount_percent": null,
  "likes": 9,
  "is_liked": false,
  "brand": {
    "id": 183,
    "name": "ZARA",
    "__typename": "Brand"
  },
  "catalog_slug": "rubashki-i-bluzy/bluzy",
  "is_new": false,
  "sizes": [
    {
      "id": 833,
      "name": "S",
      "size_group": {
        "id": 40,
        "size_system_code": null,
        "__typename": "SizeGroup"
      },
      "__typename": "Size"
    },
    {
      "id": 834,
      "name": "M",
      "size_group": {
        "id": 40,
        "size_system_code": null,
        "__typename": "SizeGroup"
      },
      "__typename": "Size"
    }
  ],
  "size": "833",
  "sale_label": {
    "status": "SALE_NONE",
    "date": "2026-06-17",
    "price": "0",
    "__typename": "SaleLabel"
  },
  "seller": {
    "id": 10942612,
    "__typename": "User"
  },
  "free_delivery_services": null,
  "is_ukrainian": false,
  "owner_has_recent_activity": true,
  "tags": [],
  "rating": null,
  "rating_amount": null,
  "is_viewed": true,
  "created_at": "2026-06-16T16:50:09.035096+00:00",
  "selling_condition": "SALE",
  "collections_tags": [],
  "source_import": null,
  "price_variants": [
    {
      "id": null,
      "price": "199",
      "old_price": null,
      "discount_percent": null,
      "sale_label": {
        "status": "SALE_NONE",
        "date": "2026-06-17",
        "price": "0",
        "__typename": "SaleLabel"
      },
      "size": {
        "id": 833,
        "name": "S",
        "size_group": {
          "id": 40,
          "size_system_code": null,
          "__typename": "SizeGroup"
        },
        "__typename": "Size"
      },
      "__typename": "ProductVariantType"
    },
    {
      "id": null,
      "price": "199",
      "old_price": null,
      "discount_percent": null,
      "sale_label": {
        "status": "SALE_NONE",
        "date": "2026-06-17",
        "price": "0",
        "__typename": "SaleLabel"
      },
      "size": {
        "id": 834,
        "name": "M",
        "size_group": {
          "id": 40,
          "size_system_code": null,
          "__typename": "SizeGroup"
        },
        "__typename": "Size"
      },
      "__typename": "ProductVariantType"
    }
  ],
  "from_url": "https://shafa.ua/uk/women?page=2"
}
```

Each product extracted from Shafa search results returns a comprehensive record with 25+ fields:

#### Product Identification

| Field | Meaning |
|---|---|
| `ID` | Unique product identifier in the Shafa system |
| `URL` | Direct link to the product detail page on Shafa.ua |
| `Name` | Product title as displayed in search results |
| `Brand` | Manufacturer or brand name (e.g., "Fitch", "Nike") |

#### Pricing & Discounts

| Field | Meaning |
|---|---|
| `Price` | Current selling price in UAH |
| `Old Price` | Original price before discount (if applicable) |
| `Discount Percent` | Percentage discount applied to the product |
| `Status Title` | Label indicating price status (e.g., "New Price", "Sale") |
| `Price Variants` | Alternative pricing for different sizes or options |

#### Product Media & Visuals

| Field | Meaning |
|---|---|
| `Thumbnail` | URL of the product's main image used in search results |
| `Catalog Slug` | URL-friendly category identifier (e.g., "women-clothing") |

#### Seller & Sourcing Information

| Field | Meaning |
|---|---|
| `Seller` | Name of the seller/vendor listing the product |
| `Is Ukrainian` | Boolean flag: `true` if seller is Ukrainian-based |
| `Owner Has Recent Activity` | Indicates whether the seller has recent marketplace activity |
| `Free Delivery Services` | Delivery options available for this listing |
| `Source Import` | Origin of the product (e.g., import country if applicable) |

#### Product Attributes

| Field | Meaning |
|---|---|
| `Sizes` | Available size options for the product (e.g., \["XS", "S", "M", "L"]) |
| `Size` | Currently displayed or selected size |
| `Is New` | Boolean: `true` if product is brand-new condition |
| `Selling Condition` | Item condition (e.g., "New", "Like New", "Good", "Fair") |

#### Customer Engagement & Popularity

| Field | Meaning |
|---|---|
| `Likes` | Total number of user "likes" or favorites |
| `Is Liked` | Boolean: `true` if the current user has liked this product |
| `Rating` | Average product rating (typically 1–5 stars) |
| `Rating Amount` | Number of customer reviews contributing to the rating |
| `Is Viewed` | Boolean: `true` if the user has previously viewed this product |

#### Categorization & Organization

| Field | Meaning |
|---|---|
| `Tags` | Searchable tags assigned to the product (e.g., \["summer", "casual"]) |
| `Collections Tags` | Curated collection or promotional groupings |
| `Sale Label` | Special promotional label if applicable (e.g., "Flash Sale") |

#### Metadata & Timestamps

| Field | Meaning |
|---|---|
| `Created At` | Date and time the listing was posted to Shafa |

***

### How to Use

1. **Navigate Shafa.ua** — Browse the marketplace and identify product categories or search terms of interest.
2. **Prepare URLs** — Run searches on Shafa (e.g., search "nike" in women's section), then copy the full URL including query parameters and page numbers.
3. **Configure the scraper** — Paste 1–10 URLs into the `urls` array. Set `max_items_per_url` to control data volume (typical: 50–200).
4. **Set error handling** — Keep `ignore_url_failures: true` to skip any problematic pages without interrupting the run.
5. **Execute the scraper** — Start the actor and monitor progress in the run log.
6. **Download results** — Export the dataset as JSON, CSV, or Excel for analysis in spreadsheets or databases.

**Best practices:**

- Use specific search terms to ensure relevant results (e.g., `search_text=fitch&category=women`)
- If scraping multiple pages, leverage pagination parameters in the URL
- Set realistic `max_items_per_url` limits — Shafa search pages typically return 50–100 items per page
- For large-scale runs (1000+ products), split URLs across multiple scraper runs

***

### Use Cases & Business Value

- **Price monitoring & intelligence:** Track competitor pricing, discounts, and inventory turnover in the Ukrainian fashion market
- **Market research:** Analyze product trends, popular brands, and customer sentiment via ratings and tags
- **Secondhand market analysis:** Understand pricing of vintage or gently-used fashion items
- **Reseller operations:** Identify profitable sourcing opportunities with pricing and condition data
- **Inventory benchmarking:** Compare product availability and sizing options across sellers
- **Promotional calendar:** Identify seasonal trends and sale patterns based on discount data

The structured output enables seamless integration with BI tools (Tableau, Power BI), spreadsheet analysis, or custom Python scripts for deeper insights.

***

### Conclusion

The **Shafa Product Search Scraper** is a powerful tool for anyone needing structured fashion product data from Ukraine's largest marketplace. With 25+ data points per product — from pricing and images to seller ratings and availability — this scraper transforms search results into actionable intelligence. Whether you're a market researcher, price comparison platform, or e-commerce business, this scraper saves time and unlocks competitive advantage in the Ukrainian fashion space.

# 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://shafa.ua/uk/women?search_text=fitch&page=2"
  ],
  "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://shafa.ua/uk/women?search_text=fitch&page=2"
    ],
    "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/shafa-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://shafa.ua/uk/women?search_text=fitch&page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/shafa-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://shafa.ua/uk/women?search_text=fitch&page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/shafa-product-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shafa Product Search Scraper",
        "description": "Scrape product listings from Shafa.ua search results with complete metadata. This scraper collects prices, images, seller info, ratings, sizes, and 25+ fields per product — ideal for price monitoring, market research, and fashion e-commerce analytics.",
        "version": "0.0",
        "x-build-id": "ehdGzuulTE6UcAusF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~shafa-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-shafa-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~shafa-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-shafa-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~shafa-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-shafa-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
