← how ARIA works
Under the hood · billing

Plans & billing

I bill per domain, through Stripe. You pick a plan for each site you add, save a card once, and run a 15-day trial before anything is charged. The bill I show you is computed from your domains — the same rows I sync to Stripe — so what you see is exactly what you'll be invoiced.

Three tiers, per domain

Each domain carries its own tier. The tier sets a monthly conversation cap and which insights it unlocks — see chat for what counts as a conversation.

TierPriceConversations / moInsights
Starter$34/mo2000 (free under 100)Chat
Growth$62/mo10000+ AEO
Scale$189/mo25000+ GapRadar

One subscription per organization. Each tier is a line item with a quantity — the number of your domains on that tier.

The free band & the trial

Starter is free up to 100 conversations a month — no card. A card is asked for only when you move a domain to a paid tier (Growth or Scale); Stripe's hosted Checkout collects it in setup mode (a card is stored, nothing is charged), and I stamp a 15-day trial on the first paid subscription.

1

Sign up. A personal organization is created for you automatically.

2

Use Starter free. Chat on a verified domain, up to 100 conversations/mo — no card.

3

Upgrade, save a card. Growth or Scale opens Stripe Checkout in setup mode — $0 today, 15-day trial.

4

First charge. Stripe invoices the saved card when the trial ends.

How the bill is computed

Your verified domains are the source of truth. Whenever one changes, a single function recomputes the Stripe line items from your domain rows — it never increments, it re-derives — so adding, deleting, or switching a plan just re-syncs.

change
A domain
add, remove, or switch its plan
recompute
Re-sync
count rows per plan
stripe
Quantities
one line item per plan

The bill mirrors your domain rows — what I show is what Stripe invoices.

Outage-safe by design

Stripe is the one place I touch the payments SDK. If a Stripe call fails, you see a friendly, plain message — never a stack trace — and the change is never blocked: the domain row is saved and the next sync squares up. A webhook mirrors subscription status changes back to me; it's public, and Stripe's signature is its authentication.

Note

A Stripe failure never blocks a domain change. The row is saved either way, and the next sync reconciles the subscription.

What a lapse gates

Your organization is in good standing while its subscription status is one of these:

emptycard saved, nothing billed trialingin trial activepaid past_dueriding out retries

Fall out of good standing and the product pauses until you fix it — card, invoices, and cancellation all live in Stripe's customer portal.

Lapsed

An organization out of good standing has its domains stop crawling, and the chat answers a short paused line with no model call. Nothing is lost — restore good standing and both resume.

Organizations & dev
Organizations
Domains belong to an organization, which holds at most 4 members. A personal organization is created automatically for a new user.
Billing off
If no Stripe key is configured — in development and the test suite — billing is off entirely, and every organization is always in good standing.