# Hepsiburada Scraper — Turkey Product Prices & Ratings (`logiover/hepsiburada-product-scraper`) Actor

Scrape Hepsiburada.com, one of Turkey's largest online marketplaces. Extract product name, brand, price in lira, currency, stock availability, SKU, category and product images across every category. Keyword search and category browsing. No API key, no login.

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

## Pricing

from $2.50 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Hepsiburada Scraper — Turkey Product Prices & Stock

Turkish marketplace prices in clean rows: product name, brand, price in lira, stock status and SKU, straight from the category pages.

### What does the Hepsiburada Scraper do?

This Actor collects live product data from **Hepsiburada.com**, one of Turkey's largest online marketplaces. Each category page publishes its products as JSON-LD, and this Actor reads that structure directly rather than parsing rendered markup.

One detail decides whether the output is trustworthy. The page describes *itself* as a product too — the category, priced at its cheapest item — so an unfiltered parse reports "Laptop Fiyatları" as a product costing 375 lira and quietly drags every average down. Only entries carrying a SKU are real products, and that is the filter applied here. Ratings and merchant names are not in the server-rendered markup at all, so no columns are claimed for them.

### Who is it for?

- **Brands and distributors** monitoring Turkish shelf prices in a high-inflation market.
- **Competitive-pricing teams** tracking a major marketplace before repricing.
- **Marketplace sellers** researching price bands before listing.
- **Retail analysts** measuring category price movement month over month.
- **Importers and exporters** benchmarking Turkish retail against their own markets.

### Use cases

- Track lira prices in a category weekly — in Turkey that curve moves fast enough to matter.
- Build a brand-level price index across phones, laptops and appliances.
- Watch stock availability to spot supply gaps before competitors.
- Compare the same product across categories and catch inconsistent pricing.
- Feed a repricing engine a daily snapshot of a competitor category.
- Give an AI agent live Turkish retail prices instead of stale training data.

### Why use this Hepsiburada Scraper?

- **The category-as-product trap handled** — only entries with a real SKU are kept.
- **About 36 products per page**, with clean pagination.
- **Every core field filled**: name, brand, price, currency, availability and SKU come back at 100%.
- **No invented columns** — ratings and merchants are absent from the markup, so they are not claimed.
- **Keyless and login-free** — nothing to register, nothing to rotate.
- **Hundreds of categories**, addressed by the slug from the URL.

### What data can you extract?

One row per product. Anything the source left blank comes back as `null`.

| Field | Type | Description |
|---|---|---|
| `sku` | string | Hepsiburada SKU |
| `url` | string | Direct link to the product |
| `name` | string | Product name |
| `brand` | string | Brand |
| `price` | number | Price in Turkish lira |
| `currency` | string | Currency, normally TRY |
| `availability` | string | Stock status, e.g. InStock |
| `category` | string | Category slug requested |
| `imageUrl` | string | Product photo |
| `scrapedAt` | string | When this row was collected |

#### Sample output

```json
{
  "sku": "HBCV0000EWMU1D",
  "url": "https://www.hepsiburada.com/asus-vivobook-go-15-e1504fa-bq4895w-amd-ryzen-5-7520u-8gb-512gb-ssd-windows-11-...",
  "name": "ASUS Vivobook Go 15 E1504FA-BQ4895W AMD Ryzen 5 7520U 8GB 512GB SSD Windows 11 Home 15.6\" Taşınabilir Bilgi...",
  "brand": "Asus",
  "price": 20999,
  "currency": "TRY",
  "availability": "InStock",
  "category": "laptop-notebook-dizustu-bilgisayarlar-c-98",
  "imageUrl": "https://productimages.hepsiburada.net/s/777/222-222/110001758118219.jpg",
  "scrapedAt": "2026-08-16T16:28:51.746Z"
}
```

### How to use the Hepsiburada Scraper

#### Option A — a category

Enter a category slug exactly as it appears after hepsiburada.com/ in the URL. Verified examples: `laptop-notebook-dizustu-bilgisayarlar-c-98`, `iphone-ios-telefonlar-c-60005202`, `led-tv-televizyonlar-c-163192`.

#### Option B — a price monitor

Pick the categories you compete in and schedule the Actor daily; diff `price` between runs to see repricing as it happens.

#### Option C — a brand index

Collect several categories, then group by `brand` to build a brand-level price index across the marketplace.

### Input parameters

| Input | Type | Description |
|---|---|---|
| `categoryPath` | string | Hepsiburada category path as it appears after hepsiburada.com/ in the URL. Verified examples: laptop-notebook-dizustu-bilgisayarlar-c-98, iphone-ios-telefonlar-c-60005202, led-tv-televizyonlar-c-163192, tablet-c-3008012, masaustu-bilgisayarlar-c-34. Default: `"laptop-notebook-dizustu-bilgisayarlar-c-98"`. |
| `maxResults` | integer | Stop after this many products. Each page returns about 36. Default: `1000`. |
| `proxyConfiguration` | object | Hepsiburada serves Turkish exits. Residential proxy pinned to Turkey is used automatically. |

### Tips for best results

