This guide covers everything you need to know about your subscription, from choosing the right plan to handling refunds and failed payments. Keep it bookmarked as your go-to reference for anything billing-related.

## Choosing the Right Plan

Three subscription tiers are available: **Free**, **Pro**, and **Business**. Each one suits a different stage of growth.

| Feature | Free | Pro | Business |
|---|---|---|---|
| Active projects | 3 | Unlimited | Unlimited |
| User seats | 1 | Up to 10 | Unlimited |
| Custom integrations | No | Yes | Yes |
| Advanced reporting | No | Yes | Yes |
| SSO support | No | No | Yes |
| Support type | Community | Priority email | Dedicated manager |

### Free

The Free plan is ideal if you're exploring the platform solo and aren't ready to commit. You get 3 active projects and 1 user seat, with no credit card required.

### Pro

Pro removes the project cap, supports up to 10 users, and unlocks advanced reporting and custom integrations. It's the right move when you're juggling multiple projects or working with a small team.

### Business

Business is built for larger organizations. It includes unlimited user seats, SSO (Single Sign-On) for centralized authentication, and a dedicated support manager with guaranteed response times.

> 📌 **Note:** If you're evaluating Business for a large organization, reach out to the sales team directly for a custom demo and volume pricing options.

You don't have to get this decision perfect on day one. Upgrading is quick, and nothing gets lost when you switch plans.

## How Your Billing Cycle Works

Your billing cycle starts on the day you first subscribe and renews automatically on that same date every month or year. For example, subscribing on March 15th means your next charge falls on April 15th, then May 15th, and so on.

You can check your next renewal date at any time under `Settings > Billing`.

### Monthly vs. Annual Billing

Both options give you access to the same features on your chosen plan.

- **Monthly billing** charges you once per month. It's flexible and easy to cancel without a long-term commitment.
- **Annual billing** charges you upfront for a full year and saves you up to 20% compared to monthly payments.

> 💡 **Tip:** If you've been on a monthly plan for a few months and you're happy with it, switching to annual billing gets you the same experience at a lower overall cost.

### Accepted Payment Methods

- **Credit and debit cards:** Visa, Mastercard, and American Express
- **PayPal:** Pay directly through your PayPal account
- **Bank transfers:** Available exclusively on annual Business plans

Your full card details are never stored on our servers. Every transaction uses industry-standard encryption to keep your financial information protected.

## Upgrading or Downgrading Your Plan

Changing your plan is straightforward, and your data stays safe either way.

### How to Upgrade

1. Go to `Settings > Billing > Subscription`.
2. Select `Change Plan` and choose the plan you want.
3. Review the prorated charge and confirm your payment details.
4. Select `Confirm Upgrade`.

If you upgrade partway through a billing cycle, you only pay the difference between your current plan and the new one, calculated based on the days remaining. The exact amount appears on screen before you confirm. New features activate the moment your upgrade goes through.

### How to Downgrade

1. Go to `Settings > Billing > Subscription`.
2. Select `Change Plan` and choose the lower-tier plan.
3. Review the feature comparison shown on screen.
4. Select `Confirm Downgrade`.

Unlike upgrades, downgrades take effect at the end of your current billing period. You keep full access to your existing features until then.

If your account exceeds the limits of the plan you're moving to, you'll need to resolve those conflicts first:

- **Too many active projects:** Archive the ones you're no longer working on. Archiving removes them from your active count without deleting anything.
- **Too many user seats:** Remove users who no longer need access or reassign roles to bring your seat count within the new plan's limit.

> ⚠️ **Warning:** If you don't resolve these conflicts before your billing period ends, the downgrade won't complete. Give yourself enough time to make the necessary adjustments.

## Canceling and Reactivating Your Subscription

Canceling is quick, penalty-free, and takes less than a minute.

1. Go to `Settings > Billing > Subscription`.
2. Scroll to the bottom and select `Cancel Subscription`.
3. Follow the on-screen prompts to confirm.

There are no cancellation fees or early termination charges. Your subscription stays fully active until the end of the billing period you've already paid for.

Once that period ends, your account moves to the Free plan automatically. Any projects beyond the Free plan's limit of 3 move to an archived state. Your data stays completely intact, nothing gets deleted.

### Reactivating Your Account

1. Go to `Settings > Billing > Subscription`.
2. Select your preferred plan.
3. Complete your payment details to confirm.

Your account upgrades immediately, and any archived projects become accessible again right away.

## What to Do When a Payment Fails

Payment failures are common and usually easy to fix. The moment a charge fails, you'll receive an email notification. The platform also retries the charge automatically over the next few days, so temporary issues like a brief bank outage often resolve on their own.

If every retry fails, your account moves into a limited state with some features restricted. Your data stays completely safe during this time, and restrictions lift automatically once a payment succeeds.

### Common Causes

- Your card expired and the details on file are outdated
- Your bank flagged the charge as suspicious
- The billing address doesn't match your bank's records
- Your card reached its spending limit

### How to Retry the Payment

1. Go to `Settings > Billing > Payment Methods`.
2. Update your card details or add a new payment method.
3. Select `Retry Payment` to run the charge immediately.

If the charge still fails after updating your details, your bank may be actively blocking the transaction. A quick call to authorize the charge usually resolves it within minutes.

## Updating Payment Methods and Downloading Invoices

### Updating Your Payment Method

1. Go to `Settings > Billing > Payment Methods`.
2. Select `Add New Payment Method` and enter your updated details.
3. Choose `Make Default` to set it as your primary option.
4. Remove the old payment method if you no longer want it saved.

### Downloading Invoices

1. Go to `Settings > Billing > Invoices`.
2. Browse your billing history, organized by date and amount.
3. Select `Download` next to any invoice to save it as a PDF.

If your invoices need to include a company name or VAT number, add those details under `Settings > Billing > Billing Information` before downloading.

> 📌 **Note:** Only invoices downloaded after saving your billing information will reflect the updated details. Previously downloaded PDFs won't change retroactively.

## How to Request a Refund

You have 30 days from your original purchase date to request a refund, and this window resets with every renewal charge.

Refunds are prorated, meaning you get back the portion of your subscription you haven't used yet. For example, if you paid $30 for a monthly plan and request a refund after 10 days, you'd receive approximately $20 back (covering the remaining 20 days), minus standard payment processing fees of 2.9% plus $0.30 per transaction.

### How to Submit a Request

**Self-service (fastest):** Log into your account, go to `Plans & Billing`, and open your [Billing Portal](https://eraseme.app/billing) to follow the refund steps.

**Email support:** Send a message to **[email protected]** with your full name, account email address, Stripe Purchase ID (found in your confirmation email), and a brief reason for your request.

Once approved, funds return to your original payment method within 1 to 5 business days. Each subscription is eligible for one refund, and requests submitted outside the 30-day window are not eligible.

## Managing Everything in One Place

Almost everything covered in this guide lives under `Settings > Billing`. Whether you're switching plans, updating a card, downloading an invoice, or checking your next renewal date, that's your starting point. If you run into anything unexpected, the [support team](/contact) is ready to help you sort it out.