# Trendyol Scraper - Products, Prices, Sellers & Ratings (`scrapewise/trendyol-scraper`) Actor

Scrape Trendyol (Turkey) products by keyword, category, brand, store or product link: price, basket price, discount, rating, favorites, badges and, optionally, seller, seller score, other sellers, barcode and attributes. onlyNew for daily tracking. Error rows are free.

- **URL**: https://apify.com/scrapewise/trendyol-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 product delivereds

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 Scraper: products, prices, basket discounts, sellers and ratings from Trendyol Turkey

Trendyol Scraper collects **products from trendyol.com**, Turkey's largest marketplace, without an account, cookies
or a browser. Search by keyword, or paste any search, category, brand, store (magaza) or product link, and each product
comes back as one clean row: name, brand, category, the shelf price, the basket price after Trendyol's automatic
promotions, the old crossed-out price, discount, average rating and number of ratings, favorites, badges, free and
fast shipping flags, images and the product link.

Turn on **Full product details** and every row also gets the seller (store name, seller score, city, company name
when the seller is a company), the other sellers of the same product with their prices, barcode, product code, the
full attribute table, variants, category path and the product's rank in its category.

It is used for price monitoring and repricing, competitor and assortment research, Buy Box tracking across sellers,
finding suppliers and brands that sell well in Turkey, and building product datasets for analytics and AI.

### At a glance

| What | Price |
|---|---|
| Product delivered (list fields) | **US$ 1.00 per 1,000 products** (US$ 0.001 each) |
| Product with full details (seller, other sellers, barcode, attributes) | US$ 2.00 per 1,000 products |
| Run start | US$ 0.005 per run |

- 500 laptops from a search, list fields only = **US$ 0.505**.
- 100 products with full details = **US$ 0.205**.
- Error rows and duplicates are never charged. `maxItems` is a hard cap, and a spending limit set on the run stops it
  cleanly with everything delivered so far.

### Quick start

```json
{
  "searchQueries": ["laptop"],
  "maxItems": 100
}
```

Best sellers in a price range, with the seller of each product:

```json
{
  "searchQueries": ["air fryer", "robot vacuum"],
  "sortBy": "best_seller",
  "minPrice": 2000,
  "maxPrice": 8000,
  "includeDetails": true,
  "maxItems": 200
}
```

Links work too. Copy them from the address bar after choosing filters on the site:

```json
{
  "startUrls": [
    "https://www.trendyol.com/laptop-x-c103108",
    "https://www.trendyol.com/sr?mid=968",
    "https://www.trendyol.com/asus/vivobook-go-15-e1504fa-bq4462w-amd-ryzen-5-8gb-lpddr5-512gb-ssd-15-6-full-hd-windows-11-home-laptop-p-1179144350"
  ],
  "maxItems": 300
}
```

### Input

| Field | What it does |
|---|---|
| `searchQueries` | Keywords, one per line. Turkish and English both work (Trendyol translates many English words). |
| `startUrls` | Search, category, brand and store pages (every filter in the link is kept), and product links (with `-p-` in the address), which come back with full details. |
| `sortBy` | `relevance` (default), `price_asc`, `price_desc`, `newest`, `best_seller`, `most_favourite`, `most_rated`. |
| `minPrice` / `maxPrice` | Price range in Turkish lira (TRY). |
| `includeDetails` | Opens each product page for the seller, other sellers, barcode, attributes, variants and ranking (default off). |
| `maxItems` | Cap for the whole run (default 50; 0 = no cap). |
| `onlyNew` | For schedules: delivers only products not delivered by earlier runs of the same search. |
| `proxyConfiguration` | Apify datacenter proxy by default; the run moves to a Turkish residential IP by itself if Trendyol refuses it. |

`searchQuery`, `keyword`, `queries`, `urls`, `productUrls`, `maxResults` and `limit` are accepted too, so inputs
written for other Trendyol tools keep working.

### Output

