# Trendyol $0.8💰 URL | Keyword | Review Scraper (`abotapi/trendyol-scraper`) Actor

From $0.8/1K. Pull structured product data, ratings, badges, seller info, full reviews, and Q\&A from trendyol.com. Search by keyword with filters, use any URL (search, category, store, product), or run reviews-only mode on a product list.

- **URL**: https://apify.com/abotapi/trendyol-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.80 / 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Trendyol Product Scraper, Reviews & Q&A

Pull structured product data, ratings, badges, seller details, full review streams and Q&A pairs from Trendyol, Turkey's largest online marketplace. Search by keyword with rich filters, paste any Trendyol URL (search, category, store or product page), or run reviews-only mode against a list of products. ~50 normalized fields per product, low compute footprint (runs comfortably under 256 MB), and granular per-event pricing so reviews-only runs stay cheap.

### Why this scraper

* Three modes in one actor: keyword **search**, paste-any-URL, or **reviews-only** (one row per review).
* ~30 lean fields by default; **opt into `fetchDetails=true` for ~60 fields per product** including the full attribute spec list, merchant info (name, official name, city, seller score, logo), category tree, web brand, favorite count, max installment, tax %, refundable flag, department / merchandising unit, English category translations, full promotion list, winner variant with barcode + stock + tag details. URL-mode product pages always emit the rich shape.
* Filters that round-trip to the site: price range, minimum rating, sort (best match / best seller / newest / price asc / desc / most rated / most favourited), free shipping, fast delivery, official seller, coupons, in stock.
* Auto-detects all four Trendyol page shapes when you paste URLs: search results, category, seller store, single product.
* Reviews mode paginates the public review feed up to your configured cap, with rate, comment, reviewer name, language, mediaFiles, likes count and timestamps.
* Lower price than the leading alternative actor in the Apify Store: full product records are billed per result; reviews are billed per row at a fraction of the per-product rate.

### Modes at a glance

| Mode | What it takes | What you get |
|---|---|---|
| `search` | One or more keywords plus optional filters | Product records (one row each) |
| `url` | Any Trendyol URL (search, category, store, or single product) | Product records (one row each) |
| `reviews` | A list of product URLs or numeric content IDs | Review records (one row per review) |

