EcoToken
← All posts
July 3, 2026·9 min read

Building an LLM SaaS that doesn't go broke: things we wish we'd known on day one

Honest founder retrospective from EcoToken's first year. The pricing decisions, the cost surprises, the customer feedback that mattered, and what we'd build differently if we started over today.

EcoToken passed its first year of running on real customers in mid-2026. Here's the unvarnished retrospective. Most of these are obvious in hindsight. None of them were obvious on day one.

1. The free tier is the marketing budget

Every free run costs us real Anthropic dollars. Treating that as a customer-acquisition cost — not as a loss — was the mental shift that made the free tier sustainable. A 10-run-per-month free tier is a $0.05 CAC. Compared to any other channel, that's a steal.

The other shift: paid users on BYO key (you pay $5/mo, your Anthropic key handles inference) have a near-zero gross-margin cost to us. That tier subsidizes the free tier and there's no path where it stops working. Build a BYO option from day one.

2. Track iteration count, not just token count

The number that actually correlates with customer happiness is "how many rounds did it take to get a usable answer" — not "how many tokens did each round use." We built the dashboard around per-token savings because that's easier to measure. We'd build it around iteration count if we were starting today.

Iteration count is a leading indicator of churn. Customers whose iteration count is dropping over time keep paying. Customers whose iteration count is flat or rising leave.

3. Per-project calibration was the unlock

The single biggest customer-feedback shift was when we stopped quoting blended savings rates and started calibrating per project. Every project has a different ratio of input-to-output tokens, a different typical iteration count, a different model preference. Quoting one number for everything — the thing we called out in why input-only dashboards lie to you — is dishonest and unhelpful.

The calibration pipeline (small/typical/large sample prompts run through the user's actual workflow, log-linear curve fit, per-project storage) took two weeks to build. It's the feature that turned us from "another prompt optimizer" into "the only one that admits the math depends on the project."

4. Thinking tokens caught us off guard

When extended thinking became default-on across providers in Q1 2026, our cost model overnight stopped matching reality. Customers were seeing 30-50% higher bills than our savings projections, because we were measuring visible output and Anthropic was billing thinking + visible output. We wrote up the full breakdown later in extended thinking is hiding your real Claude bill — the same trap most LLM accounting tools are still in today.

We fixed it inside a week. The lesson: when a provider ships a billing change, your accounting has to react within days. Subscribe to every Anthropic and OpenAI changelog feed. Read the release notes.

5. Stripe is a bigger lift than people say

The Stripe SDK is excellent. The Stripe integration — webhook signing, test↔live mode mismatches, customer-id reconciliation, refund handling, trial behavior, downgrade flows, failed-payment retries — took longer than the actual product features. Allocate 2-3× more time than you think for billing.

The single thing that saved us the most pain: a database column for every Stripe object you reference, paired with a webhook handler that idempotently writes the canonical state from Stripe events. Never let your DB and Stripe disagree.

6. The legal pages do matter (eventually)

We launched with generated Terms and Privacy from a free generator. Six months in, a customer asked us to DPA-sign for their compliance team. We didn't have a Data Processing Agreement template. The deal stalled for three weeks while we built one.

Have the legal pages on day one. Have a DPA template ready by month three. You don't need a lawyer for the first version of either — a generated baseline is fine — but you do need them to exist.

7. The stack we'd choose again

  • Next.js 14 App Router — fast, well-supported, route groups make the marketing-site / app-site separation clean.
  • Supabase — Postgres + auth + RLS + service role in one. Worth its weight in gold for a small team. The RLS model is the right default.
  • Vercel — zero-config deploys, preview URLs per PR, analytics free on every plan. Vendor lock-in is real but the productivity gain is bigger.
  • Anthropic SDK + prompt caching — well-designed, well-documented, the caching feature alone saves us ~40% of our internal API costs.
  • Stripe Checkout + Customer Portal — don't roll your own. Hosted checkout is two orders of magnitude less work than building a payment form yourself.

8. The one thing we'd change about EcoToken on day one

We'd build the "external SDK" integration first, not last. The use case isn't "come to our site to optimize" — it's "put EcoToken in your prompt pipeline so every call is optimized and tracked automatically." That insight took us six months to internalize, and the product would have grown faster if we'd started there.

The original landing page sold optimization as a destination. The current landing page sells it as a layer you add to whatever you're already doing. Same product. Very different conversion.

Most AI SaaS that fails fails not because the product is bad, but because the team didn't internalize the unit economics until too late. Build the bill-accounting layer first.

9. The lesson nobody wants to hear

You can't out-optimize a fundamentally expensive workflow. If your customer is sending 100k tokens of context to GPT-4 to answer a question that could be answered with a 2k-token retrieval against the right chunks, no amount of whitespace compression and role-framing rewrites will fix that. The savings ceiling on that workload is ~20%.

The real wins come from helping customers ask better questions in the first place — and that's a product surface we're still figuring out. The optimization passes are the easy part. Teaching someone why their prompt was structurally wasteful is the hard part.

10. The metric we watch every day

Not MRR. Not signups. Not API calls. Dollars saved across all customers, summed daily. That number going up means the product is delivering on its promise. Every other metric follows from it. If that number stalls, nothing else matters.

It's also the only metric we'd be comfortable publishing publicly. Maybe in our second retrospective.

Want to see the math on your prompts?

Try EcoToken free →