# Trendyol Scraper (`automation-lab/trendyol-scraper`) Actor

Extract Trendyol products, sellers, prices, promotions, stock, ratings, reviews, and answered Q\&A for marketplace monitoring.

- **URL**: https://apify.com/automation-lab/trendyol-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper

Extract Trendyol products, prices, promotions, stock signals, sellers, ratings, reviews, and answered Q\&A into a structured Apify dataset.

Use it for marketplace price and assortment monitoring, seller research, customer-feedback analysis, and recurring data pipelines. The Actor supports keyword searches and individual public product URLs. A Turkish residential browser session is enabled by default so runs can access the Turkish catalog and TRY prices.

### What does Trendyol Scraper do?

Trendyol Scraper turns public marketplace pages into one typed product record per dataset item.

It can:

- search products by one or more keywords;
- extract product IDs, names, brands, categories, images, and URLs;
- capture current and original prices, currencies, promotions, and availability signals;
- enrich products with public seller profiles and performance metrics;
- collect public review text, ratings, dates, likes, and media links;
- collect public product questions and seller answers;
- use a sticky Turkish residential session for the Turkish storefront;
- cap products, reviews, and questions predictably;
- run on a schedule for recurring marketplace snapshots.

Review, question, and seller data is nested inside its product. This keeps the default dataset easy to join, export, and compare between runs.

### Who is this Trendyol data extractor for?

**E-commerce analysts** can compare product prices, promotions, brands, and assortment.

**Brand and category managers** can monitor how products are positioned and rated on Trendyol.

**Retail data teams** can feed structured marketplace snapshots into a warehouse or dashboard.

**Customer-insight teams** can analyze public review and Q\&A text without copying pages manually.

**Developers** can call the Actor through Apify API, JavaScript, Python, webhooks, schedules, or MCP.

The Actor does not access accounts, orders, checkout data, private seller contacts, or personal contact details.

### Why use this Actor?

A plain HTTP request to Trendyol commonly receives a Cloudflare challenge. This Actor uses a real browser, coherent cookies, and a sticky session. It then reads Trendyol's structured page state and public JSON responses instead of relying on brittle visible-text selectors.

Other practical advantages include:

- Turkish geography by default;
- bounded session rotation when an identity is challenged;
- explicit international/direct mode when Turkish routing is unnecessary;
- separate limits for products, reviews, and questions;
- no silent success when Trendyol returns a challenge page;
- typed fields suitable for JSON, CSV, Excel, and database ingestion.

### What Trendyol data can you extract?

| Area | Example fields |
| --- | --- |
| Product | `productId`, `productGroupId`, `name`, `brand`, `category`, `url`, `imageUrl` |
| Price | `price`, `originalPrice`, `currency`, `promotions` |
| Availability | `inStock` when Trendyol exposes a stock signal |
| Seller | `merchantId`, `merchantName`, seller score, location, product count, store URL, seller metrics |
| Rating | average `rating`, `ratingCount`, `reviewCount` |
| Reviews | rating, comment, date, likes, language, seller, media URLs |
| Q\&A | question, answer, seller, creation date |
| Provenance | `searchQuery`, `sourceUrl`, `scrapedAt` |

Some fields can be `null` when Trendyol does not expose them for a product or storefront. Empty review or question arrays mean the enrichment was requested but no matching public records were available within the configured limit.

### Getting started

1. Open the Actor input page.
2. Keep the example `laptop bag` query or enter your own product terms.
3. Set **Maximum products** to a small value for the first run.
4. Enable seller, review, or Q\&A enrichment only when you need those records.
5. Keep **Use Turkish residential proxy** enabled for the Turkish catalog.
6. Click **Start**.
7. Open the **Products** dataset view.
8. Export the results or connect the run to your workflow.

For a single product, leave search queries empty and add its public Trendyol URL under **Trendyol URLs**.

### Input parameters

