# Trendyol Scraper \[$0.45/1k💰] | TR/AE/SA Prices | Reviews (`ahmed_jasarevic/trendyol-scraper`) Actor

Scrape Trendyol product data from Turkey, UAE and Saudi storefronts: price, discount, rating, favorites, seller and reviews for price monitoring (fiyat takibi) and e-commerce competitor intelligence.

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

## Pricing

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

## Trendyol Product Scraper

Scrape **product data from Trendyol.com** — Turkey's #1 e-commerce marketplace (UAE & Saudi storefronts too) — for **price monitoring, competitor intelligence and e-commerce research**. Search keywords or scan category pages; get structured JSON/CSV/Excel with price, discount, rating, seller and reviews.

### Main Use Cases

- **Price monitoring (fiyat takibi)** — track prices, discounts and stock across Trendyol storefronts (TR / AE / SA) to prevent your competitors from underpricing you.
- **Competitor intelligence** — product names, brands, sellers, categories and prices in a clean dataset for market analysis.
- **E-commerce research & trend analysis** — best-sellers, most-favorited and highest-rated products per keyword/category.
- **Product feed building** — turn Trendyol listings into a structured product feed for your catalog or comparison engine.
- **Review & sentiment analysis** — pull product reviews with ratings and dates for quality research.

### How It Works

Trendyol's desktop site exposes structured JSON payloads (`SFINT` in static/vendor.js, `x-trendyol-client` headers) containing full product data for search results and category pages — served from the same backend the web app uses but with **no browser required**. The actor queries these internal API endpoints per search query or category URL and maps each product card to a rich record: price, discounts, rating, favorite count, merchant, price bar history and more. Product detail pages are NOT fetched (the internal endpoint lacks a detail product fetch — but own-library search and category pages fully cover it). Cloudflare's TLS-gated sites are handled with a Chromium fallback and clean browser fingerprint. **Residential proxies** (TR for `.com.tr`/TR storefront, AE/SA for the UAE/Saudi storefronts) are recommended.

### Monitor Trendyol Prices & Discounts Without an Official API

Trendyol offers no public product API. This actor reads the marketplace's own internal JSON endpoints to return price, list price, discount status, price bar, rating, favorite count and seller data per product — the exact signals price-monitoring (fiyat takibi) dashboards are built on. Schedule daily runs to capture price movement over time.

### Build E-commerce Competitor Intel From Turkish & MENA Marketplaces

