# Trendyol Scraper — Search Prices & Sellers (`crawloop/trendyol-scraper`) Actor

Scrape Trendyol search results for Turkey price monitoring. Each row includes current and original price, brand, rating, seller id, and a sponsored flag. Export JSON from Python, Node.js, or MCP.

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

## Pricing

from $1.49 / 1,000 product listings

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Trendyol Scraper

**Trendyol Scraper** pulls search cards into JSON. It is not affiliated with Trendyol.

Use it for Turkey price monitoring and seller comps. Each row is one product from the search page: current price, original price, brand, rating, seller id, and a sponsored flag. Run it from Python, Node.js, cURL, or an AI assistant over MCP.

Trendyol Scraper ◄── you are here

| Actor | What it collects |
| :--- | :--- |
| Trendyol Scraper ◄── you are here | Trendyol search cards: price, brand, rating, seller |
| [Sahibinden Scraper](https://apify.com/crawloop/sahibinden-scraper) | Turkey classifieds: real estate, cars, shopping |
| [Allegro Scraper](https://apify.com/crawloop/allegro-scraper) | Poland search cards: price, seller, Smart! |
| [Flipkart Scraper](https://apify.com/crawloop/flipkart-scraper) | India search cards: price, MRP, Assured |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Completed eBay sales for comps |
| [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper) | AliExpress search cards |

### When to use this Actor

- Track a keyword’s prices, discounts, and ratings.
- See which cards on a search are sponsored.
- Export a search or category URL you already filtered in the browser.
- Feed a sheet, warehouse, or MCP agent with one JSON row per product.

### When not to use this Actor

- You need the full description, variants, stock, or review text. This Actor reads the search page only.
- You need a seller’s email or phone.
- You need every seller of one barcode from a product page.

### Key features

- **One search page.** Keywords and search or category URLs. The next page is the same document.
- **Search-card fields.** Price, original price, brand, rating, seller id, free shipping, fast delivery, and sponsored flag.
- **HTTP.** No browser. Apify proxy in Turkey.
- **Empty searches stay empty.** A blocked or zero-result page finishes with no rows.

### Input

| Field | Type | Default | What it does |
| :--- | :--- | :--- | :--- |
| `searchQueries` | string\[] | `elbise` | Keywords. Each one opens a search page. |
| `startUrls` | URL\[] | — | Trendyol search or category URLs. Product pages are skipped. |
| `minPrice` / `maxPrice` | number | — | Drop cards outside this TRY range. |
| `includeSponsored` | boolean | `true` | Keep sponsored cards, flagged on the row. |
| `maxItems` | integer | `50` | Cap across all keywords and URLs. |
| `maxPagesPerQuery` | integer | `1` | Search pages per keyword or URL. |
| `proxyConfiguration` | object | Turkey | Apify proxy. Direct IPs are challenged. |

```json
{
  "searchQueries": ["elbise"],
  "maxItems": 30,
  "maxPagesPerQuery": 1,
  "includeSponsored": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["UNBLOCKER"],
    "apifyProxyCountry": "TR"
  }
}
```

A pasted search URL:

```json
{
  "startUrls": [{ "url": "https://www.trendyol.com/sr?q=elbise" }],
  "maxItems": 20,
  "maxPagesPerQuery": 1
}
```

### Output

One dataset row per product.

| Field | Meaning |
| :--- | :--- |
| `contentId` | Product content id |
| `title` | Card title |
| `brand` | Brand name |
| `price` | Current amount in TRY |
| `originalPrice` | Struck-through price when the card shows one |
| `discountPercent` | Percent off the original price |
| `currency` | TRY |
| `rating` / `ratingCount` | Average and count shown on the card |
| `merchantId` | Seller id |
| `categoryName` | Leaf category |
| `sponsored` | Paid placement |
| `freeCargo` / `rushDelivery` | Shipping flags on the card |
| `url` | Product URL |
| `image` | Main image |
| `page` / `position` | Where the card sat on the search page |
| `searchQuery` | Keyword that produced the row |

```json
{
  "contentId": "838987098",
  "title": "Siyah Kare Yaka Elbise",
  "brand": "Planet Prestige",
  "price": 370.83,
  "originalPrice": 500.0,
  "currency": "TRY",
  "rating": 4.33,
  "ratingCount": 24,
  "merchantId": "887992",
  "sponsored": false,
  "url": "https://www.trendyol.com/planet-prestige/siyah-kare-yaka-kisa-prenses-kol-krep-kumas-uzun-elbise-p-838987098",
  "searchQuery": "elbise",
  "page": 1,
  "position": 1
}
```

### Use cases

| Job | What you run | What you keep |
| :--- | :--- | :--- |
| **Price watch** | One keyword, a few pages | `price`, `originalPrice`, `brand`, `scrapedAt` |
| **Sponsored share** | The same keyword, sponsored cards on | Which brands pay for the top of search |
| **Assortment check** | A filtered search or category URL | Only the slice you already narrowed |
| **Turkey comps** | Catalog prices here, then classifieds | Pair with Sahibinden for non-catalog asks |

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/trendyol-scraper').call({
  searchQueries: ['elbise'],
  maxItems: 30,
  maxPagesPerQuery: 1
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/trendyol-scraper").call(
    run_input={
        "searchQueries": ["elbise"],
        "maxItems": 30,
        "maxPagesPerQuery": 1,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("contentId"), item.get("title"), item.get("price"), item.get("brand"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~trendyol-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["elbise"],"maxItems":30,"maxPagesPerQuery":1}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call this Actor by Store ID `crawloop/trendyol-scraper`.

Example prompts:

- "Run Trendyol Scraper for elbise, one page, and return title, brand, price, currency, and merchantId."
- "Scrape Trendyol search for nike air max and list the 20 cheapest cards with rating and sponsored flag."
- "After Trendyol catalog prices, run Sahibinden Scraper for the same product name and compare asking prices."

### Next step

For Turkey classifieds (homes, cars, second-hand), run [Sahibinden Scraper](https://apify.com/crawloop/sahibinden-scraper). For completed-sale comps outside Turkey, run [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper).

### FAQ

**What do I need to start?**\
A keyword in `searchQueries`, or a Trendyol search or category URL in `startUrls`.

**Does a zero-result search fail the run?**\
No. The run finishes and the dataset stays empty.

**Can I paste a product URL?**\
Product pages are skipped. Use a search URL (`/sr?q=`) or a category URL.

**How many cards are on a page?**\
About 24 to 36. `maxItems` stops early. `maxPagesPerQuery` caps how many search pages open.

### Related Actors

- [Sahibinden Scraper](https://apify.com/crawloop/sahibinden-scraper) — Turkey classifieds
- [Allegro Scraper](https://apify.com/crawloop/allegro-scraper) — Poland search cards
- [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper)
- [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper)

# Actor input Schema

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

Keywords to search on Trendyol. Each keyword loads one search page and saves product cards.

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

Trendyol search or category URLs. Product pages are skipped.

## `minPrice` (type: `number`):

Drop cards cheaper than this amount.

## `maxPrice` (type: `number`):

Drop cards more expensive than this amount.

## `includeSponsored` (type: `boolean`):

Keep sponsored placements. They stay flagged on the row.

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

Maximum product rows across all keywords and search URLs.

## `maxPagesPerQuery` (type: `integer`):

How many search pages to open per keyword or URL.

## `requestDelayMs` (type: `integer`):

Pause before a retry or the next search page.

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

Apify UNBLOCKER in Turkey. Residential and datacenter IPs receive a Cloudflare challenge.

## Actor input object example

```json
{
  "searchQueries": [
    "elbise"
  ],
  "startUrls": [],
  "includeSponsored": true,
  "maxItems": 50,
  "maxPagesPerQuery": 1,
  "requestDelayMs": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ],
    "apifyProxyCountry": "TR"
  }
}
```

# Actor output Schema

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

Default dataset items — one Trendyol product per row.

# 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": [
        "elbise"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ],
        "apifyProxyCountry": "TR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/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": ["elbise"],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
        "apifyProxyCountry": "TR",
    },
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "elbise"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ],
    "apifyProxyCountry": "TR"
  }
}' |
apify call crawloop/trendyol-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/trendyol-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gH5qunsRHA7OUo3NR/builds/4F5fMNIICR1a76vnT/openapi.json
