ml-connector
Wave AccountingDayforce

Wave Accounting and Dayforce integration

Wave Accounting runs your books. Dayforce runs your payroll. When they are connected, customer invoices and account transactions from Wave flow into Dayforce for employee cost allocation, so payroll expenses land on the right accounts and cost centers. Employee records stay in sync so your payroll headcount reflects the organization structure in Wave. ml-connector bridges the different APIs and keeps both systems aligned on a schedule you control.

How Wave Accounting works

Wave Accounting exposes customers, invoices, products, and transactions through a GraphQL endpoint at https://gql.waveapps.com/graphql/public secured by OAuth 2.0 with two-hour access tokens and refresh tokens. It publishes webhooks for invoice created, updated, and paid events, as well as customer, transaction, and product changes. Wave retries failed webhook deliveries and expects an HTTP 200 response to acknowledge receipt. The connected business must have an active Wave Pro subscription to enable third-party API access. Bills and accounts payable are not exposed through the GraphQL API.

How Dayforce works

Dayforce exposes employees, org units, jobs, positions, and payroll summaries through REST endpoints at a client-specific base URL retrieved daily from the ClientMetadata endpoint. Authentication uses OAuth 2.0 Resource Owner Password Credentials flow with one-hour access token expiry and no refresh token, so new credentials must be requested hourly. Dayforce does not publish native outbound webhooks, so integration records are fetched by polling with date range filters on the employee and org unit endpoints. GL account codes are configured inside Dayforce and appear in payroll reports but have no standalone endpoint. The sandbox is shared and does not persist POST or PATCH requests.

What moves between them

Wave invoice and transaction events trigger ml-connector to pull customer and account details from Wave, then map them into Dayforce cost center and employee cost allocation records via polling. The flow is primarily one-directional from Wave into Dayforce. Employee records are polled from Dayforce on a regular schedule to keep the two systems aligned on headcount and org structure. Customer records from Wave populate Dayforce internal contacts and cost center owners where the org unit exists.

How ml-connector handles it

ml-connector stores Wave OAuth credentials and refreshes the two-hour access token before expiry, listening for Wave webhook events on invoice updates and transaction creation. For Dayforce, it manages the hourly ROPC token refresh and polls the employee and org unit endpoints with date range filters to detect changes since the last sync cycle. Customer names from Wave map to Dayforce internal contact records, and account codes in Wave are matched against Dayforce GL codes configured in the admin console. Transaction line items route to the matching cost center in Dayforce based on the account mapping. ml-connector tracks the client-specific Dayforce URL with daily refresh to avoid redirect overhead and ensures every transformed record carries a full audit trail for replay if a downstream call fails.

A real-world example

A small professional services firm uses Wave Accounting for invoicing clients and tracking expenses by project, and Dayforce for payroll and benefits. Before the integration, the finance team manually entered project expense allocations from Wave into Dayforce cost centers at payroll time, often re-entering data for the same clients across multiple pay periods. With Wave and Dayforce connected, each transaction in Wave automatically routes to the correct cost center in Dayforce based on the customer and account mapping, so payroll run calculations land on the right projects and expense accounts. Month-end reconciliation is faster because invoice and payroll expenses are already allocated.

What you can do

  • Sync Wave invoices and transactions into Dayforce cost center allocations based on customer and account mappings.
  • Map Wave customer records to Dayforce internal contacts and org units so payroll expenses route to the correct projects.
  • Handle Wave OAuth token refresh and Dayforce hourly token expiry automatically without manual intervention.
  • Listen for Wave webhook events on invoice and transaction changes and poll Dayforce for employee and org unit updates on a schedule you control.
  • Maintain a full audit trail on every record transformation and support replay if a sync step fails.

Questions

Which direction does data move between Wave and Dayforce?
The primary flow is from Wave into Dayforce. Wave invoices, transactions, and customer records are transformed and synced into Dayforce cost center allocations and employee records. Employee records are also polled from Dayforce back into Wave to keep headcount and org structure aligned.
Does Wave's webhook system work with Dayforce's poll-only architecture?
Yes. ml-connector listens for Wave webhook events on invoices and transactions and immediately pulls the full record from Wave, then queues those records for mapping into Dayforce. Dayforce employee and org unit changes are polled on a regular schedule since Dayforce does not publish webhooks, ensuring both systems stay in sync.
How are Wave customer and account records mapped to Dayforce cost centers?
ml-connector matches Wave customer names to Dayforce internal contact records and org units, and Wave account codes are matched to GL codes configured in the Dayforce admin console. Transaction line items route to the corresponding cost center based on these mappings, so payroll expenses land on the correct project or business function.

Related integrations

Connect Wave Accounting and Dayforce

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

Get started