Chrono24 Watch Alerts avatar

Chrono24 Watch Alerts

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Chrono24 Watch Alerts

Chrono24 Watch Alerts

Get alerts for new watches on Chrono24 that match your filters. Receive notifications on Telegram, Discord, or via webhooks instantly!

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

Chrono24 Alerts: get a message the minute a matching watch is listed, or its price drops

Chrono24 Alerts watches a Chrono24 search for you and sends a message to Telegram, Discord or any webhook when:

  • a new listing matches your search and filters, or
  • a price drops on a listing you're already watching, by at least the percentage you choose.

Tell it what you're hunting for ("Tudor Black Bay 58, used, under €4,000, box and papers"), schedule it every 15–60 minutes, and stop refreshing Chrono24.

  • Alerts with photo, price and a link. Each message shows the watch, the price (and the old price for drops), location, seller type and a direct link. Optionally add the reference number, year and box & papers.
  • New listings and price drops. Both on by default, each with its own switch. Price drops are measured against the price when the alert last fired, so a watch that's cut 3% twice still triggers a 5% alert.
  • No spam on the first run. The first run remembers what's already listed and sends one confirmation message. From then on you only hear about changes.
  • Every Chrono24 filter. Brand, model, price range, new/used, condition, box & papers, certified, movement, case size and material, dial color, year, seller type, seller country and more.
  • No Chrono24 account, API key or proxy. Paste a Telegram bot token or a Discord webhook URL and you're done.

Scope: This actor sends alerts about changes. For a full one-off export of search results with details, use Chrono24 Scraper.

Quick start (5 minutes)

  1. Click Try for free and sign in to Apify.
  2. Enter your Search query, for example Tudor Black Bay 58, and optionally a Max price.
  3. Add a channel: a Telegram bot token and chat ID, a Discord webhook URL, or a webhook URL. The setup guides are below.
  4. Click Start. The first run saves the current listings as a baseline and sends you a confirmation such as:

    ✅ Chrono24 Alerts is watching "Tudor Black Bay 58" (843 listings on Chrono24). 60 current listings saved as a baseline. You'll get a message here when a new listing appears or a price drops by 5% or more.

  5. Schedule it (see Run it on a schedule). Each scheduled run checks for changes and alerts you.

Example input:

{
"searchQuery": "Tudor Black Bay 58",
"currency": "EUR",
"priceTo": 4000,
"watchTypes": "U",
"specials": ["102"],
"alertOnNewListing": true,
"alertOnPriceDrop": true,
"priceDropThreshold": 5,
"telegramBotToken": "123456789:AAH...",
"telegramChatId": "123456789"
}

specials: ["102"] means "Box and papers". In Apify Console you pick filters from drop-downs, so you never need the IDs.

Set up notifications

You can use one channel or all of them at once. Without any channel, alerts are still saved to the run's dataset.