| Field | Type | Default | Purpose |
| --- | --- | --- | --- |
| `searchQueries` | string array | `['laptop bag']` | Product keywords to search. |
| `startUrls` | URL array | empty | Public Trendyol product or search-result URLs. |
| `maxItems` | integer | `10` | Maximum product rows across all inputs, from 1 to 1,000. |
| `includeSeller` | boolean | `false` | Add the public seller profile and performance labels. |
| `includeReviews` | boolean | `false` | Add public reviews to each product. |
| `includeQuestions` | boolean | `false` | Add public answered Q\&A to each product. |
| `maxReviewsPerProduct` | integer | `10` | Review cap per product, from 1 to 200. |
| `maxQuestionsPerProduct` | integer | `10` | Answered-question cap per product, from 1 to 200. |
| `useResidentialProxy` | boolean | `true` | Use a sticky residential browser session. |
| `proxyCountryCode` | string | `TR` | Two-letter residential proxy country code. |

At least one non-empty search query or supported Trendyol URL is required. URLs from other domains and unsupported Trendyol routes fail input validation.

### Example inputs

#### Search products and prices

```json
{
  "searchQueries": ["laptop bag", "coffee machine"],
  "maxItems": 25,
  "useResidentialProxy": true,
  "proxyCountryCode": "TR"
}
```

#### Enrich one product with seller, reviews, and Q\&A

```json
{
  "startUrls": [{
    "url": "https://www.trendyol.com/en/trendyol-shoes/black-medium-size-women-s-laptop-briefcase-takss26lc00001-p-1086400337?boutiqueId=651724&merchantId=968"
  }],
  "maxItems": 1,
  "includeSeller": true,
  "includeReviews": true,
  "includeQuestions": true,
  "maxReviewsPerProduct": 20,
  "maxQuestionsPerProduct": 20,
  "useResidentialProxy": false
}
```

### Output example

A current product-enrichment run produces records shaped like this:

```json
{
  "productId": 1086400337,
  "productGroupId": 825858629,
  "name": "Black Medium Size Women's Laptop & Briefcase Takss26Lc00001",
  "brand": "TRENDYOL SHOES",
  "category": "Laptop Bag",
  "url": "https://www.trendyol.com/en/trendyol-shoes/black-medium-size-women-s-laptop-briefcase-takss26lc00001-p-1086400337?boutiqueId=651724&merchantId=968",
  "price": 22.3,
  "currency": "€",
  "merchantId": 968,
  "merchantName": "Trendyol",
  "rating": 3.8,
  "ratingCount": 44,
  "reviewCount": 28,
  "seller": {
    "id": 968,
    "name": "Trendyol",
    "location": "İstanbul"
  },
  "reviews": [{
    "rating": 5,
    "comment": "Laptop koymak için aldım ve tam ölçüsünde oldu. Çok şık.",
    "language": "tr"
  }],
  "questions": [{
    "question": "Hakiki deri mi",
    "answer": "Merhaba, ürün 100% Deridir. İlginiz için teşekkür ederiz."
  }],
  "searchQuery": null,
  "scrapedAt": "2026-07-30T02:45:14.559Z"
}
```

Public review and Q\&A text is source content and may be in Turkish even when the product page uses another language.

### How much does it cost to scrape Trendyol products?

The Actor uses pay-per-event pricing:

- a one-time **Start** event is charged once per run;
- one **Item processed** event is charged for each product saved;
- seller, review, and Q\&A enrichment is included in that product item and has no separate event charge.

The current BRONZE price is **$0.005 per run plus $0.0024668 per product**. At that tier:

| Products (including run start) | Estimated Actor charge |
| ---: | ---: |
| 1 product (including run start) | $0.0074668 |
| 10 products (including run start) | $0.029668 |
| 100 products (including run start) | $0.25168 |
| 1,000 products (including run start) | $2.4718 |

Apify plan tiers receive different item prices as shown on the Actor pricing tab. The maximum total charge setting can be used as a run-level budget guard. Residential proxy traffic and browser compute are covered by the Actor price rather than billed as separate customer events.

### Marketplace monitoring workflows

#### Price and promotion snapshots

Schedule the same search input daily. Export each dataset with its `scrapedAt` value, then compare `productId`, `price`, `originalPrice`, `promotions`, and `inStock` over time.

#### Seller research

Enable `includeSeller` and group products by `merchantId`. Seller score, location, product count, dispatch labels, and response-time labels can support marketplace benchmarking.

#### Review analysis

Enable `includeReviews`, keep a practical per-product review limit, and send the nested review text to a sentiment or topic-analysis step. Review authors are not included in the normalized output.

