# Noon Products, Sellers & Price Monitor (`automation-lab/noon-products-sellers-monitor`) Actor

Search Noon UAE, Saudi Arabia, and Egypt. Capture product prices, discounts, stock, ratings, current sellers, Buy Box details, SKUs, images, and source URLs.

- **URL**: https://apify.com/automation-lab/noon-products-sellers-monitor.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Noon Products, Sellers and Price Monitor

Search **noon** catalogs in the United Arab Emirates, Saudi Arabia, and Egypt, or inspect exact product URLs. The Actor returns structured snapshots of products, regional prices, discounts, stock, ratings, the current seller, Buy Box details, and source URLs.

Use scheduled runs to compare snapshots in your own database, spreadsheet, or workflow. The Actor reads public catalog pages only; it does not sign in, place orders, or access checkout data.

### What can this Noon scraper do?

- Search one or more product keywords across UAE, Saudi Arabia, and Egypt.
- Monitor exact public Noon product URLs.
- Capture regional currencies: AED, SAR, and EGP.
- Return current price, original price, discount, stock message, and product rating.
- Enrich each product with the seller currently displayed in the Buy Box.
- Return seller rating and positive-feedback percentage when Noon displays them.
- Preserve SKU, image, source URL, query, country, and collection timestamp.
- Produce clean JSON, CSV, Excel, XML, or RSS through Apify datasets.

The Actor uses Noon's compact public catalog JSON routes through regional sticky residential HTTP sessions because ordinary datacenter requests are blocked. Search and product-detail requests share one session so country and catalog state remain consistent.

### Who is this for?

**Marketplace analysts** can compare regional assortments and prices.

**Retail and brand teams** can watch their SKUs, availability, discounts, and current winning seller.

**Seller operations teams** can schedule product-page snapshots and detect Buy Box changes downstream.

**Data engineers** can feed normalized Noon product records into warehouses and business-intelligence tools.

**Researchers** can export a bounded, timestamped sample with a source URL for every record.

### Why use this Actor?

Noon has separate regional storefronts and protects catalog pages from naive requests. This Actor combines:

1. regional UAE, Saudi Arabia, and Egypt catalog API requests;
2. sticky residential proxy identities;
3. HTTP session and header continuity;
4. compact JSON search discovery;
5. optional JSON product-detail enrichment for seller and Buy Box fields;
6. bounded retries and challenge detection.

Unlike a generic page-title scraper, the output is designed for repeated marketplace snapshots. It does not claim to provide automatic alerts or built-in historical diffs: schedule runs and compare `sku`, `country`, `price`, `inStock`, and `sellerName` in your destination.

### What data does it extract?

| Field | Meaning |
| --- | --- |
| `query` | Search query that found the product; null for a direct URL |
| `country` | `AE`, `SA`, or `EG` |
| `currency` | `AED`, `SAR`, or `EGP` |
| `sku` | Noon product identifier |
| `title` | Current product title |
| `brand` | Brand inferred from the listing when available |
| `productUrl` | Public Noon source page |
| `imageUrl` | Primary product image URL when available |
| `price` | Current listing or Buy Box price |
| `originalPrice` | Pre-discount price when displayed |
| `discountPercent` | Displayed percentage discount |
| `rating` | Product rating |
| `ratingCount` | Number of displayed product ratings |
| `inStock` | Current availability signal |
| `stockText` | Low-stock, selling-fast, or out-of-stock message |
| `sellerName` | Seller currently shown in the Buy Box |
| `sellerRating` | Displayed seller rating |
| `sellerPositivePercent` | Displayed positive-feedback percentage |
| `isBuyBoxWinner` | True when seller fields represent the selected Buy Box offer |
| `scrapedAt` | ISO 8601 snapshot timestamp |

A nullable field means Noon did not display that value for the listing or selected mode.

### How to run the Actor

1. Open the Actor input page.
2. Add at least one search query or product URL.
3. Select one or more countries for keyword searches.
4. Keep **Load seller and Buy Box details** enabled for monitoring workflows.
5. Set a practical `maxItems` limit.
6. Click **Start**.
7. Open the Dataset tab and export the overview table.

The default input searches `iPhone 17` in the UAE and returns up to 10 detailed snapshots.

### Input parameters

#### `queries`

A list of product searches, such as `wireless earbuds`, `running shoes`, or `iPhone 17`. Each query runs in every selected country until the shared limit is reached.

#### `productUrls`

Public product pages from Noon UAE, Saudi Arabia, or Egypt. The Actor validates the hostname and SKU-shaped path. Product URLs are processed in their own country even when that country is not selected for search.

#### `countries`

A list containing `AE`, `SA`, or `EG`. For a multi-country run, the result allowance is distributed across countries so one storefront does not consume the entire limit.

#### `includeSellerDetails`

Defaults to `true`. The Actor loads each product's detail record and captures the currently selected seller and Buy Box fields. Set it to `false` for a faster catalog snapshot when seller details are unnecessary.

#### `maxItems`

