← HotsTuff

What it costs to run an automated store at $0 a month

2026-08-28 · Matthew Ferreira

Every "start a store for free" post I read left something out. Usually the hosting was free but the automation wasn't, or the automation was free but it needed a $29/month app to actually run. So here is the whole thing, line by line, with nothing left out — including the parts I turned off because they cost money I don't have yet.

The bill

PieceWhat it doesWhat it costs
GitHub PagesServes the storefront$0 — free for public repositories
GitHub ActionsRuns every scheduled job below$0 — free for public repositories
Cloudflare WorkersStripe checkout, lead capture, order alerts$0 — free tier is 100,000 requests a day
StripeTakes the payment$0/month, then 2.9% + $0.30 per transaction
CJ DropshippingSupplier and fulfilment$0/month, then wholesale + shipping per order
GoatCounterTraffic analytics$0
ntfyPushes order and lead alerts to my phone$0
A domain namefindhotstuff.comThe only recurring bill. Billed once a year.

So the honest version of "$0 a month" is: everything that runs costs nothing, and the domain is a yearly bill in the ballpark of a large coffee per month. I'm not going to pretend that's zero, because it isn't.

What "automated" actually means here

There are thirteen scheduled jobs. They are ordinary GitHub Actions workflows — YAML files in the repository, not a SaaS product:

The whole store is static files. There is no server to keep alive, no database to back up, and nothing to patch. That is the actual reason it costs nothing — not a clever free tier, just an architecture with very few moving parts that can bill you.

The two things I switched off because they cost money

I'd rather show you the switched-off list than pretend the stack is complete.

Automatic posting to X. The poster is written and works. X's API charges per post, and at my current traffic that's money spent to reach almost nobody. The workflow sits idle until there's a reason to turn it on.

AI-polished product names. Supplier titles are keyword soup. A model can tidy them into readable names in seconds, and the code to do it is in the repo behind an optional API key. Without the key the code skips silently and the store falls back to mechanical name cleanup. It costs a few dollars a month, which is a few dollars a month I don't have committed yet, so: mechanical names.

Both of those are one secret away from running. Neither is pretended to be running in the meantime.

The one place free tiers actually bit

Cloudflare Workers can't reliably send push notifications to my phone.

The Worker handles checkout, and when an order lands I want to know immediately. The obvious move is to have the Worker call the push service directly. That fails intermittently, and the reason is that Cloudflare Workers share outbound IP addresses across an enormous number of customers — so from the push service's side, the request looks like it's coming from an address that's already sent a flood of traffic, and it gets rate-limited.

The fix was a hop: the Worker fires a repository_dispatch event at GitHub, and a tiny workflow does the actual push from a GitHub runner. It adds a few seconds of latency to a notification I read minutes later anyway, and it costs nothing.

What it actually cost

Evenings. I have a full-time job that runs from about 6:45 in the morning to 4:30 in the afternoon, so all of this was built after that. The money column is genuinely near zero. The time column is not, and anyone telling you otherwise is selling something.

Would I recommend this stack?

For a store you're testing rather than betting on, yes, with one honest caveat: it is a developer's free stack. Every piece is free because you're doing the work a paid product would do for you. If you don't want to touch YAML or Python, Shopify's monthly fee is buying you something real.

What you get in exchange for the work is that nothing can raise its price on you, nothing can change its terms, and nothing can turn your store off.

More notes