#### Product Q\&A research

Enable `includeQuestions` to identify recurring pre-purchase concerns and compare seller answers. Questions and answers remain attached to the relevant product record.

### Export and integrations

The default dataset can be downloaded as JSON, CSV, Excel, XML, or RSS from Apify Console or API.

Common integrations include:

- Google Sheets for lightweight price comparison;
- Make or Zapier for scheduled notifications;
- webhooks after successful runs;
- Amazon S3, Google Drive, or a database for historical snapshots;
- Python or JavaScript pipelines for normalization and analysis;
- Apify schedules for recurring monitoring.

For comparisons, use `productId` as the primary product key and `merchantId` as the seller key. A listing can change seller, price, promotion, or availability between runs.

### Run through the Apify API

Replace `YOUR_TOKEN` with an Apify API token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~trendyol-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["laptop"],"maxItems":10,"useResidentialProxy":true,"proxyCountryCode":"TR"}'
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/trendyol-scraper').call({
  searchQueries: ['laptop'],
  maxItems: 10,
  includeSeller: true,
  useResidentialProxy: true,
  proxyCountryCode: 'TR',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/trendyol-scraper").call(run_input={
    "searchQueries": ["laptop"],
    "maxItems": 10,
    "includeSeller": True,
    "useResidentialProxy": True,
    "proxyCountryCode": "TR",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use Trendyol Scraper with MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/trendyol-scraper"
```

#### Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this equivalent HTTP MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/trendyol-scraper"
    }
  }
}
```

Example prompts:

- “Search Trendyol for laptop listings and return the five lowest current TRY prices.”
- “Extract the public seller, latest reviews, and answered questions for this Trendyol product URL.”
- “Compare these scheduled Trendyol datasets and show products whose price changed.”

### Proxy, sessions, and reliability

The Turkish storefront commonly rejects ordinary HTTP requests. The default mode therefore uses:

1. a residential proxy in the selected country;
2. one sticky identity for cookies and JSON requests;
3. a normal desktop browser fingerprint;
4. up to three fresh sessions when Trendyol rejects an identity.

A challenge page is treated as an error, not as a valid empty result. The Actor never silently switches a Turkish run to an international storefront.

Set `useResidentialProxy` to `false` only when international results and the storefront selected by Trendyol for the run location are acceptable.

### Limits and expected behavior

- Trendyol can change page state, JSON response fields, or anti-bot rules.
- Search ordering and result counts can vary by country, time, and personalization.
- `inStock` is `null` when no reliable availability signal is exposed.
- Review and Q\&A arrays are bounded by their per-product limits.
- Enrichment adds browser/API requests and increases runtime.
- A naturally empty search completes with zero rows and an explanatory log.
- Invalid URLs, challenge pages, and exhausted sessions fail the run visibly.
- The Actor does not monitor changes by itself; use schedules and compare datasets.

Start with a small `maxItems`, verify the storefront and fields, then scale the scheduled workflow.

### Troubleshooting

#### The run says all Trendyol sessions failed

A source identity was challenged or the proxy tunnel was temporarily unavailable. Retry later with Turkish residential routing enabled. Do not disable the proxy if Turkish catalog fidelity is required.

#### Prices use EUR instead of TRY

The run used the international/direct mode or Trendyol selected an international storefront. Enable `useResidentialProxy` and set `proxyCountryCode` to `TR` for Turkish TRY results.

#### Seller is null

Enable `includeSeller`. A seller can also be absent when the listing lacks a merchant ID or Trendyol does not return a public seller profile.

#### Reviews or questions are empty

Confirm the relevant enrichment switch is enabled. Some products have no public reviews or answered questions, and limits only cap available records—they do not create missing data.

#### The run is slower after enrichment

Each enriched product requires a product page and selected public JSON calls. Reduce `maxItems`, `maxReviewsPerProduct`, or `maxQuestionsPerProduct`, or disable enrichments not needed by the workflow.

### Legality and responsible use

This Actor extracts public marketplace information. Use it in accordance with applicable law, Trendyol's terms, and your organization's policies.

Do not use it to:

- access accounts, orders, checkout, or private data;
- collect private seller contacts or personal contact details;
- attempt to identify masked reviewers or question authors;
- make automated decisions about individuals;
- overload the source with unnecessarily large or frequent runs.

