# GCC Competitor Price Monitor & Evidence Alerts (`tufaifx/gcc-price-monitor`) Actor

Bilingual (AR/EN) competitor price tracker for GCC merchants with market-specific price snapshots and verified screenshot evidence.

- **URL**: https://apify.com/tufaifx/gcc-price-monitor.md
- **Developed by:** [Tayseer Al Tufaif](https://apify.com/tufaifx) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 enriched competitor price checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 🇸🇦🇦🇪 GCC Competitor Price Monitor & Evidence Alerts

#### رادار مراقبة أسعار المنافسين لمتاجر الخليج (سلة، زد، نون، أمازون) مع توثيق الأدلة بلقطات الشاشة

An autonomous, bilingual (Arabic & English) price intelligence actor designed specifically for GCC e-commerce brands, distributors, and online stores across Saudi Arabia, UAE, Kuwait, Qatar, Bahrain, and Oman.

Monitors competitor product prices, tracks discounts, detects stockouts, and captures **tamper-proof timestamped screenshot evidence** for MAP compliance and pricing parity disputes.

***

### 🌟 Why GCC Merchants Need This Actor

Standard global scrapers struggle with Middle Eastern e-commerce: they break on Arabic typography, fail on right-to-left layouts, and cannot parse local platforms like **Salla (سلة)** or **Zid (زد)**.

**GCC Competitor Price Monitor solves this with:**

- **Bilingual Arabic & English Parser:** Seamlessly reads product names, currencies (`SAR`, `AED`, `QAR`, `KWD`), and availability in both languages.
- **Universal Regional Store Support:** Built to monitor:
  - **Salla (سلة) & Zid (زد) D2C stores**
  - **Noon (نون) & Amazon.sa / Amazon.ae**
  - **Jarir Bookstore (مكتبة جرير), Extra (اكسترا), Sharaf DG**
  - Any custom WooCommerce or Shopify store in the Gulf.
- **📸 Tamper-Proof Screenshot Evidence:** Every time a price change is detected, the Actor saves a clean, timestamped screenshot of the price tag into cloud storage—giving you incontrovertible proof for manufacturer pricing agreements (MAP).
- **⚡ Instant Alerts:** Automatically dispatches executive price drop/increase alerts to your **Telegram, Slack, or Discord** channels.

***

### 📥 Input Configuration

| Parameter | Type | Default | Description |
| :--- | :---: | :---: | :--- |
| `productUrls` | `Array` | *Required* | List of competitor product URLs to monitor. |
| `defaultCurrency` | `String` | `SAR` | Target currency (`SAR`, `AED`, `QAR`, `KWD`, `USD`). |
| `captureEvidenceScreenshot` | `Boolean` | `true` | Captures timestamped screenshot proof of price tags. |
| `alertOnPriceDropOnly` | `Boolean` | `false` | Only trigger notifications when a competitor cuts prices. |
| `minChangeThresholdPercent` | `Integer` | `0` | Minimum percentage change needed to fire an alert (e.g. `5` for >= 5%). |
| `webhookUrl` | `String` | `null` | Optional Slack, Discord, or Telegram webhook URL for push alerts. |

***

### 📤 Sample Output Dataset Item

```json
{
  "title": "عطر ديور سوفاج أو دو بارفيوم 100 مل",
  "brand": "Dior",
  "sku": "DIOR-SAUV-100",
  "competitorDomain": "aljamal-store.salla.sa",
  "productUrl": "https://aljamal-store.salla.sa/products/dior-sauvage",
  "currentPrice": 459,
  "originalPrice": 540,
  "discountPercentage": 15,
  "currency": "SAR",
  "stockStatus": "InStock",
  "previousPrice": 540,
  "priceChangeStatus": "PRICE_DROP",
  "priceChangeDelta": -81,
  "priceChangePercentage": -15,
  "evidenceScreenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/evidence_a8f9b2_1792134000.png",
  "checkedAt": "2026-10-16T11:05:00.000Z"
}
```

***

### 🔔 Sample Push Alert Payload

```markdown
🚨📉 PRICE DROP / تخفيض سعر DETECTED
• Product: عطر ديور سوفاج أو دو بارفيوم 100 مل (Dior Sauvage EDP 100ml)
• Store: aljamal-store.salla.sa
• Previous Price: 540 SAR
• Current Price: 459 SAR (-15%)
• Stock Status: ✅ In Stock / متوفر
• Evidence Screenshot: https://api.apify.com/.../evidence_proof.png
• Product Link: https://aljamal-store.salla.sa/products/dior-sauvage
```

***

### 💻 Programmatic Usage via Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "productUrls": [
        "https://www.jarir.com/sa-en/apple-iphone-16-pro-smartphones-644755.html",
        "https://aljamal-store.salla.sa/products/dior-sauvage"
    ],
    "defaultCurrency": "SAR",
    "captureEvidenceScreenshot": True,
    "minChangeThresholdPercent": 2,
    "webhookUrl": "https://discord.com/api/webhooks/YOUR/WEBHOOK"
}

