Integration

Connect Stripe to NetSuite

Book Stripe activity into NetSuite the way finance needs it: each paid invoice recorded as a customer payment against the right AR invoice, each payout reconciled to a bank deposit with processing fees on their own line, and anything that will not match sent to a person for review. Every entry is a run you can trace.
Mainly Stripe to NetSuite
Direction
As each Stripe event arrives
Latency
invoice.paid, payout.paid
Common trigger
Build the flow, then map accounts
Setup

Why teams connect Stripe and NetSuite

Payments land in Stripe. The books live in NetSuite. Reconciling the two is usually a spreadsheet of exported charges, a manual match against open invoices, and a fee adjustment someone calculates at month-end. It is slow, and it is where the bank balance and the GL drift apart.

  • Each paid invoice is matched to its open AR invoice in NetSuite and recorded as a customer payment, keyed on IDs carried in Stripe metadata
  • Each payout is reconciled to a bank deposit, with gross, fees, and refunds each on the correct account, so the NetSuite bank balance matches the real one
  • Anything the mapping cannot resolve, a missing invoice ID or an unexpected balance-transaction type, goes to a person for review rather than a wrong entry
  • Every entry is a run you can inspect, so a disputed reconciliation has a record of the Stripe object and the GL posting it produced

Worked example

The reconciliation flow finance turns on first.

Every paid Stripe invoice booked against the right open NetSuite invoice

Started on invoice.paid, with a branch to a person for anything that will not match.

  1. Trigger: a Webhook trigger with Auto Register With Stripe for invoice.paid, carrying the invoice, its customer, and amount_paid in cents.
  2. Identify: read customer.metadata.netsuite_customer_id and invoice.metadata.netsuite_invoice_id, set when the invoice was created.
  3. Branch: if either ID is missing, a Wait for form step sends the billing team the invoice with the Stripe link for review.
  4. Fees: Get balance transaction for the invoice's charge reads fee and net.
  5. Write: NetSuite Upsert by external id on CustomerPayment, applying it to the named invoice, mapping the fields below. The processing fee posts as a separate expense line to the Merchant Fees account.
  6. Idempotency: the payment's external ID is the Stripe event ID, so a redelivered event updates the same payment instead of posting a second one.
  7. Payout reconcile: a second flow on Stripe's payout.paid webhook reads the payout's balance transactions and creates a NetSuite deposit to the Stripe clearing account, with a line per charge and a negative line for total fees.

Field mapping

The starting map for the invoice.paid to NetSuite Customer Payment step.

StripeNetSuiteNotes
event.idCustomerPayment.externalIdIdempotency key. A redelivered event updates the same payment.
customer.metadata.netsuite_customer_idCustomerPayment.customerMatch key. Missing value sends the run to review.
invoice.metadata.netsuite_invoice_idCustomerPayment.apply.docThe AR invoice the payment is applied to.
balance_transaction.net / 100CustomerPayment.paymentAmounts are integer cents in Stripe. Divide by 100. Zero-decimal currencies do not.
balance_transaction.fee / 100expense line, Merchant Fees accountPosted as a separate line, not netted into the payment amount.
invoice.currencyCustomerPayment.currencyUppercased. Fails the run if the currency is not enabled in NetSuite.
invoice.status_transitions.paid_atCustomerPayment.tranDateUnix timestamp in Stripe. Converted to the NetSuite account timezone.
charge.idCustomerPayment.memoStored for traceability back to the specific charge.

What syncs, each direction

  • Payments on invoices. Paid invoices become customer payments applied to the matching AR invoice, with fees posted separately. (Stripe to NetSuite)
  • Payout reconciliation. Each payout becomes a bank deposit to the Stripe clearing account, with gross, fees, and refunds on the correct accounts. (Stripe to NetSuite)
  • Refunds and disputes. A refund creates a customer refund or credit memo. A dispute creates a journal entry to the disputes account, reversed on resolution. (Stripe to NetSuite)
  • Invoice creation (optional). Where NetSuite is the billing system, a new NetSuite invoice creates the matching Stripe invoice and stores the cross-IDs in metadata. (NetSuite to Stripe)

Governance and audit

The same controls apply to this sync as to every other Neblex workload.

  • Run history. Every entry is a run with the Stripe object, the match logic, and the GL posting. A failed run can be replayed from the step that failed, and the upsert stops a second payment.
  • Review tasks. Unmatched invoices, unexpected balance-transaction types, and currency mismatches go to a person as a task rather than posting a wrong entry.
  • Scoped access. Stripe uses a restricted API key with read on invoices, charges, and balance transactions, plus write on webhook endpoints for the auto-registered webhook. NetSuite uses a role limited to payments, deposits, and journals.
  • Environments. Build against Stripe test mode and a NetSuite sandbox, then promote the same flow to live and production.

Frequently asked questions

Is reconciliation immediate or at month-end?

Immediate on invoice.paid: the flow starts when Stripe sends the event, so a payment is booked moments after it clears. Payout reconciliation runs when Stripe settles a payout, typically daily.

How does it match a Stripe payment to a NetSuite invoice?

By NetSuite IDs carried in Stripe metadata, set at invoice creation. If the IDs are missing, the item goes to a person for review instead of being guessed at.

How are processing fees handled?

Posted as a separate expense line to a Merchant Fees account, not netted into the payment. The payout deposit carries a single negative line for total fees in that batch.

What about a redelivered Stripe event?

Every write uses Upsert by external id with the Stripe event ID, so a redelivered event updates the same record instead of creating a second one. That matters because Stripe delivers events at least once.

Does anything get installed in NetSuite?

No. The connector uses NetSuite's REST web services. No SuiteScript or bundle is deployed.

Connectors used

Stripe

Finance, Billing & Payments

Operations
589
Operations with typed output
99.7%
Change triggers
10 (webhook)
Signs in with
API token
Connector reference

NetSuite

ERP & Enterprise Systems

Operations
271
Operations with typed output
0%
Change triggers
1 (poll)
Signs in with
Connection details
Connector reference

NetSuite does not describe its output fields in advance, so check the field mapping with Test this step when you build the flow.

See it on your data

Bring one real integration

We will build it with you against your own systems, with the run log open.