# Uzum Scraper: Uzbekistan Marketplace Data (`maximedupre/uzum`) Actor

Search public Uzum.uz product listings with one or more keywords. Get structured rows with product titles, current prices, direct product links, and source-provided discounts, ratings, order counts, and images when available. Use the data for Uzbekistan marketplace research and sourcing.

- **URL**: https://apify.com/maximedupre/uzum.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.95 / 1,000 product listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🛍️ Uzum product listings for marketplace research

For ecommerce sellers, product researchers, and developers, this Actor searches Uzum.uz in Uzbekistan with your keywords and saves structured product listings. Each row includes the product title, price data, source link, and the keyword that found it, plus source-provided demand signals when available, so you can compare marketplace products in a dataset.

**Use cases**

- Search the marketplace and save matching product listings with [**Uzum Market Online Shopping**](https://apify.com/maximedupre/uzum/examples/uzum-market-online-shopping).
- Find matching products and keep their source fields with [**Wireless Earbuds**](https://apify.com/maximedupre/uzum/examples/wireless-earbuds).
- Collect footwear listings and compare their prices with [**Sneakers**](https://apify.com/maximedupre/uzum/examples/sneakers).
- Review product prices and demand signals with [**Smartphone**](https://apify.com/maximedupre/uzum/examples/smartphone).
- Gather another product category with [**Headphones**](https://apify.com/maximedupre/uzum/examples/headphones).

#### 📦 Uzum product listing data

Each saved dataset row is one product listing found on Uzum.uz. It keeps product identity, a direct product page, the first keyword that found the product, pricing, and source-provided marketplace signals when available.

If more than one submitted keyword finds the same product, the first eligible occurrence is saved. Later matches are ignored, so the `keyword` field shows the first submitted keyword that found that row.

#### 🚀 Run a focused Uzum search

1. Add at least one keyword, such as `wireless headphones` or `phone case`.
2. Choose `relevance`, `orders`, `rating`, or `price` in `sortBy`.
3. Start the run and open the product listings from the output link.

The input schema has no result-count field. The Actor searches each submitted keyword and returns available matches until the source is exhausted.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `keywords` | array of strings | Required. Searches public Uzum.uz listings for each submitted word or phrase. Each saved product keeps the first keyword that found it. |
| `sortBy` | string | Chooses the requested order: `relevance`, `orders`, `rating`, or `price`. Relevance follows the source search; the other choices use source values when available. The default is `relevance`. |

**Example input**

This is the public input from a successful current-beta run:

```json
{
  "keywords": [
    "wireless headphones",
    "phone case"
  ],
  "sortBy": "relevance"
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `datasetItems` | string URL | Opens the product listings saved by the run. |

**Dataset row**

| Field | Type | What it does |
| --- | --- | --- |
| `productId` | string | The Uzum product identifier. |
| `title` | string | The product title shown by Uzum.uz. |
| `productUrl` | string URL | The direct Uzum.uz page for the product. |
| `keyword` | string | The first submitted keyword that found this product. |
| `pricing` | object | Contains the current price and optional prior-price or discount data. |
| `pricing.current` | number | The current price shown by Uzum.uz. |
| `pricing.previous` | number, optional | The prior price shown by Uzum.uz, when available. |
| `pricing.discountPercentage` | number, optional | The discount percentage shown by Uzum.uz, when available. |
| `category` | string, optional | The product category shown by Uzum.uz, when available. |
| `rating` | number, optional | The product rating shown by Uzum.uz, when available. |
| `reviewCount` | integer, optional | The number of reviews shown by Uzum.uz, when available. |
| `orderCount` | integer, optional | The order count shown by Uzum.uz, when available. |
| `adultContent` | boolean, optional | Whether Uzum.uz marks the product as adult content, when available. |
| `imageUrl` | string URL, optional | A product image URL from Uzum.uz, when available. |

**Example dataset row**

This complete genuine row comes from the same successful current-beta run. Optional fields are present here when the source returned them.

```json
{
  "productId": "1934557",
  "title": "Simsiz quloqchinlar REMAX RB-100HB",
  "productUrl": "https://uzum.uz/uz/product/1934557",
  "keyword": "wireless headphones",
  "pricing": {
    "current": 169000,
    "previous": 230000,
    "discountPercentage": 26.521739130434785
  },
  "rating": 4.8,
  "reviewCount": 1211,
  "orderCount": 0,
  "adultContent": false,
  "imageUrl": "https://images.uzum.uz/d8pvj649g1ku9j5bs790/t_product_540_high.jpg"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The primary event is charged for each product listing saved to the dataset. The amount depends on your Apify customer tier.

#### 🔌 Integrations

Use the dataset link in the Output section to read the saved rows in Apify.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What happens when one product matches more than one keyword?

The first eligible occurrence is saved. Later matches are ignored, and `keyword` keeps the first submitted keyword that found the product.

##### What happens when Uzum does not show a product value?

Optional fields such as category, rating, review count, order count, adult-content status, and image URL are left out when the source does not provide them. The Actor does not guess missing values.

##### Can I submit several keywords in one run?

Yes. Add one or more words or phrases to `keywords`. The Actor searches each one in the same run and keeps the first eligible product match.

##### What does `sortBy` change?

It chooses the requested order for matching listings: relevance, order count, rating, or price. Some source values may be unavailable for a listing.

##### Does this collect seller details, stock, variants, or review text?

No. It returns listing data defined by the public schema. It does not collect seller, inventory, shipping, variant, or review-text details beyond the fields shown in each row.

##### Do I need to log in to Uzum.uz?

No. The Actor is designed to access public Uzum listings without requiring you to log in to Uzum. You are responsible for following the source terms and applicable laws.

##### Does this track price changes over time?

No. Each run returns current listing data available from Uzum. It does not provide historical monitoring or alerts.

### 📝 Changelog

**v0.0** (27-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~uzum/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [MercadoLibre Search Scraper](https://apify.com/maximedupre/mercado-libre-search-scraper): search another marketplace by keyword and compare product prices, sellers, ratings, images, and positions.
- [Trendyol Scraper: Products & Reviews](https://apify.com/maximedupre/trendyol-scraper): collect marketplace products with prices, sellers, ratings, reviews, and Q\&A when needed.
- [Facebook Marketplace Listings Scraper](https://apify.com/maximedupre/facebook-marketplace-listings): collect public marketplace listings with prices, locations, availability, and image links.
- [OLX Scraper](https://apify.com/maximedupre/olx-scraper): search classified listings by keyword and compare prices, sellers, locations, and listing attributes.
- [Amazon Price Tracker](https://apify.com/maximedupre/amazon-price-tracker): collect current product snapshots with prices, discounts, ratings, sellers, and source links.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `keywords` (type: `array`):

Enter one or more words or phrases. Each keyword is searched separately, and each saved row keeps the first keyword that found that product.

## `sortBy` (type: `string`):

Choose how matching listings are ordered. Relevance follows the source search; the other choices use source values when available.

## Actor input object example

```json
{
  "keywords": [
    "wireless headphones",
    "phone case"
  ],
  "sortBy": "relevance"
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Open the product listings from this run.

# 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 = {
    "keywords": [
        "wireless headphones"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/uzum").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 = { "keywords": ["wireless headphones"] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/uzum").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 '{
  "keywords": [
    "wireless headphones"
  ]
}' |
apify call maximedupre/uzum --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/uzum"
        }
    }
}
```

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/5W4X1Xskn8u5old4I/builds/2I6t0RwNpwYGv7NAe/openapi.json
