Every Apple Store near Chicago was sold out and my online order said January 25. So I had Claude build a watcher that checks in-store pickup every minute and texts me the moment one shows up. The full setup is below, including every way to run it.
→Apple's website asks one question when you check store pickup: is this exact model in stock near this zip code? The watcher asks that same question once a minute.
→You describe what you want to Claude Code. It finds the part number for your model, writes the script and sets it up to run in the background.
→Stock showed up a few phones at a time and was gone in a minute or two, so the alert has to reach you within a minute.
🔒Drop your email, get the full setup
The exact prompt for Claude, every alert option, and where to run it if you don't have a Mac mini.
Join 6,800+ builders already getting this. No spam.
THE FULL SETUP · 9 STEPS
01
What the watcher actually does
When you check in-store pickup on apple.com, your browser calls a small Apple API with two things: the part number of the phone and a zip code. Apple answers with every store nearby and, for each one, whether that model is "available" or "unavailable" for pickup. The watcher calls the same API every 60 seconds and pings you when any store flips to available.
MK1L4LL/A is the 1TB Night Sky iPhone Duo. Claude looks up yours.
02
Have Claude Code build it
Open Claude Code in an empty folder and paste this. Swap the model, color and zip for yours. It works for any iPhone, iPad or Mac that Apple sells for store pickup.
Build me a Python script that checks Apple's in-store pickup availability for [iPhone Duo 1TB Night Sky] near zip code [60607] once every 60 seconds, using the same pickup check the apple.com buy page uses. Look up the part numbers from the buy page. When any store shows it available for pickup, notify me with [ntfy / Pushover / Telegram / iMessage / Slack] and include the store name. If Apple returns errors, wait and back off. Never check faster than once a minute.
03
Narrow it to the models and stores you'd actually buy
Watching every model is fine, the API takes several part numbers in one request. If you only want one color, or only stores you can drive to, say so. I set one up for a friend that only texts for a 256GB Night Sky at the Illinois stores and skips the ones in Wisconsin and Indiana.
Only alert me for [256GB Night Sky]. Ignore stores outside [Illinois]. Still check every model in one request so it's one call a minute.
04
Pick how it pings you
Any of these work. Pick the one you'll notice fastest.
Option
Cost
Setup
ntfy
Free
Install the ntfy app, pick a random topic name, and the script sends one web request. Topic names are public, so make it hard to guess.
Pushover
$4.99 once per platform
30-day free trial. Supports high-priority alerts that get past quiet notifications.
Telegram
Free
Make a bot with @BotFather, send it a message once, and the script messages you through the bot.
iMessage
Free
Mac only. The first time, macOS asks to let the script control Messages. Click Allow, or the texts never send.
Slack
Free
Create an incoming webhook for a channel and the script posts to it.
05
Turn the text into an alarm
A notification is easy to sleep through. On iPhone, a Shortcuts automation can start a 1-second timer every time the alert lands, and the timer rings even on silent.
Shortcuts → Automation → New → Message → Message Contains "in stock" → Run Immediately → add action "Start Timer" for 1 second
This works with iMessage alerts. For other apps, give the app's notifications Time Sensitive access instead.
06
Keep it at once a minute
I tried checking every 15 seconds and Apple blocked my home internet within about 90 seconds. Apple returns an error (541) and stops answering for a while. At once a minute it ran for two days, with a couple of short blocks that cleared on their own. Don't run several copies to go faster, they all share your connection.
If Apple returns an error, double the wait each time (2 min, 4 min, 8 min) up to 5 minutes, then go back to every 60 seconds once it answers.
07
Where to run it
It has to run nonstop, and stock lasts a minute or two, so anything that can't check every minute will miss drops.
Where
Cost
Works?
Mac mini or any Mac at home
Free
Yes. This is what mine runs on.
Laptop you leave on
Free
Yes. Keep it plugged in with the lid open. On a Mac, start it with caffeinate so it doesn't sleep.
Spare PC or Raspberry Pi at home
Free
Yes. Same home internet as your phone, which is what Apple saw from me.
Cheap cloud server (DigitalOcean, Hetzner)
$4 to ~€6 a month
Probably. It's always on, but it runs from a data center connection. I haven't tested whether Apple answers those the same way, so run one check by hand first.
Cloudflare Workers
Free plan
Maybe. Scheduled triggers are free, same data center caveat. Check their current cron limits first.
Vercel
Hobby free / Pro paid
Hobby no: scheduled jobs run once a day. Pro can run every minute, same data center caveat.
GitHub Actions
Free for public repos
No. The shortest schedule is every 5 minutes and runs get delayed or dropped when GitHub is busy.
caffeinate -i python3 watch.py
08
Keep it running after a restart
Ask Claude to set it up so it starts on its own and restarts if it crashes. On a Mac that's a launchd agent, on Linux a systemd service, on Windows a Task Scheduler task. Claude writes the right one for your machine.
Set this script up to start automatically when this computer boots and restart if it crashes. Write the logs to a file I can check.
To check it's alive, look at the last few lines of the log. You should see a line about every minute.
09
Be ready to buy in under a minute
Set these up before your first alert. Sign in to the Apple Store app on your phone. Save your exact configuration and set your preferred store. Use Apple Pay: anything that needs approval at checkout, like financing or a new lease, is the slowest step. And buy it yourself on your phone. When Claude pre-filled the checkout in my desktop Chrome, Apple's site stopped letting that browser continue (incognito worked). The phone app was smooth.