Plans & Billing
SubscribeFlow offers three plans to match your scale.
Feature comparison
| Feature | Free | Starter (CHF 19/mo) | Professional (CHF 49/mo) |
|---|---|---|---|
| Subscribers | 500 | 5,000 | 50,000 |
| Emails/month | 1,000 | 10,000 | 100,000 |
| Campaigns | -- | 5/month | Unlimited |
| Templates | 1 | 10 | Unlimited |
| Webhooks | -- | 3 | Unlimited |
| Tags | 3 | Unlimited | Unlimited |
| Custom Domain | -- | -- | Yes |
| MCP Integration | -- | Yes | Yes |
| API Access | Read-only | Full | Full |
Upgrading your plan
- Open the Dashboard and go to Settings > Billing.
- Select the plan you want.
- Complete the payment through Stripe Checkout.
Your new limits apply immediately after payment.
Managing your subscription
Use the Stripe Billing Portal to update payment methods, view invoices, or cancel your subscription.
Handling 402 Limit Exceeded
When you exceed a plan limit (subscribers, emails, campaigns, etc.), the API returns HTTP 402 Payment Required. Catch this error and prompt the user to upgrade.
from subscribeflow import LimitExceededError
try:
subscriber = await client.subscribers.create(
email="new-user@example.com",
)
except LimitExceededError as e:
print(f"Plan limit reached: {e.detail}")
# Create a checkout session for upgrade
session = await client.billing.create_checkout_session("starter")
print(f"Upgrade here: {session.url}")
import { SubscribeFlowError } from '@subscribeflow/sdk';
try {
await client.subscribers.create({ email: 'new-user@example.com' });
} catch (error) {
if (error instanceof SubscribeFlowError && error.status === 402) {
console.log('Plan limit reached:', error.detail);
// Create a checkout session for upgrade
const session = await client.billing.createCheckoutSession('starter');
console.log('Upgrade here:', session.url);
}
}
Info
For custom domain setup on the Professional plan, see the Preference Center guide.