Octonode Playbook

Billing and monetization

Canonical Octonode repository documentation.

Billing and monetization

Octonode uses a hybrid model: a predictable Pro subscription pays for the hosted product, while completed workflow executions are the usage unit for allowance, capacity planning, and overage. One execution is one completed workflow run regardless of step count.

Plan catalog

PlanPriceIncluded executionsIntended use
Free$0Local executionLocal Studio, CLI, code/graph sync, Git-owned config
Pro monthly$29/month10,000/monthProduction hosted execution and collaboration
Pro yearly$290/year (17% discount)120,000/yearThe same Pro product with a flexible annual pool
EnterpriseCustom annual contract100,000+ with volume ratesGovernance, security, onboarding, and support

Pro overage is $2 per additional 1,000 executions. Stripe owns the graduated metered Price: the included tier is free, then the overage tier charges at the equivalent per-execution rate. The D1 period records the included allowance as its soft threshold; an owner may add a hard stop at or above that allowance even if Stripe delivery is delayed. Enterprise is sales-led rather than self-serve because its allowance, support, and governance terms are part of the contract.

This shape follows the useful parts of the current automation market without copying its billing complexity: n8n bills by workflow execution regardless of steps and offers 10,000 on Pro; Make starts paid tiers at 10,000 action credits and offers cheaper annual billing; Zapier uses task tiers, annual discounts, and sales-led Enterprise. Octonode chooses the easier execution unit because a workflow author can predict it before publishing.

A personal workspace owns its subscription. An organization owns one subscription shared by all of its teams. Organization owners/admins and personal owners have billing:read and billing:manage; a team lead has read-only billing visibility.

Authority and interaction

Supabase Auth JWT
  -> Cloudflare gateway verifies identity
  -> D1 resolves workspace role and billable parent
  -> Stripe Checkout creates the selected monthly or yearly Pro subscription
  -> signed Stripe webhooks project subscription + entitlements into D1
  -> Studio reads D1 summary and opens Stripe Customer Portal for mutations

Cost-bearing operation
  -> entitlement check
  -> append-only D1 usage ledger
  -> current quota projection + alert/hard-stop trigger
  -> Stripe meter delivery with a stable idempotency identifier

For workflow executions, the gateway atomically reserves one usage event before dispatch. A rejected or unavailable sandbox receives a compensating reversal; successful and failed dispatched runs keep the reservation and count as executions. The reservation ID makes retries safe.

Stripe owns customers, prices, subscriptions, invoices, metered overage, and entitlements. D1 is the local read projection, usage authority, replay inbox, and audit log. Supabase owns user identity only; billing data does not belong in Supabase user metadata or browser-visible claims.

The attachment key is the verified Supabase JWT subject. A personal checkout creates or reuses billable_accounts.id = user:<subject>; an organization checkout uses org:<id>, and teams inherit that organization. After every login or workspace change, Studio reads the server-owned billing summary for that workspace. It never grants Pro from user_metadata or a stale JWT claim.

Customer flow

  1. The public landing page compares Free, Pro, and Enterprise.
  2. The user signs in through Supabase and selects the workspace in Studio.
  3. A billing owner opens Administration → Billing and chooses monthly or yearly Pro.
  4. POST /api/billing/checkout creates/reuses the workspace Stripe Customer and returns a short-lived hosted Checkout URL. The browser never receives a Stripe secret.
  5. Stripe subscription and entitlement webhooks update D1 and seed the matching execution period and included-usage threshold: 10,000 for monthly Pro or 120,000 for yearly Pro. Scheduled reconciliation repairs a missed or delayed event.
  6. Manage in Stripe opens a short-lived Customer Portal session for payment methods, invoices, plan changes, and cancellation.

Downgrades never block reads, exports, billing repair, workspace deletion, or data recovery. Active/trialing subscriptions pass entitlement checks; past_due receives the documented 72-hour grace period. All other states fail closed for cost-bearing operations.

Admin billing dashboard

The workspace billing owner sees the current subscription, renewal/cancellation state, 30-day metered usage, triggered budget alerts, blocked cost-bearing operations, and each active usage period. A hard stop may be changed per meter; blank removes the hard stop. Warning and soft limits remain operator-provisioned until customers demonstrate a need to edit all three thresholds.

This is tenant-scoped operational billing, not a provider revenue dashboard. Stripe Dashboard remains the provider authority for MRR, churn, failed payments, taxes, refunds, and disputes.

Stripe and Cloudflare setup

  1. In Stripe, create the Pro product with licensed base Prices at $29 monthly and $290 yearly.
  2. Create monthly and yearly graduated metered execution Prices. Their first 10,000/120,000 units are included and additional usage is $2 per 1,000 executions. Use the meter event name octonode_workflow_execution; the metered Price interval must match its base Price interval.
  3. Attach a Stripe Entitlement feature with lookup key workflow-execution to Pro and to each contracted Enterprise product. Enterprise also requires its contracted quota period in D1.
  4. Configure only the supported webhook events: product.*, price.*, customer.subscription.*, and entitlements.active_entitlement_summary.updated.
  5. Point the webhook to /hooks/stripe on the cloud API worker.
  6. Set Worker secrets STRIPE_API_KEY and STRIPE_WEBHOOK_SECRET.
  7. Set Worker variables STRIPE_PRO_MONTHLY_PRICE_ID, STRIPE_PRO_YEARLY_PRICE_ID, STRIPE_PRO_MONTHLY_EXECUTION_PRICE_ID, STRIPE_PRO_YEARLY_EXECUTION_PRICE_ID, and OCTONODE_STUDIO_URL. STRIPE_PREMIUM_PRICE_ID remains a monthly migration fallback only.
  8. Apply Cloudflare D1 migrations, deploy the cloud API worker, then deploy the Studio gateway.
  9. Complete monthly and yearly Stripe test-mode checkouts, replay each webhook once, record an execution meter event, cancel in the Portal, and verify the dashboard converges after scheduled reconciliation.

Expansion gates

  • Review the $2 per 1,000 execution overage after 30 days of production cost data; change it by creating a new Stripe Price rather than mutating historical billing records.
  • Add self-serve Enterprise checkout only after its contract terms become standardized.
  • Add a provider revenue dashboard only when Stripe's built-in reporting no longer answers the operator's questions.
  • Add taxes, coupons, trials, and dunning policy in Stripe before advertising them on the landing page; avoid duplicating those rules in Octonode.

On this page