> ## Documentation Index
> Fetch the complete documentation index at: https://docs.findmydata.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Billing pricing

# Billing & pricing

Find My Data is licensed **per user (seat)** — the number of people in the
customer's organization who are covered. Two paid editions, billed monthly per
seat, plus the 30-day evaluation.

## Pricing

| Edition        | Price (per user / month) | Includes                                                                                |
| -------------- | ------------------------ | --------------------------------------------------------------------------------------- |
| **Evaluation** | Free, 30 days            | Scanning + Analyst; 1 deployment; synthetic/limited capacity                            |
| **Standard**   | **\$14**                 | Scanning, Analyst, Remediation; mid-size org capacity                                   |
| **Enterprise** | **\$29**                 | All of Standard **+ Teams, Exchange, embeddings**; large-org capacity; priority support |

### Why these numbers

Benchmarked against comparable enterprise **data-security / DSPM / governance**
tools. Legacy enterprise suites (Varonis, BigID) are high-touch six-figure
sales; modern per-seat DSPM/SaaS security tools land roughly \*\*$8–30 / user /
month**. Find My Data sits mid-market-friendly at the low end (Standard $14) with
an Enterprise tier (\$29) that unlocks the additional connectors + support — a
2× step that mirrors typical Standard→Enterprise ratios. Billing is monthly and
per-seat so it scales cleanly with the customer's headcount; annual pricing can
be added later as a second Price on each product.

### Seat count & the Azure-tenant idea

The buyer picks the seat count at checkout (Stripe's adjustable-quantity is on, so
they can change it), and the count is stored on the account (`cp_accounts.stripe_seats`).
Because the installed product already reads the customer's M365/Entra org, a
natural enhancement is to have the deployment **report its active-user count** (as
a coarse, allowlisted signal like fleet telemetry) so Account can **suggest** the
right seat count and flag over/under-licensing for a true-up — without the vendor
ever pulling the customer directory. That reporting hook is a documented
follow-up; the per-seat billing itself is live.

## Stripe objects (this account, TEST mode)

Created in the Stripe sandbox (`PaintScan`, `acct_1SyISvIHBtgvYqMd`). No real
charges. Use Stripe's **"Copy to live mode"** on each product when going live, then
repeat the env wiring with the live price ids + live keys.

| Edition    | Product               | Price (recurring, monthly, per-unit)          |
| ---------- | --------------------- | --------------------------------------------- |
| Standard   | `prod_UtKBZb9rX8cHEy` | `price_1TtXX7IHBtgvYqMdw6NdWdJy` — \$14.00/mo |
| Enterprise | `prod_UtKCKuLAqDhJYs` | `price_1TtXYGIHBtgvYqMd0xaYKCyq` — \$29.00/mo |

## Wiring the portal (deploy-time env)

```bash theme={null}
FMD_STRIPE_SECRET_KEY_REF=STRIPE_SK          # env var holding sk_test_… (then sk_live_… in prod)
STRIPE_SK=sk_test_…                          # the secret key value (never committed)
FMD_STRIPE_WEBHOOK_SECRET_REF=STRIPE_WH      # env var holding whsec_…
STRIPE_WH=whsec_…                            # from the webhook you create (below)
FMD_STRIPE_PRICE_STANDARD=price_1TtXX7IHBtgvYqMdw6NdWdJy
FMD_STRIPE_PRICE_ENTERPRISE=price_1TtXYGIHBtgvYqMd0xaYKCyq
```

Then in Stripe → **Developers → Webhooks → Add endpoint**, point it at
`https://account.findmydata.io/account/v1/billing/webhook`, subscribe to
`checkout.session.completed` and `customer.subscription.deleted`, and copy the
signing secret (`whsec_…`) into `STRIPE_WH`. The portal verifies that signature on
every event (raw-body HMAC, replay-bounded) before upgrading an account.
