Wave Accounting and SAP SuccessFactors integration
Wave Accounting handles small business invoicing and transactions. SAP SuccessFactors manages your employees, jobs, cost centers, and compensation. Connecting them aligns your cost allocation with your actual employees and job codes, so expense reports and cost distributions land on valid dimensions. Wave Accounting transactions can feed reference data into SuccessFactors cost centers, and employee and cost center changes from SuccessFactors can be tracked for sync into Wave customer records and tax calculations.
What moves between them
Transactions can flow from Wave Accounting into SAP SuccessFactors cost center and reference entity records. Employee and cost center data from SuccessFactors can be pulled and synchronized into Wave customer records for tax and allocation purposes. Wave Accounting transaction webhooks trigger ml-connector to read the transaction and any related account or vendor data via GraphQL, then map that data to SuccessFactors cost centers and business units via OData. Conversely, SuccessFactors delta queries using lastModifiedDateTime fetch employee and cost center updates for downstream sync.
How ml-connector handles it
ml-connector receives Wave Accounting webhook events (signed HMAC-SHA256) and immediately acknowledges with HTTP 200 to prevent retries. It then queries the Wave GraphQL endpoint with the OAuth access token (refreshing when needed) to fetch full transaction and account details. On the SuccessFactors side, ml-connector holds the OAuth credentials (client ID and RSA private key for SAML assertion signing) encrypted, generates bearer tokens with a 24-hour lifetime, and manages token refresh. Because SuccessFactors enforces a 10-thread limit and returns HTTP 429 on concurrent-request overload, ml-connector serializes SuccessFactors write operations and backs off on 429 responses. When reading from SuccessFactors, it sets the OData $top parameter to 1000 to avoid silently missing records and uses lastModifiedDateTime filters for delta sync. Cost centers are mapped per customer so transaction GL codes in Wave resolve to valid SuccessFactors cost center codes. Every sync carries a full audit trail for replay if a downstream call fails.
A real-world example
A professional services firm runs Wave Accounting for invoicing and expense tracking across three locations (New York, Los Angeles, Austin). They use SAP SuccessFactors for employee records, performance management, and compensation. Before integration, the finance team manually exported cost center lists from SuccessFactors each month and reconciled them against Wave transaction accounts, then re-keyed valid cost center codes into Wave custom fields to track labor allocation. With Wave Accounting and SAP SuccessFactors connected, cost center reference data flows from SuccessFactors into Wave on a schedule, so the accounting team can tag transactions with live cost center codes without manual lookup, and Wave transactions can feed back into SuccessFactors compensation and allocation records for accurate cost tracking.
What you can do
- Sync Wave Accounting transactions into SAP SuccessFactors cost center and reference data using Wave webhooks.
- Handle Wave OAuth 2.0 token refresh and SuccessFactors SAML Bearer assertion signing automatically.
- Map Wave transaction accounts to SuccessFactors cost centers and business units per customer.
- Respect SuccessFactors 10-thread concurrency limit and back off on HTTP 429 throttle responses.
- Pull employee and cost center updates from SuccessFactors via OData delta sync using lastModifiedDateTime.
Questions
- How does ml-connector handle Wave Accounting webhooks and SAP SuccessFactors polling?
- ml-connector receives Wave webhooks (signed with HMAC-SHA256) and acknowledges immediately with HTTP 200. It then queries the Wave GraphQL endpoint to fetch full transaction details. For SuccessFactors, ml-connector pulls employee and cost center data on a schedule using OData V2/V4 delta queries with lastModifiedDateTime filters, since SuccessFactors does not expose a programmatic webhook subscription API - events are configured only in the Admin Center UI.
- What authentication does ml-connector need for each system?
- For Wave Accounting, ml-connector stores the OAuth refresh token and uses it to obtain new 2-hour access tokens as needed. For SAP SuccessFactors, ml-connector stores the OAuth client ID and RSA private key (encrypted), generates SAML assertions signed with the private key, and exchanges them for 24-hour bearer tokens. Both token refresh processes are handled transparently.
- Does ml-connector handle SuccessFactors rate limits and pagination?
- Yes. SuccessFactors enforces a 10-thread concurrent-request limit and returns HTTP 429 or 503 when overloaded. ml-connector serializes write operations and backs off exponentially on throttle responses. It also sets the OData $top parameter to 1000 records per request to prevent silently missing data due to SuccessFactors' default page size of 20.
Related integrations
More Wave Accounting integrations
Other systems that connect to SAP SuccessFactors
Connect Wave Accounting and SAP SuccessFactors
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started