Every row has `type` (`product` or `error`), `scrapedAt`, `errorCode` and `error`.

| Field | Meaning |
|---|---|
| `productId` | Trendyol content ID (the number after `-p-` in the link) |
| `name`, `brand`, `brandId` | Product name and brand |
| `category`, `categoryId` | Trendyol category |
| `url` | Product page |
| `price` | Shelf price in TRY |
| `basketPrice` | Price in the basket after automatic promotions, when lower |
| `originalPrice` | Old crossed-out price, when the product is discounted |
| `discountPercent` | Discount shown on the card |
| `priceText` | Price as the site shows it (`47.404,05 TL`) |
| `rating`, `ratingCount` | Average rating (1 to 5) and number of ratings |
| `favoriteCount` | How many shoppers added it to favorites (when the site shows it) |
| `image`, `images` | Full size image links |
| `variant` | Size or variant shown on the card (clothing, shoes) |
| `groupId`, `merchantId` | Product group (all colors/sizes) and the seller shown on the card |
| `freeShipping`, `rushDelivery`, `sameDayShipping` | Delivery flags |
| `officialSeller`, `isSponsored`, `soldOut` | Official store badge, sponsored placement, sold out |
| `badges`, `promotions` | Campaign badges and active promotions |
| `cardAttributes` | Key attributes printed on the card (processor, material...) |
| `searchPosition` | Position in the search or list, counting from 1 |
| `sourceQuery` | The keyword or link that found the product |

With `includeDetails` (or a product link), also:

| Field | Meaning |
|---|---|
| `sellerId`, `sellerName`, `sellerScore`, `sellerCity` | Seller store of the Buy Box, its score (0 to 10) and city |
| `sellerCompanyName` | Registered company name, only when the seller is a company |
| `sellerCorporateInvoice`, `sellerStoreUrl` | Corporate invoice available, link to the seller store |
| `otherSellersCount`, `otherSellers` | Every other seller of the same product with score, price and delivery flags |
| `productCode`, `barcode` | Manufacturer code and barcode (EAN) |
| `categoryPath`, `webCategoryPath`, `businessUnit` | Full category paths |
| `inStock`, `lowestPriceInDays` | Stock, and "lowest price of the last N days" label |
| `maxInstallments`, `vatPercent`, `isRefundable` | Installments, VAT rate, returns |
| `reviewCount` | Ratings that have a written review |
| `categoryRankings` | Rank in the category lists (best seller, most favorited...) |
| `attributes` | Full attribute table |
| `variants` | Every variant with stock, barcode and price |

#### Example (real row, full details, trimmed)

```json
{
  "type": "product",
  "productId": 1179144350,
  "name": "Vivobook Go 15 E1504FA-BQ4462W AMD Ryzen 5 8GB LPDDR5 512GB SSD 15.6\" Full HD Windows 11 Home Laptop",
  "brand": "ASUS",
  "category": "Dizüstü Bilgisayar",
  "url": "https://www.trendyol.com/asus/vivobook-go-15-e1504fa-bq4462w-amd-ryzen-5-8gb-lpddr5-512gb-ssd-15-6-full-hd-windows-11-home-laptop-p-1179144350",
  "price": 24499,
  "originalPrice": 28999,
  "currency": "TRY",
  "productCode": "E1504FA-BQ4462W",
  "barcode": "4711636460576",
  "webCategoryPath": "Elektronik > Bilgisayar&Tablet > Bilgisayar > Laptop",
  "sellerName": "Techburada",
  "sellerScore": 9.3,
  "sellerCity": "İstanbul",
  "otherSellersCount": 3,
  "otherSellers": [
    {"sellerId": 106740, "sellerName": "Teknorya", "sellerScore": 9.3, "price": 24999, "freeShipping": true},
    {"sellerId": 107870, "sellerName": "Teknosa", "sellerScore": 9, "price": 25999, "freeShipping": true}
  ],
  "favoriteCount": 310,
  "categoryRankings": [{"list": "bestSeller", "position": 9}],
  "attributes": {"Garanti Tipi": "Resmi Distribütör Garantili", "Ram (Sistem Belleği)": "8 GB", "SSD Kapasitesi": "512 GB"},
  "scrapedAt": "2026-10-17T00:39:49Z"
}
```

