How to Save Instagram Reels So You Actually Use Them Later
·4 min read·Ezra Seal
automation · AI · workflow · systems · how it works
Saved posts die in a folder you never reopen. Not for lack of discipline. There's no step between "I liked this" and "I can actually use this later," so the link sits there until you've forgotten why you kept it.
Below is the version I built and run. Eight steps, all of it working, none of it theoretical.
Key takeaways
- The save step was never the broken part. Getting the thing back out is.
- A Telegram bot is the fastest way in from a phone. One share, no app to open, no decision to make.
- Telegram throws away unread bot messages after 24 hours, so a scheduled job moves them somewhere permanent every six hours. Skip that detail and the system quietly eats things on the days you send the most.
- The bot token never touches a file you'd commit. It lives as a GitHub Actions secret and gets read at run time.
- Downloading and transcribing runs on your own machine for free. Nothing costs an AI token until you decide a specific video is worth reading.
- Pull frames only where the scene changes. A talking head that never cuts gives you two or three, not twenty.
Step one: make a bot
Message @BotFather on Telegram and send /newbot, then name it whatever you want. You get a token back. That token is the entire key to the bot, so it never goes in a file you'd commit anywhere.
Step two: give it a home
A private GitHub repo. That's where the queue of saved links lives, and where the collector script that drains your bot's inbox runs from.
Step three: store the token safely
In that repo's settings, under Secrets and variables, then Actions, add the bot token as a repository secret. The workflow reads it from there at run time. It's never typed into a script file, never visible in a log, never in a commit.
Step four: write the collector
A short Python script that calls Telegram's getUpdates endpoint, which hands back any new messages sent to the bot. Pull the URLs out of the message text with a regex, skip anything already queued, and append each new one as its own line in a queue.jsonl file, one JSON object per line: the URL, where it came from, when it was sent, and a processed: false flag.
One detail carries the whole thing. Track an offset, meaning the ID of the last message you've already read. Without it Telegram keeps re-sending old messages and you'd queue every link twice.
Step five: schedule it
A GitHub Actions workflow on a cron schedule. 0 */6 * * * runs it every six hours.
That number isn't arbitrary. Telegram discards unread messages after 24 hours, so six-hour runs leave a comfortable margin even when a run gets delayed. Each run drains the queue and commits whatever it found straight back to the repo, which is what turns the links into something permanent instead of something living in a temporary inbox.
Step six: send yourself things
From here on, saving is forwarding. You see something, you share it to your bot, that's the entire save step. No app to open and nothing to remember to do later.
Saving something takes one tap. Getting it back out is the part nobody builds, which is why the folder fills up and stays full.
Step seven: process on your own machine
This part runs locally and not in the cloud, on purpose. Nothing here costs an AI token until you actually decide to use a specific video, and downloading and transcribing video is cheap and fast on an ordinary computer.
A script pulls the video down, with yt-dlp handling the download, transcribes the audio offline with whisper.cpp, which is free and makes no API calls, and grabs still frames with ffmpeg. But only from the moments where the scene actually changes, not one frame every second. A talking-head video that never cuts yields two or three frames instead of twenty. That keeps the eventual cost of having an AI look at the video small, because you're not paying it to read twenty near-identical images.
Step eight: ask for it when you want it
Set up a phrase your AI setup recognizes. Mine is "check my reels." It opens the queue, finds anything still marked unprocessed, runs it through the pipeline above, and tells me what's actually in the video: the transcript, the key visual beats, whatever I need to decide if it's worth acting on.
Why it's built this way
Two constraints drove every decision here.
Telegram's 24-hour retention means the collector has to run on a schedule you can't get wrong, which is why it's six hours and not once a day. The second one is cost. Video processing is either free, running on your own machine, or it costs real tokens when an AI actually reads the frames. The whole design keeps the free half automatic and the expensive half deliberate, so you only pay for what you've already decided is worth reading.
Most of that isn't AI. It's plumbing, and the plumbing is where these things fail. More on how I think about that on the AI page.