Creating Refunds in NetSuite from Stripe
SuiteSync allows refunds issued in Stripe automatically flow to NetSuite, and refunds issued in NetSuite to automatically create a refund in Stripe. Cash reconciliation for refunds is fully automated.
Refunds issued in Stripe are automatically represented in NetSuite. We've tuned our refund automation to handle a variety of use cases: subscriptions, cash sales, customer deposits, rev rec, ecommerce, etc.
Here's a short video walkthrough:
Depending on the type of payment (deposit or payment) and the state of the payment (applied, unapplied, partially applied, etc) a refund can look slightly different, and there's quite a few options available to control exactly how refunds are represented.
Here's an example of what the CreditMemo and CustomerRefund created by a refunded payment that was applied to an invoice looks like in NetSuite:
Here's a workflow diagram outlining how the refund process works in various cases:
Refunds for charges applied to an invoice
When a charge applied to an invoice is refunded, the integration creates a CreditMemo and CustomerRefund. This ensures entries are made to income and cash accounts.
The integration also supports automatically creating a refund in Stripe from the NetSuite interface. In this case, your team creates a CreditMemo and SuiteSync creates a CustomerRefund and applies it to the CreditMemo.
Partial refunds are supported. Here are some partial refund details to be aware of:
- If the invoice contains a single item, a CreditMemo is created using the single line item on the original invoice is set to the refund amount.
- If the invoice contains multiple items, the integration is unable to determine which line items should be refunded (Stripe does not associate a refund with specific line items). In this case, the refund is represented by a special NonInventorySaleItem named "Stripe Partial Refund Item." If revenue recognition is enabled on your account, this item uses the schedule and deferred revenue account specified in your settings.
- Instead of creating a "Stripe Partial Refund Item" it's possible for the integration to "guess" which line item(s) the refund is associated with and spread out the refund across those NetSuite items. This is an optional feature that can be enabled on your account.
As with all Stripe-created records, the internal ID of the NetSuite record is added to the corresponding Stripe record's metadata. In this case
netsuite_customer_refund_id fields are added to the refund's metadata.
Customizing Refund GL Impact
By default, when a CreditMemo or CashRefund is created for a refund the original items on the Invoice or CashSale are included in the CreditMemo.
There's no way to specify a specific "refund" account for an item in NetSuite. When you issue a credit memo with the original items on an invoice, the contra-income entries (i.e. reversal of the revenue) hit the same account as the original items. Often, you don't want the same income account to be used and for this reason there's an option available to delete the original items on the credit memo and use a single line item "Stripe Refund Item" instead.
Here are some reasons why you'd want to use this approach:
- You want refund to post to a specific GL account
- You are selling physical products and don't want the refunds's CreditMemo to effect inventory levels
By default, the "Stripe Refund Item" posts to your default income account. To customize the account that the refund item posts to, and consequently the credit memo, you can edit the account of the item in NetSuite. You can also edit the name or any other aspect of the item in NetSuite that you'd like. SuiteSync does overwrite any modifications made to the item in NetSuite.
Refunds for CustomerDeposits
Refunds for charges represented as CustomerDeposits work differently depending on their NetSuite status:
- If the CustomerDeposit has not been applied to an Invoice, a CustomerRefund is created and applied against the CustomerDeposit.
- If a CustomerDeposit has been applied to an Invoice, a CreditMemo is created against the Invoice and a CustomerRefund is applied to the CreditMemo
Refunds for Standalone Charges
If a refund is created for a charge that is not associated with an invoice, a CustomerRefund is created and applied against the CustomerPayment. No CreditMemo is created.
Refunds Caused by Failed Asynchronous Payments
Asynchronous payments (like ACH) don't immediately report if they fail or succeed. It sometimes takes a couple days for a payment to fail or succeed, so those payments are applied immediately and considered successful until proven failed.
If a failure does occur, here's what the integration does in the case of asynchronous payments:
- Unapply the payment that was previously pending from the invoice
- Refund in NetSuite the now unapplied failed payment
Refunds and the NetSuite Deposit Record
Refunds are included in Stripe transfers, just like charges. Before a refund is included in a transfer, the refund posts to the undeposited funds account in your NetSuite instance (using the CustomerRefund record). After the refund is included in the transfer, the refund is linked to a NetSuite deposit and refund amount moves from undeposited funds to the cash account.
Stripe Fee Refunds
Stripe fee refunds are not represented on the CustomerRefund or CreditMemo records. Stripe fee refunds are recorded on the deposit record as a line item in the "Other Deposits" list. Check out the transfer documentation for more information.
Creating Stripe Refunds in NetSuite
It's possible to create Stripe refunds using the CreditMemo record in NetSuite. This is an optional feature that can be enabled. Learn more about this feature.
Refunds on Old Transactions
If you are a long-time Stripe user who is just getting started with integration, we'll set a go-live date on your account. Any transactions before that go-live date will not be imported into your NetSuite account, and any refunds and disputes for transactions before that go-live will need to be handled manually. Here's more information on this.