### Data you get (product record)

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example | Notes |
|---|---|---|
| `kind` | `"product"` | Always `"product"` for product rows |
| `contentId` | `100000001` | Stable Trendyol product ID |
| `id` | `100000001` | Listing variant ID (often equal to contentId) |
| `groupId` | `100000000` | Product group ID; same group means same product, different colours |
| `url` | `"https://www.trendyol.com/sample-brand/sample-product-p-100000001"` | Direct URL to the product page |
| `name` | `"Sample Product Title"` | Listing title |
| `brand` | `"Sample Brand"` | Display brand name |
| `brandId` | `1000` | Numeric brand ID |
| `category.id` | `1000` | Category ID |
| `category.name` | `"Sample Category"` | Category display name |
| `price.current` | `0.00` | Discounted / current price |
| `price.original` | `0.00` | Strikethrough price (recommended retail) |
| `price.discountPercent` | `0.0` | Computed discount percentage |
| `price.currency` | `"TL"` | Storefront currency |
| `rating.score` | `0.0` | Average rating (0 to 5) |
| `rating.totalRatings` | `0` | Total rating count (only when `fetchReviews=true`) |
| `rating.totalComments` | `0` | Total written reviews (only when `fetchReviews=true`) |
| `rating.breakdown` | `{"5": 0, "4": 0, "3": 0, "2": 0, "1": 0}` | Rating bucket counts (only when `fetchReviews=true`) |
| `seller.id` | `100000` | Merchant ID |
| `seller.name` | `"Sample Seller"` | Merchant / store display name |
| `image` | `"https://cdn.dsmcdn.com/.../000000000-800x600.jpeg"` | Primary thumbnail |
| `images` | `["https://cdn.dsmcdn.com/.../000000000-800x600.jpeg"]` | Image gallery |
| `stock` | `0` | Reported stock count |
| `inStock` | `true` | Convenience boolean derived from stock |
| `freeCargo` | `false` | Free shipping flag |
| `fastDelivery` | `false` | Fast-delivery badge |
| `officialSeller` | `false` | Verified official seller badge |
| `sameDayShipping` | `false` | Same-day shipping flag |
| `rushDelivery` | `false` | Rush-delivery flag |
| `hasCoupon` | `false` | Collectable coupon at checkout |
| `hasCodePromo` | `false` | Promo-code applies |
| `hasFlashSale` | `false` | Flash-sale badge |
| `isInfluencerPreferred` | `false` | Influencer-preferred label |
| `dealBadge` | `null` | Deal label string (when present) |
| `stripBadge` | `null` | Strip badge label (when present) |
| `promotions` | `[]` | Raw promotion objects |
| `stamps` | `[]` | Raw stamp objects |
| `badges` | `[]` | Raw simplified-badge objects |
| `socialProof` | `{}` | Raw socialProof block from the SERP |
| `variantId` | `0` | Variant ID (size / colour) |
| `variantValue` | `""` | Variant display value |
| `boutiqueId` | `0` | Boutique ID |
| `campaignId` | `0` | Campaign ID |
| `listingId` | `""` | Internal listing handle |
| `itemNumber` | `0` | Item number |
| `reviews` | `[]` | Embedded review array (only when `fetchReviews=true`) |
| `qna` | `[]` | Q&A entries (only when `fetchQna=true`) |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` | ISO timestamp |

### Extra fields when `fetchDetails=true` or URL is a product page

> Sample shape, values are illustrative placeholders.

| Field | Example | Notes |
|---|---|---|
| `productCode` | `"AB-0000-X"` | Internal SKU code |
| `productGroupId` | `100000000` | Product group ID (variants share this) |
| `isGlobalBrand` | `false` | Global-brand flag |
| `webBrand` | `{ "id": 1000, "name": "Sample Brand", "url": "/sample-brand-x-b1000" }` | Web brand block |
| `gender` | `{ "id": 1, "name": "" }` | Gender ID |
| `webCategory` | `{ "id": 100000, "name": "Sample Category" }` | Detail-level category |
| `webCategoryTree` | `[{ "id": 1, "name": "...", "level": 1 }]` | 4-level category tree (for breadcrumbs) |
| `categoryTree` | `[{ "id": 1, "name": "...", "parent": 0 }]` | Internal category graph |
| `categoryHierarchy` | `"Top/Sub/Leaf"` | Path string |
| `categoryTopRankings` | `[{ "name": "bestSeller", "order": 1 }]` | Category-level rankings |
| `businessUnit` | `{ "id": 100000, "name": "Sample Unit", "isDigitalGoods": false }` | Trendyol's internal merchandising group |
| `attributes` | `[{ "key": { "id": 0, "name": "Color" }, "value": { "id": 0, "name": "Red" }, "searchable": true, "isStarred": true }]` | Full spec list (varies by category) |
| `favoriteCount` | `0` | Site-wide favorite count |
| `tax` | `0` | Tax rate (%) |
| `maxInstallment` | `0` | Max installments allowed at checkout |
| `isRefundable` | `true` | Refund eligibility |
| `uxLayout` | `"Sample Layout"` | UI variant flag |
| `filterableLabelIds` | `["00000000-0000-0000-0000-000000000000"]` | Internal label UUIDs |
| `englishTranslation` | `{ "productName": "...", "brandName": "...", "webBrandCategoryGenders": {} }` | English category + brand mapping |
| `merchantDetails.id` | `100000` | Merchant ID |
| `merchantDetails.name` | `"Sample Seller"` | Display name |
| `merchantDetails.officialName` | `"Sample Seller LTD"` | Registered legal name |
| `merchantDetails.taxNumber` | `"0000000000"` | Tax / VKN identifier |
| `merchantDetails.registeredEmailAddress` | `"sample@hs01.kep.tr"` | KEP (registered electronic mail) address |
| `merchantDetails.cityName` | `"İstanbul"` | Merchant city |
| `merchantDetails.countryName` | `"TÜRKİYE"` | Merchant country |
| `merchantDetails.sellerScore` | `{ "value": 0.0, "color": "#000000" }` | Trust score |
| `merchantDetails.corporateInvoiceApplicable` | `false` | Corporate invoicing supported |
| `merchantDetails.logoUrl` | `"https://cdn.dsmcdn.com/seller-store/uploads/100000/sample.jpeg"` | Merchant logo |
| `merchantDetails.codEligible` | `false` | Cash-on-delivery enabled |
| `merchantDetails.stickerIds` | `[0, 0]` | Sticker IDs |
| `merchantDetails.*` | — | Plus any additional keys Trendyol exposes on the merchant object (forwarded verbatim) |
| `campaign` | `{ "id": 0, "name": "Sample Campaign", "startDate": "2026-01-01T00:00:00", "endDate": "2026-12-31T00:00:00", "stockTypeId": 0 }` | Campaign metadata |
| `detailPromotions` | `[{ "id": 0, "name": "Sample Promo", "discountType": 0, "promotionDiscountType": "Cargo", "isApplied": true, "promotionEndDate": "2026-12-31T00:00:00" }]` | Per-promotion detail |
| `winnerVariant.itemNumber` | `0` | Winning variant's item number |
| `winnerVariant.listingId` | `"00000000000000000000000000000000"` | Internal listing handle |
| `winnerVariant.barcode` | `"0000000000000"` | Product barcode |
| `winnerVariant.quantity` | `0` | Stock quantity |
| `winnerVariant.maxSaleLimit` | `0` | Max units per order |
| `winnerVariant.rushDeliveryDuration` | `0` | Rush delivery hours |
| `winnerVariant.tagDetails` | `[{ "tag_id": 0, "tag": "...", "display_name": "...", "searchable": true }]` | Promotional tags |

### Data you get (review record, reviews mode)

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example | Notes |
|---|---|---|
| `kind` | `"review"` | Always `"review"` for review rows |
| `id` | `400000000` | Review ID |
| `productContentId` | `100000001` | Parent product content ID |
| `productUrl` | `"https://www.trendyol.com/.../sample-product-p-100000001"` | Parent product URL |
| `rate` | `0` | 1 to 5 |
| `comment` | `"Sample review text appears here."` | Review body |
| `userFullName` | `"**** ****"` | Reviewer (Trendyol redacts most names) |
| `isElite` | `false` | Trendyol Elite badge |
| `isInfluencer` | `false` | Influencer flag |
| `likesCount` | `0` | Helpfulness votes |
| `language` | `"tr"` | Review language |
| `createdAt` | `1700000000` | Unix epoch (ms) |
| `mediaFiles` | `[]` | Photos / videos attached |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` | ISO timestamp |

