# Hepsiburada Scraper - Products, Reviews & Q\&A (`parsebird/hepsiburada-scraper`) Actor

Scrape Hepsiburada products by search or URL: prices, ratings, merchant info, variants, delivery, reviews, and Q\&A. Filter by price, rating, and discount. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/hepsiburada-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 product listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### Hepsiburada Scraper

Extract product data from [Hepsiburada](https://www.hepsiburada.com), Turkey's largest online marketplace, without writing a single line of scraping code. The **Hepsiburada Scraper** collects prices, ratings, merchant details, variants, delivery information, customer reviews, and Q\&A from search results, category pages, or individual product URLs — and hands it back as clean, structured JSON.

<table><tr>
<td style="border-left:4px solid #FF6000;padding:12px 16px;font-weight:600">
Search by keyword or paste direct URLs, filter by price, rating, discount, delivery speed, and merchant type, then optionally enrich every result with full variant, delivery, and return-policy detail plus customer reviews and Q&A.
</td>
</tr></table>

##### Copy to your AI assistant

```
Use the Apify actor "parsebird/hepsiburada-scraper" to scrape Hepsiburada.com. Call it with the ApifyClient: from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/hepsiburada-scraper").call(run_input={"queries": ["iphone 15"], "limit": 25, "enrich_data": True, "get_reviews": True, "max_reviews": 10}); items = client.dataset(run["defaultDatasetId"]).list_items().items. Key inputs: queries (array of search keywords), startUrls (array of Hepsiburada search/category/product URLs), min_price/max_price (TRY), min_rating ("1"-"4"), sort_by (recommended/lowest_price/highest_price/best_sellers/most_reviewed/top_rated/highest_discount/newest_arrivals), gender (male/female/unisex/boys/girls), fast_delivery/discounted/women_entrepreneur_products/official_distibutor (booleans), enrich_data (boolean, fetches full product detail), get_reviews/max_reviews, get_qna/max_qna, limit (per query/URL, default 10). Output: product records (title, brand, pricing, merchant, media, availability, delivery, variants, reviews summary) in the default dataset, plus optional review and Q&A records saved to their own "reviews" and "qna" result tables in the same run. Full API spec: https://apify.com/parsebird/hepsiburada-scraper/api. Get a token: https://console.apify.com/account/integrations.
```

### What does Hepsiburada Scraper do?

Hepsiburada Scraper is a **Hepsiburada API alternative** for anyone who needs product, pricing, or review data at scale — price monitoring tools, market research, dropshipping catalogs, or LLM/agent workflows that need structured Turkish e-commerce data. It works as a **Hepsiburada product scraper**, a **Hepsiburada price tracker**, and a **Hepsiburada review scraper** in one actor:

- 🔎 Collect products by search keyword, category URL, search-result URL, or a direct product link
- 💰 Filter by price range, minimum rating, discount, delivery speed, women entrepreneur products, and official distributor
- 🧩 Enrich results with full variant groups, competing merchant listings, delivery and return-policy detail
- ⭐ Pull customer reviews with star ratings, verified-purchase flags, and per-feature ratings
- ❓ Pull published questions and merchant answers per product
- 📊 Sort by price, rating, review count, or discount before results are saved

Because it runs on the Apify platform, every run can be **scheduled** to repeat daily or hourly for price monitoring, triggered through the **Apify API**, or wired into **Make, Zapier, and other integrations** — with results exported as JSON, CSV, Excel, HTML, or XML. New Apify accounts get a **free trial** with credits to test the actor before paying for usage.

### What data can you extract from Hepsiburada?

| Field | Description |
|---|---|
| `title`, `brand`, `category` | Product title, brand, and leaf category |
| `pricing.current_price`, `discount_rate`, `installment_count` | Current price in TRY, discount rate, installment options |
| `merchant.name`, `merchant.rating` | Selling merchant and its rating |
| `media.image_urls` | Full product image gallery |
| `availability.in_stock`, `delivery.shipment_day` | Stock status and estimated shipping day |
| `attributes.variant_summary.variants` | Color/size/capacity variants with per-variant price and stock |
| `reviews.rating`, `reviews.count` | Aggregate customer rating and review count |
| `review.content`, `review.rating` (review records) | Individual customer review text and star rating |
| `question.content`, `answers[]` (Q\&A records) | Customer question and merchant answers |

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `queries` | array of strings | — | Search keywords; each is collected separately |
| `startUrls` | array of strings | — | Hepsiburada search, category, or product URLs |
| `min_price` / `max_price` | number | — | Price bounds in TRY |
| `min_rating` | string ("1"–"4") | — | Minimum customer rating |
| `sort_by` | string | `recommended` | `recommended`, `lowest_price`, `highest_price`, `best_sellers`, `most_reviewed`, `top_rated`, `highest_discount`, `newest_arrivals` |
| `gender` | array of strings | — | `male`, `female`, `unisex`, `boys`, `girls` |
| `fast_delivery` | boolean | `false` | Only products with fast delivery |
| `discounted` | boolean | `false` | Only products with an active discount |
| `women_entrepreneur_products` | boolean | `false` | Only women-entrepreneur listings |
| `official_distibutor` | boolean | `false` | Only official-distributor listings |
| `maximize_coverage` | boolean | `false` | Page deeper to satisfy filters on large result sets |
| `enrich_data` | boolean | `false` | Fetch full product detail (variants, delivery, return policy) |
| `get_reviews` / `max_reviews` | boolean / integer | `false` / `20` | Collect customer reviews per product |
| `get_qna` / `max_qna` | boolean / integer | `false` / `20` | Collect Q\&A per product |
| `limit` | integer | `10` | Max product records per query or direct URL |

`min_rating`, `sort_by` (except `lowest_price`/`highest_price`/`most_reviewed`/`top_rated`), and the four boolean product-attribute filters (`fast_delivery`, `discounted`, `women_entrepreneur_products`, `official_distibutor`, `gender`) rely on data only present on the full product page, so setting any of them automatically enables per-product enrichment and is billed at the **Listing enrichment** rate — see [Pricing](#how-much-does-it-cost-to-scrape-hepsiburada) below.

#### Example inputs

Search-driven run:

```json
{
  "queries": ["iphone 15", "iphone sarj cihazi"],
  "sort_by": "recommended",
  "limit": 25,
  "enrich_data": true
}
```

Direct URL collection:

```json
{
  "startUrls": ["https://www.hepsiburada.com/ara?q=beyzbol%20%C5%9Fapkas%C4%B1"],
  "limit": 20
}
```

Filtered monitoring run:

```json
{
  "queries": ["erkek t-shirt"],
  "min_price": 250,
  "max_price": 750,
  "min_rating": "4",
  "discounted": true,
  "sort_by": "highest_discount",
  "limit": 50
}
```

### How to scrape Hepsiburada

1. Open the [Hepsiburada Scraper](https://apify.com/parsebird/hepsiburada-scraper) page and click **Try for free**.
2. Enter one or more search keywords in `queries`, or paste Hepsiburada URLs into `startUrls`.
3. Set optional filters — price range, minimum rating, discount, delivery speed.
4. Enable `enrich_data`, `get_reviews`, or `get_qna` if you need full product detail, reviews, or Q\&A.
5. Click **Start** and download results as JSON, CSV, or Excel once the run finishes.

### Output example

Products, reviews, and Q\&A are saved to **separate result tables** (the default dataset, plus a `reviews` and a `qna` dataset scoped to the run) instead of one mixed table — every table stays fully structured, with no columns left blank because they belong to a different record type. All three are visible in the run's Storage tab and downloadable independently as JSON, CSV, or Excel.

Product record (default dataset):

```json
{
  "product_id": "HBC00004X9ZCG",
  "variant_id": "HBCV00004X9ZCK",
  "sku": "HBCV00004X9ZCK",
  "url": "https://www.hepsiburada.com/apple-iphone-15-128-gb-mavi-p-HBCV00004X9ZCK",
  "title": "Apple iPhone 15 128 GB Mavi",
  "brand": "Apple",
  "category": "iPhone iOS Telefonlar",
  "pricing": { "current_price": 48399, "current_price_text": "48.399,00", "currency": "TRY" },
  "merchant": { "name": "Hepsiburada", "city": "KOCAELİ", "country": "TÜRKİYE" },
  "reviews": { "rating": 4.8, "count": 12877 },
  "is_enriched": true
}
```

Review record (`reviews` dataset):

```json
{
  "record_type": "review",
  "review_id": "4954a016-9f97-4807-a6de-4f96c4594db5",
  "product": { "sku": "HBCV00004X9ZCH", "title": "iPhone 15 128 GB" },
  "review": { "content": "1 yılın ardından üründen çok memnunum.", "rating": 5, "is_purchase_verified": true },
  "customer": { "display_name": "A*****************" }
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** from the Storage tab or the [Apify API](https://docs.apify.com/api/v2).

### Use cases

- 📈 **Price monitoring** — schedule daily runs to track price and discount changes on a product catalog
- 🛒 **Dropshipping & sourcing** — pull structured product, merchant, and variant data for catalog building
- 🔬 **Market research** — compare pricing, ratings, and merchant mix across a category or keyword set
- 💬 **Voice of customer analysis** — collect reviews and Q\&A to feed sentiment or feature-request analysis
- 🤖 **AI agent & RAG pipelines** — feed structured Hepsiburada data into LLM workflows via the Apify API or MCP

### How it works

1. For each `query`, the actor requests Hepsiburada's search results page and parses the server-rendered product cards (title, price, rating, image, variant count).
2. For each `startUrls` entry, it detects whether the URL is a direct product page or a search/category listing and handles it accordingly.
3. Price, rating, and sort filters are applied to the collected candidates; deeper pages are fetched automatically when `maximize_coverage` is on or a filter needs more candidates to reach `limit`.
4. When `enrich_data` or a detail-dependent filter is set, each candidate's product page is fetched and parsed for full pricing, merchant, variant, delivery, and return-policy detail.
5. When `get_reviews` or `get_qna` is set, the actor calls Hepsiburada's review and Q\&A endpoints per product and saves individual records up to `max_reviews`/`max_qna` into their own `reviews`/`qna` result tables, separate from the product table.
6. All records are pushed as they're collected, so partial results are available even if a run is stopped early.

Hepsiburada is protected by Akamai bot detection; the actor is built to route requests through Apify's proxy network so it keeps working as the site's defenses change.

### How much does it cost to scrape Hepsiburada?

Hepsiburada Scraper uses **pay-per-event pricing** — you only pay for what the run actually produces, plus your [Apify platform usage](https://apify.com/pricing) for compute:

| Event | Price per event | Price per 1,000 |
|---|---|---|
| Product listed | $0.0009 | **$0.90** |
| Listing enrichment | $0.0008 | **$0.80** |
| Review / Q\&A record | $0.0006 | **$0.60** |

A run that collects 100 products with `enrich_data` on, plus 10 reviews each, costs roughly 100 × $0.0009 (listing) + 100 × $0.0008 (enrichment) + 1,000 × $0.0006 (reviews) ≈ **$0.77**. Paid Apify plans get lower per-event pricing tiers automatically. New accounts get a free-trial credit balance to test the actor before spending anything.

### Is it legal to scrape Hepsiburada?

Scraping publicly available data, like product listings and prices on Hepsiburada, is generally legal, but you're responsible for how you use the data and for complying with Hepsiburada's terms of service and applicable law (including Turkish and EU data-protection rules) — especially around personal data such as reviewer names. Read Apify's [legal analysis of web scraping](https://www.apify.com/blog/web-scraping-legality-analysis) for more detail. Never scrape personal data for direct marketing or resale without a legal basis.

### Related actors

- [AliExpress Scraper](https://apify.com/parsebird/aliexpress-scraper) — products and sellers from AliExpress
- [Apify Store](https://apify.com/store?category=ecommerce) — browse more e-commerce scrapers

### FAQ

**Do I need my own proxies?** No — the actor uses Apify's proxy network by default, configured to bypass Hepsiburada's Akamai bot protection out of the box.

**Can I scrape a specific Hepsiburada category instead of a keyword?** Yes — paste the category page URL into `startUrls`; it's paginated the same way as a search query.

**Why does enabling a filter change the price?** Filters like `fast_delivery`, `discounted`, `gender`, `women_entrepreneur_products`, and `official_distibutor` need data only available on the full product page, so they automatically enable per-product enrichment (billed at the Listing enrichment rate).

**Can I schedule recurring runs?** Yes — use Apify's [Scheduler](https://docs.apify.com/platform/schedules) to run this actor daily, hourly, or at any interval for price monitoring.

**Can I access results via API?** Yes — every run and its dataset are available through the [Apify API](https://docs.apify.com/api/v2) and client libraries for [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js).

```python
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/hepsiburada-scraper").call(run_input={"queries": ["iphone 15"], "limit": 25})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["pricing"]["current_price"])
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/hepsiburada-scraper').call({ queries: ['iphone 15'], limit: 25 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.title, i.pricing?.current_price]));
```

**Found a bug or missing field?** Open an issue on the actor's Issues tab — reports are reviewed regularly.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/hepsiburada-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Product-focused search keywords such as brands, models, product types, or categories. Each query is collected separately, up to Limit results per query.

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

Hepsiburada search result, category, or individual product URLs for precise collection from known pages. Product URLs (containing "-p-") are always fetched in full detail (billed at the Listing enrichment rate); search/category URLs are paginated like a query.

## `min_price` (type: `integer`):

Lowest product price to include, in Turkish Lira. Leave empty for no lower bound.

## `max_price` (type: `integer`):

Highest product price to include, in Turkish Lira. Leave empty for no upper bound.

## `min_rating` (type: `string`):

Only include products rated at or above this many stars.

## `sort_by` (type: `string`):

Order in which matching products are collected before Limit is applied.

## `gender` (type: `array`):

Only include products classified for these genders or age groups (fashion and apparel categories). Requires visiting each product page, which is billed at the Listing enrichment rate.

## `fast_delivery` (type: `boolean`):

Keep only products marked with fast delivery. Requires visiting each product page, which is billed at the Listing enrichment rate.

## `discounted` (type: `boolean`):

Keep only products currently shown with an active discount. Requires visiting each product page, which is billed at the Listing enrichment rate.

## `women_entrepreneur_products` (type: `boolean`):

Keep only products identified by Hepsiburada as sold by women entrepreneurs. Requires visiting each product page, which is billed at the Listing enrichment rate.

## `official_distibutor` (type: `boolean`):

Keep only products sold by an authorized or official distributor ("Resmi Satıcı"). Requires visiting each product page, which is billed at the Listing enrichment rate.

## `maximize_coverage` (type: `boolean`):

Page deeper into search results when filters would otherwise leave too few matches. Useful for large product segments or tight filters. Uses more requests.

## `limit` (type: `integer`):

Maximum product records to collect per query or direct collection target.

## `enrich_data` (type: `boolean`):

Visit each product page for full detail: description-level specifications, variant groups, competing merchants, delivery and return-policy information. Slower and billed at the Listing enrichment rate — see Pricing in the README.

## `get_reviews` (type: `boolean`):

Save customer review records linked to each collected product, up to Max reviews per product. Billed at the Review/Q\&A rate.

## `max_reviews` (type: `integer`):

Maximum review records to save per product. Only applies when "Collect customer reviews" is enabled.

## `get_qna` (type: `boolean`):

Save published product questions and merchant answers linked to each collected product, up to Max Q\&A per product. Billed at the Review/Q\&A rate.

## `max_qna` (type: `integer`):

Maximum question-and-answer records to save per product. Only applies when "Collect questions & answers" is enabled.

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

Hepsiburada is protected by strict Akamai bot detection that blocks regular and residential proxy traffic outright. The Apify UNBLOCKER proxy group is required and set by default — do not switch to Residential or Datacenter.

## Actor input object example

```json
{
  "queries": [
    "iphone 15"
  ],
  "startUrls": [],
  "sort_by": "recommended",
  "gender": [],
  "fast_delivery": false,
  "discounted": false,
  "women_entrepreneur_products": false,
  "official_distibutor": false,
  "maximize_coverage": false,
  "limit": 10,
  "enrich_data": false,
  "get_reviews": false,
  "max_reviews": 20,
  "get_qna": false,
  "max_qna": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "iphone 15"
    ],
    "startUrls": [],
    "limit": 10,
    "max_reviews": 20,
    "max_qna": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/hepsiburada-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 = {
    "queries": ["iphone 15"],
    "startUrls": [],
    "limit": 10,
    "max_reviews": 20,
    "max_qna": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/hepsiburada-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 '{
  "queries": [
    "iphone 15"
  ],
  "startUrls": [],
  "limit": 10,
  "max_reviews": 20,
  "max_qna": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call parsebird/hepsiburada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/hepsiburada-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/UR2YGDqfpgkREjlWr/builds/ABrSPcDMkoOTELfuh/openapi.json
