Back to all articles

I built a free social media scheduler for e-commerce sellers — here's how

Buffer costs $6 per channel per month. Hootsuite starts at $99. Neither of them supports Reddit scheduling. I built a free alternative in Python that posts to X, Reddit, Instagram, Facebook, and Telegram automatically. Here's the whole story.

The problem I was solving

When I started talking to e-commerce sellers about their social media habits, the pattern was consistent: they knew they should be posting consistently, they weren't, and the reason was almost always friction rather than lack of content ideas.

The tools that exist are either expensive (Buffer, Hootsuite, Sprout Social all charge monthly fees per channel), missing platforms sellers actually care about (none of the major schedulers support Reddit, which is genuinely valuable for niche product communities), or require creating yet another account on yet another cloud service.

I wanted something different: a free, local-first tool that handles the scheduling mechanics without charging monthly fees or requiring trust in a third-party server.

What I built

A Windows desktop application built in Python that:

The tech stack

Why Python and PyQt5

Python was the natural choice because the API libraries for every platform I wanted to support already exist and are well-maintained. Tweepy for X and PRAW for Reddit are both excellent — they handle the OAuth complexity cleanly and abstract away the API specifics.

PyQt5 for the GUI was a pragmatic decision. It's not the most modern choice but it produces a native-feeling Windows application that doesn't require users to install a runtime or deal with Electron's memory overhead. The goal was something lightweight that could run in the background without eating resources.

APScheduler was the right tool for the scheduling part — it runs inside the same Python process, supports persistent job stores (so scheduled posts survive app restarts), and has a clean API for adding, removing, and inspecting jobs.

The hardest part: platform APIs

Each platform's API has its own OAuth flow, its own rate limits, and its own quirks. The hardest was Instagram, which requires images to be accessible at a public URL rather than uploaded as a file — a constraint of the Graph API that's genuinely annoying but not a dealbreaker. The solution was to document this clearly and require users to host images publicly before scheduling.

Reddit was the most technically interesting. PRAW makes basic posting straightforward, but handling subreddit-specific rules (flair requirements, link-only subreddits, posting restrictions) required more careful error handling than the other platforms. The app catches these errors and surfaces them clearly rather than silently failing.

Facebook and Instagram share the same Graph API but have different authentication flows and different permission scopes. Getting both working correctly from the same OAuth setup took the most debugging time.

The local-first decision

Building without a cloud backend was a deliberate choice, not a limitation. The primary concern e-commerce sellers raise about social media tools is handing their platform credentials to a third party. With a local-first app, there is no third party — credentials are stored in SQLite on your machine and API calls go directly from your computer to each platform.

The obvious limitation is that the app needs to be running for scheduled posts to deliver. This is a real constraint, and it's the main reason a cloud version is worth building eventually. But for sellers who keep their computer on during working hours, it's a workable tradeoff for a free tool.

What's coming next

The two most-requested features from early testers are caption generation (AI-written post text from a product URL or description) and a cloud-hosted version that removes the "app must be running" limitation.

The caption generation feature is the more interesting build. The architecture is similar to the AI Stack Finder: a Cloudflare Worker calls the Anthropic API with the product details and returns platform-specific caption variations. The scheduling app then treats AI-generated captions the same as manually-written ones.

The cloud version requires a proper backend — probably a Flask API deployed to Railway or Render — plus a job queue that can handle scheduled delivery without a desktop process. That's a bigger lift but it's the path to removing the main limitation.

Download the scheduler — free

Windows desktop app. Connects to X, Reddit, Instagram, Facebook, and Telegram. No monthly fee.

Also worth reading

The same approach used here — building something free and useful for an audience, then writing honestly about how it was built — is how the AI Stack Finder got its first 200 users. Both tools are free to use and built specifically for e-commerce sellers.