You are responsible for choosing a lawful purpose, appropriate retention period, and reasonable schedule.

### Related Automation Lab Actors

- [Amazon Scraper](https://apify.com/automation-lab/amazon-scraper) for Amazon product and offer research.
- [Allegro Scraper](https://apify.com/automation-lab/allegro-scraper) for another European marketplace.
- [Amazon Reviews Scraper](https://apify.com/automation-lab/amazon-reviews-scraper) for Amazon customer-feedback analysis.

Use separate source-specific Actors when you need comparable datasets across marketplaces.

### FAQ

#### Does this Actor use Trendyol's seller integration API?

No. It reads public storefront data and does not require seller credentials.

#### Can it extract a specific product?

Yes. Add its public Trendyol URL to `startUrls` and set `maxItems` to 1.

#### Can it scrape multiple keywords?

Yes. Add multiple strings to `searchQueries`. `maxItems` applies to the combined, deduplicated results.

#### Are reviews and questions separate paid items?

No. They are nested in the product result and included in the single product item event.

#### Can it track price changes?

Schedule recurring runs and compare records by `productId`. The Actor produces snapshots; your schedule or downstream workflow performs the comparison.

#### Does it support Trendyol Germany or other international storefronts?

Direct mode can return the international storefront selected by Trendyol for the run location. The Actor does not promise a specific non-Turkish country when residential routing is disabled.

#### Is every field always available?

No. Marketplace responses vary by product, seller, and storefront. The output schema intentionally permits nullable fields.

# Actor input Schema

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

Product keywords to search on Trendyol, such as laptop bag or coffee machine.

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

Optional Trendyol product or search-result URLs. Product URLs can be enriched with seller, review, and Q\&A data.

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

Maximum number of product records saved across all queries and URLs.

## `includeSeller` (type: `boolean`):

Fetch the public seller profile, score, location, product count, and performance metrics for each product.

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

Fetch public review text, ratings, dates, likes, and review media for each product.

## `includeQuestions` (type: `boolean`):

Fetch public product questions and seller answers for each product.

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

Maximum review records nested in each product result when review enrichment is enabled.

## `maxQuestionsPerProduct` (type: `integer`):

Maximum answered questions nested in each product result when Q\&A enrichment is enabled.

## `useResidentialProxy` (type: `boolean`):

Use a sticky residential browser session for the Turkish catalog. Disable only when international Trendyol results are acceptable.

## `proxyCountryCode` (type: `string`):

Two-letter country code for residential routing. TR is recommended for the Turkish catalog.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop bag"
  ],
  "startUrls": [],
  "maxItems": 10,
  "includeSeller": false,
  "includeReviews": false,
  "includeQuestions": false,
  "maxReviewsPerProduct": 10,
  "maxQuestionsPerProduct": 10,
  "useResidentialProxy": true,
  "proxyCountryCode": "TR"
}
```

# Actor output Schema

## `overview` (type: `string`):

Dataset containing products, prices, availability, sellers, ratings, reviews, and answered questions.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "laptop bag"
    ],
    "startUrls": [],
    "maxItems": 10,
    "includeSeller": false,
    "includeReviews": false,
    "includeQuestions": false,
    "maxReviewsPerProduct": 10,
    "maxQuestionsPerProduct": 10,
    "useResidentialProxy": true,
    "proxyCountryCode": "TR"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/trendyol-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["laptop bag"],
    "startUrls": [],
    "maxItems": 10,
    "includeSeller": False,
    "includeReviews": False,
    "includeQuestions": False,
    "maxReviewsPerProduct": 10,
    "maxQuestionsPerProduct": 10,
    "useResidentialProxy": True,
    "proxyCountryCode": "TR",
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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 '{
  "searchQueries": [
    "laptop bag"
  ],
  "startUrls": [],
  "maxItems": 10,
  "includeSeller": false,
  "includeReviews": false,
  "includeQuestions": false,
  "maxReviewsPerProduct": 10,
  "maxQuestionsPerProduct": 10,
  "useResidentialProxy": true,
  "proxyCountryCode": "TR"
}' |
apify call automation-lab/trendyol-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/eQaUqIyXneBYKEvGe/builds/JknSsQTclh1Sib3wW/openapi.json
