DEV Community

スシロー
スシロー

Posted on • Originally published at qiita.com

[Real Experience] Auditing My Indie SaaS Subscriptions: 5 Alternatives That Cut $800/Year

Auditing My Indie SaaS Subscriptions: 5 Alternatives That Cut $800/Year

TL;DR

Fixed costs for indie dev projects balloon through "subscriptions you signed up for and forgot." I switched 5 services to free tiers or self-hosted alternatives, cutting ¥10,000/month — ¥120,000/year (roughly $800). The short version:

Before Monthly After Monthly Annual Savings
Heroku Hobby (2 dynos + DB) ¥2,800 Fly.io / Railway free tier ¥0 ¥33,600
Vercel Pro ¥3,000 Cloudflare Pages ¥0 ¥36,000
Datadog (1 host) ¥2,300 Grafana Cloud Free ¥0 ¥27,600
Mailgun Foundation ¥1,400 Resend free tier ¥0 ¥16,800
Algolia Build overage ¥500 Meilisearch (self-host) ¥0 ¥6,000

At indie-project traffic levels, you're probably using less than 10% of what paid plans offer. The first step is auditing your usage and checking whether your actual numbers fit inside a free tier.

The Approach: Measure First, Decide Second

Cut decisions should be based on real data, not gut feeling. Start with a billing audit.

# Export each service's plan and recent usage to a spreadsheet
# Example: check request count for the last 30 days from nginx access log
awk '{print $4}' access.log | grep -c "$(date +%d/%b/%Y)"
# → A few thousand requests/day fits comfortably inside almost every SaaS free tier
Enter fullscreen mode Exit fullscreen mode

The key is looking at actual traffic, not peak spikes. Most indie projects fit well within Vercel/Cloudflare free tiers (100k requests/month to unlimited bandwidth).

Step-by-Step Migration

1. Hosting: Heroku → Fly.io

# Deploy to fly.io — existing Dockerfile or buildpacks work as-is
curl -L https://fly.io/install.sh | sh
fly launch            # interactively generates fly.toml
fly deploy
fly scale count 1     # 1 instance is enough for indie projects
fly postgres create   # small instance, effectively free
Enter fullscreen mode Exit fullscreen mode

The key to cost control: lock to fly scale count 1 and the minimum VM (shared-cpu-1x).

2. Frontend: Vercel Pro → Cloudflare Pages

Unlimited bandwidth, generous build limits, and free equivalents of Pro features (Analytics, etc.) that most indie projects actually need.

npm i -g wrangler
wrangler pages deploy ./dist --project-name my-app
Enter fullscreen mode Exit fullscreen mode

3. Monitoring: Datadog → Grafana Cloud Free

The free plan covers 10k metric series, 50GB logs, and 14-day retention. Works with Prometheus remote_write out of the box.

# prometheus.yml — forward to Grafana Cloud via remote_write
remote_write:
  - url: https://prometheus-prod-XX.grafana.net/api/prom/push
    basic_auth:
      username: "123456"
      password: "${GRAFANA_CLOUD_API_KEY}"
Enter fullscreen mode Exit fullscreen mode

4. Email: Mailgun → Resend

Free tier: 3,000 emails/month, 100/day. More than enough for transactional email in a typical indie project.

curl -X POST 'https://api.resend.com/emails' \
  -H "Authorization: Bearer $RESEND_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "from": "you@yourdomain.dev",
    "to": "user@example.com",
    "subject": "Welcome",
    "html": "<p>Thanks for signing up!</p>"
  }'
Enter fullscreen mode Exit fullscreen mode

5. Full-Text Search: Algolia → Meilisearch (self-hosted)

Run it alongside your existing VPS workload and the marginal cost is zero.

docker run -d --name meili -p 7700:7700 \
  -e MEILI_MASTER_KEY="$MEILI_KEY" \
  -v $PWD/meili_data:/meili_data \
  getmeili/meilisearch:v1.10

# Index your data
curl -X POST 'http://localhost:7700/indexes/posts/documents' \
  -H "Authorization: Bearer $MEILI_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary @posts.json
Enter fullscreen mode Exit fullscreen mode

Watch Out For

  • Check overage behavior before switching: Services like Fly.io can auto-charge on overages. Set hard limits with fly scale to prevent surprises.
  • Prefer low vendor lock-in stacks: Cloudflare Pages and Meilisearch are Docker-friendly and built on standard APIs — re-migration costs are low if you change course again.
  • Migrate in stages: Before cutting over DNS, lower TTL to 300 seconds, then run old and new services in parallel for one full billing cycle so you can roll back cleanly.

A subscription audit is a one-time effort that keeps paying off year after year. Open every invoice, compare your real traffic numbers against free tier limits, and go from there.


Related Links

※ Some links are affiliate or self-promotional.


🛠 From the Author

If you want to put Claude / GitHub Actions automation like this to work in your own environment right away:

※ Links to author's own products and sites (includes promotional content).


If you found this useful: I packaged 50 copy-paste AI debugging prompts + drop-in Claude Code config templates (CLAUDE.md, settings.json, MCP) into a small kit.
Launch deal: code START50 = 50% off → 50 AI Debugging Prompts + Claude Code Config Pack (about $6, 50% off applied)

Top comments (0)