# Zid Store Catalog Monitor (`madwezza/zid-store-catalog-monitor`) Actor

Extract product catalogs, prices, availability, images, and metadata from public Zid storefronts for MENA e-commerce monitoring.

- **URL**: https://apify.com/madwezza/zid-store-catalog-monitor.md
- **Developed by:** [Omar Elwaziry](https://apify.com/madwezza) (community)
- **Categories:** E-commerce, Agents, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 record scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Zid Store Catalog Monitor

Extract clean product catalog data from public **Zid** storefronts, including prices, availability, images, SKUs, categories, descriptions, and product URLs.

### What this Actor does

Zid Store Catalog Monitor turns public Zid storefront product pages into structured data you can use for price monitoring, catalog tracking, market research, and e-commerce analysis.

Provide one or more Zid storefront URLs, and the Actor will discover product listing pages, follow pagination, optionally visit product detail pages, and return normalized product records.

### Who it is for

- E-commerce teams monitoring competitor catalogs
- Brands tracking reseller listings and prices
- Agencies managing market intelligence for clients
- Analysts building MENA e-commerce datasets
- Developers and AI agents that need structured product data instead of raw HTML

### Data extracted

Each product record can include:

- Product name
- SKU
- Category
- Description
- Price
- Currency
- Availability
- Image URLs
- Product URL
- Store hostname and store name
- Listing position
- Scrape timestamp

### Example input

```json
{
  "storeUrls": ["https://oav.zid.store/en/products"],
  "maxProductsPerStore": 25,
  "includeDetails": true,
  "maxDetailItems": 25,
  "politeDelayMs": 1000,
  "requestTimeoutSecs": 30
}
````

### Input options

| Field | Type | Description |
|---|---:|---|
| `storeUrls` | array | Zid storefront URLs or direct product-list URLs. |
| `maxProductsPerStore` | integer | Maximum number of products to return per store. |
| `includeDetails` | boolean | Visit product detail pages for richer fields such as SKU, price, description, availability, and images. |
| `maxDetailItems` | integer | Maximum number of detail pages to fetch per store. |
| `politeDelayMs` | integer | Delay between requests, useful for respectful collection on larger catalogs. |
| `requestTimeoutSecs` | integer | Timeout for each page request. |

### Example output

```json
{
  "id": "zid-oav-zid-store-products-41-1",
  "source_key": "zid",
  "source": "Zid public storefront",
  "platform": "zid",
  "store_url": "https://oav.zid.store/en/products",
  "store_host": "oav.zid.store",
  "store_name": "Oav",
  "product_id": "Z.1780303620965877",
  "product_name": "41",
  "sku": "Z.1780303620965877",
  "category": "العبايات | abayas",
  "description": "عباية شيفون مبطنة...",
  "price": 490,
  "currency": "SAR",
  "availability": "InStock",
  "image_urls": ["https://media.zid.store/...jpeg"],
  "position": 1,
  "product_url": "https://oav.zid.store/products/41-1",
  "url": "https://oav.zid.store/products/41-1",
  "source_url": "https://oav.zid.store/en/products",
  "detail_fetched": true,
  "scraped_at": "2026-01-01T00:00:00.000Z"
}
```

### Common use cases

- Monitor competitor prices and stock status
- Track new products added to public Zid stores
- Export product catalogs into spreadsheets, BI tools, or databases
- Build market research datasets for Saudi and MENA e-commerce
- Feed AI agents with normalized storefront data

### Tips for best results

- Use a direct product-list URL when possible, for example `https://example.zid.store/products` or `https://example.zid.store/en/products`.
- Keep `includeDetails` enabled if you need price, SKU, category, availability, descriptions, and images.
- Lower `maxDetailItems` or increase `politeDelayMs` for very large stores.
- If a store returns no products, check that the storefront is public and visible without login.

### Limitations

This Actor collects public storefront pages visible without login. It does not access private stores, customer accounts, checkout pages, paywalled content, or pages protected by CAPTCHA or other access controls.

Output completeness depends on what the public storefront exposes. Some stores may not provide every field for every product.

### Changelog

- `0.1` Initial public Zid storefront catalog monitor.

# Actor input Schema

## `storeUrls` (type: `array`):

Public Zid storefront URLs or product-list URLs. Example: https://oav.zid.store/en/products

## `maxProductsPerStore` (type: `integer`):

Maximum products to emit per storefront.

## `includeDetails` (type: `boolean`):

Fetch each public product detail page to extract price, SKU, category, availability, description, and images from JSON-LD.

## `maxDetailItems` (type: `integer`):

Maximum product detail pages to fetch per store when detail fetching is enabled.

## `politeDelayMs` (type: `integer`):

Delay between source requests. Keep this non-zero for respectful collection.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout.

## `userAgent` (type: `string`):

Descriptive User-Agent for polite public-page collection. Add your contact URL/email before publishing.

## Actor input object example

```json
{
  "storeUrls": [
    "https://oav.zid.store/en/products"
  ],
  "maxProductsPerStore": 25,
  "includeDetails": true,
  "maxDetailItems": 25,
  "politeDelayMs": 1000,
  "requestTimeoutSecs": 30,
  "userAgent": "ZidStoreCatalogMonitor/0.1 (+https://apify.com)"
}
```

# Actor output Schema

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

Default dataset containing normalized public Zid product catalog records.

## `runStats` (type: `string`):

Summary of parsed, emitted, and failed storefront counts.

# 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 = {
    "storeUrls": [
        "https://oav.zid.store/en/products"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("madwezza/zid-store-catalog-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 = { "storeUrls": ["https://oav.zid.store/en/products"] }

# Run the Actor and wait for it to finish
run = client.actor("madwezza/zid-store-catalog-monitor").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 '{
  "storeUrls": [
    "https://oav.zid.store/en/products"
  ]
}' |
apify call madwezza/zid-store-catalog-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=madwezza/zid-store-catalog-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zid Store Catalog Monitor",
        "description": "Extract product catalogs, prices, availability, images, and metadata from public Zid storefronts for MENA e-commerce monitoring.",
        "version": "0.1",
        "x-build-id": "wbepPGP2hcqMT70ws"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/madwezza~zid-store-catalog-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-madwezza-zid-store-catalog-monitor",
                "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/madwezza~zid-store-catalog-monitor/runs": {
            "post": {
                "operationId": "runs-sync-madwezza-zid-store-catalog-monitor",
                "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/madwezza~zid-store-catalog-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-madwezza-zid-store-catalog-monitor",
                "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": {
                    "storeUrls": {
                        "title": "Zid store URLs",
                        "type": "array",
                        "description": "Public Zid storefront URLs or product-list URLs. Example: https://oav.zid.store/en/products",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "https://oav.zid.store/en/products"
                        ]
                    },
                    "maxProductsPerStore": {
                        "title": "Max products per store",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum products to emit per storefront.",
                        "default": 25
                    },
                    "includeDetails": {
                        "title": "Fetch product detail pages",
                        "type": "boolean",
                        "description": "Fetch each public product detail page to extract price, SKU, category, availability, description, and images from JSON-LD.",
                        "default": true
                    },
                    "maxDetailItems": {
                        "title": "Max detail pages per store",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum product detail pages to fetch per store when detail fetching is enabled.",
                        "default": 25
                    },
                    "politeDelayMs": {
                        "title": "Polite delay in milliseconds",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Delay between source requests. Keep this non-zero for respectful collection.",
                        "default": 1000
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout.",
                        "default": 30
                    },
                    "userAgent": {
                        "title": "User-Agent",
                        "type": "string",
                        "description": "Descriptive User-Agent for polite public-page collection. Add your contact URL/email before publishing.",
                        "default": "ZidStoreCatalogMonitor/0.1 (+https://apify.com)"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