### How to use

#### Search by keyword

```json
{
  "mode": "search",
  "queries": ["iphone 15", "macbook"],
  "minPrice": 5000,
  "maxPrice": 50000,
  "minRating": "4",
  "sortBy": "PRICE_BY_ASC",
  "freeCargoOnly": true,
  "maxListings": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "TR"
  }
}
````

#### Paste any Trendyol URL

```json
{
  "mode": "url",
  "urls": [
    "https://www.trendyol.com/sr?q=iphone+15&pi=1",
    "https://www.trendyol.com/cep-telefonu-x-c103498",
    "https://www.trendyol.com/magaza/sample-store-m-100000",
    "https://www.trendyol.com/apple/sample-product-p-100000001"
  ],
  "maxPages": 3,
  "maxListings": 100,
  "fetchReviews": true,
  "fetchQna": true
}
```

#### Reviews-only

```json
{
  "mode": "reviews",
  "productInputs": [
    "356251114",
    "https://www.trendyol.com/apple/sample-product-p-100000001"
  ],
  "maxReviewsPerProduct": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "TR"
  }
}
```

### Input parameters

| Parameter | Type | Default | Notes |
|---|---|---|---|
| `mode` | string | `"search"` | One of `search`, `url`, `reviews` |
| `queries` | string\[] | `[]` | search mode only |
| `urls` | string\[] | `[]` | url mode only |
| `productInputs` | string\[] | `[]` | reviews mode only; URL or numeric content ID |
| `maxReviewsPerProduct` | integer | `200` | Cap per product in reviews mode |
| `minPrice` | integer | (none) | Search filter |
| `maxPrice` | integer | (none) | Search filter |
| `minRating` | string | `"0"` | One of `0`, `1`, `2`, `3`, `4`, `4.5` |
| `sortBy` | string | `"BEST_SCORE"` | `BEST_SELLER`, `NEWEST`, `PRICE_BY_ASC`, `PRICE_BY_DESC`, `MOST_RATED`, `MOST_FAVOURITE` |
| `freeCargoOnly` | bool | `false` | Drop products without free shipping |
| `fastDeliveryOnly` | bool | `false` | Keep only products with fast-delivery badge |
| `officialSellerOnly` | bool | `false` | Keep only verified official sellers |
| `couponsOnly` | bool | `false` | Keep only items with collectable coupons |
| `inStockOnly` | bool | `true` | Drop out-of-stock items |
| `maxPages` | integer | `5` | Pages per query / URL (0 = unlimited within `maxListings`) |
| `maxListings` | integer | `50` | Total cap across queries / URLs (0 = unlimited) |
| `fetchDetails` | bool | `false` | Pull rich detail-page fields per product (~25 extra fields per record) |
| `fetchReviews` | bool | `false` | Attach review summary + first batch to each product |
| `fetchQna` | bool | `false` | Attach answered Q\&A to each product |
| `maxQnaPerProduct` | integer | `20` | Q\&A cap per product when `fetchQna=true` |
| `proxyConfiguration` | object | residential TR | Datacenter works; residential pinned to TR is the most reliable |

### Output example (search / url mode)

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "kind": "product",
  "contentId": 100000001,
  "id": 100000001,
  "groupId": 100000000,
  "url": "https://www.trendyol.com/sample-brand/sample-product-p-100000001",
  "name": "Sample Product Title",
  "brand": "Sample Brand",
  "brandId": 1000,
  "category": { "id": 1000, "name": "Sample Category" },
  "price": {
    "current": 0,
    "original": 0,
    "recommendedRetail": 0,
    "discountPercent": 0,
    "currency": "TL"
  },
  "rating": { "score": 0, "totalRatings": 0, "totalComments": 0, "breakdown": {} },
  "seller": { "id": 100000, "name": "Sample Seller" },
  "image": "https://cdn.dsmcdn.com/mnresize/400/-/sample/000000000-800x600.jpeg",
  "images": ["https://cdn.dsmcdn.com/mnresize/400/-/sample/000000000-800x600.jpeg"],
  "stock": 0,
  "inStock": true,
  "freeCargo": false,
  "fastDelivery": false,
  "officialSeller": false,
  "sameDayShipping": false,
  "rushDelivery": false,
  "hasCoupon": false,
  "hasCodePromo": false,
  "hasFlashSale": false,
  "isInfluencerPreferred": false,
  "promotions": [],
  "stamps": [],
  "badges": [],
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Output example (reviews mode)

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "kind": "review",
  "id": 400000000,
  "productContentId": 100000001,
  "productUrl": "https://www.trendyol.com/sample-brand/sample-product-p-100000001",
  "rate": 0,
  "comment": "Sample review text appears here.",
  "userFullName": "**** ****",
  "isElite": false,
  "isInfluencer": false,
  "likesCount": 0,
  "language": "tr",
  "createdAt": 1700000000,
  "mediaFiles": [],
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan and proxy

- **Apify Datacenter** (free-tier and every paid tier, prefilled default). Just tick Use Apify Proxy and leave Apify Proxy Groups empty. Works for casual runs; the actor warns at startup that this configuration is non-deterministic on this site.
- **Apify Residential, country = TR** (Starter plan and above, recommended for reliability). Set Apify Proxy Groups to Residential and country to TR. Returns full Turkish inventory consistently.
- **Bring-your-own proxies**. Paste a list of `http://user:pass@host:port` URLs into the Custom proxies field and untick Use Apify Proxy.

