# Plans & Billing

## Free trial

Every new account starts a **14-day free trial** — no credit card, no feature
or usage limits. Your live usage during the trial (catalog size, widget
requests) is measured, and the dashboard's Billing page recommends the smallest
plan that covers it.

One trial per store: the free trial is tied to your store's domain and can be
used once per store, ever. If your store's trial was already used (e.g. under a
previous account), the Billing page will say so — picking a paid plan always
unblocks you, or contact us.

When the trial ends without a plan, widgets stop serving recommendations (they
return empty responses — your storefront layout never breaks) until you choose
a plan.

## Plans

All prices in EUR. Pick monthly or **yearly (pay 10 months, get 12)** with the
toggle on the Billing page.

| Plan | Monthly | Headline features |
|---|---|---|
| Starter | €19 | Recommendations, widgets, impact analytics |
| Growth | €49 | + Product search, **Demand Forecasting** (forecasts, stockout alerts, reorder suggestions) |
| Scale | €149 | + Shop the Look, image search, AI complements, overstock and markdown intelligence, customer intelligence |

Each plan includes a monthly widget-request quota and a catalog-size limit
(current numbers are on the dashboard Billing page and the pricing page at
<https://basketbooster.eu>). Paid plans include **metered overage**: if a great
month sends you past the included requests, the widget keeps serving and the
overage is billed automatically — growth is never punished with an outage.
Yearly subscriptions aggregate the quota over the year (12× monthly), so
seasonal spikes don't trigger overage as long as the year stays within it.

Need something the lineup doesn't cover (very large catalog, custom quota)?
Contact us — custom deals and private plans exist for exactly that.

## What counts against the quota

Content requests: recommendations, trending, search, image search, looks,
Shop-the-Look analyze. **Never counted and never blocked**: shopper events
(`/v1/events`) and widget config — your data keeps flowing and your engines
keep learning even over quota.

## Approaching the quota

Widget API responses start carrying `X-Quota-Used` / `X-Quota-Limit` headers at
80% usage, and `X-Billing-Status: warn`. If serving is ever degraded
(`over_quota` on unpaid accounts, or `suspended`), endpoints return **HTTP 200
with an empty payload** plus `X-Billing-Status` — never an error your
storefront has to handle.

## Managing your subscription

Everything lives on the dashboard's **Billing** page:

- **Choose/upgrade a plan** → secure Stripe Checkout (promo codes supported).
- **Manage billing** → Stripe customer portal: change card, switch plans,
  cancel, download invoices.
- Usage bars show requests and catalog size against your plan in real time.

Payments are processed by Stripe; we never see or store your card details.

## Catalog limits

Each plan caps the catalog size. Pushes that would exceed the cap are rejected
with `402 {"code": "plan_limit_catalog"}` — **updates to existing products
always work**, even at the limit; only genuinely new products count.

## Shopify stores

Shopify merchants are billed through the Shopify App Store subscription
(managed from the Shopify admin) — the dashboard Billing page shows a notice
instead of the Stripe flow, and nothing in this document applies. Plan lineups
are identical on both.