- Copy the category slug from the URL rather than guessing it — the numeric suffix is part of the identifier and a wrong one returns nothing.
- Turkish inflation means a price series is only meaningful with its collection date; `scrapedAt` is on every row for that reason.
- The Actor filters out the category's own self-describing entry, so a page adds about 36 real products.
- Keyword search is not offered because Hepsiburada's search pages carry no structured product data — category browsing is the honest path.
- Prices are in lira as published; no conversion is applied.

### Integrations

Connect this Actor to Make, Zapier, n8n, Slack, Google Sheets, GitHub, Airtable or any HTTP endpoint through Apify integrations. Every finished run can push its dataset straight into your warehouse, or fire a webhook so a downstream job starts the moment the data lands.

### API usage

Run the Actor from your own code with the Apify API. Datasets can be exported as JSON, CSV, Excel, XML, RSS or HTML, and every run is available through the [Apify API reference](https://docs.apify.com/api/v2).

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~hepsiburada-product-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"input": {"categoryPath": "laptop-notebook-dizustu-bilgisayarlar-c-98", "maxResults": 1000, "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "TR"}}}'
```

Python, JavaScript, PHP and CLI clients are documented under [Apify API clients](https://docs.apify.com/api/client).

### Use with AI agents (MCP)

This Actor is callable from any MCP-compatible client — Claude, Cursor, VS Code or your own agent — through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An agent can call it to answer live questions about Turkish marketplace prices, stock status and brand-level pricing instead of guessing from stale training data.

### FAQ

#### Do I need a Hepsiburada account or API key?

No. The Actor reads public category pages with no login and no key.

#### Why is there no keyword search?

Hepsiburada's search pages do not emit the structured product data that category pages do. Rather than ship a mode that silently returns nothing, only category browsing is offered.

#### How many products can one run return?

Each page carries about 36 and large categories run to thousands of pages, so the practical limit is the result cap you set.

#### Why are ratings and seller names missing?

They are not present in the server-rendered markup. Claiming columns for them would mean shipping fields that are always blank.

#### What currency are prices in?

Turkish lira (TRY), exactly as published.

#### Why did my run return zero products?

Almost always a category slug that does not exist. Open the category on Hepsiburada and copy the slug from the address bar.

#### Is the data in Turkish?

Yes. Product names and categories are published in Turkish and collected as written.

#### How often should I run it?

Daily is a good default in a market where prices move monthly; hourly is worth it during campaign periods.

#### Can I export to CSV or Excel?

Yes. Every run's dataset exports as JSON, CSV, Excel, XML, RSS or HTML from the Storage tab, the API, or automatically through an integration.

#### How fresh is the data?

Every run reads the site live at that moment, so the data is as fresh as the site itself. Schedule the Actor hourly, daily or weekly to build a time series.

#### How often is the Actor updated?

It is monitored and fixed when the site changes its markup or its endpoints. Report anything that looks wrong through the Issues tab and it gets picked up.

### Is it legal to scrape Hepsiburada?

This Actor collects only publicly available information — the same pages any visitor can open without logging in. It does not bypass a login, and it does not touch private or personal accounts. Public data collection is legal in most jurisdictions, but how you *use* the data is your responsibility: if any record contains personal data, GDPR and comparable laws still apply, and you need a lawful basis for processing it. When in doubt, take legal advice. See Apify's [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/) guide.

### Related scrapers

- [Trendyol alternative: Arabam Scraper](https://apify.com/logiover/arabam-turkey-car-scraper) — Turkish used cars.
- [Emlakjet Scraper](https://apify.com/logiover/emlakjet-turkey-property-scraper) — Turkish property listings.
- [Noon Scraper](https://apify.com/logiover/noon-product-scraper) — UAE, Saudi and Egypt prices.
- [eMAG Scraper](https://apify.com/logiover/emag-scraper) — Romanian and Bulgarian e-commerce.
- [Morele Scraper](https://apify.com/logiover/morele-poland-product-scraper) — Polish electronics prices.

# Actor input Schema

## `categoryPath` (type: `string`):

Hepsiburada category path as it appears after hepsiburada.com/ in the URL. Verified examples: laptop-notebook-dizustu-bilgisayarlar-c-98, iphone-ios-telefonlar-c-60005202, led-tv-televizyonlar-c-163192, tablet-c-3008012, masaustu-bilgisayarlar-c-34.

## `maxResults` (type: `integer`):

Stop after this many products. Each page returns about 36.

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

Hepsiburada serves Turkish exits. Residential proxy pinned to Turkey is used automatically.

## Actor input object example

```json
{
  "categoryPath": "laptop-notebook-dizustu-bilgisayarlar-c-98",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "categoryPath": "laptop-notebook-dizustu-bilgisayarlar-c-98",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "TR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/hepsiburada-product-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 = {
    "categoryPath": "laptop-notebook-dizustu-bilgisayarlar-c-98",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "TR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/hepsiburada-product-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 '{
  "categoryPath": "laptop-notebook-dizustu-bilgisayarlar-c-98",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}' |
apify call logiover/hepsiburada-product-scraper --silent --output-dataset

```

## MCP server setup

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