Stripe & NetSuite Best Practices
Here is a set of best practices to ensure all aspects of the integration work smoothly.
Most of the guidelines below are not absolutes, but make sure you contact support before "breaking" the rules below.
NetSuite User Best Practices
- Never delete transactions in NetSuite created by the integration. This includes invoices, credit memos, payments, refunds, disputes, deposits, etc.
- Never void transactions (payments, refunds, etc) in NetSuite created by the integration.
- Never adjust the amount of payments or refunds created by the integration. This will trigger errors during the automatic reconciliation process.
- Do not deactivate customers if you expect any additional transactions to be added to that customer. For example, if they have an open invoice that you expect to be paid.
- Deleting or merging customers can be done, but you’ll need to re-link the customer records in Stripe. Contact support before deleting or merging customers to understand the integration impact.
- Invoices created by the integration can be edited as long as the total does not charge. This is not a hard rule, contact support if this is a requirement for your use-case.
- Do not deposit any transactions (payments, refunds, and disputes) created by the integration, this will cause issues with the automatic reconciliation process. Transactions are deposited/reconciled automatically.
- Do not issue refunds in both Stripe and NetSuite. Pick one system to issue refunds through.
Stripe User Best Practices
- Do not delete customers in Stripe without contacting support. This operation is supported, but it’s important you understand how this will affect the integration.
- If you are using the eCommerce or auth-capture flow, don't issue refunds directly in Stripe. Instead use NetSuite to issue refunds.
- If you are using auth-capture do not capture charges directly in the Stripe Dashboard. Let SuiteSync manage capturing and releasing charges.
- Do not use the customer balance. This feature is supported, but posts to a unique item in NetSuite which may be confusing for the finance team. Contact support if this is a heavily used feature in your account.
NetSuite Administrator Best Practices
- If you are going to enable multi-currency transactions for the first time, contact support.
- If you are moving to NetSuite OneWorld (multiple subsidiaries), contact support.
- If you are using new types of transactions for the first time, contact support. For instance, if you are using SalesOrders or CashSales for the first time.
- Do not lock any transactions that need to be processed by the integration.
- Do not disable "Allow non G/L changes" in closed accounting periods.
- Do not update bundles installed by the integration.
Stripe Administrator Best Practices
- If you are opening up a new account that you'd like to use with the integration, contact support.
- If you are using a new payment method for the first time (e.g. bank transfers), contact support.
- Do not connect additional services to your Stripe account without contacting support. For instance, if you start doing events, do not connect your Stripe account to your event system. Instead, create a new Stripe account dedicated to processing event charges.
- Do not disable automatic transfers.
- If you add an additional settlement account, contact support.
Stripe Plan Mapping Best Practices
It's dangerous to attempt to describe best practices to creating an effective item master because it's so closely tied to how you run and operate your business. That being said, here are some general things to keep in mind when thinking about how to structure your item master:
- If you have multiple plans in Stripe which are used to represent the same price-level of the same core product, don't create unique items in NetSuite for those plans. This adds additional noise to your NetSuite item list.
- Generally, more detail in NetSuite is better. If you have many (100s, or 1,000s) of plans in Stripe there is no downside to importing each one of those plans as an individual item in NetSuite aside from additional noise in your item list. Importing each plan into NetSuite gives you more granular detail about what is happening in your Stripe account which you can use to generate custom reports in your NetSuite environment.
- Don't use additional item types or plans in place of what could be better accomplished with reporting dimensions on the invoice or order level. Class, department, and location can be used to provide additional detail about the context in which a purchase was made. For instance, if customers can purchase the same product from multiple channels/locations, use the same item in NetSuite but leverage NetSuite metadata to indicate the channel/location on the invoice or order for reporting purposes.
When to use Multiple Stripe Accounts
The integration supports connecting multiple Stripe accounts to the same NetSuite instance. Whether or not multiple Stripe accounts should be used depends on a number of factors. We are happy to talk through this decision during the onboarding process with you.
Any of the information below is not official legal or tax advise. How you structure Stripe accounts/subsidiaries can have tax or legal implications. Consult counsel for advice on your particular situation.
Here are general guidelines for when separate Stripe accounts should be used:
- Transactions under each Stripe account are reported to the relevant government authority. For instance, if you have a single Stripe account and are using it transactions across multiple subsidiaries, all of the transactions in that Stripe account will be reported by Stripe to the relevant government authority as if all of the transactions were run under the entity associated with that particular Stripe account. For instance, in the US a 1099-K is generated for the entity tied to your Stripe account. In other words, you can't bifurcate transactions in a single Stripe account to multiple legal entities.
- Each Stripe account should be tied to a different NetSuite subsidiary. In other words, tying multiple Stripe accounts to the same subsidiary is challenging. If you are using multiple subsidiaries in NetSuite, and transacting on each of those subsidiaries, each subsidiary must have it's own Stripe account (note that there are ways around this, but it is error-prone and not recommended).
- The customer support or finance teams will not be given access to both Stripe accounts. If you'd like to segregate who has access to certain Stripe data, you'll need to separate the data out into separate Stripe accounts.
- The integration configuration for each account is very different. For example, each account might be tied to a different department or use a different workflow (eCommerce vs subscription).
- Revenue needs to be deposited in a different bank account depending on the site/app that it was purchased under.
Here's when multiple Stripe accounts should not be used:
- The integration configuration is largely the same across both accounts. For example, they are both eCommerce accounts, both posting to the same department/class/subsidiary, etc.
- The same customer service and finance teams will have access to both accounts. Having two Stripe accounts creates additional work and possible confusion for these teams.
- Each day two deposits will be pushed to your bank account. This does not add additional reconciliation work (this is automated).
- Note that Stripe considers separate Stripe accounts as a single account for volume pricing.
- You'd like to have separate API keys for multiple sites or components of an application. This can be done by creating a Stripe Connect account and authorizing it against your primary Stripe account, essentially creating sub-accounts of a primary "master" Stripe account.
- Saved payment method information should be shared between the various sites/applications using Stripe. Note that using a single Stripe account doesn't force you to share saved payment information, but gives you that option.
SuiteSync will need to be configured to use multiple Stripe accounts as well. Here are some considerations to keep in mind:
- SuiteSync supports using one account per NetSuite subsidiary out of the box. However, if your business logic breaks that one-to-one mapping (or if you don't use NetSuite subsidiaries/OneWorld) then there will be customization on your end required. You'll need to implement business logic to "switch" which Stripe account is used in various systems.
- In addition to your eCommerce application, here are the key systems that need to "know" which Stripe account to use:
- Invoice & SalesOrder payment forms
- Customer payment form
- Automatic billing
- Embedded payments (payments inside of NetSuite)
- If you are using a unique Stripe account per subsidiary, we support configuring these features for multi-subsidiary use. Search this document for "subsidiary" for examples of how this is done if you are going to be using a custom configuration.
Outside of the SuiteSync, here are some general technical considerations to keep in mind:
- Fraud configuration across each account will need to be separately maintained and monitored
- Any other Stripe applications will need to be setup, paid for, and maintained separately.
- Any dispute/chargeback automation, or integration with other systems will be more complex. You'll need to listen for webhooks from multiple accounts and essentially build multi-tenant support into those systems.
- Your eCommerce application will need to toggle between Stripe accounts, which it'll need to know which customer, payment, etc a given Stripe record is contained in and use the correct API key.