Maximum number of product records across every query, URL, and country. Allowed range: 1–500.

### Example input: regional search

```json
{
  "queries": ["wireless earbuds"],
  "countries": ["AE", "SA", "EG"],
  "includeSellerDetails": true,
  "maxItems": 6
}
```

This exact input was tested against all three storefronts and returned two useful seller-enriched product snapshots per country.

### Example input: exact product monitor

```json
{
  "queries": [],
  "productUrls": [
    {
      "url": "https://www.noon.com/uae-en/iphone-17-pro-max-256-gb-esim-only-cosmic-orange-5g-with-facetime-international-version/N70211465V/p/"
    }
  ],
  "countries": ["AE"],
  "includeSellerDetails": true,
  "maxItems": 1
}
```

Use this shape in an Apify schedule to create timestamped snapshots of a known SKU.

### Example output

```json
{
  "query": null,
  "country": "AE",
  "currency": "AED",
  "sku": "N70211465V",
  "title": "Apple iPhone 17 Pro Max 256 GB (eSIM only) Cosmic Orange 5G With FaceTime - International Version",
  "brand": "Apple",
  "productUrl": "https://www.noon.com/uae-en/iphone-17-pro-max-256-gb-esim-only-cosmic-orange-5g-with-facetime-international-version/N70211465V/p/",
  "imageUrl": "https://f.nooncdn.com/p/example-product.jpg",
  "price": 4819.7,
  "originalPrice": 5099,
  "discountPercent": null,
  "rating": 4.5,
  "ratingCount": 28483,
  "inStock": true,
  "stockText": "Selling out fast",
  "sellerName": "Example Seller",
  "sellerRating": 4.8,
  "sellerPositivePercent": 87,
  "isBuyBoxWinner": true,
  "scrapedAt": "2026-01-15T12:00:00.000Z"
}
```

Prices and sellers change; this record illustrates the output shape rather than promising a future value.

### How much does it cost to monitor Noon products and sellers?

This Actor uses pay-per-event pricing:

- one `start` event per run;
- one `item` event for each saved product snapshot;
- seller and Buy Box fields do not create a separate charge event.

The current source package declares a **$0.005 start fee**. Item prices use six decreasing Apify plan tiers: **$0.000874 on FREE, $0.00076 on BRONZE, $0.0005928 on SILVER, $0.000456 on GOLD, $0.000304 on PLATINUM, and $0.0002128 on DIAMOND**.

Examples before Apify platform usage adjustments:

| Plan tier | 5 products | 25 products | 100 products |
| --- | ---: | ---: | ---: |
| FREE | $0.00937 | $0.02685 | $0.09240 |
| BRONZE | $0.00880 | $0.02400 | $0.08100 |

The run page displays the final charge. Catalog API and residential-proxy work are included in the Actor price rather than billed as another Actor event.

### Scheduling price and stock monitoring

Create an Apify schedule with an exact product input. Send each completed dataset to your database or webhook, keyed by `country` and `sku`.

Compare the new row with the previous row for:

- `price` or `discountPercent` change;
- `inStock` transition;
- `sellerName` change;
- `sellerPositivePercent` movement;
- rating or rating-count movement.

The Actor captures snapshots. Your schedule, integration, or database owns alert thresholds and historical retention.

### Export and integration workflows

#### Spreadsheet workflow

Run a bounded query, open the Dataset tab, and export CSV or Excel. Keep `scrapedAt` when appending snapshots over time.

#### Data warehouse workflow

Load JSON records into a table keyed by `(country, sku, scrapedAt)`. Use `(country, sku)` for current-state views.

#### Webhook workflow

Attach a run-succeeded webhook and pass the dataset ID to your automation. Fetch only new items from that run's default dataset.

#### Cross-market workflow

Join Noon snapshots with output from [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper) or [Amazon Sellers Scraper](https://apify.com/automation-lab/amazon-sellers-scraper) using normalized product identifiers you maintain.

### Run with the Apify API using cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~noon-products-sellers-monitor/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["wireless earbuds"],
    "countries": ["AE", "SA", "EG"],
    "includeSellerDetails": true,
    "maxItems": 6
  }'
```

Keep tokens in environment variables or a secret manager.

### Run with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/noon-products-sellers-monitor').call({
  queries: ['wireless earbuds'],
  countries: ['AE', 'SA', 'EG'],
  includeSellerDetails: true,
  maxItems: 6,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Run with Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/noon-products-sellers-monitor").call(run_input={
    "queries": ["wireless earbuds"],
    "countries": ["AE", "SA", "EG"],
    "includeSellerDetails": True,
    "maxItems": 6,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/noon-products-sellers-monitor"
```

#### Claude Desktop

Add this server object to your Claude Desktop MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/noon-products-sellers-monitor"
    }
  }
}
```

#### Cursor

Open **Settings → Tools & MCP**, add a remote HTTP server named `apify`, and use the same `https://mcp.apify.com?tools=automation-lab/noon-products-sellers-monitor` URL.

#### VS Code

