Skip to contentLaunch price30% off every kit for the first 250 buyers155 left
DirectoryLab

Loading the guides…

Launch LabGuides
Earn

Connect Stripe

Save your Stripe secret key in the admin, add the webhook that delivers what people buy and make a test payment. There are no products or prices to create in Stripe.

Updated 9 Oct 2026 · written for Launch Lab 2.9.0

On this page

Open Integrations under Tools in the admin sidebar and scroll to the Stripe payments card. Everything Launch Lab sells is paid for through your own Stripe account: featured listings, do-follow links, paid places, relaunch credits and advertising on a weekly site, with fast-track review and bumps on a rolling one. This card is where the site and the account are joined. You do it once.

The Stripe payments card on the Integrations page: the secret key and webhook secret boxes, the webhook address to give Stripe, and a test button
Stripe keys are entered in the admin and tested there.

Launch Lab sends the name and the price of each purchase to Stripe at the moment of checkout. There are no products, prices or price IDs to create in Stripe and nothing to copy back. You type your prices in Payment Settings, and the amount on that page is the amount charged: see What you sell and your prices. If you have used Local Lab, the sister kit, this is the opposite of what you did there.

There is also one key, not two. Launch Lab has no use for Stripe's publishable key, because payment happens on Stripe's page and not on yours.

Your site uses its own words for a listing and for the person who launches it. This guide says "listing" and "maker".

Save your secret key#

  1. Step 1: Copy the secret key from Stripe

    Sign in to Stripe and open dashboard.stripe.com/apikeys. Copy the Secret key. It starts with sk_test_ in a sandbox, Stripe's name for a test account, and with sk_live_ in a live account.

    Begin in a sandbox, where no money moves. Test and live covers the change to real payments.

  2. Step 2: Paste it in

    On the Stripe payments card, paste the key into Secret key. Leave Webhook signing secret empty for now.

  3. Step 3: Type your password

    At the foot of the card, type the password you sign in with into Your password, to confirm. If you joined with Google and never set a password, the box reads Type your email address to confirm. Without it nothing is saved and you see "Enter your account password to save credentials."

  4. Step 4: Click Save

    You see "Stripe payments settings saved." The badge at the top of the card changes from Not connected to Connected, and the badge beside Secret key reads Saved here. The box itself is empty again and shows "•••••••• (saved)": a saved secret is never sent back to your browser.

  5. Step 5: Click Test Stripe key

    The site asks Stripe which account the key belongs to. You see, for example, "Stripe key works: connected to Soloweek in test mode." The name is your Stripe account's name, and the mode is read from the start of the key.

A secret box you leave empty keeps the value already saved, so you can come back and add the webhook secret without typing the key again.

Test Stripe key has three other answers:

MessageWhat it means
"Save a Stripe secret key first."There is no key, here or in .env.
"Stripe rejected the key. Check it was copied in full and is the secret key, not the publishable one."Stripe does not know the key.
"Stripe could not be reached with that key. Check the server log for the reason."Something else went wrong, such as no connection to Stripe. The reason is in the server log.

Only a full administrator can open this page. An admin account with read-only access is sent back to the dashboard with "Full System Administrator access required".

Where each key comes from#

Each box has a badge:

BadgeIt means
Saved hereSaved on this page. This is the one in use.
From .envNot saved here, and found in your .env file as STRIPE_SECRET_KEY or STRIPE_WEBHOOK_SECRET.
Not setNot in either place.

A value saved on this page always wins over the same value in .env. A placeholder left over from an example file, such as sk_test_your-key or whsec_your-secret, counts as not set.

Saved values are stored encrypted, using the SECRET_KEY from your .env file. If you left SECRET_KEY empty, the site made one for itself in the file instance/secret_key. Change that key, or lose that file, and the saved values can no longer be read. The badges fall back to From .env or Not set and the card reads Not connected. Type the keys in again.

Clear saved values (use .env) removes both saved values at once, without asking for your password. You see "Saved Stripe payments settings removed. Values from the .env file are used if present."

What changes when Stripe is connected#