Telegram

  1. In Telegram, open @BotFather, send /newbot and follow the prompts. Copy the token it gives you (123456789:AAH...) into Telegram bot token.
  2. Open a chat with your new bot and send it any message, for example hi. Bots can't message you first.
  3. Open https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates in a browser and copy the number after "chat":{"id":. Paste it into Telegram chat ID.

For a group, add the bot to the group, send a message in the group, and use the group's ID from getUpdates (it starts with -). For a channel, make the bot an admin and use the channel's @username as the chat ID.

If the token is wrong, the run stops right away with a message telling you so, before it does anything else.

Discord

  1. In Discord, open Server Settings → Integrations → Webhooks → New Webhook.
  2. Choose the channel the alerts should go to, then click Copy Webhook URL.
  3. Paste it into Discord webhook URL.

Each alert arrives as an embed with the photo, price, old price, location, seller and a link.

Webhook (Zapier, Make, n8n, Slack, your own server)

Paste any URL into Webhook URL. On every run that finds alerts, the actor sends one POST request with JSON like this:

{
"event": "chrono24.alerts",
"searchQuery": "Tudor Black Bay 58",
"trackingKey": "search-e10afe846f6f692d",
"runId": "a1B2c3D4e5F6g7H8i",
"runUrl": "https://console.apify.com/view/runs/a1B2c3D4e5F6g7H8i",
"detectedAt": "2026-10-03T20:33:06.727Z",
"alertCount": 2,
"alerts": [
{
"alertType": "price_drop",
"title": "Tudor Black Bay Fifty-Eight",
"price": 5262,
"previousPrice": 6314,
"...": "..."
},
{ "alertType": "new_listing", "title": "Tudor Black Bay Fifty-Eight", "price": 3300, "...": "..." }
]
}

Each item in alerts has the same fields as a dataset row (see Output), without notified. Runs without alerts don't call the webhook. It's called after Telegram and Discord, so a failing endpoint doesn't stop the other messages.

What an alert looks like

A Telegram price-drop alert from a real run (Telegram shows it under the listing photo):

📉 Price drop −16.7% Tudor Black Bay Fifty-Eight Inter 58 Limited edition Inter seconda stella 💰 €5,262 (was €6,314) 📍 Italy · Private seller 🔖 Ref. M79030N-0025 📅 2024 📦 Original box, original papers View on Chrono24

The reference, year and box & papers lines appear when Add watch details to alerts is on. A new-listing alert looks the same with the heading 🆕 New listing and no old price.

If one run finds more alerts than Max notifications per run (default 20), you get the first 20 and one summary message ("…and 37 more alert(s)"). Every alert is still saved to the dataset and sent to the webhook.

Run it on a schedule and send alerts to a spreadsheet

Alerts only work when the actor runs again and compares, so the schedule is what turns it into an alert. Each run also saves its alerts to the dataset, so you can log them in a spreadsheet.

1. Save your input as a task

Open the actor, set your options, then click Save as a new task. A task is a saved input you can run again with one click or on a schedule.

2. Schedule the task

In Apify Console, go to Schedules, click Create new, choose how often to run (for example daily at 06:00 in your time zone), and add your task. See Schedules and How to create a schedule.

Watch how to schedule an Actor:

Or schedule a saved task:

Common schedules:

Use caseFrequencyCron expression
Hot references (fastest alerts)Every 15 minutes*/15 * * * *
Regular watchEvery 30 minutes*/30 * * * *
Casual watchHourly0 * * * *
Morning and evening checkTwice a day0 8,20 * * *

3. Send the results to a spreadsheet

Connect Google in the task's Integrations tab to save every run to Google Sheets or Google Drive automatically, so every alert is also logged there:

4. Compare runs

Every alert row has listingId, alertType and detectedAt, so the sheet works as a running log:

  • Alert log: filter by alertType (new_listing, price_drop, baseline) to see what triggered each row.
  • Price drops: sort by priceChangePercent or priceChange, using previousPrice and price.
  • Deal quality: sellerType, certified and detail.scopeOfDelivery (box and papers).
  • Per-search history: group by searchQuery or trackingKey, and use detectedAt for timing.
  • Delivery check: notified shows which channels got each alert.

Want several alerts? Create one task per search (for example "Submariner under $9k" and "Speedmaster with box & papers") and add them all to the same schedule. Each search keeps its own memory.

How it decides what to alert

  • Memory. After each run, the actor remembers every listing it checked and its price in a key-value store named chrono24-alerts-state in your Apify account. The memory is tied to the search (query, currency and filters). Change the search and it starts a fresh baseline; set a Tracking ID to keep the same memory while you tweak filters.
  • New listing. A listing that wasn't in any earlier run of this search.
  • Price drop. The price is at least Price drop threshold percent (and, if set, Minimum price drop amount) below the reference price. The reference is the price when the listing was first seen or last alerted, and it goes up if the seller raises the price. So each drop alerts once, and small cuts add up.
  • Price on request listings can trigger new-listing alerts but not price drops.
  • Listings that haven't appeared in the search for 90 days are forgotten.

Input reference

FieldDefaultWhat it does
searchQueryemptyBrand, model or reference, as on Chrono24. Empty = everything matching the filters.
priceFrom / priceToemptyPrice range in currency. priceTo is the easiest "alert me under X".
currency"USD"Currency for prices, price filters and drop amounts.
watchTypesboth"U" used only, "N" new only.
alertOnNewListingtrueAlert when a new matching listing appears.
alertOnPriceDroptrueAlert when a known listing's price drops.
priceDropThreshold5Minimum drop in percent.
priceDropMinAmount0Also require the drop to be at least this amount. 0 = off.
notifyOnFirstRunfalseAlso send the current listings on the first run, not just a confirmation.
maxNotificationsPerRun20Max messages per channel per run; the rest are summarized.
telegramBotTokenemptyBot token from @BotFather (stored encrypted).
telegramChatIdemptyYour user ID, a group ID or a channel @username.
discordWebhookUrlemptyDiscord channel webhook URL (stored encrypted).
webhookUrlemptyAny URL that accepts a JSON POST (stored encrypted).
includeDetailsfalseAdd reference number, year, condition, box & papers, seller rating and description to alerts. One extra request per alert.
maxListings60Search results checked per run, newest first.
sortOrder"5" (newest)Keep newest first for alerts.
trackingIdemptyName for the alert's memory. By default it's derived from the search.
FiltersemptymanufacturerIds, models, catalogCollectionId, catalogModelId, condition, certified, specials (box & papers), movementTypes, gender, caseDiameter, year, waterproof, functions, styles, caseMaterials, dialColor, braceletMaterial, braceletColor, sellerType, stockInfo, countryIds.

Ready-to-run examples

A grail under a price, worldwide

{
"searchQuery": "Rolex Submariner 124060",
"currency": "USD",
"priceTo": 9500,
"certified": true,
"discordWebhookUrl": "https://discord.com/api/webhooks/..."
}

Only full sets from private sellers in Europe

{
"searchQuery": "Omega Speedmaster Professional",
"currency": "EUR",
"watchTypes": "U",
"specials": ["102"],
"sellerType": "PrivateSeller",
"countryIds": "DE,FR,IT,NL,BE,AT,ES",
"telegramBotToken": "123456789:AAH...",
"telegramChatId": "123456789"
}

Price-drop watch on a whole (narrow) market

{
"searchQuery": "Grand Seiko SBGA211",
"alertOnNewListing": false,
"alertOnPriceDrop": true,
"priceDropThreshold": 3,
"priceDropMinAmount": 150,
"maxListings": 300,
"webhookUrl": "https://hooks.zapier.com/hooks/catch/..."
}

To catch price drops on every matching watch, keep the search narrow and set maxListings above the number of matches (the log shows how many listings Chrono24 has for your search).

Output

Every run saves its alerts to the run's dataset (the Alerts view shows photo, alert type, price, old price and link). On the first run, the dataset holds the baseline listings with alertType: "baseline". A summary with counts and any notification errors is saved as OUTPUT in the run's key-value store.

A real price-drop row, with detail shortened:

{
"alertType": "price_drop",
"title": "Tudor Black Bay Fifty-Eight",
"subtitle": "Inter 58 Limited edition Inter seconda stella",
"price": 5262,
"currency": "EUR",
"previousPrice": 6314,
"priceChange": -1052,
"priceChangePercent": -16.66,
"listingUrl": "https://www.chrono24.com/tudor/black-bay-inter-58--id48917792.htm",
"listingId": 48917792,
"mainImage": "https://img.chrono24.com/images/uhren/xp2z7puznyr7-u0kv2widht008i9vl62hk8sz-Square420.jpg",
"location": { "city": "", "countryCode": "IT", "countryName": "Italy" },
"sellerType": "PrivateSeller",
"certified": false,
"listingStatus": "Available",
"watchStockInfo": "InStock",
"shippingCost": { "amount": 89, "currency": "EUR" },
"detail": {
"referenceNumber": "M79030N-0025",
"manufacturer": "Tudor",
"model": "Black Bay",
"yearOfProduction": "2024",
"scopeOfDelivery": "Original box, original papers"
},
"searchQuery": "Tudor Black Bay 58",
"trackingKey": "search-e10afe846f6f692d",
"notified": { "telegram": true },
"detectedAt": "2026-10-03T20:33:06.727Z"
}
FieldMeaning
alertTypenew_listing, price_drop, or baseline (first run).
price, currencyCurrent price; null for price on request.
previousPrice, priceChange, priceChangePercentFor price drops: the reference price and the change (negative).
listingUrl, listingId, mainImage, imageUrlsThe listing on chrono24.com and its photos.
location, sellerType, certifiedSeller city and country, Dealer / PrivateSeller / C24Direct, Chrono24 Certified.
listingStatus, watchStockInfo, badge, shippingCostAs shown on Chrono24.
detailWith includeDetails: reference, brand, model, condition, year, case size, box & papers, description, full-size photos, seller rating.
notifiedChannels the alert was sent to, e.g. {"telegram": true, "discord": true, "webhook": true}.

FAQ

Why didn't I get any alerts on the first run?

On purpose. The first run remembers what's already for sale, so you're not flooded with dozens of old listings, and sends one confirmation message. Alerts start on the next run. If you do want the current listings sent once, turn on Notify about current listings on the first run.

How quickly will I hear about a new listing?

As quickly as your schedule runs. With a 15-minute schedule, you'll typically know within 15 minutes of the listing going live. A run usually takes a few seconds.

I changed my filters and got a "baseline" again. Why?

The memory belongs to the search. A different search is a different alert, so it starts with a new baseline. To keep the memory while you adjust filters, set the same Tracking ID before and after the change. Listings that newly match the changed filters are then reported as new.

Will I miss price drops on older listings?

The actor checks the newest maxListings results (60 by default). A price drop on a listing outside that window isn't seen. For a narrow search (one reference, a price range) set maxListings above the number of matches and every listing is checked. New listings appear at the top of a newest-first search, so they're caught as long as fewer than maxListings new ones appear between two runs. For a very broad search, run more often or raise maxListings.

Can I watch several watches?

Yes. Save one task per search and schedule them all. Each has its own memory, and they can post to the same Telegram chat or Discord channel.

Is my Telegram token safe?

The bot token and both webhook URLs are secret inputs: Apify stores them encrypted and hides them in the run's input. The bot can only post to chats where you added it.

Do alerts work without Telegram, Discord or a webhook?

Yes. Every alert is saved to the run's dataset. You can also use Apify's own integrations (email, Slack, Google Sheets, Make, Zapier) on the task.

Which currency are prices in?

The one you choose in Currency. Chrono24 converts prices itself, so they match what you see on the site in that currency. If you change the currency, the actor re-bases its memory and skips price-drop alerts for that one run, because the old and new prices can't be compared.

Do I need a Chrono24 account or proxies?

No. The actor doesn't log in and doesn't use your Chrono24 account.

I want the full search results, not alerts

Use Chrono24 Scraper for one-off exports of up to thousands of listings with full details.

How it compares

What you needChrono24 AlertsRefreshing Chrono24 yourself
Where you get alertsTelegram, Discord, any webhook, Apify integrationsNowhere, you check by hand
Check frequencyYour schedule, for example every 15 minutesWhen you remember
Price-drop thresholdPercent and minimum amount you chooseSpot it yourself
Data for your own useEvery alert saved to a dataset and a webhookNone
PricePay per alertFree, but your time

Cost

This actor uses pay-per-event pricing, with no subscription. You pay a small start fee per run and a fee for each row saved to the dataset, which is each alert (and each baseline listing on the first run). A run with no changes only pays the start fee. Prices depend on your Apify plan:

EventFree planPaid plans (Starter and above)
Run start (per GB)$0.05$0.03
Alert row saved$0.005$0.003

The Pricing tab always shows the current prices. Set a maximum cost per run if you want a hard cap.

  • Chrono24 Scraper: export Chrono24 search results with reference numbers and seller data.

Support

Report problems or request features in the Issues tab. Include the run ID and what you expected. We read every issue.

This actor is not affiliated with or endorsed by Chrono24 GmbH. "Chrono24" is a trademark of Chrono24 GmbH.