Stripe Subscriptions, and standalone Stripe invoices, are tightly integrated with NetSuite.
Here's how the NetSuite Stripe Subscription integration works:
- Stripe Subscriptions are represented as NetSuite invoices with one or more line items. Each period (1 month, 1 year, etc), a new invoice is created in Stripe, which triggers the creation of a invoice in NetSuite to represent the subscription.
- If the Stripe invoice is paid, a NetSuite CustomerPayment is created and applied against the NetSuite invoice.
- If there is a refund, a CreditMemo and CustomerRefund is created.
- If a subscription is changed (different plan or quantity/seats purchased), that plan change is not represented on the current subscription's invoice. Prorations and plan changes are included in the next subscription cycle's invoice. This functionality can be customized (more information on this below).
- If an invoice remains unpaid (if a customer's card fails and they do not update it, for example) the invoice in NetSuite can either be automatically closed or remain open.
Here's what a Stripe invoice looks like in NetSuite:
Stripe Coupons are supported in the integration. They are represented as NetSuite discount items.
In Stripe, coupons are represented as a separate line item on the invoice, which is how they are pulled into NetSuite.
Coupons do not have period data associated with them. If you are using revenue recognition with your integration, you may want to use non-posting discount items. This causes the discount amount to be subtracted from the total revenue recognized for the item representing the subscription.
If you choose to use posting discount items the revenue account that discounts use can be customized.
Stripe trial periods create $0 invoices in Stripe. The integration allows you to pull these trial period invoices into NetSuite, or ignore them.
Customers with lower cost plans usually opt to prevent trial invoices from being pulled into NetSuite.
Standalone Invoice Items
Stripe's Invoice Items can be used to add one-time charges to a customer's subscription. This is helpful for implementing usage based billing, overage charges, bonus pack purchases, etc.
Each invoice item you create in Stripe has a unique ID, even if the line item represents a consistent type of charge that you add to a customer's bill. In most cases, you'll want to map an invoice item you add to a customer to an existing NetSuite item.
The integration provides two main ways to do this:
- When you add the line item to the customer you can map it to an existing NetSuite item using metadata. Here's a full list of the mappings available.
- A NetSuite item can be matched on the
descriptionof the line item in NetSuite. If a match is not found a fallback item is used.
Customer Balance or Credit
Unpaid and closed, or forgiven invoices
Here's how forgiven and closed invoices work in Stripe:
- Forgiving a Stripe invoice instructs Stripe to treat the users subscription as if they had paid the invoice. Stripe will stop attempting to collect payment, but the user's subscription will continue to function normally
Closing an invoice instructs Stripe to stop attempting to charge the user's card, but the user's subscription status will remain
- If your Stripe subscription payment retry strategy cancels a subscription, the invoice will be closed.
By default, invoices that are closed and unpaid, or invoices that are forgiven remain open in NetSuite. This enables you to create processes around handling "bad debt" invoices in a way that works for your business.
There's a feature available that creates a credit memo against any closed or forgiven invoices that are not paid. This will close the invoice in NetSuite and reverse the entries to A/R and income accounts. On the credit memo, you can either use the original item on the invoice, or override the default item with a unique item to represent all "bad debt" that is closed out. Using this "bad debt" item allows you to customize the account that this bad debt posts to.
Since Stripe does not record when the invoice was closed or forgiven, the date when the integration is notified that a invoice is closed or forgiven is used as the transaction date. In most cases, this is the same day that the invoice is closed. However, if you are backfilling previous data or if there is a delivery delay, it is possible for the transaction date of the credit memo representing the closed or forgiven invoice to drift from the date it was closed.
Also, when a customer's invoice fails to be paid for the last time, it's possible to enable a credit hold on the customer.
Can CashSales be used instead of Invoices?
Each billing period of a Stripe subscription (i.e. a Stripe invoice) can only be represented by a NetSuite invoice.
CashSales represent an order and collected cash. Since Stripe invoices (created at the beginning of each billing cycle) are not always paid (in the case of a failed card payment) representing a Stripe invoice as a CashSale would incorrectly indicate that cash has been collected from the customer.