Oracle NetSuite and Adyen integration
This connection brings Adyen payment settlement data into Oracle NetSuite for accounting and reconciliation. Adyen is a payments platform, not an ERP, so it has no invoices or GL accounts; its accounting source of record is the settlement reconciliation report plus payment, refund, and payout events. ml-connector consumes those events and reports, then posts the net settled amounts and processing fees into Oracle NetSuite against the correct GL accounts and accounting dimensions. Each Adyen payout is matched to a bank deposit in NetSuite so the balance clears. The pspReference travels with every entry as the external transaction ID, keeping the two systems tied together.
What moves between them
Data moves one way for accounting: from Adyen into Oracle NetSuite. Adyen pushes CAPTURE and REFUND webhooks in near real time, and a REPORT_AVAILABLE webhook when a settlement reconciliation report is ready, typically daily. ml-connector downloads each settlement report from its signed URL, parses the settled amounts, fees, and adjustments, and posts them into NetSuite as GL entries against mapped accounts, with payout totals reconciled to the bank account. Refunds and chargebacks post as offsetting entries. The pspReference is carried into NetSuite so each posting traces back to its Adyen transaction.
How ml-connector handles it
ml-connector holds an Adyen API key per merchant account and, separately, signs short-lived JWTs against the NetSuite token endpoint using the customer's uploaded certificate, refreshing the NetSuite token before it expires at 60 minutes. Adyen webhooks are verified with HMAC-SHA256 before processing; the standard payment events carry hmacSignature in additionalData while Balance Platform events use the hmacsignature header. Because Adyen can deliver the same notification more than once, pspReference is used as the dedup key, and it is also stamped as the NetSuite externalId so reposting upserts rather than duplicates. Settlement report lines map to GL accounts and to Department, Class, or Location dimensions per a mapping set at connection time; fees post to a configured expense account. On a NetSuite 429 the connector backs off using the Retry-After header. Two real edge cases: NetSuite OneWorld accounts require a subsidiary on every transaction or the write returns 400, and a NetSuite sandbox refresh clears the M2M certificate mapping, so the certificate must be re-uploaded before sync resumes.
A real-world example
A mid-sized online retailer with roughly 150 staff takes card payments through Adyen across web and in-store and runs its books in Oracle NetSuite. Finance was keying daily settlement totals into the GL by hand from Adyen reports, which took hours and left payout deposits unreconciled against the bank account for days. With this connection, each Adyen settlement report posts automatically into NetSuite with fees split out and every payout matched to its bank deposit, so the month-end close stops waiting on manual payment reconciliation.
What you can do
- Post Adyen settled payment and refund amounts into the Oracle NetSuite general ledger automatically.
- Split Adyen processing fees onto a dedicated NetSuite expense account.
- Reconcile each Adyen payout against the matching NetSuite bank account.
- Carry the Adyen pspReference into NetSuite as the external ID for full traceability.
- Map settlement lines to NetSuite Department, Class, and Location dimensions.
Questions
- Does Adyen send invoices or vendor records to NetSuite?
- No. Adyen is a payments platform and has no invoices, vendors, purchase orders, or GL accounts. The connection moves payment, refund, and settlement data, and Oracle NetSuite remains the system that holds the chart of accounts and posts the resulting GL entries.
- How does the connector avoid posting the same Adyen transaction twice?
- Adyen may deliver the same webhook notification more than once, so ml-connector uses the pspReference as a dedup key on its side. That same pspReference is written to NetSuite as the externalId, so any repost upserts the existing record through NetSuite's externalId replace pattern rather than creating a duplicate entry.
- What happens when the NetSuite access token expires during a sync?
- NetSuite OAuth 2.0 Client Credentials tokens last 60 minutes and there is no refresh token in this mode. ml-connector signs a fresh JWT with the customer's private key and requests a new token before the old one expires, so multi-hour settlement runs continue without interruption. If NetSuite returns a 429, the connector backs off using the Retry-After header.
Related integrations
More Oracle NetSuite integrations
Other systems that connect to Adyen
Connect Oracle NetSuite and Adyen
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started