### Errors you may see

Error rows are free and have `type: "error"`, an `errorCode` and a plain explanation.

| errorCode | When |
|---|---|
| `INVALID_URL` | The link is not from trendyol.com, or it is not a product list page |
| `PRODUCT_NOT_FOUND` | A product link that is removed or did not open |
| `NO_RESULTS` | The search and filters have no product |
| `BLOCKED` | Trendyol refused every attempt for one search; run it again later |
| `INVALID_INPUT` | A field has a value the Actor cannot use (the message says which) |

### Integrations, scheduling and AI agents

- **Schedule** the same searches daily in [Apify schedules](https://docs.apify.com/platform/schedules) with
  `onlyNew` to get only new listings, or without it to follow prices and Buy Box changes over time.
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier or Google Sheets through
  [Apify integrations](https://docs.apify.com/platform/integrations).
- **AI agents:** call it as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)
  in Claude, ChatGPT, Cursor or any MCP client, for example "find the 50 best selling air fryers on Trendyol under
  5,000 TRY and compare their sellers".

### FAQ

**Do I need a Trendyol account?** No. Everything comes from the public pages any visitor sees.

**Which price should I use?** `price` is the shelf price. `basketPrice` is what the shopper pays after Trendyol's
automatic basket promotions, when that is lower. `originalPrice` is the old price shown crossed out.

**Can I get every seller of a product?** Yes, with `includeDetails` on (or by pasting the product link):
`otherSellers` lists each one with score and price.

**How many products can one search return?** Trendyol lists up to a few thousand products per search; split big
categories with price ranges or brand links to go deeper.

**Are prices in lira?** Yes, the Actor reads the Turkey storefront, so prices are in TRY.

### Limitations

- Turkey storefront only (prices in TRY). The international storefronts are not covered.
- Written review texts and questions are not collected; ratings and counts are.
- `favoriteCount` on list rows appears only when Trendyol shows it on the card; full details always have it.
- The seller's tax number, address and e-mail are never collected.

### Changelog

- **16 Oct 2026**: first version. Keyword search with sort and price range, search/category/brand/store/product
  links, optional full details with seller and other sellers, onlyNew for schedules, free error rows.

# Actor input Schema

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

Keywords to search on Trendyol, one per line, for example laptop or air fryer (Turkish or English both work). Each keyword is one search. Leave empty when you paste links below.

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

Optional: links copied from trendyol.com. Search, category, brand and store (magaza) pages are read with every filter in the link; product links (with -p- in the address) come back with the full details.

## `sortBy` (type: `string`):

Order of the results, the same options as the site.

## `minPrice` (type: `integer`):

Only products from this price in Turkish lira, for example 1000. Empty = no minimum.

## `maxPrice` (type: `integer`):

Only products up to this price in Turkish lira, for example 20000. Empty = no maximum.

## `includeDetails` (type: `boolean`):

On: opens each product page for the seller, seller score, other sellers with their prices, barcode, product code, all attributes, variants and category ranking (charged as 'Product with full details'). Off: faster, list fields only.

## `maxItems` (type: `integer`):

Hard cap for the whole run, across all searches and links. 0 = no cap.

## `onlyNew` (type: `boolean`):

On: remembers the products delivered in earlier runs of the same search (in your account) and delivers only products not seen before. Skipped products are free.

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

Apify datacenter proxy by default. If Trendyol refuses it, the run moves to a Turkish residential IP by itself. Change it only if you know you need to.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop"
  ],
  "sortBy": "relevance",
  "includeDetails": false,
  "maxItems": 50,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/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": ["laptop"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/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": [
    "laptop"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/trendyol-scraper --silent --output-dataset

```

## MCP server setup

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