If a run returns 0 items, the actor pushes an error record to the dataset with a clear message + the upgrade link.

# Actor input Schema

## `mode` (type: `string`):

search = discover products by keyword + filters. url = paste Trendyol URLs (search, category, store or product page). reviews = take a list of product URLs / IDs and dump their reviews only.

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

One or more keywords. Each runs as a separate search; the per-query budget is split evenly across them.

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

Minimum price in storefront currency (TL for TR, EUR/USD for international).

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

Maximum price in storefront currency.

## `minRating` (type: `string`):

Drop products rated below this threshold.

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

Site-native sort. BEST\_SCORE is the default Trendyol relevance ranking.

## `freeCargoOnly` (type: `boolean`):

Drop products that don't include free shipping.

## `fastDeliveryOnly` (type: `boolean`):

Keep only products with the fast-delivery tag.

## `officialSellerOnly` (type: `boolean`):

Keep only products from sellers with the verified-official badge.

## `couponsOnly` (type: `boolean`):

Keep only products that currently offer a collectable coupon at checkout.

## `inStockOnly` (type: `boolean`):

Drop products that are currently out of stock.

## `urls` (type: `array`):

Paste any Trendyol URLs. Supported page types: search results (/sr?q=…), category (/<slug>-x-c<id>), seller store (/magaza/<slug>-m-<id>), or single product (/<brand>/<slug>-p-<contentId>). Pagination walks forward from the page number embedded in the URL (default page 1).

## `productInputs` (type: `array`):

Either a full Trendyol product URL ending in /…-p-<contentId>, or just the numeric content ID. One row per review. Use maxReviewsPerProduct to cap how many you pull from each.

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

