Skip to content
Strent
Pricing Docs

For anyone adding paid plans to a SaaS, with or without a coding agent

Stripe subscriptions in your SaaS. No webhook code.

When someone pays you through Stripe, your app has to find out, and keep finding out as they upgrade, stop paying, or cancel. That usually means writing and running code that receives Stripe's messages, called webhooks.

Strent does that part. Stripe charges your customers, Strent keeps track of which plan each one has, and your app decides what they can use.

lib/billing.ts From the guide
export async function userHasPro(user: AppUser): Promise<boolean> {
  const customer = await getStripeCustomerId(user.id);
  if (!customer) return false;
  return strent.activeItems.hasProduct({
    customer,
    product: process.env.STRIPE_PRO_PRODUCT_ID!,
  });
}

Checkpoint

After the user pays on Stripe's payment page, userHasPro returns true and Export PDF unlocks.

Adding subscriptions takes more than a payment page.

Say you sell a Pro plan that unlocks Export PDF. Here is what happens when a user buys it.

  1. Your user pays on Stripe's page

    They select Subscribe in your app and pay on Stripe Checkout, a payment page Stripe hosts.

  2. Stripe tells Strent

    Stripe sends Strent a message, a webhook, about the new subscription. You write no code to receive it.

  3. Your app asks Strent

    Before showing a paid feature, such as Export PDF, your app asks Strent whether the user has the Pro plan.

When the user later changes plans, stops paying, or cancels, Stripe tells Strent again, and the answer your app gets follows. Here is every part of it, and who does each one. The guide walks you through every row.

  • Plans and prices

    Who does it: Stripe

    You create them in your Stripe account.

  • The payment page

    Who does it: Stripe

    Stripe Checkout, a page Stripe hosts.

  • Plan changes and cancellations

    Who does it: Stripe

    The Stripe Customer Portal, another page Stripe hosts.

  • Linking each of your users to a Stripe customer

    Who does it: Your app

    The guide gives you the code.

  • Receiving Stripe's webhooks and remembering each customer's plan

    Who does it: Strent

    You paste a Strent web address into Stripe once and write no webhook code.

  • What each plan unlocks

    Who does it: Your app

    One call to Strent's Node.js library, then your own rules.

Your plans stay in Stripe. Works with any login and any database.

Plans set up once, in Stripe

You create your plans and prices in your own Stripe account. Strent reads them from there, so you never copy them into another tool or keep two lists in sync.

Any login

Strent needs only the ID Stripe gives each customer, not your users' accounts, so it works with whatever signs your users in: Supabase Auth, Auth.js, Better Auth, or your own.

Any database

Strent keeps track of each customer's subscriptions, so your app stores one value per user, their Stripe customer ID, in whatever database it already uses: Postgres, MySQL, MongoDB, or Firebase.

One guide. Seven checkpoints.

Every step ends with what you should see in Stripe, in Strent, or in your app. If it does not match, you know which step to fix before you move on.

  1. Create the Pro plan in Stripe
  2. Set up Strent
  3. Install the SDKs and create the clients
  4. Store each user's Stripe customer
  5. Check access to the paid feature
  6. Sell the plan with Checkout
  7. Cancel from the Customer Portal

Building with a coding agent? Paste the guide's prompt into it. The agent writes the code and asks you for the few steps that happen in Stripe and in Strent.

See what each customer has, what changes next, and why.

Strent Admin shows each customer's current plan, the next change already scheduled in Stripe, and when Strent last read the customer from Stripe.

When Strent can't read a customer from Stripe, it tries again on its own and shows you what still fails, so you can fix it and retry. Every customer is re-read from Stripe once a day, so a missed change is corrected within about a day. When support asks why a customer has access, the answer is on one page.

cus_R8mT2kQ4vXa9Lp

Last verified from Stripe 2 hours ago

Current access

Pro · $20/month · Active since

Scheduled changes

Pro · $20/month

Switches to Starter · $10/month on

Activity

Subscription schedule created in Stripe

Updated
Illustrative example. The IDs and dates are not real.

Other ways to add subscriptions, compared honestly.

Strent is one option. Here is what each path leaves to you, and when Strent is the wrong one.

  • Write the webhook code yourself, or with a coding agent

    You own the code that receives Stripe's messages, your own copy of each subscription, retrying what fails, and noticing when your copy no longer matches Stripe.

  • A library that copies Stripe into your database

    You run it and host the copy, and you still write the logic that decides whether a customer has access.

  • Billing built into your login provider

    Your plans live in that provider instead of Stripe, and billing is tied to its login.

  • Strent

    Your plans stay in Stripe and any login works. Strent keeps each customer's plan current and answers your app's access checks.

Strent is not for you if you need

  • Pricing by usage or credits, such as per API call or per AI token.
  • A merchant of record outside Stripe: a company that sells on your behalf and handles sales tax for you.
  • An app builder that already handles Stripe payments for you.
  • Server code that doesn't run on Node.js: Strent's library is Node.js only.
Can't my coding agent write the webhooks?

It can, quickly. Writing that code is the easy part. Knowing it keeps giving the right answer as customers upgrade, stop paying, and cancel, noticing when it fails, and fixing it is the part that keeps costing, and the part Strent keeps doing for you. If you don't read the code your agent writes, it is also the part you can't check.

What if a customer pays and still can't use what they bought?

When the customer comes back from paying, your page makes one call that has Strent read them from Stripe before it checks access, so access doesn't wait for Stripe's webhook. If that call takes too long, the page says the payment is still being confirmed while Strent keeps reading. A read that fails is retried on its own.

What happens when Strent is down?

Your app checks access by asking Strent, not Stripe, so Strent is a service your app depends on. Strent's library plans for it being unavailable. It reuses a “yes” for up to 5 minutes, so removing access can take that long to reach your app. During an outage it uses a saved “yes” up to an hour old, with a warning, so removing access can take up to an hour then. It never reuses a “no”. That memory lives in each running copy of your server, so it covers an outage only in part. When Strent cannot answer, your app decides whether to deny, allow, or show an error. cache: false turns the reuse and the saved answers off.

Does Strent handle checkout or payments?

No. Stripe charges your customers and hosts Checkout and the Customer Portal. Strent only reads your customers' subscriptions, with a read-only Stripe key, and never moves money.

Priced by how many of your customers pay you.

A fixed monthly price per plan, free until you have real customers. Every plan has every feature, and Strent takes no share of your revenue.

  • Free

    Up to 10 paying customers

    $0 /month

  • Launch

    Up to 100 paying customers

    $9 /month

  • Growth

    Up to 500 paying customers

    $49 /month

  • Scale

    Up to 1,000 paying customers

    $99 /month

  • Established

    Up to 2,500 paying customers

    $199 /month

  • Above Established

    More than 2,500 paying customers

    Contact us

Strent is free during the beta. No fee applies until at least 30 days after we tell you by email.

A paying customer is a real customer, in Stripe's live mode rather than its test mode, with an active subscription at a price above zero, counted once across your projects. Trials and free plans do not count.

Over your plan's limit, you get a warning and 30 days in which access checks and syncing with Stripe keep working. Strent never upgrades your plan for you. Prices are in USD and exclude VAT.

Sell your first plan.

Free while you validate. Paid once your SaaS has real customers.