Trendyol Scraper - Products, Sellers, Reviews & Q&A avatar

Trendyol Scraper - Products, Sellers, Reviews & Q&A

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Trendyol Scraper - Products, Sellers, Reviews & Q&A

Trendyol Scraper - Products, Sellers, Reviews & Q&A

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.

Pricing

from $0.80 / 1,000 results

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

2

Bookmarked

70

Total users

14

Monthly active users

a day ago

Last modified

Share

Trendyol Scraper: Products, Prices, Reviews & Q&A

Trendyol Scraper turns Trendyol, Turkey's largest online marketplace, into structured data. Search by keyword, browse Trendyol's own Red, Orange and Yellow campaign tiers plus the rotating flash-sale pool, or paste any Trendyol URL (search, category, store or product page), and get back product listings with prices, discounts, ratings, badges and seller details. Switch on review summaries or Q&A per product, or run reviews-only mode for full review streams against a list of products. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • 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.

Use Cases

  • 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.

Data You Get

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

FieldExample
kind"product" (also "review" in reviews-only mode)
contentId / groupId100000001 / 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"
category{ "id": 103498, "name": "Cep Telefonu" }
price.current / price.original27999.0 / 32999.0
price.discountPercent15.2
price.currency"TL"
rating.score / rating.totalRatings4.6 / 18342
seller.name"ABC Teknoloji Mağazası"
image / imagesTrendyol CDN thumbnail URL(s)
stock / inStock120 / true
freeCargo / fastDelivery / officialSellertrue / false / true
hasCoupon / hasFlashSalefalse / false
isOnSpecial / savingsAmounttrue / 5000.0 (real strikethrough discount, never fabricated)
specialsCategory"red-deals" when the record came from the specials picker, else null
reviewsfirst batch of up to 50 reviews (only when fetchReviews=true, which also fills rating.breakdown)
qnaanswered Q&A pairs (only when fetchQna=true)
scrapedAt"2026-01-01T00:00:00.000Z"
changeType"NEW" (only when incrementalMode=true: also UPDATED, UNCHANGED, REAPPEARED, EXPIRED)

Reviews-only mode returns one row per review instead, with kind: "review", productContentId, rate (1 to 5), comment (Turkish review text), userFullName (mostly redacted by the site itself), likesCount, language ("tr") and createdAt. With fetchDetails on (the default), or when you paste a direct product URL, each record carries roughly 25 more fields: the full attribute spec list, merchant details (name, city, tax number, seller score), the four-level category tree, English category translations and the winning variant's barcode, stock and tags.

Output views

The dataset has six views: Results (all rows), Overview, Reviews, Product detail, Q&A (one row per question) and Changes (incremental changeType and changedFields). A run summary is saved under the OUTPUT key of the key-value store.

Extra filters and input aliases

  • lowestPriceDays (10 / 14 / 30), influencerPreferredOnly and specialOffersOnly narrow results using the listing's own markers (lowest-price-in-N-days label, influencer badge, real strikethrough discount). They apply to search and URL modes; each record now carries lowestPriceDays.
  • Alternative input names are accepted: startUrls (as urls), getReviews, getQna, maxReviews, maxQna, limit (as maxListings) and minimumStarRating (as minRating). An alias is applied only while your own field is still at its own default (maxListings 20, maxReviewsPerProduct 200, maxQnaPerProduct 20, minRating 0, fetchReviews/fetchQna off); any other value of your own field wins over the alias, even a value that is another field's default (for example maxReviewsPerProduct 20 stays 20).

How to Use

  1. Pick a mode: search (keyword plus filters), url (paste any Trendyol URL), or reviews (pull reviews for a list of products).
  2. In search mode, add a keyword, price/rating/badge filters, a sort order, or pick a campaign tier instead of (or with) a keyword.
  3. Switch on fetchReviews and/or fetchQna for extra fields (turn off fetchDetails for a leaner, cheaper run), and set Max products and Max pages to bound cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search by keyword with filters:

{
"mode": "search",
"queries": ["iphone 15"],
"minPrice": 5000,
"maxPrice": 50000,
"minRating": "4",
"sortBy": "PRICE_BY_ASC",
"freeCargoOnly": true,
"maxListings": 50
}

Browse a campaign tier instead of a keyword:

{
"mode": "search",
"specialsCategory": "red-deals",
"maxListings": 30
}

Paste a Trendyol URL:

{
"mode": "url",
"urls": [
"https://www.trendyol.com/cep-telefonu-x-c103498",
"https://www.trendyol.com/magaza/ornek-magaza-m-100000"
],
"maxPages": 3,
"maxListings": 100,
"fetchReviews": true
}

