Update, September 2026. Grabbit is now AppGrabbit (version 3.2.0). The Free plan no longer has a daily cap: it runs on 5 credits a month (a video, a batch, a transcript or a converted file is 1 credit) and you can claim 1 more every 48 hours. The app now transcribes any video, with or without captions, on your PC with whisper.cpp, and your own recordings too. Pricing is USD 8.99 a month, monthly only (no annual plan), or a one-time 7-day pass for USD 3.99. Everything that changed: what's new in 3.2. The rest of this post is the original April story, kept as it was.
I've been wanting to download videos from YouTube and TikTok for a long time, but every solution I found was either a sketchy website full of ads, a command-line tool that non-technical users couldn't use, or a bloated app that required an account and uploaded your files to a cloud server.
So I built my own.
What it does
Grabbit is a desktop app for Windows that downloads videos from YouTube, TikTok, Instagram, Facebook, Twitter, Pinterest, Twitch and SoundCloud — up to 4K/8K quality. It runs a local Flask server and opens in your browser, so the UI is just a web page served from localhost:5000. No Electron, no heavy framework. Just Python and Vanilla JS.
It also has a Chrome Extension that puts a Grab button directly on video pages. While you're watching a video, click Grab — it gets added to a download queue in real time. No copying links, no switching tabs.
How I built it
The stack is simple on purpose:
Backend: Python + Flask + yt-dlp + ffmpeg
Frontend: Vanilla JS SPA (no React, no Vue)
License system: Supabase (PostgreSQL + Edge Functions)
Payments: Stripe webhooks → Supabase Edge Function → Resend email
Installer: PyInstaller + Inno Setup
Distribution: GitHub Releases
The trickiest part was getting the download progress to stream in real time. yt-dlp outputs progress line by line, so I parse each line with regex and push it to a polling endpoint the frontend checks every 600ms. Not the most elegant solution but it works reliably.
Another challenge was packaging with PyInstaller. When frozen, file points inside the bundle temp directory, not where the exe lives. So I had to detect sys.frozen and use sys.executable to find the actual working directory. Took me longer than I'd like to admit.
What I learned
Building a freemium desktop app from scratch taught me a lot about things I'd never dealt with before — code signing certificates, Windows Smart App Control, subprocess encoding issues on Windows (cp1252 vs utf-8), auto-update architecture without breaking user data, and how to structure a license system that works offline when Supabase is unreachable.
The most important thing I learned: ship early. The first version was rough. But shipping it gave me real feedback and the motivation to keep going.
Where it is now
Grabbit is live. Free plan included. Pro plan at $8.99/month (monthly only, no annual plan) for unlimited downloads, 4K/8K, all platforms and segment download. (Since September 2026 the Free plan runs on credits and the app is called AppGrabbit; see the update at the top.)
If you're curious: appgrabbit.com
Happy to answer any questions about the stack or implementation details.
If you try it, let me know what you think — feedback is welcome.
Top comments (0)