Until the card reads Connected, nothing can be bought:

  • Payment Settings carries the line "Nothing can be bought until Stripe is connected in Integrations."

  • The public Pricing page says the upgrades "are not on sale yet".

  • A maker's Billing page says "Paid upgrades are not on sale on Soloweek yet. Launching is free.", and the page where they choose a launch week offers free places only.

The Finish setting up list on the admin dashboard has two lines for Stripe, Connect Stripe and Add the Stripe webhook secret. Each ticks itself when the value is in place.

The admin dashboard of a site that has just been set up: a Finish setting up list with the site address ticked and the rest still to do, among them connect email, connect Stripe, add the Stripe webhook secret, schedule the job runner, fill in the legal details and get a first launch live, each with a Set up link
A new site lists what is left to set up, with a link to each.

Add the webhook#

A webhook is a message Stripe sends your site when something happens on your account. Launch Lab depends on it more than most.

Stripe cannot reach a site on your own computer, so do this once the site is live on its domain: see Deploy to a server. To try a purchase before then, see Test it on your own computer.

  1. Step 1: Start a new destination in Stripe

    Open dashboard.stripe.com/webhooks. Stripe calls this page Event destinations. Click Add destination. The form has three parts: Select events, Choose destination type and Configure your destination.

  2. Step 2: Choose the six events

    Find and tick the six events in the table below. Any other event you send is accepted and ignored.

  3. Step 3: Give it your site's address

    Choose a webhook endpoint as the destination type and give it this address, with your own domain:

    Endpoint URL
    https://your-domain.com/payments/webhook

    The Stripe payments card prints the address for you, built from the site address in Site Settings.

  4. Step 4: Save the signing secret

    Stripe gives the endpoint a signing secret that starts with whsec_. Paste it into Webhook signing secret, type your password and click Save. The badge beside the box reads Saved here.

What each event does#

EventWhat Launch Lab does
checkout.session.completedFor a one-off purchase: marks the payment completed, gives the buyer what they paid for, emails them a receipt and emails you a notice. For an advert: records the subscription and puts the advert live. A repeat of the same message changes nothing.
checkout.session.expiredAn advertiser left Stripe's page without paying. Frees the advert place that was being held for them. Without this event the place frees itself 35 minutes after they went to pay.
invoice.payment_succeededAn advertising subscription was paid. Updates the dates it is paid up to. On a monthly renewal it also emails the advertiser a receipt.
customer.subscription.updatedFollows the subscription's state in Stripe. If a payment has failed, the advert stops showing but keeps its place, and the advertiser is emailed. If the subscription has ended, the advert stops and the advertiser is told.
customer.subscription.deletedMarks the subscription cancelled. The advert stops showing and the advertiser is emailed.
charge.refundedWhen the whole payment has been refunded, marks it Refunded and emails the maker. A part refund changes nothing. It does not take back what was bought.

What "gives the buyer what they paid for" means for each product is in What you sell and your prices.

How your site answers Stripe#

Stripe shows your site's answer beside each message it delivered.

AnswerWhat it means
200Received. Acted on, or ignored because it is not one of the six.
503 "Stripe is not configured"No webhook signing secret is saved. Nothing was read.
400 "Invalid signature"The saved secret belongs to a different destination, or to the command-line tool.
500 "Could not apply this payment" or "Could not apply this event"Something failed part-way. Nothing half-done is kept, and the answer tells Stripe to send the message again.

Test it on your own computer#

On your own computer a test purchase does nothing until Stripe's messages are forwarded to it. Stripe's command-line tool does the forwarding.

  1. Step 1: Install Stripe's tool and sign it in

    Install Stripe's command-line tool, then sign it in to your sandbox:

    Terminal
    stripe login
  2. Step 2: Start forwarding

    Leave this running in a second terminal. Change 5000 if your copy runs on another port.

    Terminal
    stripe listen --events checkout.session.completed,checkout.session.expired,invoice.payment_succeeded,customer.subscription.updated,customer.subscription.deleted,charge.refunded --forward-to http://127.0.0.1:5000/payments/webhook
  3. Step 3: Save the secret it prints

    The tool prints a signing secret that starts with whsec_. Save it as the Webhook signing secret on the Stripe payments card.

  4. Step 4: Buy something

    Sign in as a maker with a listing that is booked or live, open Billing and click Add under Featured listing. On Stripe's page, pay with the test card below.

  5. Step 5: Watch the terminal

    Each message is listed with your site's answer. checkout.session.completed should be followed by [200]. The payment is now under All Transactions in the admin. A live listing is featured, and a booked one is marked to be featured from launch day.