Hard cap per product. The site exposes thousands of reviews per popular product; a sensible cap keeps cost and runtime predictable.

## `maxPages` (type: `integer`):

Maximum SERP pages to walk per query in search mode, or per URL in URL mode. 0 = no per-search cap (use maxListings to bound the total).

## `maxListings` (type: `integer`):

Total cap across all queries / URLs. 0 = unlimited (still bounded by maxPages). Ignored in reviews-only mode.

## `fetchDetails` (type: `boolean`):

When ON in search or URL mode, fetch each product's detail page and add ~25 extra fields: full attribute list, merchant info (name, official name, city, score), category tree, web brand, favorite count, max installment, tax %, refundable flag, merchandising group, English category translations, full promotions, winner variant with barcode + stock + tags. Costs roughly +1 fetch per product.

## `fetchReviews` (type: `boolean`):

When ON in search or URL mode, attach the rating breakdown + the first batch of review text to each product record. Costs roughly +1 API call per product.

## `fetchQna` (type: `boolean`):

When ON in search or URL mode, attach the answered Q\&A pairs to each product record. Costs roughly +1 API call per product.

## `maxQnaPerProduct` (type: `integer`):

Cap on Q\&A pairs per product when fetchQna = true.

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

Apify Datacenter (the prefilled default — works on every plan, free-tier included) is fine for casual runs. For consistently reliable results on long runs, switch to Apify Proxy Groups = Residential with country = TR (Starter plan and above include Residential). You can also paste your own proxy URLs into the Custom proxies field and untick Use Apify Proxy.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "iphone"
  ],
  "minRating": "0",
  "sortBy": "BEST_SCORE",
  "freeCargoOnly": false,
  "fastDeliveryOnly": false,
  "officialSellerOnly": false,
  "couponsOnly": false,
  "inStockOnly": true,
  "urls": [
    "https://www.trendyol.com/sr?q=iphone+15&pi=1",
    "https://www.trendyol.com/cep-telefonu-x-c103498?pi=1"
  ],
  "productInputs": [
    "https://www.trendyol.com/apple/yenilenmis-iphone-11-64-gb-beyaz-cep-telefonu-12-ay-garantili-a-kalite-p-356251114"
  ],
  "maxReviewsPerProduct": 200,
  "maxPages": 0,
  "maxListings": 20,
  "fetchDetails": true,
  "fetchReviews": false,
  "fetchQna": false,
  "maxQnaPerProduct": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (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"
    ],
    "urls": [
        "https://www.trendyol.com/sr?q=iphone+15&pi=1",
        "https://www.trendyol.com/cep-telefonu-x-c103498?pi=1"
    ],
    "productInputs": [
        "https://www.trendyol.com/apple/yenilenmis-iphone-11-64-gb-beyaz-cep-telefonu-12-ay-garantili-a-kalite-p-356251114"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/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 = {
    "queries": ["iphone"],
    "urls": [
        "https://www.trendyol.com/sr?q=iphone+15&pi=1",
        "https://www.trendyol.com/cep-telefonu-x-c103498?pi=1",
    ],
    "productInputs": ["https://www.trendyol.com/apple/yenilenmis-iphone-11-64-gb-beyaz-cep-telefonu-12-ay-garantili-a-kalite-p-356251114"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/trendyol-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ],
  "urls": [
    "https://www.trendyol.com/sr?q=iphone+15&pi=1",
    "https://www.trendyol.com/cep-telefonu-x-c103498?pi=1"
  ],
  "productInputs": [
    "https://www.trendyol.com/apple/yenilenmis-iphone-11-64-gb-beyaz-cep-telefonu-12-ay-garantili-a-kalite-p-356251114"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/trendyol-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/trendyol-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trendyol $0.8💰 URL | Keyword | Review Scraper",
        "description": "From $0.8/1K. Pull structured product data, ratings, badges, seller info, full reviews, and Q&A from trendyol.com. Search by keyword with filters, use any URL (search, category, store, product), or run reviews-only mode on a product list.",
        "version": "1.0",
        "x-build-id": "L1fwad5406Oww3fSF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~trendyol-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-trendyol-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/abotapi~trendyol-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-trendyol-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/abotapi~trendyol-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-trendyol-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "url",
                            "reviews"
                        ],
                        "type": "string",
                        "description": "search = discover products by keyword + filters. url = paste Trendyol URLs (search, category, store or product page). reviews = take a list of product URLs / IDs and dump their reviews only.",
                        "default": "search"
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "One or more keywords. Each runs as a separate search; the per-query budget is split evenly across them.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price in storefront currency (TL for TR, EUR/USD for international)."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price in storefront currency."
                    },
                    "minRating": {
                        "title": "Minimum star rating",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "4.5"
                        ],
                        "type": "string",
                        "description": "Drop products rated below this threshold.",
                        "default": "0"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "BEST_SCORE",
                            "BEST_SELLER",
                            "NEWEST",
                            "PRICE_BY_ASC",
                            "PRICE_BY_DESC",
                            "MOST_RATED",
                            "MOST_FAVOURITE"
                        ],
                        "type": "string",
                        "description": "Site-native sort. BEST_SCORE is the default Trendyol relevance ranking.",
                        "default": "BEST_SCORE"
                    },
                    "freeCargoOnly": {
                        "title": "Free shipping only",
                        "type": "boolean",
                        "description": "Drop products that don't include free shipping.",
                        "default": false
                    },
                    "fastDeliveryOnly": {
                        "title": "Fast delivery only",
                        "type": "boolean",
                        "description": "Keep only products with the fast-delivery tag.",
                        "default": false
                    },
                    "officialSellerOnly": {
                        "title": "Official seller only",
                        "type": "boolean",
                        "description": "Keep only products from sellers with the verified-official badge.",
                        "default": false
                    },
                    "couponsOnly": {
                        "title": "Has collectable coupon only",
                        "type": "boolean",
                        "description": "Keep only products that currently offer a collectable coupon at checkout.",
                        "default": false
                    },
                    "inStockOnly": {
                        "title": "In stock only",
                        "type": "boolean",
                        "description": "Drop products that are currently out of stock.",
                        "default": true
                    },
                    "urls": {
                        "title": "Trendyol URLs",
                        "type": "array",
                        "description": "Paste any Trendyol URLs. Supported page types: search results (/sr?q=…), category (/<slug>-x-c<id>), seller store (/magaza/<slug>-m-<id>), or single product (/<brand>/<slug>-p-<contentId>). Pagination walks forward from the page number embedded in the URL (default page 1).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "productInputs": {
                        "title": "Products to fetch reviews for",
                        "type": "array",
                        "description": "Either a full Trendyol product URL ending in /…-p-<contentId>, or just the numeric content ID. One row per review. Use maxReviewsPerProduct to cap how many you pull from each.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max reviews per product (reviews mode + fetchReviews)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap per product. The site exposes thousands of reviews per popular product; a sensible cap keeps cost and runtime predictable.",
                        "default": 200
                    },
                    "maxPages": {
                        "title": "Max pages per query / URL",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum SERP pages to walk per query in search mode, or per URL in URL mode. 0 = no per-search cap (use maxListings to bound the total).",
                        "default": 0
                    },
                    "maxListings": {
                        "title": "Max products total",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across all queries / URLs. 0 = unlimited (still bounded by maxPages). Ignored in reviews-only mode.",
                        "default": 20
                    },
                    "fetchDetails": {
                        "title": "Pull rich detail-page fields for each product",
                        "type": "boolean",
                        "description": "When ON in search or URL mode, fetch each product's detail page and add ~25 extra fields: full attribute list, merchant info (name, official name, city, score), category tree, web brand, favorite count, max installment, tax %, refundable flag, merchandising group, English category translations, full promotions, winner variant with barcode + stock + tags. Costs roughly +1 fetch per product.",
                        "default": true
                    },
                    "fetchReviews": {
                        "title": "Also pull review summary for each product",
                        "type": "boolean",
                        "description": "When ON in search or URL mode, attach the rating breakdown + the first batch of review text to each product record. Costs roughly +1 API call per product.",
                        "default": false
                    },
                    "fetchQna": {
                        "title": "Also pull Q&A for each product",
                        "type": "boolean",
                        "description": "When ON in search or URL mode, attach the answered Q&A pairs to each product record. Costs roughly +1 API call per product.",
                        "default": false
                    },
                    "maxQnaPerProduct": {
                        "title": "Max Q&A entries per product",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on Q&A pairs per product when fetchQna = true.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apify Datacenter (the prefilled default — works on every plan, free-tier included) is fine for casual runs. For consistently reliable results on long runs, switch to Apify Proxy Groups = Residential with country = TR (Starter plan and above include Residential). You can also paste your own proxy URLs into the Custom proxies field and untick Use Apify Proxy.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
