When a business needs to charge customers every week, month, or year, there are two common ways to build the payment system. You can use Stripe Subscriptions, or you can save the customer's payment method and run your own scheduled payment process with a cron job.
Both approaches can work. The better choice depends on whether you are selling a traditional subscription or collecting payments according to rules that do not fit a standard billing cycle.
What Is Stripe Subscriptions?
Stripe Subscriptions is part of Stripe Billing. You create a customer, define a recurring price, and create a subscription connected to that price. Stripe then generates invoices and attempts to collect payment according to the selected billing schedule.
For example, a software company may offer the following plans:
- Basic plan $19 per month
- Professional plan $49 per month
- Annual plan $490 per year
Once a customer subscribes, Stripe maintains the billing cycle, creates invoices, attempts payments, records subscription status changes, and sends webhook events to your application.
What Is a Manual Recurring Payment System?
A manual recurring payment system does not necessarily mean that an employee enters every payment by hand. In most cases, it means that your application controls the schedule instead of Stripe.
Your application saves the customer's Stripe Customer ID and Payment Method ID. A cron job runs at a scheduled time, finds accounts that need to be charged, and creates a payment through the Stripe API.
Example cron-based workflow
- A cron job runs every day at 2:00 a.m.
- The application finds customers whose next payment date is today.
- The application calculates the amount each customer owes.
- A PaymentIntent is created using the saved payment method.
- The payment result is recorded in your database.
- Failed payments are placed into your own retry process.
Stripe still processes the payment, but your application is responsible for deciding when to charge, how much to charge, when to retry, and what happens after a failure.
Main Differences
| Area | Stripe Subscriptions | Manual System With Cron |
|---|---|---|
| Billing schedule | Managed by Stripe | Managed by your database and cron job |
| Recurring invoices | Created automatically | You create payments, invoices, or internal records |
| Failed payment retries | Stripe retry rules and recovery tools are available | You must build and maintain the retry logic |
| Plan changes | Supports recurring prices, quantities, billing cycles, and prorations | You calculate plan changes and prorated amounts |
| Customer management | Stripe Customer Portal can be used | You normally build your own account management pages |
| Billing flexibility | Best for structured recurring billing | Best for highly customized payment rules |
| Development work | Lower for standard subscription products | Higher because your application owns the billing process |
| Webhooks | Required for reliable subscription status updates | Still recommended for reliable payment confirmation |
Stripe Subscriptions: Pros and Cons
| Advantages | Disadvantages |
|---|---|
| Less billing code: Stripe manages recurring invoices and billing dates. | Additional billing cost: Stripe Billing may add fees beyond normal payment-processing charges. |
| Built-in retry options: Failed payments can be retried according to configured recovery settings. | More Stripe-specific structure: Your database and workflows become connected to Stripe subscription objects and statuses. |
| Automatic invoice history: Each billing period can create an invoice with its own payment status. | Unusual billing rules can be harder: A highly customized billing process may not fit a conventional subscription. |
| Customer Portal: Customers can update payment details, view invoices, and manage subscriptions. | Webhooks are still necessary: Your application must process asynchronous changes correctly. |
| Trials and plan changes: Common subscription operations are already supported. | Testing requires several scenarios: You must test renewals, failures, authentication, cancellations, and plan changes. |
Manual Cron-Based Payments: Pros and Cons
| Advantages | Disadvantages |
|---|---|
| Complete scheduling control: You decide exactly when each payment should be attempted. | More code to maintain: Scheduling, retries, account status, notifications, and reporting become your responsibility. |
| Flexible amounts: The payment can be calculated from orders, usage, attendance, deliveries, or other business data. | Higher risk of billing mistakes: A cron or database bug could skip payments or charge a customer twice. |
| Custom retry rules: You can retry according to your own business requirements. | You must prevent duplicate charges: Idempotency and payment locking must be implemented carefully. |
| No need to model every payment as a subscription: This can be useful when charges are irregular. | Customer management must be built: Customers still need a way to update expired cards and review payments. |
| Internal data stays authoritative: Your application can remain the main source for billing dates and amounts. | More monitoring is required: You must detect failed cron jobs, API errors, timeouts, and incomplete processing. |
When Stripe Subscriptions Is the Better Choice
1. Software-as-a-Service Plans
A project-management application offers a $29 monthly plan and a $290 annual plan. Customers receive access while their subscriptions are active.
Stripe Subscriptions is a strong fit because the amount and billing period are predictable. Your application can grant access after receiving confirmation that an invoice was paid and restrict access when the subscription is no longer active.
2. Membership Websites
A training website charges $15 every month for access to videos and downloadable resources. Members may cancel at the end of the current billing period.
This is a normal recurring membership. Stripe can maintain the billing cycle, while your application responds to subscription and invoice events.
3. Monthly Service Plans
An automotive service company offers a maintenance membership for $24.99 per month. Every active member receives discounted inspections and priority booking.
The recurring amount is fixed and service access is linked directly to membership status. A Stripe subscription is easier to operate than a custom daily billing script.
4. Per-Seat Business Accounts
A business platform charges $12 per employee per month. A company with 25 active employees pays:
Stripe Subscriptions can represent the number of seats as a quantity. When the company increases from 25 to 30 employees, the subscription quantity can be updated and the billing adjustment can follow the selected proration policy.
5. Free Trials That Convert to Paid Plans
A customer starts a 14-day trial and then pays $39 per month. Subscription billing is designed for this type of lifecycle. Your application can track trial status and respond when the trial is ending, converts successfully, or ends without a usable payment method.
When a Manual Cron Job Is the Better Choice
1. Charges Based on Completed Work
A cleaning company visits a customer several times during the month. Each visit has a different price:
- July 3: Standard cleaning, $120
- July 12: Standard cleaning, $120
- July 24: Deep cleaning, $210
The customer owes $450, but only after all three services have been completed and approved. A monthly cron job can total the completed work and create one payment for the exact amount.
This arrangement is not really a $450 monthly subscription because next month's services and total may be different.
2. Event-Based Billing
A media company charges dance studios after each competition. One studio may attend two events in March, no events in April, and five events in May.
The amount depends on entries, videos, photos, or other event-related services. A scheduled process can calculate the final event total after the event closes.
3. Installment Payments With Irregular Dates
A customer agrees to the following payment schedule:
| Payment | Due Date | Amount |
|---|---|---|
| Deposit | August 1 | $1,500 |
| Design approval | When approved | $2,000 |
| Final payment | At launch | $1,500 |
The second and third dates depend on project milestones rather than a fixed monthly interval. A custom payment process may be clearer than forcing these charges into a subscription schedule.
4. Billing Only After Internal Approval
A repair company prepares an estimate, completes the repair, and waits for a manager to approve the final invoice. The amount may change after parts and labor are confirmed.
A cron job can process only records marked as approved and ready for payment. This gives the business control over the exact amount and payment date.
5. Complex Business-Specific Rules
A customer may normally be charged every month, but payment should be skipped when:
- The associated event was cancelled.
- The account has an unresolved credit.
- The final amount is below a minimum billing threshold.
- A manager has placed the account on hold.
- The customer is waiting for an insurance decision.
These rules can sometimes be incorporated into a Stripe subscription workflow, but a custom process may be easier when the exceptions are central to the business.
Why a Cron Job Is More Complicated Than It Looks
The first version of a cron-based payment script may appear simple:
Find accounts due today
Create Stripe payment
Mark account as paid
A production system needs to handle many more conditions:
- The cron job starts twice at the same time.
- The Stripe API accepts the payment, but your server times out before saving the result.
- The payment requires customer authentication.
- The customer's card has expired.
- The payment is declined temporarily.
- The payment is declined permanently.
- The amount changes while the cron job is running.
- An administrator manually charges the customer at the same time.
- The customer removes or replaces the default payment method.
- The server is unavailable on the scheduled billing date.
A custom billing system should use database locking, clear payment statuses, Stripe idempotency keys, error logging, retry limits, and webhook confirmation. Without these safeguards, customers can be charged twice or not charged at all.
Do Stripe Subscriptions Still Require Webhooks?
Yes. Creating the subscription is only the beginning of the process. Renewals and many payment status changes happen after the original browser request has finished.
Your webhook endpoint should process important events such as:
| Event | Typical Action |
|---|---|
invoice.paid |
Confirm payment and provide or continue service access. |
invoice.payment_failed |
Record the failure and notify the customer when appropriate. |
invoice.payment_action_required |
Ask the customer to complete authentication or another required step. |
customer.subscription.updated |
Update the local plan, billing state, or cancellation date. |
customer.subscription.deleted |
End access according to your business rules. |
Can You Combine Both Approaches?
Yes. Many businesses use Stripe Subscriptions for predictable base fees and custom payments for separate variable charges.
For example, a platform may charge:
- $99 per month as a subscription for platform access.
- $2 per completed order as a separate monthly usage charge.
- A one-time $250 onboarding payment.
The $99 platform fee is predictable and belongs in a subscription. The onboarding payment is a normal one-time charge. The order charges can be handled through usage-based billing or calculated separately, depending on the complexity of the company's rules.
Cost Comparison Example
A custom system may avoid some billing-platform fees, but development and maintenance costs should also be considered.
| Task | Stripe Subscriptions | Custom Cron System |
|---|---|---|
| Initial integration | Approximately 20 to 40 development hours for a typical integration | Approximately 40 to 100 or more development hours |
| Retry system | Configure available Stripe recovery tools | Design, build, test, and monitor custom retry rules |
| Customer billing management | Stripe-hosted Customer Portal may be used | Custom account pages may need to be developed |
| Ongoing maintenance | Mostly integration monitoring and business logic | Cron monitoring, payment scheduling, retries, reporting, and exception handling |
These development-hour examples are estimates. Actual requirements depend on the number of plans, payment methods, account rules, reporting needs, and existing application structure.
Decision Checklist
Choose Stripe Subscriptions when:
- Customers pay on a regular schedule.
- The price is fixed or follows a supported pricing model.
- Customers need trials, upgrades, downgrades, or cancellations.
- You want Stripe to create recurring invoices.
- You want built-in payment recovery options.
- You want to reduce custom billing code.
Choose a custom cron system when:
- Payment dates are irregular.
- The amount depends on completed work.
- Every charge requires internal approval.
- Your billing rules contain many exceptions.
- Payments are tied to events or milestones.
- Your team can maintain and monitor the billing system properly.
Final Recommendation
For a normal monthly or annual plan, Stripe Subscriptions is usually the better option. It reduces the amount of billing code your team must maintain and provides a structured way to manage invoices, renewals, payment failures, trials, cancellations, and plan changes.
A manual cron-based payment system is better when the charge is not truly a subscription. It makes sense when the amount or payment date depends on completed work, event activity, project milestones, internal approval, or other business-specific conditions.
The decision should not be based only on transaction fees. A custom billing system also has a cost: development time, testing, monitoring, customer support, and the financial risk of incorrect charges.
Frequently Asked Questions
Is Stripe Subscriptions the same as saving a customer's card?
No. Saving a payment method allows you to use it for future payments when properly authorized. A subscription adds a recurring billing structure with prices, billing periods, invoices, statuses, and renewal behavior.
Can I charge a saved card from a cron job?
Yes, provided the payment method was saved correctly and the customer authorized future off-session payments. Your application must still handle authentication requirements, declines, duplicate prevention, and payment confirmation.
Do I need a webhook when using a cron job?
A webhook is strongly recommended. The immediate API response does not cover every possible payment outcome. Webhooks help your application receive later status changes and confirm the final result.
Can Stripe automatically retry a failed subscription payment?
Stripe Billing provides configurable retry and revenue-recovery tools. Your application should still listen for payment-failure and invoice-update events so that its local records remain accurate.
What happens when a customer's card expires?
The payment may fail unless valid replacement details are available. Customers should have a secure way to update their payment method, and your system should notify them when action is required.
Can I change a customer's subscription price?
Yes. You can update the subscription to use a different price or quantity. Depending on your settings and timing, the change may create a prorated adjustment.
Is a cron job cheaper than Stripe Subscriptions?
It may reduce some platform fees, but it normally requires more development and ongoing maintenance. The correct comparison includes programming time, monitoring, failed-payment recovery, customer support, and the risk of billing errors.
Should subscription access be based on the latest charge?
Access should normally be based on confirmed invoice and subscription status rather than only the initial checkout response. Your application should define clear rules for active, trialing, past-due, paused, cancelled, and unpaid accounts.
Can I use Stripe Subscriptions and custom cron payments together?
Yes. A business can use subscriptions for predictable membership fees and custom payments for irregular services, event charges, onboarding fees, or milestone-based work.