Trendyol Product Scraper
Pricing
from $3.00 / 1,000 product scrapeds
Trendyol Product Scraper
Scrape public Trendyol products by keyword, category URL, or product URL. Returns prices, ratings, sellers, stock, and images. Cookieless HTTP, MCP-ready.
Pricing
from $3.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Turn a Trendyol keyword, search URL, category URL, or product URL into one dataset row per public product with title, brand, current and original price, discount, rating, review count, seller, stock flags, image URLs, category, and collection time. This workflow is built for marketplace analysts, price-monitoring teams, sourcing researchers, and AI agents that need a bounded Turkey-storefront catalog snapshot they can schedule and compare.
Reviews, Q&A, and seller emails stay outside this listing-and-detail workflow. Direct product URLs already return the public product page. When enrichDetails is true, the Actor opens the product page for description, attributes, gallery, favoriteCount, and seller name.
Best fit for this Actor
- Start with a Turkish or English product keyword such as
playstationwhen you need ranked Trendyol search cards with TRY prices and ratings. - Use
maxResultsas the spend cap: each saved product is oneproduct-scrapedevent, plus Apify platform usage. The Console sample uses 1 product so a first run stays bounded. - Continue with a neighboring marketplace Actor when the same brief needs another storefront after this Trendyol pass.
Practical scenario
A sourcing analyst pastes playstation, keeps maxResults at 1, and optionally sets a rating floor. The dataset returns a public card with current and original TRY prices, discount, brand, rating, review count, stock and shipping flags, and the canonical product URL. The team can compare sellers on the same keyword, then schedule the same input to watch price movement. OUTPUT and RUN_SUMMARY say whether collection finished, stopped at a charge cap, found no matches, or needs a later retry.
Quick start input
{"searchQueries": ["playstation"],"maxResults": 1,"maxPagesPerQuery": 1,"sort": "relevance","enrichDetails": false}
searchQueries accepts free-text keywords. Put search, category, or product pages in startUrls. maxResults defaults to 50 and permits at most 5,000 records across the whole run.
Input reference
| Field | Type | What it controls |
|---|---|---|
searchQueries | string[] | Product keywords such as playstation. Deduplicated. Put URLs in startUrls. |
startUrls | string[] | Public trendyol.com search (/sr?q=), category (-c{id}), or product (-p-{id}) pages. Seller /magaza/ pages stay outside this Actor. |
maxResults | integer | Saved-product cap, 1–5,000. Default 50. Prefill 1. This is the billed-row ceiling. |
maxPagesPerQuery | integer | Listing pages per keyword or category URL, 1–50. Default 10. Prefill 1. |
sort | enum | Listing order: relevance, newest, price_asc, price_desc, best_seller, most_favorited, most_rated. |
minPrice / maxPrice | number | Optional current-price band in listing currency (TRY on the Turkey storefront). |
minRating | number | Optional 0–5 public rating floor. |
inStockOnly / freeShippingOnly / fastDeliveryOnly / discountedOnly | boolean | Optional client-side filters on public listing flags. |
enrichDetails | boolean | When true, fetch each product page for description, attributes, gallery, favoriteCount, and seller name. Adds one product-enriched event per enriched row. |
proxyConfiguration | object | Defaults to Apify Residential Turkey. Keep a residential route so public listing HTML is reachable. |
What data you receive
Each dataset item is one public Trendyol product.
{"productId": "800623487","listingId": "example-listing","productUrl": "https://www.trendyol.com/sony/example-p-800623487","title": "Example Wireless Headphones","brand": "ExampleBrand","price": 1299.9,"originalPrice": 1599.9,"discountPercent": 19,"currency": "TRY","rating": 4.7,"reviewCount": 1200,"sellerName": "Example Seller","inStock": true,"freeShipping": true,"imageUrl": "https://cdn.dsmcdn.com/example.jpg","sourceType": "search","enriched": false,"scrapedAt": "2026-09-15T07:54:00.000Z"}
The default key-value store also contains:
OUTPUT—outcome, message, saved count, warnings, and charged event counts.RUN_SUMMARY— pages fetched, sessions, filters, duplicates, and terminal diagnostics.
COMPLETE, PARTIAL, VALID_EMPTY, and INVALID_INPUT finish successfully. UPSTREAM_FAILED is the honest terminal state when valid work received no usable marketplace HTML after residential session rotation.
Use through the API
curl "https://api.apify.com/v2/acts/khadinakbar~trendyol-product-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["playstation"],"maxResults":1}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/trendyol-product-scraper').call({searchQueries: ['playstation'],maxResults: 1,minRating: 4.5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use with AI agents through Apify MCP
Search public Trendyol listings for playstation, save at most 1 product, and return title, product URL, current and original TRY price, discount, brand, rating, review count, seller, and collection time. Inspect OUTPUT.outcome before treating an empty dataset as a real no-match.
Tell the agent to keep maxResults small on the first call, preserve productUrl as provenance, and read RUN_SUMMARY when the outcome is PARTIAL or needs a later retry. Current MCP client setup: https://mcp.apify.com
Connect the workflow
After a Trendyol price snapshot, then use Jumia Product Scraper when the same brief needs African marketplace prices instead of Turkey catalog cards.
Continue with AliExpress Product Search Scraper when the job is AliExpress listing cards rather than Trendyol search results.
Pricing
This Actor uses Pay per event plus Apify platform usage. Open the live Pricing tab for current event names and amounts. maxResults is the predictable cap on product-scraped events before platform compute and proxy usage. A product is validated before it is persisted and charged, so only accepted rows receive the product event. Detail enrich adds product-enriched when enrichDetails is true.
Best results
- Provide Turkish marketplace language when that matches shopper intent (
spor ayakkabi,kulaklik). - Start with a focused sample (
maxResults1–10) and inspectOUTPUTbefore raising the cap. - Keep Apify Residential Turkey as the default proxy so public listing HTML is reachable.
- Use a category URL ending in
-cplus a numeric id, or a product URL containing-p-plus a numeric id, when you already have a specific catalog path.
Builder's note
I found that Trendyol listing cards live in window["__single-search-result__PROPS"].data.products, while category pretty-URLs leave that array empty until rewritten to /sr?wc={id}. I also found that a garbage keyword still returns unrelated cards through MULTILINGUAL_SEARCH, so I built the no-match check around resolved-query drift plus token overlap instead of treating any non-empty page as a hit. Seller names usually arrive from the product page, which is why listing rows keep sellerId and enrich fills sellerName.
Responsible use
Use this Actor for lawful collection and analysis of public marketplace information. Follow applicable laws and site terms, and keep the workflow on public listing data you are authorized to collect. Trendyol is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Trendyol.