## Run the Actor and fetch results
run = client.actor("tufaifx/gcc-price-monitor").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['title']} - Current: {item['currentPrice']} {item['currency']} (Status: {item['priceChangeStatus']})")
```

***

### 🛡️ Fair Use & Commercial Transparency

This Actor collects only public retail prices and availability displayed by merchants on their public storefronts. It complies with e-commerce price monitoring standards and handles zero consumer personal data.

***

#### 🚀 Complementary Tools for Growth & E-Commerce

Looking to expand your B2B sales pipeline or reach new retail distributors across KSA & UAE?
Check out **[Google Maps Lead & Contact Enricher](https://apify.com/tufaifx/maps-lead-enricher)** — automatically extracts verified emails, WhatsApp numbers, and social channels for local businesses.

# Actor input Schema

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

Enter the competitor product URLs you want to monitor (Supports Salla, Zid, Noon, Amazon.sa/ae, Jarir, Extra, and GCC online stores).

## `defaultCurrency` (type: `string`):

Target GCC currency for price normalization.

## `captureEvidenceScreenshot` (type: `boolean`):

Captures a clean, timestamped screenshot of the competitor's price tag as tamper-proof evidence for MAP enforcement and parity verification.

## `alertOnPriceDropOnly` (type: `boolean`):

If enabled, only competitor discounts / price cuts will be flagged as critical alerts.

## `minChangeThresholdPercent` (type: `integer`):

Only trigger alerts if price changes by at least this percentage (e.g., 5 for >= 5% change). Set to 0 to capture all changes.

## `webhookUrl` (type: `string`):

Optional: Receive instant push notifications with screenshot proof in Slack, Discord, or custom webhook endpoint whenever a competitor adjusts their price.

## `proxyConfiguration` (type: `object`):

Rotating proxies ensure unblocked access to GCC e-commerce stores without IP rate limits.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.jarir.com/sa-en/apple-iphone-16-pro-smartphones-644755.html",
    "https://www.extra.com/en-sa/mobiles-tablets/mobiles/iphone/apple-iphone-16-pro-128gb-desert-titanium/p/100371908"
  ],
  "defaultCurrency": "SAR",
  "captureEvidenceScreenshot": true,
  "alertOnPriceDropOnly": false,
  "minChangeThresholdPercent": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

JSON items containing product titles, current/original prices, stock availability, price delta, and timestamped screenshot URLs.

# 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 = {
    "productUrls": [
        "https://www.jarir.com/sa-en/apple-iphone-16-pro-smartphones-644755.html",
        "https://www.extra.com/en-sa/mobiles-tablets/mobiles/iphone/apple-iphone-16-pro-128gb-desert-titanium/p/100371908"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tufaifx/gcc-price-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 = { "productUrls": [
        "https://www.jarir.com/sa-en/apple-iphone-16-pro-smartphones-644755.html",
        "https://www.extra.com/en-sa/mobiles-tablets/mobiles/iphone/apple-iphone-16-pro-128gb-desert-titanium/p/100371908",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tufaifx/gcc-price-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 '{
  "productUrls": [
    "https://www.jarir.com/sa-en/apple-iphone-16-pro-smartphones-644755.html",
    "https://www.extra.com/en-sa/mobiles-tablets/mobiles/iphone/apple-iphone-16-pro-128gb-desert-titanium/p/100371908"
  ]
}' |
apify call tufaifx/gcc-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tufaifx/gcc-price-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/7oJJneA4wrQB0oLBx/builds/k0JcJMEotNUGK366n/openapi.json
