Trendyol Price & Stock Monitor avatar

Trendyol Price & Stock Monitor

Pricing

from $8.00 / 1,000 product checkeds

Go to Apify Store
Trendyol Price & Stock Monitor

Trendyol Price & Stock Monitor

Watch Trendyol products and get told when something actually changes: a price moves, stock flips, the seller on the listing changes, or a new product appears in a category you follow.

Pricing

from $8.00 / 1,000 product checkeds

Rating

0.0

(0)

Developer

Ahmet Boyraz

Ahmet Boyraz

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Watch Trendyol products and get told when something actually changes: a price moves, stock flips, the seller on the listing changes, or a new product appears in a category you follow.

Give it product URLs, or point it at a category or brand listing and let it follow the top products there. Every run compares against the previous one, so you receive change events rather than a fresh dump you have to diff yourself.

What it is good for

  • Competitor price tracking. Follow the products you compete with and see the moment one of them drops its price.
  • Losing the listing. seller tells you which merchant Trendyol currently shows for a product. When that changes, you find out.
  • Minimum price policy checks. Brands and distributors can watch who sells below the price they set, with basket and membership discounts reported separately from the shelf price so you can judge each case.
  • Category watch. Follow a category or brand listing and get told when a new product enters it, along with each product's position.

Getting started

Set a monitorId and give it something to watch. Keep the same monitorId on later runs so it can compare against what it saw before.

{
"monitorId": "my-competitors",
"productUrls": [
"https://www.trendyol.com/tp-link/tapo-c210-akilli-wi-fi-guvenlik-kamerasi-p-356747505"
],
"categoryUrls": ["https://www.trendyol.com/tp-link-x-b108165"],
"productsPerCategory": 24,
"onlyChanges": true,
"minimumPriceChangePercent": 1,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "TR"
}
}

A Turkish proxy is required. Trendyol sends visitors from other countries to its country selector instead of the product page, so without a Turkish exit IP no page can be read at all. Use the proxy settings above. If a run reports every product as blocked, this is why, and the run message will say so.

productUrls is a fixed set: exactly those products, every run. categoryUrls follows a listing instead, taking the top productsPerCategory products from its first page, so the monitored set moves with the listing. You can use either or both.

The first run has nothing to compare against, so it records a baseline for each product. With onlyChanges on, that means the first run's dataset may be empty. That is expected: it is building the reference point for every run after it.

Example output

{
"productTitle": "Tp-Link Tapo C210 Akıllı Wi-Fi Güvenlik Kamerası 360 Derece Takip",
"productUrl": "https://www.trendyol.com/tp-link/tapo-c210-...-p-356747505",
"productId": "356747505",
"currentPrice": 1599,
"previousPrice": 1749,
"priceChangePercent": -8.58,
"listPrice": 1619,
"conditionalPrice": null,
"currency": "TRY",
"availability": "in_stock",
"seller": "Vizyon Bilgisayar",
"previousSeller": "Vizyon Bilgisayar",
"otherSellerCount": 5,
"selectedVariant": null,
"rank": 3,
"previousRank": 5,
"categoryUrl": "https://www.trendyol.com/tp-link-x-b108165",
"observationCount": 12,
"observedMinPrice": 1599,
"observedMaxPrice": 1899,
"changes": ["price_decreased", "lowest_observed"],
"checkedAt": "2026-09-12T18:12:04.505Z"
}

Reading the output

Three prices, and the difference matters. currentPrice is what an ordinary visitor sees on the page. conditionalPrice is a lower price that only applies under a condition, such as a basket promotion or a Trendyol Plus membership price, with the promotion names in conditions. listPrice is the struck-through reference price, and only appears when it is genuinely above the current price.

This is worth understanding before you compare numbers with the site. One product displayed 2.599 TL on the shelf while offering 2.469,05 TL in the basket to Plus members. Both numbers are real, and they are reported in separate fields rather than mixed into one. Roughly one in six products carries such a conditional price, so tools that publish a single "price" often show the conditional one without saying so.

