# Torob Product Sellers Scraper (`revitalizing_rock/torob-product-sellers`) Actor

Given a Torob product page URL, returns the full list of sellers and their prices.

- **URL**: https://apify.com/revitalizing\_rock/torob-product-sellers.md
- **Developed by:** [Armin MHF](https://apify.com/revitalizing_rock) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 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

## Torob Product Sellers Scraper

Extract the **full list of sellers and their prices** from any product page on [torob.com](https://torob.com) — Iran's largest price-comparison search engine. Give it a product URL, get back a clean dataset where every row is one seller with their price, availability, and a buy link.

### What does Torob Product Sellers Scraper do?

This actor takes a single Torob product page URL and returns the **complete list of merchants** offering that product, along with each seller's price in both **Toman and Rial**, stock availability, and the buy/redirect link Torob uses for that listing.

It parses Torob's structured `Product` JSON-LD block (the same data Google uses to render rich snippets), which makes the extraction fast, robust, and resilient to frontend redesigns. Behind the scenes it uses Crawlee's `CheerioCrawler`, so there's no headless browser overhead — typical runs finish in **1–2 seconds**.

Run it on demand, schedule it on the Apify platform, or call it via the [Apify API](https://docs.apify.com/api/v2) to monitor a product's price across all sellers automatically.

### Why use this actor?

- **Price intelligence** — track competitor pricing for a SKU across 30+ Iranian online stores at once.
- **Stock monitoring** — see who currently has the product `InStock` and who doesn't.
- **Deal hunting** — find the cheapest seller programmatically (the dataset includes `lowPriceRial` and `highPriceRial` per product so you can spot outliers in one shot).
- **Affiliate/comparison sites** — pull a fresh seller list whenever your own product page is viewed.

### How to use Torob Product Sellers Scraper

1. Open the actor's **Input** tab.
2. Paste a Torob product page URL — anything that looks like `https://torob.com/p/<uuid>/<slug>/`.
3. (Optional) Toggle **Apify Proxy** if you want the request routed through Apify's proxy network.
4. Click **Start**.
5. When the run finishes, open the **Storage → Dataset** tab. Each row is one seller. Download as JSON, CSV, Excel, or HTML.

### Input

The input is a single Torob product URL.

```json
{
    "url": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/"
}
````

| Field                | Type   | Required | Description                              |
| -------------------- | ------ | -------- | ---------------------------------------- |
| `url`                | string | yes      | Torob product page URL                   |
| `proxyConfiguration` | object | no       | Apify Proxy configuration (default: off) |

### Output

The actor pushes **one item per seller** to the default dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example item:

```json
{
    "productName": "اره زنجیری بنزینی هیوندای مدل TECHNO745 تیغه ۴۵ سانت",
    "productUrl": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/...",
    "productSku": "16080a39-171a-4b75-8b76-fcd95e26983e",
    "brand": "هیوندای",
    "image": "https://image.torob.com/.../560x560.webp",
    "sellerName": "ادوات صنعتی کشاورزی حداد",
    "priceRial": 190000000,
    "priceToman": 19000000,
    "priceCurrency": "IRR",
    "availability": "InStock",
    "sellerLinkUrl": "https://api.torob.com/v4/product-page/redirect/?...",
    "priceValidUntil": "2026-6-19",
    "lowPriceRial": 190000000,
    "highPriceRial": 260000000,
    "offerCount": 30
}
```

#### Data fields

| Field             | Description                                                                          |
| ----------------- | ------------------------------------------------------------------------------------ |
| `productName`     | Persian product title as shown on Torob                                              |
| `productUrl`      | Canonical product URL                                                                |
| `productSku`      | Torob's internal product UUID                                                        |
| `brand`           | Brand name                                                                           |
| `image`           | Main product image URL                                                               |
| `sellerName`      | The merchant name                                                                    |
| `priceRial`       | Price in Iranian Rial (the unit Torob uses internally)                               |
| `priceToman`      | Same price converted to Toman (`priceRial / 10`) — what shoppers usually compare     |
| `priceCurrency`   | Always `IRR`                                                                         |
| `availability`    | `InStock`, `OutOfStock`, … (with the `schema.org/` prefix stripped)                  |
| `sellerLinkUrl`   | The Torob redirect link that takes you to the seller's product page                  |
| `priceValidUntil` | Date until which Torob claims the price is valid                                     |
| `lowPriceRial`    | Cheapest price among all sellers for this product (denormalized for convenience)     |
| `highPriceRial`   | Highest price among all sellers                                                      |
| `offerCount`      | Total number of seller offers reported by Torob                                      |

### Cost estimation

This actor is extremely cheap to run because it only does **one HTTP request per Torob product** and parses static HTML (no browser). Expect a single run to finish in 1–2 seconds and consume a tiny fraction of a Compute Unit. The Apify free tier covers thousands of runs per month.

### Tips & advanced options

- **Schedule it** to monitor a product's price daily and feed the dataset into a BI tool.
- **Chain it** with another actor (or your own code) that supplies a list of product URLs — call this actor once per URL.
- If a particular run is empty, check that the URL still resolves to a Torob product page and not to a search/category page; this actor expects the per-product page (`/p/<uuid>/...`).

### FAQ, disclaimers & support

- **Is it legal?** The actor only reads publicly available product information that Torob ships in its HTML for search engines. You are responsible for respecting Torob's Terms of Service and any applicable rate limits.
- **No personal data** is collected — only public product and seller metadata.
- **Frontend changes?** The actor relies on Torob's JSON-LD block, which is part of their SEO contract with search engines and changes very rarely. If extraction breaks, please open an issue.

# Actor input Schema

## `url` (type: `string`):

URL of a Torob product page, e.g. https://torob.com/p/<uuid>/<slug>/. The actor will fetch this page and extract every seller listed on it along with its price.

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

Optional Apify Proxy configuration. Leave disabled to use direct connection.

## Actor input object example

```json
{
  "url": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "url": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("revitalizing_rock/torob-product-sellers").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 = { "url": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/" }

# Run the Actor and wait for it to finish
run = client.actor("revitalizing_rock/torob-product-sellers").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 '{
  "url": "https://torob.com/p/16080a39-171a-4b75-8b76-fcd95e26983e/"
}' |
apify call revitalizing_rock/torob-product-sellers --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Torob Product Sellers Scraper",
        "description": "Given a Torob product page URL, returns the full list of sellers and their prices.",
        "version": "0.1",
        "x-build-id": "IruBSNuaPOtKQk9rH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/revitalizing_rock~torob-product-sellers/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-revitalizing_rock-torob-product-sellers",
                "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/revitalizing_rock~torob-product-sellers/runs": {
            "post": {
                "operationId": "runs-sync-revitalizing_rock-torob-product-sellers",
                "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/revitalizing_rock~torob-product-sellers/run-sync": {
            "post": {
                "operationId": "run-sync-revitalizing_rock-torob-product-sellers",
                "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",
                "required": [
                    "url"
                ],
                "properties": {
                    "url": {
                        "title": "Torob product URL",
                        "pattern": "^https?://(www\\.)?torob\\.com/.*",
                        "type": "string",
                        "description": "URL of a Torob product page, e.g. https://torob.com/p/<uuid>/<slug>/. The actor will fetch this page and extract every seller listed on it along with its price."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy configuration. Leave disabled to use direct connection.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