Add the same remote HTTP server URL to your workspace or user MCP configuration, then enable the `apify` server in the Chat tools menu.

Example prompts:

- “Search Noon UAE for wireless earbuds and return five current price and stock records.”
- “Inspect this Noon product URL and show the current Buy Box seller and seller rating.”
- “Compare two Noon product snapshots and list price, stock, and seller changes.”

### Reliability, retries, and limits

Noon actively blocks ordinary automated traffic. The Actor uses compact catalog JSON routes, regional residential proxies, sticky HTTP sessions, and bounded retries.

Seller enrichment makes one additional product-detail request per item, with conservative bounded concurrency. This preserves session continuity while avoiding browser-rendering overhead and unnecessary asset transfer.

If all bounded sessions are blocked, the Actor fails with a non-zero status instead of returning a misleading empty success. Retry later rather than treating a blocked run as “no products.”

Product presentation can vary by country, inventory, delivery location, and Noon experiments. Fields that Noon does not display are returned as null.

### Responsible use and legality

Use the Actor for lawful collection of public catalog information. Follow Noon terms, applicable laws, and contractual obligations.

Do not use it to access accounts, checkout, private customer data, or restricted information. Avoid excessive collection, respect reasonable limits, and store only the data needed for your legitimate purpose.

This Actor is not affiliated with or endorsed by Noon.

### Troubleshooting

#### Why did the run fail with an access or navigation error?

Noon may reject a regional proxy identity. The Actor rotates sticky residential sessions a bounded number of times. If every attempt is rejected, wait and retry; do not interpret the failed run as an empty catalog.

#### Why is a seller field null?

Disablement of seller enrichment, an unavailable product, a page variation, or a seller section that Noon did not display can produce null seller fields. Keep `includeSellerDetails` enabled for Buy Box monitoring.

#### Why do prices differ from my browser?

Country, delivery location, active promotions, inventory, and collection time can affect the displayed price. Compare records only when `country`, `currency`, and SKU match.

#### Why did I receive fewer products than expected?

`maxItems` is a global cap. Multi-country runs distribute that allowance across selected storefronts. Noon may also return fewer unique SKUs for a narrow query.

### FAQ

#### Does it support all three main Noon storefronts?

Yes: UAE (`AE`), Saudi Arabia (`SA`), and Egypt (`EG`).

#### Can it monitor multiple sellers for one SKU?

It captures the seller currently selected in the public Buy Box. It does not currently enumerate every alternate offer in the “more sellers” panel.

#### Does it keep price history?

No. Each run writes a timestamped snapshot. Use schedules plus your dataset, database, or integration to retain and compare history.

#### Does it send alerts?

No built-in alerts are claimed. Connect schedules to webhooks, Zapier, Make, Slack, email, or your monitoring service.

#### Can it scrape accounts or orders?

No. The scope is public product and seller catalog information only.

#### Can I export the data?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

### Related Actors

- [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper) for general Amazon product data.
- [Amazon Sellers Scraper](https://apify.com/automation-lab/amazon-sellers-scraper) for Amazon seller intelligence.
- [Amazon Bestsellers Scraper](https://apify.com/automation-lab/amazon-bestsellers-scraper) for category ranking snapshots.

Use related Actors only when you need broader marketplace coverage; Noon records remain source-specific and should not be treated as interchangeable with another marketplace.

# Actor input Schema

## `queries` (type: `array`):

Product keywords to search in each selected Noon country, for example iPhone 17 or wireless earbuds.

## `productUrls` (type: `array`):

Optional public Noon UAE, Saudi Arabia, or Egypt product pages to monitor directly.

## `countries` (type: `array`):

Noon storefronts to search. Product URLs are always processed in their own storefront country.

## `includeSellerDetails` (type: `boolean`):

Open each product page to capture the current winning seller, seller rating, availability, and Buy Box price. Disable for a faster catalog-only snapshot.

## `maxItems` (type: `integer`):

Maximum product snapshots saved across all queries, URLs, and countries.

## Actor input object example

```json
{
  "queries": [
    "iPhone 17"
  ],
  "productUrls": [],
  "countries": [
    "AE"
  ],
  "includeSellerDetails": true,
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Open all captured product snapshots in the overview table.

# 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 = {
    "queries": [
        "iPhone 17"
    ],
    "productUrls": [],
    "countries": [
        "AE"
    ],
    "includeSellerDetails": true,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/noon-products-sellers-monitor").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 = {
    "queries": ["iPhone 17"],
    "productUrls": [],
    "countries": ["AE"],
    "includeSellerDetails": True,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/noon-products-sellers-monitor").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 '{
  "queries": [
    "iPhone 17"
  ],
  "productUrls": [],
  "countries": [
    "AE"
  ],
  "includeSellerDetails": true,
  "maxItems": 10
}' |
apify call automation-lab/noon-products-sellers-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/noon-products-sellers-monitor"
        }
    }
}

```

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/u2e4JWQiyH9JbfAXU/builds/vbikrSdPZh523zFFb/openapi.json
