Trendyol Scraper at a glance
Trendyol Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes kind, content id, title, brand and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.20 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Developer Tools, Automation
- Pricing
- $1.20 per 1,000 results (Free plan), from $0.80 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 34 options
From $0.80/1K. Scrape Trendyol products, prices, ratings, badges, sellers, full reviews and Q&A. Search by keyword with filters, paste search, category, store or product URLs, or use reviews-only mode for a list of products.
What Trendyol Scraper can do
- Three modes in one actor. Keyword search with filters, paste-any-URL (search, category, store or single product), or reviews-only for one row per review.
- Trendyol's own campaign tiers as a first-class picker. Red, Orange and Yellow discount tiers plus the rotating Flash sale pool, combinable with a keyword search for the color tiers.
- Deep product records. Roughly 75 fields per product with detail fetching on (the default), or around 50 with fetchDetails off: full attribute list, merchant info, category tree, English category translations and the winning variant's barcode and stock.
- Rich filters. Price range and sort order are sent to Trendyol's own search; minimum rating, free shipping, fast delivery, official seller, collectable coupon and in-stock are applied to every fetched page.
- Reviews and Q&A on demand. Attach a rating breakdown and review text, or answered Q&A pairs, to each product, or pull reviews for a list of products on their own.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a run that gets blocked fails loudly with a clear message instead of quietly returning an empty dataset.
Choose what to collect
These inputs let you configure Trendyol Scraper - Products, Sellers, Reviews & Q&A. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | 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. |
queriesarray | One or more keywords. Each runs as a separate search; the per-query budget is split evenly across them. |
specialsCategorystring | Browse one of Trendyol's own campaign tiers instead of (or combined with) a keyword search. Red/Orange/Yellow are the site's own discount-severity color tiers (kırmızı/turuncu/sarı kampanya, red is deepest); Flash sale is the site's rotating hourly deal pool (browse-only, does not combine with a keyword). Leave as 'No filter' for a plain keyword search. |
sortBystring | Site-native sort. BEST_SCORE is the default Trendyol relevance ranking. |
urlsarray | Paste any Trendyol URLs. Supported page types: search results (/sr?q=…), category (/-x-c), seller store (/magaza/-m-), single product (//-p-), a campaign-tier search (/sr?tag=…), the flash-sale hub (/flas-indirimler), a merchant-filtered search (/sr?mid=) or a product reviews link (…-p-/yorumlar). Sort with siralama= or sst=, start page with pi=. Left untouched, one example of each shape is scraped. Bare /p-, brand (-x-b) pages and ty.gl links are not served by Trendyol and are skipped with a warning; m.trendyol.com is mapped to www. Pagination walks forward from the page number embedded in the URL (default page 1). |
productInputsarray | Either a full Trendyol product URL ending in /…-p-, or just the numeric content ID. One row per review. Use maxReviewsPerProduct to cap how many you pull from each. Reviews mode is charged one detail-page unit for every started block of 10 delivered review rows (no detail-page base unit - this mode reads no detail pages). |
maxReviewsPerProductinteger | Reviews mode only: hard cap on how many reviews are pulled per product (the site exposes thousands for popular products, so a cap keeps cost and runtime predictable). Does not apply to the reviews attached to product rows by Fetch reviews, which always hold one page of up to 50. |
Show 27 more inputs
| Input | What it controls |
|---|---|
reviewSortstring | Order of the reviews you get, in reviews mode and in the reviews attached to product rows (Fetch reviews). Recommended keeps Trendyol's own default order. |
minPriceinteger | Minimum price in storefront currency (TL for TR, EUR/USD for international). |
maxPriceinteger | Maximum price in storefront currency. |
minRatingstring | Drop products rated below this threshold. |
freeCargoOnlyboolean | Drop products that don't include free shipping. |
fastDeliveryOnlyboolean | Keep only products with the fast-delivery tag. |
officialSellerOnlyboolean | Keep only products from sellers with the verified-official badge. |
couponsOnlyboolean | Keep only products that currently offer a collectable coupon at checkout. |
lowestPriceDaysarray | Keep only products Trendyol flags as 'lowest price in the last N days'. Pick one or more of 10, 14, 30. Matched on the listing's own marker; empty = no filter. |
influencerPreferredOnlyboolean | Keep only products carrying Trendyol's influencer-recommends badge. |
specialOffersOnlyboolean | Keep only products with a real strikethrough discount (original price above current price). |
inStockOnlyboolean | Drop products that are currently out of stock. |
maxPagesinteger | 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). |
maxListingsinteger | Total cap across all queries / URLs. 0 = unlimited (still bounded by maxPages). Ignored in reviews-only mode. |
fetchDetailsboolean | 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. Each delivered product whose enrichment reads served is charged as one detail-page event (plus one more unit for every started block of 10 review items attached); products whose reads all fail, and products incremental mode suppresses as unchanged, are not charged. |
fetchReviewsboolean | 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. |
fetchQnaboolean | When ON in search or URL mode, attach the answered Q&A pairs to each product record. Costs roughly +1 API call per product. The Q&A read folds into the per-product detail-page event unit (see Fetch detail-page fields). |
maxQnaPerProductinteger | Cap on Q&A pairs per product when fetchQna = true. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product pull in another run. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. What is compared: price (current/original/discount), name, brand, seller, stock status (in stock or not), images, badges, promotions, categories, attributes and every other output field. What is excluded: scrapedAt, the raw stock count, rating and review counters, socialProof counters, the order of attributes/badges, and the CDN host of image URLs; these change on their own and never make a product UPDATED (they stay in the output). Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each mode/query/URL/filter combination; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the queries/URLs/specials tier/filters, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked query/URL, not when Max products capped it, or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Optional. Field names that must never make a product UPDATED, in addition to the built-in exclusions. Use a top-level name (for example badges) or a dotted path to a nested value (for example price.original). Ignored fields stay in the output, they are only left out of change detection and changedFields. |
mcpConnectorsarray | 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). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
kindKind (text)contentIdContent ID (text)nameTitle (text)brandBrand (text)pricePrice (object)changeTypeChange type (text)ratingRating (object)urlProduct URL (link)productContentIdReview · Product (text)rateReview · Rating (number)commentReview · Comment (text)userFullNameReview · Reviewer (text)Show 27 more fields
productUrlReview · Product URL (link)changedFieldsChanged fields (array)firstSeenAtFirst seen at (date)lastSeenAtLast seen at (date)isOnSpecialOn special (boolean)sellerSeller (object)freeCargoFree ship (boolean)fastDeliveryFast (boolean)officialSellerOfficial (boolean)stockStock (number)detailFetcheddetailFetchedreviewsFetchedreviewsFetchedlikesCountLikes (number)createdAtCreated (number)categorycategory (object)inStockIn stock (boolean)imagesimages (array)promotionspromotions (array)badgesbadges (array)variantValuevariantValue (text)scrapedAtScraped at (date)qnaqnatextQuestion (text)answerAnswer (object)userNameAsked by (text)creationDateAsked at (epoch ms) (number)sellerNameAnswered by seller (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"kind": "product",
"contentId": 100000001,
"id": 100000001,
"groupId": 100000000,
"url": "https://www.trendyol.com/apple/apple-iphone-15-128-gb-mavi-cep-telefonu-p-100000001",
"name": "Apple iPhone 15 128 GB Mavi Cep Telefonu",
"brand": "Apple",
"brandId": 1000,
"category": {
"id": 103498,
"name": "Cep Telefonu"
},
"price": {
"current": 27999,
"original": 32999,
"discountPercent": 15.2,
"currency": "TL"
},
"rating": {
"score": 4.6,
"totalRatings": 18342,
"totalComments": 4210
},
"seller": {
"id": 100000,
"name": "ABC Teknoloji Mağazası"
},
"image": "https://cdn.dsmcdn.com/mnresize/400/-/sample/100000001-800x600.jpeg",
"stock": 120,
"inStock": true,
"freeCargo": true,
"fastDelivery": false,
"officialSeller": true,
"hasCoupon": false,
"hasFlashSale": false,
"isOnSpecial": true,
"savingsAmount": 5000,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}Ways to use this data
- E-commerce and pricing teams: track competitor prices, discount percentages and stock levels across a category or a list of stores.
- Deal hunters and content creators: pull the Red, Orange and Yellow campaign tiers and the flash-sale pool to publish daily deal roundups.
- Marketplace sellers: monitor rival sellers' badges (official seller, free shipping, fast delivery), coupons and pricing in a given category.
- Review and reputation analysts: harvest full review streams and Q&A pairs for sentiment analysis or customer research.
- Market researchers: build historical pricing, discount and rating datasets for Turkish e-commerce trend analysis.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Trendyol Scraper return?
The documented output for Trendyol Scraper includes kind, content id, title, brand, price, change type, rating and product url. Availability of each field depends on the source page and the selected mode.
How much does Trendyol Scraper cost?
It costs $1.20 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn on Emit unchanged.
Why does search mode return fewer products than I expected?
Search mode stops once Max products or Max pages is reached, whichever comes first. Raise either (or set it to 0) to walk further into the result set. Filters such as price range, rating or free shipping are applied after fetching, so a narrow filter combination can also shrink the count.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
