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 review queue. Every entry is an ordered run you can trace.

Mainly Stripe to NetSuite
Direction
Real-time on event, scheduled for payouts
Latency
invoice.paid, payout.paid
Common trigger
Template, 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, lands in a review queue rather than a wrong entry
  • Every entry is an ordered run log, 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

Triggered on invoice.paid, with a branch to the review queue for anything that will not match.

  1. 1Trigger: Stripe Event received for invoice.paid, carrying the invoice, its customer, and amount_paid in cents.
  2. 2Identify: read customer.metadata.netsuite_customer_id and invoice.metadata.netsuite_invoice_id, set when the invoice was created.
  3. 3Branch: if either ID is missing, post the invoice to #billing-review with the Stripe link and stop.
  4. 4Fees: read the related balance transaction for fee and net.
  5. 5Write: NetSuite Create record 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. 6Idempotency: the write uses the Stripe event ID as the payment's external ID, so a redelivered event does not post a second payment.
  7. 7Payout reconcile: a second flow on payout.paid 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 is a no-op.
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.

  • Ordered run log. Every entry is an event log with the Stripe object, the match logic, and the GL posting. Replay a run without re-creating the payment.
  • Review queue. Unmatched invoices, unexpected balance-transaction types, and currency mismatches queue for a person rather than posting a wrong entry.
  • Scoped access. Stripe uses a restricted API key with read on invoices, charges, and balance transactions. 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 real-time or at month-end?

Real-time on invoice.paid, so a payment is booked minutes 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 review queue 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 is keyed on the Stripe event ID as an external ID, so a redelivered event is a no-op. This is safe by design because Stripe delivers events at least once.

Does anything get installed in NetSuite?

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

Connectors on this page

Stripe

Payments

Operations
589
Typed outputs
99.7%
Change triggers
10 (webhook)
Authentication
Bearer

NetSuite

Applications

Operations
271
Typed outputs
0%
Change triggers
1 (poll)
Authentication
ConnectionString

NetSuite does not publish typed output schemas yet, so the field mapping on this page is configured in the flow rather than pre-verified.

See it on your data

Bring one real integration

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