# Jarir.com Product Scraper (`scrapyspider/jarir-com-scraper`) Actor

Scrapes product listings and detail pages from Jarir.com — Saudi Arabia's largest electronics retailer. Extracts product name, price, images, SKU, brand, specs, and stock status.

- **URL**: https://apify.com/scrapyspider/jarir-com-scraper.md
- **Developed by:** [ScrapySpider](https://apify.com/scrapyspider) (community)
- **Categories:** E-commerce
- **Stats:** 3 total users, 2 monthly users, 79.2% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

### Jarir.com Product Scraper

Scrapes product listings and detail pages from Jarir.com — Saudi Arabia's largest electronics and office supplies retailer — and returns structured JSON with prices, images, SKU, specifications, and stock status. No account or cookies required.

- No Jarir.com account or cookies needed
- Supports search queries (e.g., "iPhone") and direct category/search URLs
- Extracts full product specs, both original and discounted prices
- Captures all product images (main + gallery)
- Handles infinite-scroll listing pages automatically
- Exports as JSON, CSV, or Excel

#### What data does it extract?

Each result contains:

**Product info:** `productName`, `productUrl`, `brand`, `sku`, `category`

**Pricing:** `originalPrice`, `discountedPrice`

**Media:** `mainImageUrl`, `additionalImages` (array of all gallery images)

**Availability:** `stockAvailability`

**Specs:** `specifications` (key-value object with all table rows, e.g., RAM, Storage, Color)

**Meta:** `extractionDate`

All data is exported as JSON, CSV, or Excel via Apify's dataset export.

#### Use cases

- **Price monitoring:** Track price drops and discount events on electronics across Jarir.com
- **Market research:** Analyze product availability, brand distribution, and pricing in the Saudi retail market
- **Competitor benchmarking:** Compare product specs and pricing for electronics importers or distributors
- **Inventory enrichment:** Enrich internal product catalogs with SKUs, images, and specifications from Jarir
- **E-commerce comparison:** Build comparison tools for Saudi consumers across categories (phones, laptops, TVs)
- **Lead generation:** Identify brand gaps or out-of-stock products to pitch distributors or suppliers

#### How to use

1. Click **Try for free** above
2. In the **Input** tab, either:
   - Enter a **Search Query** (e.g., `Samsung Galaxy`) — the Actor builds the search URL automatically
   - Or paste one or more Jarir.com **Start URLs** (search result or category pages)
3. Optionally set **Max Requests Per Crawl** to limit the run size (default: 500)
4. Click **Start** and wait for the run to complete (a typical search result page with 50 products takes 3–6 minutes)
5. Download your results as JSON, CSV, or Excel from the **Output** tab

#### Input parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `startUrls` | Array of URLs | No | — | Jarir.com search result or category page URLs. Takes priority over `searchQuery` if both are provided. Example: `https://www.jarir.com/sa-en/catalogsearch/result?search=Xiaomi` |
| `searchQuery` | String | No | — | Search keyword to scrape (e.g., `iPhone`, `Samsung TV`). The Actor constructs the Jarir.com search URL. Ignored if `startUrls` are set. |
| `maxRequestsPerCrawl` | Integer | No | `500` | Maximum number of pages the Actor will crawl. Set to `0` for unlimited. |
| `proxyConfiguration` | Object | No | `{ useApifyProxy: false }` | Proxy settings. Apify residential proxies are recommended for large runs to avoid IP blocks. |

#### Output example

```json
{
  "productName": "Xiaomi Redmi Note 13 Pro 5G - 8GB RAM, 256GB - Black",
  "productUrl": "https://www.jarir.com/sa-en/xiaomi-redmi-note-13-pro-5g-mobile-8gb-256gb-black-1115459.html",
  "mainImageUrl": "https://www.jarir.com/media/catalog/product/1/1/1115459_1.jpg",
  "additionalImages": [
    "https://www.jarir.com/media/catalog/product/1/1/1115459_1.jpg",
    "https://www.jarir.com/media/catalog/product/1/1/1115459_2.jpg"
  ],
  "originalPrice": "SAR 799.00",
  "discountedPrice": "SAR 649.00",
  "sku": "1115459",
  "brand": "Xiaomi",
  "category": "Home Electronics Mobiles & Tablets",
  "stockAvailability": "In Stock",
  "specifications": {
    "Brand": "Xiaomi",
    "SKU": "1115459",
    "RAM": "8 GB",
    "Storage": "256 GB",
    "Color": "Black",
    "Operating System": "Android",
    "Battery Capacity": "5000 mAh"
  },
  "extractionDate": "2026-04-25T08:30:00.000Z"
}
````

#### Pricing

This Actor is **free to use** — you only pay for Apify platform compute time and proxy usage (if enabled).

A typical run scraping 100 product detail pages costs approximately **$0.05–$0.15** in Apify platform credits depending on memory and proxy settings.

New Apify accounts receive **$5 in free credits** — enough for hundreds of product scrapes.

#### Technical notes

- **No account needed:** The Actor does not require a Jarir.com login or session cookies
- **Infinite scroll:** Listing pages are fully scrolled to load all products before enqueueing
- **Anti-bot measures:** The Actor spoofs navigator properties and sets realistic browser headers to reduce detection
- **Large runs:** For scraping 500+ products, consider enabling Apify Proxy (residential) in the proxy configuration to avoid IP rate limits
- **Saudi Arabia locale:** The Actor targets the `sa-en` (Saudi Arabia, English) locale by default; Arabic locale URLs are not currently supported
- **Spec availability:** Specifications may be partial for some product types — the Actor extracts whatever is present in the spec table

#### Support

Have questions or found a bug? Reach out:

- **Email:** ScrapySpider@protonmail.com
- **Website:** ScrapySpider.com
- **Apify:** Open a support issue on this Actor page
- **Response time:** Within 24–48 hours on weekdays

# Actor input Schema

## `startUrls` (type: `array`):

One or more Jarir.com search result or category page URLs to scrape. If both Start URLs and Search Query are provided, Start URLs take priority.

## `searchQuery` (type: `string`):

Enter a search term (e.g. "iPhone", "Samsung TV") and the Actor will build the Jarir.com search URL automatically. Ignored if Start URLs are provided.

## `maxRequestsPerCrawl` (type: `integer`):

Maximum number of pages the Actor will visit. Increase for larger runs. Set to 0 for unlimited.

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

Proxy settings for the crawler. Use Apify Proxy or your own proxies to avoid IP blocks on large runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.jarir.com/sa-en/catalogsearch/result?search=Xiaomi"
    }
  ],
  "searchQuery": "iPhone",
  "maxRequestsPerCrawl": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

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

No description

## `exportedData` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.jarir.com/sa-en/catalogsearch/result?search=Xiaomi"
        }
    ],
    "maxRequestsPerCrawl": 8
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapyspider/jarir-com-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 = {
    "startUrls": [{ "url": "https://www.jarir.com/sa-en/catalogsearch/result?search=Xiaomi" }],
    "maxRequestsPerCrawl": 8,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapyspider/jarir-com-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 '{
  "startUrls": [
    {
      "url": "https://www.jarir.com/sa-en/catalogsearch/result?search=Xiaomi"
    }
  ],
  "maxRequestsPerCrawl": 8
}' |
apify call scrapyspider/jarir-com-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Jarir.com Product Scraper",
        "description": "Scrapes product listings and detail pages from Jarir.com — Saudi Arabia's largest electronics retailer. Extracts product name, price, images, SKU, brand, specs, and stock status.",
        "version": "1.0",
        "x-build-id": "Q3j5z8JZS4YgsyJJm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapyspider~jarir-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapyspider-jarir-com-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/scrapyspider~jarir-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapyspider-jarir-com-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/scrapyspider~jarir-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapyspider-jarir-com-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": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "One or more Jarir.com search result or category page URLs to scrape. If both Start URLs and Search Query are provided, Start URLs take priority.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Enter a search term (e.g. \"iPhone\", \"Samsung TV\") and the Actor will build the Jarir.com search URL automatically. Ignored if Start URLs are provided."
                    },
                    "maxRequestsPerCrawl": {
                        "title": "Max Requests Per Crawl",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of pages the Actor will visit. Increase for larger runs. Set to 0 for unlimited.",
                        "default": 500
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for the crawler. Use Apify Proxy or your own proxies to avoid IP blocks on large runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
