← All integrations
SAP Concur → NetSuite

SAP Concur NetSuite integration

In short

A SAP Concur to NetSuite integration turns every approved expense report into a NetSuite transaction - a vendor bill for out-of-pocket spend, a card-liability clearing entry for company card charges - coded to the right subsidiary, department, class, and project, with reclaimable VAT split from the gross. Master data flows the other way so submitters can only pick coding NetSuite accepts, and payment confirmations flow back so employees see Paid. Done properly it is an idempotent pipeline, not a monthly CSV import.

What a SAP Concur to NetSuite integration actually does

SAP Concur is where spend gets captured and approved. An employee books a trip, swipes the corporate card, photographs a restaurant receipt, allocates it to a project, and submits a report that runs through policy checks, VAT logic, and manager approval. NetSuite is where that same spend has to become accounting: a posted liability against the right subsidiary, coded to a department, class, location, and project, with recoverable input tax separated from the gross, and the employee actually paid in the next AP run.

Between approved in Concur and posted in NetSuite sits work a lot of finance teams still do by hand every month. Someone pulls the accounting extract, reshapes columns in a spreadsheet, guesses which NetSuite employee record matches which Concur user, imports a CSV, and then chases the lines NetSuite rejected because a department was inactive or the period was already locked. A SAP Concur to NetSuite integration removes that step: every report that reaches the extracted state in Concur becomes exactly one posted transaction in NetSuite, master data flows back the other way so submitters can only pick coding NetSuite accepts, and the payment confirmation returns to Concur so nobody has to answer a status email.

What data moves

SAP Concur object or eventBecomes in NetSuiteNotes
Approved, extracted expense report (employee-paid)Vendor bill against the employee as vendor, or a NetSuite expense report recordOne line per expense entry, coded to the mapped expense account
Company card transaction on a reportCredit card charge or journal clearing the card liability accountNever reimbursed to the employee; driven by the Concur payment type
Expense entry allocationsDepartment, class, location, project on the transaction lineConcur percentage splits resolved to amounts, with rounding assigned deterministically
Reclaimable VAT on an entryTax code and tax detail on the lineDomestic and foreign VAT split from the gross so input tax stays recoverable
Cash advanceEmployee advance or prepayment applied against the reportHas to exist in NetSuite before the report that consumes it
Concur Invoice payment requestVendor bill against the NetSuite vendor, matched to a purchase order where usedConcur Invoice module only
Receipt imageFile cabinet attachment on the posted transactionWhere audit or retention rules want the document with the booking
NetSuite payment of the billPayment confirmation written back to ConcurReport status flips to paid, which stops most status enquiries

In the reverse direction, NetSuite employees, vendors, subsidiaries, departments, classes, locations, projects, and the relevant part of the chart of accounts are pushed into Concur as list items and expense-type mappings. That reverse flow is what makes the forward flow post on the first attempt.

The details that break naive exports

A monthly extract and a CSV import get the happy path working and leave the expensive cases on the AP desk:

How we build and run it

We treat this as a pipeline, not a scheduled export. Reports are picked up as they reach the extracted state in Concur, validated against live NetSuite master data, transformed into your agreed coding, and written through SuiteTalk REST or a RESTlet, whichever your NetSuite administrator prefers to support. Master data moves the other way on a delta schedule, and payment confirmations are written back to Concur once NetSuite actually pays.

The pipeline is idempotent. Each Concur report carries a stable identifier that becomes the external ID on the NetSuite transaction, so a retry, a replay, or a re-run after an outage never creates a second vendor bill. It runs on cloud-native, fully EU-hosted AWS infrastructure, so employee and transaction data does not leave the EU, which keeps the DPA / AVV and your GDPR obligations straightforward.

Then we keep it running. Monitoring, alerting, incident response, and watching for Concur API deprecations and NetSuite release changes are our responsibility under contract, at a fixed scope agreed up front. Your AP team stops reconciling a spreadsheet during close week.

When this integration is worth building

If a handful of people submit expenses in a single entity and a single currency, the Concur extract and a monthly import are genuinely fine, and we will say so. The integration earns its place when report volume makes manual coding a recurring job, when OneWorld subsidiaries and foreign VAT make the mapping too intricate to hold in a spreadsheet, when corporate card liability never quite reconciles, or when the close already slips because someone is fixing a failed import instead of closing the books.

Frequently asked questions

Do you take the data out of Concur as a file extract or through the API?
Through the API wherever your Concur entitlements allow it. We read approved reports and their entries through the Expense Report APIs and post results back through the financial integration and payment confirmation services, so every report has a per-document status instead of a file that either imported or did not. Where your Concur edition or your existing process is built around the Standard Accounting Extract, we consume that file instead and keep the same idempotency and error handling around it.
Should expense reports land in NetSuite as vendor bills or as NetSuite expense reports?
It depends on how you pay employees. If reimbursements go out through the normal AP payment run, a vendor bill with the employee set up as a vendor keeps the liability, the payment, and the remittance in one familiar workflow. If reimbursements run through payroll or through NetSuite Expense Management, the native expense report record fits better. We decide this once with your controller, because it drives vendor setup, approval routing, and how payments are confirmed back to Concur.
How do you handle corporate card transactions versus out-of-pocket spend?
They are two different postings and confusing them doubles your liability. Concur payment types tell us which is which: employee-paid entries become a reimbursable liability to the employee, while company card entries clear the corporate card liability or clearing account that the card statement feed also posts against. Personal expenses charged to a company card get their own treatment as an employee receivable rather than an expense.
Does it work with NetSuite OneWorld, multiple subsidiaries, and foreign currency?
Yes, and that is usually the hardest part of the mapping. The posting subsidiary is derived from the employee record or the allocation rather than assumed, so a report from a German entity does not land in the US books. Concur converts to the reimbursement currency at submit, NetSuite values the transaction against the subsidiary base currency on the posting date, and we book the difference to a defined FX account instead of quietly changing what the employee gets paid.
Who operates it after it goes live?
We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor. If Concur deprecates an API version or NetSuite changes a record schema in a release upgrade, that is our problem to catch and fix, not a failed batch your AP team finds on the last day of the close. You get a named owner, alerting, and an SLA rather than an import script somebody has to remember to run.

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

Request a scoping call