# Hepsiburada Scraper \[$0.75/1K💰] | TR Prices, Sellers, Delivery (`ahmed_jasarevic/hepsiburada-scraper`) Actor

Scrape Hepsiburada.com product listings into structured rows - TRY price, old price, discount, rating, seller, buy-box rank, stock and the real per-product delivery promise and cut-off hour.

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

## Pricing

from $0.60 / 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/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

Scrape **Hepsiburada.com**, Türkiye's largest marketplace, into structured product rows — TRY price, original price, discount percentage, rating, review count, seller, buy-box rank, warehouse and stock — plus the **real per-product delivery promise** with its cut-off hour and courier.

Built for Turkish e-commerce price monitoring, competitor and buy-box analysis, marketplace seller research and catalogue ingestion. HTTP-only: no headless browser, no login, no captcha solver.

### What you get

#### Monitor Turkish prices and discount depth

`price`, `originalPrice`, `discountPercent` and `priceText` on every row, with `currency` always `TRY`, so you can track real shelf-price movement instead of scraping a promo banner. `scrapedAt` plus stable `sku` gives you a clean diff key.

#### See who actually wins the buy box

`isBuyBoxWinner`, `buyboxOrder`, `isMultiSeller`, `seller`, `sellerId` and `availableWarehouses` expose multi-seller competition. `isMultiSeller` tells you whether a product is contested at all, and `buyboxOrder` ranks the offers — the two fields you need for buy-box share analysis.

#### Get delivery data most scrapers drop

`deliveryDate`, `deliveryText`, `deliveryCheckoutText`, `deliveryDays`, `deliveryCutOffTime`, `deliveryOptions`, `shipmentDay`, `jetDelivery`, `isNextDayDelivery`, `cargoFirmId` and `warehouseCodes` describe the delivery promise **per product**, not per seller. `deliveryCutOffTime` is what you need to answer "can I still order this today?" — and it is rarely exposed elsewhere.

#### Separate stock from availability

`inStock`, `inStockDate`, `warehouseId` and `warehouseCodes` distinguish genuinely in-stock items from listing shells. Pair that with `includeOutOfStock` to decide deliberately rather than discovering empty rows downstream.

#### Ingest clean Turkish catalogue data

`sku`, `productId`, `name`, `brand`, `categoryId`, `categoryName`, `categoryPath`, `listingId` and `images[]` form a ready-to-load product table, with `url` and `appDeepLink` for deep linking.

### How it works

Hepsiburada listing and category pages embed their product payload in the server-rendered HTML as a JSON block, so the Actor fetches pages over plain HTTP with `CheerioCrawler` and extracts that payload. No browser is launched.

Products are collected from three sources, and every row records which one via `sourceType` (`search`, `category` or `url`) and `sourceList`:

- **`searchQueries`** — free-text search terms, e.g. `["telefon", "bluetooth kulaklık"]`.
- **`categoryUrls`** — category listing pages.
- **`maxProducts`** — hard cap on total rows; **`maxPagesPerList`** — pages per source.

Rows also carry `searchQuery`, `page`, `listingId`, `warehouseId` and `warehouseCodes` so you can trace a row back to the exact page and warehouse it came from.

#### Why delivery fields are worth the extra request

The listing payload already contains the delivery promise Hepsiburada renders in its own UI, including the cut-off hour and courier. Because it comes from the same response as the price, there is no extra cost — it is simply a matter of reading fields that most scrapers ignore. That is the single biggest reason this Actor returns more usable data per row than a price-only competitor.

### Input

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `searchQueries` | string\[] | `[]` | Free-text search terms in Turkish, e.g. `["cep telefonu"]`. Each term becomes one search source. |
| `categoryUrls` | string\[] | `[]` | Hepsiburada category listing URLs. Each URL becomes one category source. |
| `maxProducts` | integer | `100` | Hard cap on total dataset rows across all sources. |
| `maxPagesPerList` | integer | `3` | Pages fetched per search or category source. |
| `sort` | string | `""` | `""` (relevance), `artanfiyat` (price ↑), `azalanfiyat` (price ↓), `coksatan` (best selling), `yorumsayisi` (most reviewed), `degerlendirmepuani` (top rated), `indirimurunler` (on discount), `enyeni` (newest). |
| `includeOutOfStock` | boolean | `true` | Keep unavailable products. Set `false` to drop listing shells. |
| `includeDeliveryInfo` | boolean | `true` | Populate the delivery fields. Turn off only if you have no use for them. |
| `imageSize` | string | `500-500` | Hepsiburada image variant, e.g. `1000-1000`. |
| `proxy` | object | `{ useApifyProxy: false }` | Standard Apify proxy picker. |