With the `storefront` selector (TR / AE / SA) and category URL support, the same actor covers Trendyol's Turkish, UAE and Saudi catalogs. Capture bestSeller, mostFavorited and mostRated sort orders so your product research reflects real marketplace demand.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `searchQueries` | array | No | `[]` | Product keyword searches, e.g. `["iphone 15"]`. Each query runs one search (max 20 products per query on TR storefront). |
| `categoryUrls` | array | No | `[]` | Trendyol category page URLs, e.g. `https://www.trendyol.com/sr?q=televizyon` or category listing pages like `.../kadin-ayakkabi-x-g1-c114?boutiqueId=...`. Product count for category scan is controlled by `maxProducts` (for search it's capped at 20/query regardless). |
| `maxProducts` | integer | No | `50` | Hard cap on product rows for the whole run. |
| `includeReviews` | boolean | No | `false` | Also fetch each product's reviews (increases run time significantly). |
| `maxReviewsPerProduct` | integer | No | `10` | Cap on reviews kept per product (max 100). |
| `sort` | enum | No | `relevance` | `relevance`, `bestSeller`, `priceAsc`, `priceDesc`, `newest`, `mostRated`, `mostFavorited`. |
| `storefront` | enum | No | `TR` | `TR` (Turkey), `AE` (UAE), `SA` (Saudi Arabia). |
| `maxRequestsPerCrawl` | integer | No | `0` | Request cap (search/category pages + reviews). `0` = unlimited. |
| `proxy` | object | No | — | Recommend `{{ RESIDENTIAL_PROXY_PASS }}` for TR and AE/SA residential coverage. |

### Example Input

```json
{
  "searchQueries": ["iphone 15"],
  "categoryUrls": [],
  "maxProducts": 100,
  "includeReviews": false,
  "sort": "bestSeller",
  "storefront": "TR"
}
```

### Output

Two datasets: **products** (default) and **reviews** (separate, when `includeReviews` is on).

#### Product row

```json
{
  "id": "177138843",
  "name": "iPhone 15 128 GB",
  "brand": "Apple",
  "price": 54999.9,
  "listPrice": 64999.9,
  "currency": "TRY",
  "isDiscounted": true,
  "discountPercent": 15,
  "priceBar": { "min": 49999, "max": 65999, "average": 54999 },
  "poorPriceCount": 0,
  "ratingAverage": 4.8,
  "ratingCount": 1541,
  "favoriteCount": 3214,
  "merchantName": "Apple Resmi Satıcı",
  "merchantIsOfficial": true,
  "categoriesPath": "Elektronik > iPhone",
  "image": "https://cdn.dsmcdn.com/ty.../image.jpg",
  "url": "https://www.trendyol.com/apple/iphone-15-128-gb-p-177138843"
}
```

Review rows (reviews dataset) include `productName`, `productUrl`, `rating`, `text`, `date`, `username`, `verifiedPurchase` (when available) and `likes`.

#### Dataset schema (default dataset — `overview` view)

`id`, `name`, `brand`, `price`, `listPrice`, `currency`, `isDiscounted`, `discountPercent`, `ratingAverage`, `ratingCount`, `favoriteCount`, `merchantName`, `url`, `scrapedAt`, plus `priceBar`, `categoriesPath`, `image`, `reviews` under detail modes (schema-backed fields; the actor's dataset schema is being completed by the developer).

### Track Price History With the Trendyol Price Bar Data

Every product row carries the `priceBar` (min/max/average of recent price history) and discount signals. Run this actor on a schedule and append to your own store to build a full price-history dataset for Turkey, UAE and Saudi marketplaces.

### Integrations & Automation

- **Apify API** — feed product rows into your price-tracking dashboard or catalog.
- **Webhooks** — alert your team when prices change.
- **Scheduling** — daily price monitoring (fiyat takibi), weekly category sweeps.
- **Export** — JSON, CSV, HTML, Excel.

*Recommended schedule:* daily for price monitoring; weekly for category/research sweeps.

### Related Actors

- [Trendyol Scraper - Products and Prices (Turkish)](https://apify.com/fatihtahta/trendyol-scraper) — most-used Trendyol actor (cluster authority in the Store).
- [Trendyol Product Scraper](https://apify.com/shahidirfan/trendyol-product-scraper) — high-volume TR product scraper.
- [Trendyol Scraper - Product Prices & Categories](https://apify.com/maximedupre/trendyol-scraper) — category-based Trendyol scraping.
- [Trendyol Reviews Scraper](https://apify.com/shahidirfan/Trendyol-Reviews-Scraper) — dedicated TR product reviews extraction.
- [Trendyol Scraper](https://apify.com/abotapi/trendyol-scraper) — additional Trendyol product data alternative.

### FAQ

#### Why use this actor instead of the official Trendyol API?

Trendyol does not expose a public product search/listing API (only seller/order APIs for registered merchants). This actor reads the internal JSON endpoints the Trendyol web app uses, returning price, discount, rating, favorite and seller data with no browser and no merchant registration.

#### What are alternatives to this actor / Turkish e-commerce data?

- [fatihtahta/trendyol-scraper](https://apify.com/fatihtahta/trendyol-scraper) — Store leader by users (~$0.0009/product).
- [shahidirfan/trendyol-product-scraper](https://apify.com/shahidirfan/trendyol-product-scraper) (~$0.00093) and [maximedupre/trendyol-scraper](https://apify.com/maximedupre/trendyol-scraper) (~$0.0008).
- [shahidirfan/Trendyol-Reviews-Scraper](https://apify.com/shahidirfan/Trendyol-Reviews-Scraper) — reviews only.

#### How can I track a product's price automatically?

Run this actor daily on `searchQueries` (or the product's category URL) with `sort: "relevance"` and append outputs to your dataset — product rows include `priceBar` (history min/max/avg) plus current price and discount, so you get day-over-day price movement without storing full history yourself.

#### What is the best way to find best sellers on Trendyol?

Set `sort: "bestSeller"` on a keyword or category URL. Product rows include `favoriteCount`, `ratingCount` and `ratingAverage`, so you can rank by real demand signals, not just order.

#### Why use residential proxies?

Trendyol uses Cloudflare TLS-gated content; residential IPs (TR for Turkey, AE/SA for the Gulf storefronts) keep the internal endpoint calls clean and stable.

### For AI Agents & LLM Apps

- **Purpose:** given keywords, category URLs, or a sort order plus storefront (TR/AE/SA), returns one structured product record per Trendyol listing (id, name, brand, price, list price, discount, rating, favorite count, merchant, category, image, url).
- **Minimal input:**

```json
{
  "searchQueries": ["iphone 15"],
  "maxProducts": 20,
  "sort": "bestSeller",
  "storefront": "TR"
}
```

- **Variant — category scan with reviews:**

```json
{
  "categoryUrls": ["https://www.trendyol.com/kadin-ayakkabi-x-g1-c114"],
  "maxProducts": 50,
  "includeReviews": true,
  "maxReviewsPerProduct": 10,
  "sort": "mostFavorited",
  "storefront": "TR"
}
```

- **Output field list (products dataset):** `id`, `name`, `brand`, `price`, `listPrice`, `currency`, `isDiscounted`, `discountPercent`, `priceBar` (min/max/average), `poorPriceCount`, `ratingAverage`, `ratingCount`, `favoriteCount`, `merchantName`, `merchantIsOfficial`, `categoriesPath`, `image`, `url`, `scrapedAt`, plus `reviews` ({productName, rating, text, date, username}).

Behaviors an agent should know:

- **Search queries are capped at 20 products per query** on the TR storefront regardless of `maxProducts`; use `categoryUrls` for deeper category scans (bounded by `maxProducts`).
- Product detail pages are **not** fetched — search/category endpoints only. The URL field is the canonical product URL.
- `includeReviews` significantly increases run time/cost; bound with `maxReviewsPerProduct`.
- `proxy` should be residential (`RESIDENTIAL_PROXY_PASS`); TR/AE/SA storefronts each need their matching country IP pool for stability.
- If `maxProducts` exceeds the available products for a query, the actor returns whatever it finds — no error.
- **Billing:** pay-per-event — `result` $0.00045/product row, `Review` $0.00045/review row.

### Legal & Compliance Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Trendyol (Doğuş Grubu / Alibaba). It reads only publicly available product-listing data from Trendyol's public storefronts — no login bypass. Users are responsible for complying with Trendyol's Terms of Service and applicable data-protection law (GDPR applies to any EU/Turkish personal data; review usernames should be handled carefully). Market data gathered should be used in line with fair-competition rules; do not use scraped data to impersonate Trendyol or its sellers.

### SEO Keywords

trendyol scraper, trendyol veri çekme, fiyat takibi, trendyol price monitoring, turkey ecommerce data, trendyol product data, trendyol reviews, trendyol price tracking, turkish marketplace data, trendyol best seller, trendyol category scraping, trendyol api alternative, trendyol uae storefront, trendyol saudi arabia, ecommerce competitor intelligence, product price history, trendyol discount tracking, mena marketplace data, trendyol merchant data, most favorited products

# Actor input Schema

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

Keywords to search on Trendyol, e.g. telefon, acarhome. Resolved through Trendyol's current SFINT search service (discovery-sfint-search-service, 36 products per page, paginated via offsetParameters).

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

Public Trendyol category/browse URLs, e.g. https://www.trendyol.com/kadin-ayakkabi-x-g1-c114. Resolved through Trendyol's SFINT listing API (pathModel = category route, 36 products per page). Both www.trendyol.com (TR) and www.trendyol.ae (AE) URLs work.

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

Maximum number of products to return. Free users are capped at 10.

## `includeReviews` (type: `boolean`):

Collect customer reviews for each product from Trendyol's paginated review-list API into a separate 'reviews' dataset (full review history, 50 per request). Reviews are keyed by product id, so no product page is fetched - search/category runs stay at ~1 request per 36 products plus one review request per 50 reviews. Rating/review counts are always parsed on listing pages regardless of this toggle. Disabled by default.

## `maxReviewsPerProduct` (type: `integer`):

Maximum review texts to collect per product (0 = no reviews). Reviews are paginated 50 at a time until this many are collected or the product's review list is exhausted.

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

Sort order for search/category discovery.

## `storefront` (type: `string`):

Which Trendyol storefront to scrape. TR = trendyol.com (TRY, Turkish). AE = international UAE storefront trendyol.ae (AED, English). SA = Saudi Arabia storefront trendyol.sa (SAR, Arabic). Uses the matching internal gateway host and storefront/culture context automatically. If a category URL clearly belongs to another storefront (e.g. a trendyol.ae link), the storefront is auto-corrected to match it so prices come back in the right currency.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests for the whole run (0 = unlimited, bounded by products).

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

Recommended for production. Trendyol serves its pages behind an anti-bot TLS gate and Cloudflare that reliably rejects datacenter IPs. Apify residential proxies from the matching country (TR, AE or SA) consistently pass on the cached www surfaces used by this Actor. Running without a proxy may work occasionally but is not reliable.

## Actor input object example

```json
{
  "searchQueries": [
    "shirt"
  ],
  "maxProducts": 50,
  "includeReviews": false,
  "maxReviewsPerProduct": 10,
  "sort": "relevance",
  "storefront": "TR",
  "maxRequestsPerCrawl": 0,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `reviews` (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": [
        "shirt"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "TR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/trendyol-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": ["shirt"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "TR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/trendyol-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": [
    "shirt"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}' |
apify call ahmed_jasarevic/trendyol-scraper --silent --output-dataset

```

## MCP server setup

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