Technical Overview

We are a technical bunch, and have built this integration to be as easy work with for engineers as it is for the finance team.


The integration is a hosted middleware application that sits between your Stripe and NetSuite accounts, syncing data between the two systems. The integration does not require any "bundle" or application to be installed inside your NetSuite instance, and does not require any customizations to your NetSuite or Stripe accounts. Instead, the integration reacts to the various configuration options in Stripe and NetSuite and handles the complexities within the application itself.

In real time, data generated in your Stripe account is used to an equivalent record in NetSuite. Created NetSuite records are linked to the corresponding Stripe record using the Stripe ID, and the NetSuite internal ID is added to the corresponding Stripe record. In addition to the obvious record translation cases (Stripe Customer => NetSuite Customer) the integration also handles many of lesser known Stripe features and API nuances. Here are a couple of examples:

  • Stripe Coupon or Discounts => Discount line item on the invoice
  • Stripe Customer Balance Usage on an Invoice => NetSuite Credit Memo Applied Against the NetSuite Invoice
  • Stripe Dispute Reversal => Fee Reversal and Cash Reversal GL Entries
  • Partial capture refunds, zero decimal currencies, etc

We've run into many undocumented features and bugs of both Stripe and NetSuite and built systems to handle the various configurations of both Stripe and NetSuite. For instance, if you process more than 10,000 transactions a day NetSuite will start to throw undocumented error codes. We've developed systems to workaround these undocumented bugs and system limitations to ensure the integration works smoothly across various account configurations.

The integration is built to scale and is resilient to API, network, etc failures. We've handled accounts with more than 30,000 transactions per day and we've run into just about every esoteric API error in Stripe and NetSuite you can think of.

Our goal is to enable you to work with the beautiful Stripe API leaving the accounting integration to us, forgetting that NetSuite exists. Don't waste time building accounting automation infrastructure: buy, don't build.

Supported workflows

  • Stripe Subscriptions. If you use Stripe’s recurring billing, all subscription detail (customer, plan, discounts, etc) is brought over to NetSuite. NetSuite’s revenue recognition is also supported.
  • eCommerce. If you have a eCommerce platform (Shopify, WooCommerce, etc) integrated with Stripe, and use NetSuite for order fulfillment, SuiteSync will apply Stripe payments to an open Invoice in NetSuite and automate bank reconciliation.
  • Auth-Fulfill-Capture. If you have a eCommerce platform (Shopify, WooCommerce, etc) integrated with Stripe, and use NetSuite for order fulfillment, SuiteSync will apply Stripe payments to an open Invoice in NetSuite and automate bank reconciliation.
  • Standalone Charges. If your system creates standalone charges for services, we can bring over end-to-end data to properly represent this transaction: customer, invoice, payment, refund, dispute, and reconciliation against a bank deposit.
  • Deposit Reconciliation. The deposit reconciliation system can be used with custom NetSuite integrations you’ve already built.
  • Stripe Relay, Stripe Connect, NetSuite > Stripe Integration, etc. We have flows available to handle most of these trickier use cases. Drop us an email with your specific use case, and we'll be able to quickly determine if it's a use-case we support.

Stripe: NetSuite Object Mapping

Here's a quick reference detailing how various Stripe records are represented in NetSuite. If you are wondering what actions trigger the creation of these records, check out this webhook event reference.

Stripe Object NetSuite Record
Customer Customer
Plan Service Sale Item
Subscription None. Subscriptions are represented by a monthly invoice.
Invoice Invoice, and in some cases, a CreditMemo
Invoice Item Service Sale Item or Discount Item
Coupon Discount Item
Charge CustomerPayment
Refund CustomerRefund, and in some cases, a CreditMemo
Dispute CustomerRefund
Transfer Deposit
Order Sales Order
SKU Inventory Item or Non Inventory Item

Customization

The integration can be customized to fit your exact workflow. Here are a couple of examples:

  • You can leverage just the deposit reconciliation portion of the integration. If you have an existing integration in place for charges and refunds, you can pass record references over to the integration and the integration will reconcile payments against the corresponding transfer in Stripe and record processing, refund, and dispute fees.
  • You can override any portion of the integration by providing a pre-existing NetSuite record reference
  • You can control when records are pushed to NetSuite using the netsuite_block_integration and netsuite_allow_integration metadata flags
  • You can pass record-specific data to NetSuite using Stripe metadata
  • There are lots of minor configuration options that can be configured: disabling customer integration, disabling NetSuite customer updates after they are created, creating individual customer records instead of company customer records, various tax configurations, multi-currency support, unique records for multiple Stripe accounts, etc.

If there's a use-case that isn't supported, and it's a generic use-case that would benefit current or future users, we can build that feature into the integration.

Code Examples

Check them out, and don't hesitate to reach out if you'd like to see some example code for a use-case we haven't covered before.

Questions?

Shoot us an email (support@suitesync.io) with any technical questions, or hop the #general channel in our open Slack group.