Change labels. baseline on the first observation. Then price_increased, price_decreased, stock_changed, seller_changed, and listing_added when a product enters a monitored listing. These are the events; onlyChanges keeps only rows that carry one of them.

lowest_observed and highest_observed are notes, not events. They mean the price is the lowest or highest this monitor has recorded, not an all-time low, and they never make a row appear on their own.

Seller. seller is the merchant Trendyol shows for the offer the page renders to an anonymous visitor, and otherSellerCount is how many other merchants are listed for that product. A logged-in shopper or a different region can be shown a different offer, so read seller_changed as "the displayed merchant changed".

Variants. Clothing, shoes and watches are sold as variant groups. There, price and stock describe the variant the page had selected, named in selectedVariant, and isVariantGroup is true. Different colourways are separate products with their own URLs and prices; add them individually if you want to follow them.

Position. With categoryUrls, rank is the product's place on the listing page and previousRank is where it was last run. Position moves constantly, so it is reported but never raised as a change event.

Per-run records. SUMMARY describes the run: how many products were requested, read and emitted, and a breakdown of failures. ERRORS lists each failed URL with a reason of blocked, timeout, extraction, network or other. LISTING_CHANGES lists the products that entered and left each monitored listing.

A product that cannot be read never overwrites its previous observation and is never reported as out of stock. If every product fails, the run fails loudly and tells you whether it looks like the exit IP or the page shape.

Scheduling and alerts

Save your input as a Task, then give the Task a Schedule, daily or hourly as you prefer.

To be notified, add an ACTOR.RUN.SUCCEEDED webhook pointing at Make, n8n or your own endpoint, fetch the run's dataset, and alert only when a row carries a change label. A successful run is not itself a change; with onlyChanges on, an empty dataset means nothing moved. This Actor does not send messages itself.

Avoid overlapping runs on the same monitorId. A run claims its monitor while working and a second run will stop with a clear message rather than interleave writes.

Pricing

Two events are charged, and they follow the work rather than the output.

  • product-checked — once for each product read successfully. This is charged even when onlyChanges keeps the observation out of the dataset, because reading a product costs the same whether or not its price moved.
  • change-detected — once more when that observation carries a real event. One charge per observation, not one per label.

Nothing is charged for a product that could not be read: a blocked page or a changed page shape is not billable. You can cap a run with the maximum cost per run setting, and when the cap is reached the run stops taking on new work instead of continuing.

Apify platform usage and proxy traffic are billed by the platform as usual, on top of events.

For sizing: twenty-four products take about a minute at the default concurrency of 2, so the 600 second default timeout leaves room for a few hundred. Memory above 1024 MB is wasted unless browserFallback is on, which needs 4096 MB for Chromium.

Limits

  • Trendyol only. Prices are read in TRY; a page in another currency is refused rather than converted.
  • Up to 200 products per monitor: 100 direct URLs, plus up to 5 listings at up to 60 products each. Only the first page of a listing is read.
  • History starts when you start. There is no data from before your first run, and each product keeps its most recent historyLength observations, 50 by default.
  • minimumPriceChangePercent compares against the previous successful observation, not a cumulative move over weeks.
  • Shipping cost, coupon stacking, cart totals, location-specific offers and matching the same product across marketplaces are not covered.
  • Stock is read from what the page publishes. Out-of-stock pages are handled but have been seen far less often in testing than in-stock ones, so treat stock alerts as newer ground than price alerts.
  • Search URLs are not accepted, because Trendyol's robots.txt disallows them.

Notes

The Actor reads only public product and listing pages. No login is required and no account credentials are used. It runs with limited permissions and needs access to nothing in your account beyond the storages it creates for your monitors.

Development notes, verification results and measured costs are in docs/STATUS.md and docs/DEVELOPMENT.md.