BoxType
Card number4242 4242 4242 4242
ExpiryAny date in the future, for example 12 / 34
Security codeAny three digits
Name and postcodeAnything

The secret belongs to the tool. Replace it with the real destination's secret when the site goes live.

Test and live#

Launch Lab does not know a sandbox from a live account. It sends whichever secret key you saved, and Stripe decides. Three things follow:

  • Going live means replacing two values: the secret key and the signing secret of a new destination made in the live account. There are no prices to create again.

  • A voucher belongs to the Stripe account it was made in. One made against a sandbox does not exist in your live account: delete it and create it again. See Featured listings and vouchers.

  • A test payment is recorded under All Transactions and counted on the Sales page like a real one. Nothing marks it as a test and no screen removes it. Make your test purchases on the copy on your own computer, not on the live site.

What a maker sees#

A maker can buy in three places: on the page where they choose a launch week, from the Upgrades card on their listing's page and from Billing. The button reads Continue to payment or Add for and the price, and it takes them to Stripe.

The page where a maker picks a launch week: a card for each coming Monday with the free places left, and the paid place that gets a tool into a week sooner
A maker picks the week to launch in. A paid place skips the queue.

Stripe's page carries the name of your Stripe account, the product's name as Launch Lab sends it ("Featured listing", "Do-follow link", "Skip the queue", "Relaunch credits", "Fast-track review", "Bump" or "Advertising") and the price from Payment Settings in your currency. The maker's email address is filled in from their account. Two things bought together are two lines.

When they have paid they come back to your site under "Payment received. Thank you!", and a receipt headed "Thank you. Here is your receipt." is emailed to them. A maker whose listing is not live yet lands on a page headed You're booked. If Stripe's message has not arrived yet, that page is headed Confirming your payment and updates by itself when it does.

A maker who leaves Stripe's page without paying comes back to their listing with nothing changed. A launch date that was waiting on the payment is released by the daily job once it has waited 24 hours: see Backups and scheduled jobs.

Refunds#

Open All Transactions under Revenue, open the payment and click Refund payment. The whole amount goes back through Stripe, the payment is marked Refunded and you see "Payment refunded. What the customer bought (for example a featured listing) is not removed automatically." A full refund made in Stripe's own dashboard is marked the same way, by the charge.refunded event. Neither takes back what was bought: remove it yourself. In version 2.9.0 the maker is emailed about a refund only when it is made in Stripe's dashboard. The button in the admin sends no email. Sales, transactions and refunds has the steps.

One Stripe account for several sites#

Stripe sends every event on an account to every destination on it, so two sites sharing an account each receive the other's messages. One-off purchases are safe: each site matches a payment by Stripe's own reference for the checkout and ignores one it did not start.

A maker paid and nothing happened

Stripe's message did not arrive or was not accepted. Check that Webhook signing secret reads Saved here, then open the destination in Stripe and read your site's answer against the table above. If every answer is 500, the site is on a version before 2.9.0: update it. A message your site refused is sent again by Stripe, so a purchase can be applied late once the secret is right. If no destination existed when the maker paid, no message was ever sent: feature the listing by hand, or add the credits in Tenant Manager.

A maker sees "Payment processing error. Please try again."

Stripe refused to start the checkout. The secret key is wrong or has been withdrawn, or Stripe will not accept the amount in your currency. Click Test Stripe key, then check the price in Payment Settings.

Do I need the publishable key?

No. There is no box for it, and .env has no line for it.

The card went back to Not connected by itself

The SECRET_KEY the values were encrypted with has changed, so they cannot be read. This happens when SECRET_KEY is edited in .env, or when a site that relied on instance/secret_key is moved without that file. Type the key and the signing secret in again.

Stuck on a step? Send a message.