ml-connector
Wave AccountingSAP Ariba

Wave Accounting and SAP Ariba integration

Wave Accounting runs invoicing, vendors, and the general ledger for small businesses. SAP Ariba runs procurement, suppliers, and procure-to-pay for buyers on the SAP Business Network. Connecting the two keeps your vendor list and your procurement spend in agreement without re-keying. Suppliers approved in SAP Ariba show up as vendors in Wave Accounting, and purchase order and invoice header data from Ariba is pulled on a schedule so finance can see committed and billed spend. ml-connector handles the very different APIs on each side and moves the data on a cadence you control.

How Wave Accounting works

Wave Accounting exposes customers, vendors, invoices, products, chart of accounts, and money transactions through a single GraphQL endpoint at gql.waveapps.com. It uses the OAuth 2.0 authorization code flow, so a person grants access once and ml-connector refreshes the token with the offline_access scope. Every read and write is scoped to a business id that ml-connector fetches first. Wave can push events such as invoice and customer changes to a registered endpoint, signed with an x-wave-signature HMAC header. The connected Wave business must hold an active Wave Pro subscription for third-party access.

How SAP Ariba works

SAP Ariba exposes its data through REST Open APIs on openapi.ariba.com. Supplier records are read and updated through the Supplier Data API with cursor pagination, while purchase orders and invoice headers come back through async reporting jobs that you submit, poll, and download in pages. Every call needs two credentials at once, an OAuth2 bearer token and a static apiKey header, plus the customer realm as a query parameter. SAP Ariba has no general outbound webhook, so procurement data is read by polling reporting jobs filtered by an updated-date window.

What moves between them

Supplier records flow from SAP Ariba into Wave Accounting as vendors, so an approved Ariba supplier becomes a usable vendor in the books. Purchase order and invoice header data is pulled from Ariba on a schedule and recorded against the matching Wave general ledger accounts so committed and billed spend is visible in finance. Supplier registration, qualification, and decision status is written back into Ariba where finance updates it. Wave invoices and money transactions stay on the Wave side; Ariba purchase order and invoice writes are not done over REST, so ml-connector treats those Ariba documents as read-only.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Wave side it runs the OAuth authorization code flow, resolves the business id with the businesses query, and refreshes the access token before its roughly two-hour expiry rather than waiting for a 401. On the Ariba side it fetches a bearer token, sends the apiKey header and the realm query parameter on every call, and caches the token until its one-hour expiry. Because Ariba has no webhook, ml-connector submits reporting jobs filtered by an updated-date window, polls until the job finishes, and downloads the pages, keeping a high-water-mark timestamp so the next run only reads new data. Ariba supplier records map to Wave vendors, and Ariba line-item accounting dimensions map to Wave GL accounts so spend lands on valid accounts. Real edge cases are handled directly: Ariba reporting jobs allow at most a one-year window, so an initial backfill is split into annual chunks; Ariba job submission is rate limited to a few calls per hour, so ml-connector watches the remaining-calls header and backs off; and Wave returns GraphQL errors with an HTTP 200, so ml-connector checks the errors array rather than trusting the status code. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A small light-manufacturing supplier with about forty staff sells to large buyers that run procurement through SAP Ariba, and keeps its own books in Wave Accounting because the accounting product is free and simple. Before the integration, the office manager re-typed each newly approved buyer-side supplier contact and every purchase order total from the Ariba Network into Wave by hand, and the picture of committed spend in the ledger always lagged the procurement system by days. With Wave Accounting and SAP Ariba connected, approved suppliers appear as Wave vendors automatically and purchase order and invoice header data is pulled each morning, so the books reflect real procurement activity and the manual copying step is gone.

What you can do

  • Create and update Wave Accounting vendors from SAP Ariba supplier records as they are approved.
  • Pull SAP Ariba purchase order and invoice header data on a schedule and record it against matching Wave general ledger accounts.
  • Write supplier registration, qualification, and decision status back into SAP Ariba.
  • Bridge Wave's OAuth token and business id with Ariba's bearer token, apiKey header, and realm query parameter.
  • Poll Ariba reporting jobs with a saved high-water mark, rate-limit backoff, retries, and a full audit trail on every record.

Questions

Which direction does data move between Wave Accounting and SAP Ariba?
Supplier records move from SAP Ariba into Wave Accounting as vendors, and purchase order and invoice header data is pulled from Ariba into Wave for spend visibility. Supplier registration and qualification status is written back into Ariba. Ariba purchase order and invoice documents cannot be written over its REST APIs, so ml-connector treats them as read-only.
Does SAP Ariba support webhooks, or is everything polled?
The Ariba Open APIs have no general outbound webhook, so procurement data is read by polling. ml-connector submits a reporting job filtered by an updated-date window, polls until it finishes, and downloads the paged results. It saves a high-water-mark timestamp so each run only reads records changed since the last successful run.
Can ml-connector post Ariba purchase orders or invoices as bills in Wave Accounting?
Not as structured bills, because Wave Accounting has no accounts-payable or purchase-order object in its public API. Instead, ml-connector records Ariba purchase order and invoice header amounts against the matching Wave general ledger accounts so committed and billed spend is visible. Suppliers are synced as Wave vendors, which Wave does support.

Related integrations

Connect Wave Accounting and SAP Ariba

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started