Transfers and Automatic Bank Deposit Reconciliation
NetSuite transactions automatically reconcile to bank deposits (transfers), 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 transfer, 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 transfer. 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 transfer 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 transfer validation process
Before a Stripe transfer 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 transfer 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 transfer validations are handled
If a charge, refund, or dispute (chargeback) fails in the validation process the transfer 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 transfer validation fails, it is automatically retried every hour for the next 3 days. A transfer is also retried if the transfer is updated in Stripe (e.g. if the metadata is updated)
In addition to automatic retries, you can retry a transfer through the SuiteSync dashboard.
Multiple currencies and currency conversion
Charges in multiple currencies, and transfers 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.
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 transfer 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 transfer (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 Transfers
Users who have automatic transfers turned off are not supported by default.
If your bank blocks debit transfers, they are not translated to NetSuite.