# Panda بنده Groceries Scraper - Saudi Products & Prices (`boring_internet_explorer/panda-scraper`) Actor

Scrape product data from Panda بنده (panda.sa), Saudi Arabia's grocery and retail chain. Extract names, descriptions, brands, prices, discounts, sizes, barcodes, stock status, categories and images from any category or search page, in English or Arabic.

- **URL**: https://apify.com/boring\_internet\_explorer/panda-scraper.md
- **Developed by:** [Boring Internet Explorer](https://apify.com/boring_internet_explorer) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## 🛒 Panda بنده Market & Groceries Scraper

Scrapes structured product data from **Panda** (`panda.sa`) — one of Saudi Arabia's largest grocery and retail chains. Given a Panda category or search URL, the scraper collects product information and returns structured data including names, descriptions, brands, prices, discounts, sizes, barcodes, stock status, and images.

### Why use this scraper?

Panda's online store covers food, beverages, household, beauty, baby, electronics, and more, with prices and promotions that change often. Collecting this data manually is not feasible at scale. This scraper provides clean, structured records that can be used for:

- 💰 Tracking grocery and retail prices across categories and keywords.
- 🏷️ Monitoring promotions using original price and discount labels.
- 📦 Building product catalogs with brands, sizes, units, barcodes, and SKUs.
- 🖼️ Enriching e-commerce databases with product descriptions and images.
- 📊 Powering price intelligence dashboards and market research tools.
- 🤖 Feeding AI and enrichment pipelines with structured retail data.

### Supported URL types

| Type     | Example                                   |
| -------- | ----------------------------------------- |
| Category | `https://panda.sa/en/plp/Yz04NTYmcD0zNDA` |
| Search   | `https://panda.sa/en/plp/cz1kZQ`          |

Any `panda.sa` URL containing `/plp/` is supported, in English (`/en/`) or Arabic (`/ar/`).

### Input fields

| Field                | Type    | Description                                                    |
| -------------------- | ------- | -------------------------------------------------------------- |
| `startUrls`          | array   | Panda category or search URLs to scrape.                       |
| `maxItems`           | integer | Maximum number of items to scrape per start URL. Default: `5`. |
| `proxyConfiguration` | object  | Proxy settings. No proxy is used by default.                   |

### Example input

```json
{
  "startUrls": [{ "url": "https://panda.sa/en/plp/cz1kZQ" }],
  "maxItems": 5,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output

Each product variety (size/pack) is stored as one record in the dataset.

### Example output

```json
{
  "scrapedAt": "2026-09-30T19:53:29.621Z",
  "url": "https://panda.sa/en/p/32625.panda-facial-tissue-refill-10x200",
  "id": 32625,
  "productId": 44835,
  "name": "Panda Facial Tissue Refill 10X200",
  "description": "Facial tissue refills with 200 tissues per pack. The 10-pack provides 2,000 tissues in total, making it a convenient stock-up size for everyday home use.",
  "brand": "Panda",
  "category": "Tissues",
  "categoryId": 414,
  "parentCategoryId": 273,
  "price": 20.99,
  "originalPrice": 33.99,
  "discountLabel": "38% Off",
  "unit": "Pieces",
  "size": "10",
  "barcode": "6281174012250",
  "sku": 999812325,
  "inStock": true,
  "images": ["https://images.todoorstep.com/product/999812325/Ar.jpg?t=1757251413"]
}
```

### Field reference

| Field              | Description                                        |
| ------------------ | -------------------------------------------------- |
| `scrapedAt`        | Timestamp of when the item was scraped (ISO 8601). |
| `url`              | Product page URL.                                  |
| `id`               | Product variety ID (used in the product URL).      |
| `productId`        | Parent product ID.                                 |
| `name`             | Product name.                                      |
| `description`      | Product description. `null` if not set.            |
| `brand`            | Brand name. `null` if not set.                     |
| `category`         | Category name.                                     |
| `categoryId`       | Category ID.                                       |
| `parentCategoryId` | Parent category ID. `null` if none.                |
| `price`            | Current price in SAR.                              |
| `originalPrice`    | Price before discount. `null` if not discounted.   |
| `discountLabel`    | Discount label, e.g. `"38% Off"`. `null` if none.  |
| `unit`             | Unit of measure, e.g. `"Pieces"`, `"gm"`.          |
| `size`             | Size value for the unit.                           |
| `barcode`          | Product barcode.                                   |
| `sku`              | Product SKU.                                       |
| `inStock`          | `true` if the product is in stock.                 |
| `images`           | Product image URLs.                                |

### ❓ FAQ

**What types of URLs can I provide?**

Category and search URLs from `panda.sa` that contain `/plp/`. Both English (`/en/`) and Arabic (`/ar/`) URLs are supported.

**How do I get a search or category URL?**

Open a category or run a search on panda.sa and copy the address from your browser, e.g. `https://panda.sa/en/plp/cz1kZQ`.

**Is `maxItems` a global limit?**

No. It applies to each start URL separately.

**Why do I get more than one item for the same product?**

Each size or pack variety is returned as its own item, with its own price, barcode, SKU, and URL. Items from the same product share the same `productId`.

**Are prices in Saudi Riyals?**

Yes, all prices are in SAR.

**Do I need a proxy?**

No. The scraper works without a proxy by default. You can enable one in the input if you need it.

***

### 🔗 Want More Data in the MENA Market?

#### If you found this scraper useful, check out our other scrapers:

[Lulu Hypermarket Scraper](https://apify.com/boring_internet_explorer/lulu-scraper) - Extract rich product data from Lulu Hypermarket across KSA, UAE, Qatar, Oman, Kuwait & Bahrain.

[Carrefour Scraper](https://apify.com/boring_internet_explorer/carrefour-scraper) - Scrape product data from Carrefour across 7 markets — KSA, UAE, Egypt, Qatar, Pakistan, Lebanon, and Kenya.

[Ninja Product Scraper](https://apify.com/boring_internet_explorer/Ninja-product-scraper) - Extract product data from ananinja.com — prices, stock availability, brands, images, and categories for groceries, pharmacy, and beauty.

[eXtra Product Scraper](https://apify.com/boring_internet_explorer/extra-scraper) - Extract product data from extra.com — prices, discounts, stock availability, brands, images, and ratings.

[Jarir Product Scraper](https://apify.com/boring_internet_explorer/jarir-scraper) - Scrape product data from jarir.com, the GCC's leading retailer for electronics, books and office supplies.

[Sharaf DG Scraper](https://apify.com/boring_internet_explorer/sharafDG-scraper) - Scrape product data from Sharaf DG across Saudi Arabia, UAE, Egypt, Bahrain, and Oman.

[Namshi Scraper](https://apify.com/boring_internet_explorer/namshi-scraper) - Scrape fashion product data from Namshi for Saudi Arabia, UAE, Kuwait, Qatar, Bahrain and Oman.

[Soum Product Scraper](https://apify.com/boring_internet_explorer/soum-scraper) - Scrape detailed product data from soum.sa, Saudi Arabia's marketplace for new and used products.

[Haraj Scraper](https://apify.com/boring_internet_explorer/haraj-scraper) - Scrape listings from Haraj (haraj.com.sa), Saudi Arabia's largest classifieds platform.

[Dubizzle Saudi Arabia Scraper](https://apify.com/boring_internet_explorer/dubizzle-scraper) - Scrape listing data from Dubizzle Saudi Arabia — cars, properties and more.

[OpenSooq Scraper](https://apify.com/boring_internet_explorer/opensooq-scraper) - Scrape structured listing data from OpenSooq, the largest classifieds marketplace in MENA.

***

### 🛠️ Need a custom extension?

Need this scraper adapted to your use case — extra fields, additional filters, a different output format, or a new category? Just reach out and we'll be happy to help.

***

# Actor input Schema

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

Panda category or search URLs (any panda.sa URL containing /plp/)

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

The maximum number of items to fetch per start URL

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

Your proxy configuration from Apify

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://panda.sa/en/plp/cz1kZQ"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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://panda.sa/en/plp/cz1kZQ"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("boring_internet_explorer/panda-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://panda.sa/en/plp/cz1kZQ" }] }

# Run the Actor and wait for it to finish
run = client.actor("boring_internet_explorer/panda-scraper").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 '{
  "startUrls": [
    {
      "url": "https://panda.sa/en/plp/cz1kZQ"
    }
  ]
}' |
apify call boring_internet_explorer/panda-scraper --silent --output-dataset

```

## MCP server setup

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

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/AatMroTLxzyVN8gqn/builds/XJGnWoyAbI8Hayuhn/openapi.json
