Account & support
Account & Billing
6 min read
Lunadeck has two self-serve plans at launch — Hobby (free) and Starter ($19/mo or $190/yr). Higher tiers (Team, Business, Enterprise) exist in the matrix but route through a contact form for v1.0; the self-serve checkout and customer portal cover everything most builders need.
Plans
| Hobby | Starter | |
|---|---|---|
| Price | Free | $19 / month or $190 / year ($16/mo equivalent — 17% discount) |
| Build credits per month | 60 | 600 |
| AI credits per month | 50 | 500 |
| Projects | 1 | 5 |
| BYO keystores (Certificate Vault) | 0 — managed debug keystore only | 5 |
| Max source archive | 100 MB | 250 MB |
| Build timeout | 10 minutes | 30 minutes |
| Artifact retention | 7 days | 30 days |
| Concurrent builds | 1 | 1 |
| Watermarked APK | Yes | No |
| Play Store-publishable signing | No (shared debug cert) | Yes (your own keystore) |
Numbers in this table are the values the gating code enforces today (see api/internal/billing/tiers.go if you want to audit). If the landing pricing page disagrees with this table, treat the landing page as the source of truth and please tell us so we can update.
Need more?
Team / Business / Enterprise are tracked in the same backend matrix and will become self-serve as we grow. Until then, contact us and we'll set you up manually with the right limits and an invoice.
How credits work
A build credit buys you one minute (rounded up) of build time. A 22-second build costs 1 credit. A 4-minute-30-second build costs 5. Your credit balance pays for the actual elapsed time on our build worker — not the number of builds, not the size of your APK.
AI credits are a separate bucket that pays for AI Check runs (the 6-check fan-out on every upload). Both buckets refill on the same monthly cadence.
What consumes a credit
- Successful builds charge
ceil(elapsed_seconds / 60)credits, minimum 1. - Failed builds caused by your code (
BUILD_FAILED,NO_APK,ICON_DOWNLOAD_ERROR) charge the same way — we ran the worker, your code didn't compile. - Failed builds caused by us (
SYSTEM_ERROR,WORKER_TIMEOUT,WORKSPACE_ERROR,DOWNLOAD_ERROR,KEYSTORE_DOWNLOAD_ERROR,EXEC_ERROR,UPLOAD_ERROR) refund — you don't pay for our outages. - Cancelled builds charge nothing in v1.
See Troubleshooting for what each error code means and how to recover.
When credits reset
Credits reset once per calendar month on the anniversary of your last reset (e.g., if your Starter plan started on the 12th, credits refill on the 12th of every month). Unused credits do not roll over — a fresh allotment lands on reset day regardless of how many were left in the old period.
You'll get an email and an in-app notification when you've burned through 80% of your monthly build credits, so you have time to upgrade before you're blocked. The 80% threshold fires once per period.
When you run out
When you have zero build credits remaining, the next build request returns 402 INSUFFICIENT_CREDITS and the dashboard opens an upgrade prompt. You have two recovery paths:
- Upgrade to Starter — checkout completes in under a minute and you'll have 600 credits immediately.
- Wait for your monthly reset — see the reset date in Settings > Billing.
There's no per-build "overage" charge; we'd rather you upgrade once than nickel-and-dime a balance you didn't plan for.
Upgrading your plan
The upgrade flow uses Stripe-hosted checkout — you never enter card details on lunadeck.io.
- In the dashboard, click Upgrade in the sidebar or from any out-of-credits prompt.
- Pick monthly or annual billing in the UpgradeModal.
- The button takes you to Stripe Checkout. Enter your card; the checkout session is for $19/mo or $190/yr depending on your choice.
- On success, you're redirected back to Settings > Billing. Your
plan_tierflips tostarterwithin seconds (we listen on Stripe'scustomer.subscription.createdwebhook and refresh your credit balance from there).
If you've already subscribed and try to upgrade again, the API returns ALREADY_SUBSCRIBED and the UpgradeModal points you at the customer portal instead.
Switching between monthly and annual
Open the Stripe customer portal from Settings > Billing > Manage Subscription and swap cadence there. Stripe handles proration automatically.
Cancelling your plan
We use the Stripe-hosted customer portal for cancellation. We do not bury the cancel button.
- In the dashboard, go to Settings > Billing > Manage Subscription. This calls
POST /v1/billing/portaland redirects you to Stripe's portal. - In the portal, click Cancel plan. Stripe will ask you to confirm.
- Your subscription stays active until the end of the current billing period. You keep your 600 credits and your 5-project / 5-keystore limits until the period ends.
- At period end, Lunadeck's webhook handler reverts you to Hobby. Your data is preserved — you keep all your projects, builds (within Hobby's 7-day retention from now on), and one keystore slot — but Hobby's signing path is the shared managed-debug keystore, so APKs you build after the revert can't go to the Play Store.
If you only want to pause for a billing cycle, the portal also has "Pause subscription" which leaves you on Starter without rebilling for a chosen number of months.
Refunds
We refund any first-time Starter subscriber on request within 7 days of the first paid invoice, no questions asked. Refunds are processed by us in the Stripe dashboard — there is no self-serve refund button.
To request a refund, email support@lunadeck.io with the email address on your account. We'll process the refund within one business day and reply on the thread.
Outside the 7-day window or for renewals beyond the first invoice, we generally do not refund automatically but we'll talk — write to support@lunadeck.io and tell us what happened.
Failed payments
If a renewal payment fails, your account enters a 7-day grace period (plan_status = past_due). During grace:
- You keep full Starter access: 600 credits, 5 projects, BYO keystore signing.
- You'll get emails on day 1, day 4, and day 7 (the 7th is the final warning).
- Stripe will automatically retry the card.
If the payment is still unrecovered after 7 days, your account auto-reverts to Hobby. Your data stays — you just lose paid-tier limits and start producing watermarked APKs again. Update your card in the customer portal and we'll re-upgrade you on the next successful charge.
Managing notification emails
Two of our transactional emails are user-toggleable in Settings > Notification preferences:
- Build succeeded — off by default (opt-in). Switch on if you want a green ping every time a build lands.
- Build failed — on by default (opt-out). Switch off if your build logs already flow to Slack/Discord and the email is noise.
Other transactional emails (credits-warning, billing receipts from Stripe, security and account events) are not user-toggleable.
Reporting an issue
Pricing or billing wrong on this page, the dashboard, or the landing site? Email support@lunadeck.io. We treat billing accuracy as a release-blocker; we'd rather over-fix than have someone make a plan decision against stale numbers.