# 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:** 25 total users, 8 monthly users, 100.0% runs succeeded, 0 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 |

### Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step **after** the scrape — the Apify dataset is never changed.

**What gets written to the connector:** a condensed, human-readable **summary** of each record — not the full JSON. Each item becomes one entry with a **title** and its key fields flattened to plain text. The **complete record always stays in the Apify dataset**.

1. Authorize a connector once under **Apify → Settings → Integrations** (Notion, Linear, Airtable, or Apify).
2. Select it in the **"Pipe results into your apps"** input field. (If the picker is empty, you haven't authorized a connector yet.)
3. For **Notion**, also set `notionParentPageUrl` to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

### 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`):

Trendyol requires Apify Residential proxy with country = TR (the prefilled default) — Starter plan and above include Residential. On Datacenter or non-TR exits Trendyol rejects every request and the run returns an upgrade notice instead of products. You can also paste your own TR proxy URLs into the Custom proxies field and untick Use Apify Proxy.

## `mcpConnectors` (type: `array`):

Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## 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,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  },
  "maxNotifyListings": 50
}
```

# 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,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "TR"
    }
};

// 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,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "TR",
    },
}

# 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,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}' |
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": "WeRjFPBYUcSO2F4ry"
    },
    "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": "Trendyol requires Apify Residential proxy with country = TR (the prefilled default) — Starter plan and above include Residential. On Datacenter or non-TR exits Trendyol rejects every request and the run returns an upgrade notice instead of products. You can also paste your own TR proxy URLs into the Custom proxies field and untick Use Apify Proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "TR"
                        }
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