`searchQueries` and `categoryUrls` are additive — use either, or both. With both empty there is nothing to crawl, so supply at least one.

### Output

45 fields, one row per product:

`sku`, `productId`, `name`, `brand`, `price`, `originalPrice`, `discountPercent`, `currency`, `priceText`, `rating`, `reviewCount`, `seller`, `sellerId`, `inStock`, `inStockDate`, `warehouseId`, `shipmentDay`, `jetDelivery`, `isNextDayDelivery`, `isMultiSeller`, `isBuyBoxWinner`, `availableWarehouses`, `warehouseCodes`, `hasVariants`, `buyboxOrder`, `listingId`, `image`, `images`, `url`, `appDeepLink`, `categoryId`, `categoryName`, `categoryPath`, `deliveryDate`, `deliveryText`, `deliveryCheckoutText`, `deliveryDays`, `deliveryCutOffTime`, `deliveryOptions`, `cargoFirmId`, `sourceType`, `sourceList`, `searchQuery`, `page`, `scrapedAt`

Two dataset views ship with the Actor: **Overview** and **Delivery**.

Field notes that change how you read the data:

- `currency` is always `TRY`; `price`/`originalPrice` are numbers, `priceText` is the rendered string ("₺1.249,99"). Use the numeric fields for arithmetic.
- `discountPercent` is `0` when there is no discount — not `null`. A `0` means "no markdown", not "unknown".
- `inStock` is a boolean, `inStockDate` is when stock was recorded. If `includeOutOfStock` is `true` you will receive rows with `inStock: false`; filter before loading.
- `sourceType` (`search` | `category` | `url`) plus `sourceList`, `searchQuery` and `page` are your provenance chain back to the request.
- `images[]` holds every variant Hepsiburada renders; `image` is the primary one.

### Example input

Track a category against its best sellers:

```json
{
  "searchQueries": ["bluetooth kulaklik"],
  "sort": "coksatan",
  "maxProducts": 200,
  "maxPagesPerList": 4
}
```

Cheapest-first sweep with out-of-stock items excluded:

```json
{
  "searchQueries": ["cep telefonu", "tablet"],
  "sort": "artanfiyat",
  "includeOutOfStock": false,
  "maxProducts": 500,
  "maxPagesPerList": 5
}
```

Category pages with full delivery data:

```json
{
  "categoryUrls": ["https://www.hepsiburada.com/kategori/telefonlar-300100101"],
  "includeDeliveryInfo": true,
  "maxProducts": 300
}
```

### Example output

```json
{
  "sku": "HBCV2101008412",
  "productId": "hp-2101008412",
  "name": "Apple AirPods Pro 2 USB-C Kulaklik Bluetooth Kulaklık",
  "brand": "Apple",
  "price": 7499.0,
  "originalPrice": 8499.0,
  "discountPercent": 11.77,
  "currency": "TRY",
  "priceText": "₺7.499,00",
  "rating": 4.7,
  "reviewCount": 3184,
  "seller": "Apple Store",
  "sellerId": "seller-apple-tr",
  "inStock": true,
  "inStockDate": "2026-10-04T09:14:00.000Z",
  "warehouseId": "WH-IST-04",
  "shipmentDay": 1,
  "jetDelivery": true,
  "isNextDayDelivery": true,
  "isMultiSeller": true,
  "isBuyBoxWinner": true,
  "availableWarehouses": ["İstanbul Anadolu", "İstanbul Avrupa", "İzmir"],
  "warehouseCodes": ["IST04", "IST07", "IZM02"],
  "hasVariants": false,
  "buyboxOrder": 1,
  "listingId": "LST-8821346",
  "image": "https://images.hepsiburada.com/2101008412-500-500.jpg",
  "images": [
    "https://images.hepsiburada.com/2101008412-500-500.jpg",
    "https://images.hepsiburada.com/2101008412-750-750.jpg"
  ],
  "url": "https://www.hepsiburada.com/apple-airpods-pro-2-usb-c-kulaklik-bluetooth-kulaklik-HBCV2101008412",
  "appDeepLink": "hepsiburada://product/HBCV2101008412",
  "categoryId": "300100101",
  "categoryName": "Telefonlar",
  "categoryPath": "Elektronik > Telefonlar > Kulaklık",
  "deliveryDate": "2026-10-05",
  "deliveryText": "Yarın Kargoda",
  "deliveryCheckoutText": "Bugün sipariş verirseniz yarın elinizde",
  "deliveryDays": 1,
  "deliveryCutOffTime": "23:59",
  "deliveryOptions": [{ "text": "Yarın Kargoda", "cargoFirmId": "CF-AKAREX", "days": 1 }],
  "cargoFirmId": "CF-AKAREX",
  "sourceType": "search",
  "sourceList": "bluetooth kulaklik",
  "searchQuery": "bluetooth kulaklik",
  "page": 1,
  "scrapedAt": "2026-10-04T09:15:22.408Z"
}
```

