SaaS launch checklist: what to check before the first paying customer signs up

Before a SaaS product takes its first payment, check five things: billing runs on live keys with verified, duplicate-safe webhooks; no customer can see another customer's data; the pages your payment gateway requires are live; errors and downtime reach someone who will act; and your email arrives and your pages can be found. The items below come from SaaS products we have built, with Stripe, Razorpay, Google and OWASP rules linked and checked on 20 October 2026.

19 items in 5 groups · rules checked against the official pages on 20 October 2026

1 Billing and money

  • Switch to live API keys, make sure no key sits in the code, and rotate any key that was shared during development.

    Stripe's go-live checklist calls for exactly this; a test key left in one service is the classic launch-day failure.

    Official source
  • Register the production webhook endpoints and verify every event's signature before acting on it.

    Stripe signs events in the Stripe-Signature header; Razorpay sends an HMAC SHA256 signature of the raw body in X-Razorpay-Signature. An unverified endpoint accepts forged payment events.

    Official source
  • Make webhook handling safe to repeat: record each event ID before processing it and ignore a second copy.

    Stripe's checklist says endpoints must cope with delayed and duplicate notifications that arrive in any order.

    Official source
  • If you use Razorpay, put About us, Contact us, Pricing, Terms and conditions, Privacy policy and Refunds policy pages live before activation.

    Razorpay will not issue live-mode API keys without your website or app details and links to these pages.

    Official source
  • If you bill Indian customers with GST, number tax invoices in a consecutive series that is unique for each financial year, and freeze each invoice when it is issued.

    The GST invoice rules require a consecutive serial number, in one or more series, unique for a financial year.

    Official source
  • Run renewals, failed payments, refunds and plan changes end to end in test mode, and check each one lands correctly in your own records.

    Billing bugs surface weeks after launch, at the first renewal, when they are hardest to unwind.

2 Tenants, roles and access

  • For every list and detail route, sign in as customer B and request customer A's records by ID; every request must fail.

    Broken access control is A01, the first entry, in the OWASP Top 10:2025.

    Official source
  • Give each staff role only the permissions it needs, require two-factor sign-in for staff, and make admin routes refuse access when a permission is missing.

    An admin console is the most valuable account in the product; a route that fails open is a breach waiting for a curious user.

  • Rate-limit sign-in, one-time codes and password resets.

    Authentication failures are A07 in the OWASP Top 10:2025, and unlimited attempts invite credential stuffing.

    Official source

3 Reliability

  • Exercise every API route over HTTP before launch and record which ones have been run, rather than ticking a to-do list.

    A hand-kept list drifts from the code; a route nobody has called is a route nobody knows works.

  • Send errors to an error tracker in the company's own account, with source maps uploaded at build time.

    Without source maps a production stack trace is unreadable; without your own account, the history leaves with the vendor.

  • Set up uptime monitoring that alerts a named person, and write down the hours in which someone will respond.

    Customers will ask what happens when it breaks at night. The honest answer is in the contract, not the marketing page.

  • Restore last night's backup into a scratch database and open the app against it.

    A backup that has never been restored is a hope, not a backup.

  • Store and compare dates in UTC, and convert to the user's time zone only when displaying them.

    Mixed time zones put bookings, renewals and reports on the wrong day without throwing an error.

4 Email and search

  • Authenticate your sending domain with SPF or DKIM; if you send 5,000 or more messages a day to Gmail, set up SPF, DKIM and DMARC and one-click unsubscribe for marketing mail.

    Gmail's sender guidelines have applied these requirements since 1 February 2024, along with valid reverse DNS, TLS and a reported spam rate below 0.3%.

    Official source
  • Remove the staging noindex tag or header and any robots.txt block on the production site.

    Google drops a page carrying noindex from its results, and a robots.txt block stops Google seeing the page at all.

    Official source
  • Check that every public page serves its own title, description and canonical URL in the HTML, then submit the sitemap in Search Console.

    Google treats a sitemap as a hint for discovery, so the pages themselves must carry their metadata.

    Official source

5 Customers and support

  • Publish a support address that a named person reads every working day, and a contact for privacy questions.

    India's DPDP Rules (Rule 9) will require a published contact for data questions eighteen months after their publication, 13 May 2027 by our count; customers expect one from the first day.

    Official source
  • Write the cancellation and refund rules in plain words and make the product follow them exactly.

    A refund policy the code does not implement is the fastest way to a chargeback.

What did these checks catch in our own builds?

Storafleet

Ten "operate everything" passes exercised 237 of the API's 253 routes (94%) over HTTP against real buckets before launch sign-off; the rest depended on AWS infrastructure not yet in place. An audit of our own payment path closed 33 of its 35 findings by 16 July 2026, before the renewal engine was built on it.

Storafleet

Billing runs on Razorpay Subscriptions in INR for Indian billing addresses and USD elsewhere, and every paid invoice takes the next number in a gapless GST series for the financial year.

AskForth

Checkout stays switched off until live keys are in place, after billing was tested in Razorpay's test mode and the backend suite passed 479 of 479 tests at the last billing push; the public site waits on a few legal and policy details.

LetSlic

Each subscription webhook is stored first, with a unique index on its source and event ID, so a resent event is recognised and never processed twice; processing happens after the 200 goes back.

Trainr

A refund already recorded under its Stripe refund ID is never booked twice, and every date-sensitive path moved to UTC days after classes landed on the wrong day.

Proton Fitness

protonfit.com served no page titles or descriptions because its root layout was a client component, which Next.js ignores for metadata. We moved it to a server layout and added per-page metadata, a sitemap and robots.txt.

Questions about this checklist

What must be live before Razorpay gives a SaaS live API keys?

Your website or app details with links to About us, Contact us, Pricing, Terms and conditions, Privacy policy and Refunds policy pages, according to Razorpay's documentation checked on 20 October 2026. Without them you cannot get live-mode keys.

How do you stop a payment webhook being processed twice?

Store the event's ID with a unique index before doing anything, and skip any event already stored. Gateways retry and can deliver out of order, so the handler must be safe to run more than once.

How do we test that one SaaS customer cannot see another's data?

Create two test customers, sign in as the second, and call every list and detail route with the first customer's IDs. Every request must be refused; one that succeeds is a broken access control flaw.

Does a SaaS product need DMARC before launch?

If it will send 5,000 or more messages a day to Gmail addresses, yes: Gmail requires SPF, DKIM and DMARC for those senders. Every sender needs at least SPF or DKIM, so set all three up before launch either way.

Why is our new SaaS site missing from Google after launch?

Check for a leftover staging noindex tag or header and a robots.txt block first; either one hides the site. Then submit the sitemap in Search Console and inspect the main URLs.

Sources (10)