Oracle NetSuite and GoCardless integration
Oracle NetSuite runs your finance and customer master data. GoCardless collects payments directly from customer bank accounts on a recurring schedule. Connecting the two keeps your AR clean and your cash flow predictable. Invoices created in NetSuite trigger collection mandates in GoCardless, and when payments succeed, they post back to NetSuite as reconciled customer payments without manual re-keying. ml-connector handles OAuth credentials, HMAC signature verification, and the mapping of customers and invoices between the two platforms.
What moves between them
The main flow is NetSuite to GoCardless. When a customer invoice is created or posted in NetSuite, ml-connector reads the customer and invoice, matches the customer to a GoCardless customer (by email or external ID), and triggers a payment mandate and collection request. When the payment succeeds in GoCardless, a payout event arrives via webhook with the transaction details. ml-connector maps the payout back to the NetSuite invoice and posts a customer payment record with the amount and reference, marking the invoice paid. Reference data such as customer names, emails, and bank country are kept in sync in both directions.
How ml-connector handles it
ml-connector stores the NetSuite OAuth credential set (client ID and certificate) and the GoCardless Bearer token encrypted, and refreshes the NetSuite token every 60 minutes or when OAuth returns a 401. On the GoCardless side, it validates the HMAC-SHA256 signature on every inbound webhook by recomputing the hash with the shared secret over the raw request body, returning 401 if the signature does not match (not 200, which would mark the endpoint healthy and halt retries). The integration polls NetSuite for new invoices on a schedule tied to your billing cycle, since NetSuite webhooks require IP allowlist configuration. When posting a customer payment to NetSuite, it includes the GoCardless payout ID as the reference, so your AR team can trace collections back to the source. Currency amounts from GoCardless are in the smallest unit (pence/cents), so ml-connector converts them to the NetSuite accounting currency to avoid rounding errors. Mandate creation and payment triggering are idempotent: GoCardless deduplicates by customer and mandate type, so retries do not create duplicate collections.
A real-world example
A mid-sized SaaS company bills customers monthly with NetSuite invoices and collects using GoCardless bank debits across Europe and the UK. Before the integration, the finance team manually exported overdue invoices from NetSuite, created mandates in GoCardless, and after collections succeeded, re-entered each payment into NetSuite, spending days chasing mismatches between GoCardless payouts and NetSuite customer payments. With NetSuite and GoCardless connected, each month the integration automatically creates mandates for new customers, triggers collections for invoices past due, and posts successful payments back to NetSuite the same day. Month-end close runs faster because AR is already reconciled, and the manual data-entry step is gone.
What you can do
- Trigger GoCardless bank debit collections from customer invoices in Oracle NetSuite, creating mandates automatically for new customers.
- Sync successful GoCardless payouts back to Oracle NetSuite as customer payments, linked by invoice and mandate.
- Map customer names, emails, and bank countries between NetSuite and GoCardless, keeping both systems aligned.
- Verify every GoCardless webhook with HMAC-SHA256 signature validation before processing payout events.
- Poll Oracle NetSuite on a billing cycle schedule and retry failed collections with exponential backoff.
Questions
- How are customers matched between Oracle NetSuite and GoCardless?
- Customers are matched by email address or an external ID field if present in both systems. When a new NetSuite customer is created with a bank country supported by GoCardless, ml-connector creates or retrieves the matching GoCardless customer using the email as the primary key. Customer names and metadata are synced bidirectionally to keep both systems current.
- What happens when a GoCardless webhook signature fails verification?
- ml-connector verifies the HMAC-SHA256 signature on every webhook by recomputing the hash with the shared secret over the raw request body and comparing to the Webhook-Signature header. If the signature does not match, ml-connector returns 401 instead of 200. Returning 200 on a bad signature would mark the endpoint healthy in GoCardless and halt retries, so the 401 response is critical to the security model.
- How are currency amounts handled between NetSuite and GoCardless?
- GoCardless amount fields are integers in the smallest currency unit for each country (pence in GBP, cents in EUR, etc). ml-connector converts these amounts to the NetSuite accounting currency before posting customer payments to avoid rounding errors. Exchange rates, if needed, are applied using NetSuite's built-in currency conversion or a fixed rate per accounting period.
Related integrations
More Oracle NetSuite integrations
Other systems that connect to GoCardless
Connect Oracle NetSuite and GoCardless
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started