### Integrations & automation

Call it over the Apify API, from Python/JavaScript, the CLI or MCP. Datasets export as JSON, CSV, Excel or XML.

For **price monitoring**, a daily run over the same `searchQueries` with a fixed `sort` gives you a stable comparable set — change `sort` between runs and you are comparing different product sets, not different prices. For **assortment and discount tracking**, run weekly with `sort: "indirimurunler"`. For **buy-box monitoring**, keep `isMultiSeller` products and alert on `isBuyBoxWinner` flips.

Typical pipeline: run on schedule → upsert on `sku` → compute price and `discountPercent` deltas → alert when a tracked `sku` drops below a target price, when a seller you follow takes or loses `isBuyBoxWinner`, or when `deliveryCutOffTime` moves and same-day delivery disappears. Because `currency` is always `TRY`, no FX handling is needed.

### Related Actors

| Actor | Why |
| --- | --- |
| [`scrapyx/hepsiburada-products-scraper`](https://apify.com/scrapyx/hepsiburada-products-scraper) | The most-used Hepsiburada Actor, 118 users. Good benchmark for core fields. |
| [`midnight_static/hepsiburada-product-scraper`](https://apify.com/midnight_static/hepsiburada-product-scraper) | Price-focused alternative; useful for comparing field coverage. |
| [`yeyo/hepsiburada-product-scraper`](https://apify.com/yeyo/hepsiburada-product-scraper) | Another Turkish-focused implementation, review data included. |
| [`ahmed_jasarevic/notino-scraper`](https://apify.com/ahmed_jasarevic/notino-scraper) | Same retail-product problem, different market: Italian cosmetics and personal care. |
| [`ahmed_jasarevic/jumia-scraper`](https://apify.com/ahmed_jasarevic/jumia-scraper) | The structurally identical Actor for African marketplaces — same multi-seller, review and price model across 9 markets. |

### FAQ

#### What makes this different from other Hepsiburada scrapers?

Delivery. Most Hepsiburada scrapers return name, price, rating and images. This Actor returns 45 fields including the **per-product delivery promise** — `deliveryDate`, `deliveryText`, `deliveryCheckoutText`, `deliveryDays`, `deliveryCutOffTime`, `deliveryOptions`, `cargoFirmId` — plus full multi-seller and buy-box data (`isMultiSeller`, `isBuyBoxWinner`, `buyboxOrder`, `availableWarehouses`, `warehouseCodes`). That is what you need for logistics analysis, same-day cut-off logic and buy-box share, rather than just a price list.

#### Is there an official Hepsiburada API?

Only a merchant-scoped one. Hepsiburada's [Merchant Product API](https://developer.hepsiburada.com/) is for partners to manage **their own** catalogue, orders and reports, and requires merchant credentials. There is no public API for reading competitor listings or marketplace-wide product data, which is what a price-monitoring or market-research job needs.

#### How do I get the cheapest products?

Set `sort: "artanfiyat"` (price ascending). `sort` accepts `artanfiyat` (price ↑), `azalanfiyat` (price ↓), `coksatan` (best selling), `yorumsayisi` (most reviewed), `degerlendirmepuani` (top rated), `indirimurunler` (on discount) and `enyeni` (newest). Empty string means relevance order.

#### Can I exclude unavailable products?

Yes — set `includeOutOfStock: false`. It defaults to `true`, so out-of-stock rows are included unless you opt out. For catalogue ingestion you almost always want `false`.

#### Do I need a browser or proxy?

No. Product data is embedded in the server-rendered HTML, so the Actor uses plain HTTP requests. `proxy` is available if you hit rate limits, but the default run works without it. `crawlDelayMillis` is not an input here; if you get throttled, reduce `maxPagesPerList` or add delay in your orchestrator.

#### Are prices in Turkish lira?

Yes. `currency` is always `TRY`. `priceText` renders with the Turkish format ("₺7.499,00" uses `.` as thousands separator and `,` as decimal), so parse the numeric `price` field rather than the text.

### SEO Keywords

hepsiburada scraper, hepsiburada.com, turkish ecommerce data, hepsiburada api alternative, turkey product prices, turkiye ecommerce dataset, price monitoring turkey, marketplace seller data, buy box analysis, product discount tracking, turkish retail scraping, hepsiburada product data, same day delivery data, product catalogue ingestion, competitor price analysis, turkish marketplace research, cheapest products turkey, electronics price tracking turkey, catalog scraping api, ecommerce scraping turkey

### For AI Agents & LLM Apps

Returns Hepsiburada product listings as flat dataset rows, one per product, with per-product delivery promise and multi-seller/buy-box fields.

**Minimal input** — smallest input that produces a valid run:

```json
{ "searchQueries": ["telefon"], "maxProducts": 50 }
```

**Typical run** — best sellers with delivery data:

```json
{ "searchQueries": ["bluetooth kulaklik"], "sort": "coksatan", "maxProducts": 200, "maxPagesPerList": 4 }
```

**Category source**:

```json
{ "categoryUrls": ["https://www.hepsiburada.com/kategori/telefonlar-300100101"], "maxProducts": 300 }
```

**Output fields** (45): sku, productId, name, brand, price, originalPrice, discountPercent, currency, priceText, rating, reviewCount, seller, sellerId, inStock, inStockDate, warehouseId, shipmentDay, jetDelivery, isNextDayDelivery, isMultiSeller, isBuyBoxWinner, availableWarehouses, warehouseCodes, hasVariants, buyboxOrder, listingId, image, images, url, appDeepLink, categoryId, categoryName, categoryPath, deliveryDate, deliveryText, deliveryCheckoutText, deliveryDays, deliveryCutOffTime, deliveryOptions, cargoFirmId, sourceType, sourceList, searchQuery, page, scrapedAt

**Behaviours an agent should know**

- `searchQueries` and `categoryUrls` are **additive**. Both empty means nothing to crawl — supply at least one. Every row's `sourceType` and `sourceList` tell you which source produced it.
- `sort` is applied per source and accepts exactly: `""`, `artanfiyat`, `azalanfiyat`, `coksatan`, `yorumsayisi`, `degerlendirmepuani`, `indirimurunler`, `enyeni`. Turkish keywords are required, English ones will be ignored.
- `includeOutOfStock` defaults to **true**, so a default run *does* include unavailable products. Set it to `false` for catalogue ingestion. `includeDeliveryInfo` defaults to `true`.
- `discountPercent` is `0` — not `null` — when there is no discount. Don't read `0` as "unknown".
- `price`/`originalPrice` are numeric TRY. `priceText` uses Turkish formatting (`.` thousands, `,` decimal) — never parse it.
- `maxProducts` (default 100) is the total row cap across all sources, so it is your cost ceiling. Billing is **$0.00075 per product**.

### Legal & Compliance

This Actor is an independent third-party tool. It is not affiliated with, endorsed by, or sponsored by Hepsiburada, or by any seller, merchant or brand whose listings appear in its output.

**What it actually accesses:** publicly visible Hepsiburada search, category and product listing pages over plain HTTP, with no login, no authentication bypass, no captcha solving and no private endpoints. It reads only the product payload Hepsiburada serves to any anonymous visitor.

**One thing we could not verify:** Hepsiburada's `robots.txt` returned **HTTP 403 Forbidden** when checked, so its actual crawl directives could not be read or confirmed. We are not in a position to tell you what they say. If automated access matters to your use case, request the file yourself or contact Hepsiburada directly before running at volume.

Hepsiburada's [Merchant API terms](https://developer.hepsiburada.com/) govern the official partner API, which is scoped to a merchant's own catalogue — using this Actor to read competitor or marketplace-wide listings is not covered by them, and doing so may breach Hepsiburada's Terms of Service.

You are solely responsible for compliance with Hepsiburada's Terms of Service, its crawl directives, and applicable law including GDPR and Türkiye's KVKK. Keep request volumes modest: `maxProducts` (default 100) and `maxPagesPerList` (default 3) bound a run without effort. Resale or redistribution of scraped marketplace data may require a commercial agreement with Hepsiburada — check before you build a product on top of it.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on hepsiburada.com (equivalent to https://www.hepsiburada.com/ara?q=...). Leave empty if you only want category URLs.

## `categoryUrls` (type: `array`):

Any Hepsiburada listing URL. Three forms are understood: (1) category pages, where only the numeric id (the `-c-<id>` part) is used, e.g. https://www.hepsiburada.com/laptop-notebook-dizustu-bilgisayarlar-c-98 -> category 98; (2) SEO search landing pages such as https://www.hepsiburada.com/iphone-18-pro-max-iphone-ios-telefonlar-xc-60005202-t6896, where `-xc-60005202` is the resolved category and the leading slug becomes the `q` filter, so you get exactly the filtered listing; (3) https://www.hepsiburada.com/ara?q=iphone -> keyword search.

## `maxProducts` (type: `integer`):

How many products to collect in total, across all queries and categories. The run keeps paging until it reaches this number. Each listing page holds 24 products, so the actor automatically extends past maxPagesPerList when the listings have more to give. Non-paying accounts are limited to 10 products per run.

## `maxPagesPerList` (type: `integer`):

Starting number of listing pages per search query or category. This is a starting depth, not a limit: the actor keeps paging beyond it while the listing reports more products and maxProducts is still unmet, up to 50 pages. Raise it only to fetch deeper listings faster.

## `sort` (type: `string`):

Optional Hepsiburada storefront sort key (search pages only).

## `includeOutOfStock` (type: `boolean`):

When false, products that cannot be added to the cart (sold out) are skipped.

## `includeDeliveryInfo` (type: `boolean`):

Adds estimated delivery data per product: delivery date, "Yarin Kargoda"-style text, the order cut-off hour, per-merchant delivery options and courier id. Adds one extra batched request per listing page, so turning it off roughly halves the request count.

## `imageSize` (type: `string`):

Size segment for product image URLs, e.g. `500-500` or `424-600`.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop"
  ],
  "categoryUrls": [
    "https://www.hepsiburada.com/laptop-notebook-dizustu-bilgisayarlar-c-98"
  ],
  "maxProducts": 100,
  "maxPagesPerList": 3,
  "includeOutOfStock": true,
  "includeDeliveryInfo": true,
  "imageSize": "500-500",
  "proxy": {
    "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 = {
    "searchQueries": [
        "laptop"
    ],
    "categoryUrls": [
        "https://www.hepsiburada.com/laptop-notebook-dizustu-bilgisayarlar-c-98"
    ],
    "maxProducts": 100,
    "maxPagesPerList": 3,
    "includeOutOfStock": true,
    "includeDeliveryInfo": true,
    "imageSize": "500-500",
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "searchQueries": ["laptop"],
    "categoryUrls": ["https://www.hepsiburada.com/laptop-notebook-dizustu-bilgisayarlar-c-98"],
    "maxProducts": 100,
    "maxPagesPerList": 3,
    "includeOutOfStock": True,
    "includeDeliveryInfo": True,
    "imageSize": "500-500",
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "searchQueries": [
    "laptop"
  ],
  "categoryUrls": [
    "https://www.hepsiburada.com/laptop-notebook-dizustu-bilgisayarlar-c-98"
  ],
  "maxProducts": 100,
  "maxPagesPerList": 3,
  "includeOutOfStock": true,
  "includeDeliveryInfo": true,
  "imageSize": "500-500",
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/hepsiburada-scraper --silent --output-dataset

```

## MCP server setup

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