Payouts and Automatic Bank Deposit Reconciliation
NetSuite transactions automatically reconcile to bank deposits (payouts), eliminating manual cash reconciliation work commonly done using Excel or batch journal entries.
How automatic bank reconciliation works
Automatic cash reconciliation eliminates the need for your accounting team to manually reconcile daily Stripe bank deposits.
- For each Stripe payout, a NetSuite deposit is created. Before a NetSuite deposit is created, each underlying transaction (charges, refunds, and disputes) go through a validation process (more details below).
- The deposit is 'linked' to every charge or refund contained within that payout. This moves cash from the "Undeposited Funds" account to the bank account specified on the deposit.
- Stripe fees and fee refunds are recorded as "Cash Back" and "Other Deposit" line items on the NetSuite deposit.
- Any dispute (chargeback) fees or dispute reversals are represented as "Cash Back" line items.
- The deposit will post to the NetSuite bank account which your Stripe account is connected to.
Since fees and transactions associated with a payout are recorded in a single deposit record, the total amount of the deposit record and the transaction date will always match the amount and date of deposits from Stripe in your bank.
Here's an example a NetSuite deposit:
Here's where fees are recorded:
Here's what the GL impact looks like:
Here's the bank account register:
In addition to this standard reconciliation flow, there are also customized bank reconciliation flows that enable you to use the automatic reconciliation feature with highly customized environments.
The payout validation process
Before a Stripe payout is translated to NetSuite, the bundled transactions (payments, refunds, and disputes) are validated against their corresponding NetSuite records.
Depending on the Stripe resource, validations are different:
For charges, we ensure payments are not already marked as Deposited in NetSuite
and ensure the NetSuite customer payment amount is equal to the Stripe charge amount.
For refunds, we ensure the account is the Undeposited Funds account and the refund amount
matches the Stripe refund amount.
For disputes, we ensure the account is the Undeposited Funds account and the refund amount
matches the Stripe dispute amount.
If all transactions associated with a payout pass the validation process, a deposit is created and linked to all the associated transactions, changing the status of any payments and refunds from "Not Deposited" to "Deposited".
How failed payout validations are handled
If a charge, refund, or dispute (chargeback) fails in the validation process the payout is not pushed to NetSuite and an error notification is sent. The notification indicates which records failed validation and why. We have documentation detailing out most errors that could occur and how to fix them (if best practices are followed errors rarely occur).
When a payout validation fails, it is automatically retried every hour for the next 3 days. A payout is also retried if the payout is updated in Stripe (e.g. if the metadata is updated)
In addition to automatic retries, you can retry a payout through the SuiteSync dashboard.
Multiple currencies and currency conversion
Charges in multiple currencies, and payouts to bank accounts in multiple currencies are fully supported.
If your Stripe account is configured to deposit to different bank accounts depending on the currency, you will need to provide us with the NetSuite bank account you'd like us to deposit undeposited funds transactions into for each currency.
Some finer details
There are a couple of different Stripe fees:
- Processing fees.
- Processing fee refunds. When you refund a Stripe charge, you are refunded any processing fees.
- Dispute fees. Learn more about disputes.
- Currency conversion fees. Learn more about this.
- Application fees. These are fees charged by applications that create payments/subscriptions on your behalf. For example, an event ticketing system might charge you a fee for each ticket you sell.
By default, all fees post to the same expense account. However, you can customize your account and post each of these fee categories to unique accounts.
If you have additional fee categories, they can broken out and represented as separate line items on the deposit. This is done by using a separate line item for all types defined in the
fee_details list on a Stripe balance transaction.
Interchange Plus Pricing (IC+)
Interchange Plus is a special type of pricing provided by Stripe. This pricing actually changes how fees are represented in your account.
Here are some nuances to be aware of:
- When looking at a charge in the Stripe dashboard, you won't see any fees charged. A $0 fee is shown. The reason for this is Stripe receives the accurate fee charged later on directly from the card networks.
- Fees are recorded when you receive a bank payout through two distinct categories: network fees and stripe fees. You can psot these two fee categories to unique income accounts in NetSuite if you'd like.
- IC+ fees are not shown in your Stripe test environment payouts. Unfortunately, right now, there's not a way to test these type of fees during the setup process.
If you are using NetSuite's OneWorld and have multiple subsidiaries, it is important that the subsidiaries specified match across different record types:
- The fee account subsidiary must match the bank account subsidiary, or be assigned to a parent subsidiary with "Include Children" enabled
- The subsidiary associated all payments' customer must match the bank account subsidiary. If you are using the Stripe NetSuite integration for customer and payment translation, this is handled automatically.
Integrating Past Transactions
When a payout is translated to NetSuite, all of the underlying transactions are translated over if they haven't already been translated. This process is called 'backfilling'.
This is important when the integration is initially turned on.
If a payout (or any bundled transactions) was created before the production go-live date it is not translated to NetSuite. This 'backfill protection' can be disabled if needed.
Manual Bank payouts
Manual payouts are not supported.
When manually payouts are enabled, the automated NetSuite cash reconciliation process is affected. When manual payouts are enabled payouts are not "connected" to any specific charges, refunds, disputes, etc. This prevents us from including specific payments in a deposit to move funds for a specific payment out of undeposited funds to your bank. In turn, this prevents our integration from automating all of other aspects of the cash reconciliation process including:
- Recording Stripe fees (processing fees, etc)
- Winning disputes
- Converted currency amount (if you are settling in a different currency)
However, invoice creation, cash application, refund automation, etc all continue to work. All payments, refunds, disputes, etc will post to undeposited funds and would need to managed manually.
Blocked debit payouts
If your bank blocks debit payouts, they are translated to NetSuite as if they succeeded. If your bank blocked the debit payout, it will not show up on your bank register at all. You will be responsible for 'grouping' the blocked debit payout with the successful payout from Stripe which 'bundles' the failed debit payout.