URL mode shapes and default. If you run url mode without touching the urls field, it now scrapes one example of each shape below (previously it had no default). Pagination starts at the pi= page in the URL, and siralama= / sst= sort orders are honoured.

ShapeExample
Keyword searchhttps://www.trendyol.com/sr?q=iphone+15&pi=1
Paginated and sorted searchhttps://www.trendyol.com/sr?q=iphone+15&pi=2&siralama=PRICE_BY_ASC
Search with culture paramhttps://www.trendyol.com/sr?q=iphone+15&pi=1&culture=tr-TR
Campaign-tier searchhttps://www.trendyol.com/sr?tag=kirmizi_kampanya_urunu
Flash-sale hubhttps://www.trendyol.com/flas-indirimler
Categoryhttps://www.trendyol.com/cep-telefonu-x-c103498?pi=1
Category, paginated and sortedhttps://www.trendyol.com/cep-telefonu-x-c103498?pi=2&sst=PRICE_BY_ASC
Seller storehttps://www.trendyol.com/magaza/apple-m-968
Merchant-filtered searchhttps://www.trendyol.com/sr?mid=968
Product detailhttps://www.trendyol.com/apple/yenilenmis-iphone-11-64-gb-beyaz-cep-telefonu-12-ay-garantili-a-kalite-p-356251114
Product reviews linkhttps://www.trendyol.com/apple/x-p-356251114/yorumlar

Bare /p-<id> links, brand pages (-x-b<id>) and ty.gl short links are not served by Trendyol, so they are skipped with a warning in the log. m.trendyol.com links are mapped to www.trendyol.com.

Reviews-only, for a list of products:

{
"mode": "reviews",
"productInputs": [
"356251114",
"https://www.trendyol.com/apple/ornek-urun-p-100000001"
],
"maxReviewsPerProduct": 200
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/trendyol-scraper").call(run_input={"mode": "search", "queries": ["iphone 15"]})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"]["current"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/trendyol-scraper').call({ mode: 'search', queries: ['iphone 15'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Campaign tiers explained

Red, Orange and Yellow are Trendyol's own color-coded discount-severity tiers (kırmızı, turuncu, sarı kampanya, red is deepest), reachable with specialsCategory in search mode, or by pasting a tier URL in url mode (https://www.trendyol.com/sr?tag=kirmizi_kampanya_urunu and its orange/yellow equivalents). Flash sale is a separate, rotating hourly deal pool (https://www.trendyol.com/flas-indirimler); it is browse-only and does not combine with a keyword. Not every item in a tier carries an actual markdown, some are simply featured, so isOnSpecial and savingsAmount always reflect the real per-listing price comparison rather than tier membership.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted crawl: paste its run or dataset ID and this run skips every product already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduling the same search or URL set again and again. Each product is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED, or EXPIRED (only after a run that scanned every tracked query/URL to a natural end, not when Max products capped it or Resume was used). stateKey names or shares the stored state. Change detection compares price, name, brand, seller, in-stock status, images, badges, promotions, categories and attributes; it ignores scrapedAt, the raw stock count, rating/review counters, socialProof counters, the order of attributes and badges, and the CDN host of image URLs (all stay in the output). Add more with ignoreFieldsForChanges. A partial scope (a pasted URL starting at page 2 or later, a capped or budget-trimmed walk) never marks products EXPIRED. One-time upgrade note: review and Q&A fetching was repaired (they used to come back empty), so the first incremental run after the upgrade fills in reviews, qna and lowestPriceDays on already-tracked products without marking them UPDATED or billing them again; this applies once per tracked product, on the first run where its reviews and Q&A were fetched successfully (a run where either fetch failed does not use it up), so afterwards a change to any of them (for example a first answered question arriving) is reported normally as UPDATED. A review or Q&A fetch that fails during a run is not treated as a change: the stored value is kept, the product is not billed for it, and its row shows an empty value for that run. A product with no answered questions shows an empty qna list. With incremental mode off, output is unchanged.

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.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch, url, or reviews.
queriesarray(none)Keywords for search mode; each runs as a separate search.
specialsCategorystring(empty, no filter)Browse red-deals, orange-deals, yellow-deals, or flash-sale instead of, or with, a keyword.
sortBystringBEST_SCOREBEST_SELLER, NEWEST, PRICE_BY_ASC, PRICE_BY_DESC, MOST_RATED, or MOST_FAVOURITE.
urlsarrayone example of each URL shapeTrendyol URLs to paste in url mode.
productInputsarray(none)Product URLs or numeric content IDs for reviews mode.
maxReviewsPerProductinteger200Cap per product in reviews mode only (maximum 100000; the reviews list nested on product rows by fetchReviews is always one page of up to 50 and ignores this cap; default kept at 200 so saved tasks are unchanged). Reviews are billed as ordinary result rows, nothing extra.
reviewSortstringrecommendedReview order for reviews mode and for the reviews nested on product rows: recommended (Trendyol's default order), newest, oldest, rating_desc, rating_asc. Verified live against the review service (newest returns the latest dated reviews first, rating_asc starts with 1-star reviews).
minPriceinteger(none)Minimum price in storefront currency. Search and url modes.
maxPriceinteger(none)Maximum price in storefront currency. Search and url modes.
lowestPriceDaysstring[][] (none)Keep listings carrying the lowest-price-in-N-days label (values "10", "14", "30"). Search and url modes.
influencerPreferredOnlybooleanfalseKeep only listings with the influencer-preferred badge.
specialOffersOnlybooleanfalseKeep only listings with a real strikethrough discount.
minRatingstring0Drop products rated below this threshold.
freeCargoOnlybooleanfalseKeep only products with free shipping.
fastDeliveryOnlybooleanfalseKeep only products with the fast-delivery tag.
officialSellerOnlybooleanfalseKeep only products from verified-official sellers.
couponsOnlybooleanfalseKeep only products with a collectable coupon.
inStockOnlybooleantrueDrop out-of-stock products.
maxPagesinteger0Max SERP pages per query/URL (0 = no per-search cap).
maxListingsinteger20Total cap across all queries/URLs (0 = unlimited).
fetchDetailsbooleantrueFetch each product's detail page for roughly 25 extra fields.
fetchReviewsbooleanfalseAttach a rating breakdown and review text to each product.
fetchQnabooleanfalseAttach answered Q&A pairs to each product.
maxQnaPerProductinteger20Cap on Q&A pairs per product when fetchQna=true (maximum 1000; at most 50 are fetched per product).
proxyConfigurationobjectResidential, country TRConnection settings.
resumeFromRunIdstring(none)Continue one interrupted crawl (search/url modes).
incrementalModebooleanfalseReturn only new and changed products on scheduled runs (search/url modes).
stateKeystring(none)Name or share an incremental-mode state.
ignoreFieldsForChangesstring[](none)Incremental mode only: top-level fields or dotted nested paths (e.g. badges, price.original) that never make a product UPDATED. They stay in the output.
emitUnchangedbooleanfalseAlso return (and bill) unchanged products.
emitExpiredbooleanfalseAlso return (and bill) expired products.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

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

{
"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.0,
"original": 32999.0,
"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.0,
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

This actor requires the Apify Residential proxy group with country set to Turkey (the prefilled default), available on paid Apify plans; keep it under Connection. Trendyol's protection challenges datacenter exits and redirects non-Turkish connections to a country-select page, so Datacenter does not work and there is no no-setup option. Apify free plans do not include residential proxies. On a free plan the run logs "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." and, if a page is served that way, "Served over the backup connection (the default connection was unavailable)." If nothing can be read, the run fails with one of: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required", "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Trendyol pages", or "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search."

FAQ

How much does it cost?

You pay per product or review returned; optional detail, review and Q&A fetches are billed only when you switch them on. Pricing is pay per event: a one-time Actor start event ($0.08 on the Free plan, falling to $0.04 on Gold and above, per GB of memory, minimum one) plus a result event per row ($0.0015 on Free, $0.001 Bronze, $0.0009 Silver, $0.0008 Gold and above). Reviews and Q&A attached to a product are not billed separately; in reviews-only mode each review row is an ordinary result row. The Pricing tab always shows current rates. Use Max products and Max pages to cap the cost of any run.

This actor collects only publicly available product and review data. You are responsible for how you use it: follow Trendyol's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product listings and prices are generally facts, but review text, images and seller branding may be subject to third-party rights.

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.

Why did my run fail instead of returning an empty dataset?

If Trendyol refuses every request the run makes, it stops with a clear error message, almost always because the proxy configuration is missing Residential access with country Turkey, so "no products matched" is never confused with "nothing could be read". If the site was reachable but genuinely had no matches for your search or filters, the run succeeds with 0 items and a status message instead.

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.

🔗 Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

🛒 Tokopedia Scraper
Extract product data from Tokopedia, Indonesia’s largest marketplace. Search by keyword...
🛒 Thegioididong Scraper
Scrape thegioididong.com products with full specifications, current & original price...
🛒 Naver Shopping Scraper
Scrape Naver Shopping products by Korean or English keyword, or by URL. Returns 190+...
🛒 Mercari Japan Scraper
From $0.80/1K. Scrape Mercari Japan listings, sellers and reviews at scale. Extract...
🛒 Lazada Scraper
Scrape Lazada products and reviews across SEA markets, including Malaysia, Singapore...
🛒 Coupang Scraper
Scrape Coupang.com products by keyword, category or URL. Extract 20+ fields including...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.