Wave Accounting and Pipedrive integration
Wave Accounting holds your invoices, customers, and transaction records. Pipedrive holds your sales deals and customer relationships. When you connect them, new customers from Wave appear in Pipedrive as organizations, invoices trigger deal updates and activities, and paid invoices update your deal timeline. Your sales team sees the revenue picture from the moment an invoice is created, and your finance team keeps Pipedrive deal values in sync with actual invoice amounts.
What moves between them
Wave customers flow to Pipedrive as organizations on the create or update webhook. Wave invoices appear in Pipedrive as linked deals and activities tied to the customer organization, with invoice amount, date, and status mapped from Wave. When an invoice is paid in Wave, the corresponding Pipedrive deal and activity are updated to reflect payment status. The flow is primarily Wave to Pipedrive; Pipedrive deal wins and customer changes do not push back into Wave invoices, since Wave invoices are read-only after creation.
How ml-connector handles it
ml-connector stores both OAuth credential sets encrypted. On initialization it exchanges the Wave authorization code for an access token and refresh token, then does the same for Pipedrive. Incoming webhooks from Wave are verified against the x-wave-signature header using HMAC-SHA256 and the shared webhook secret; Pipedrive webhooks use the X-Pipedrive-Signature header with the same algorithm. Wave customer and invoice data arrives via webhook or polling of the GraphQL endpoint; ml-connector parses the GraphQL response and maps customer names to Pipedrive organization names. Each Wave customer maps to exactly one Pipedrive organization (matched by name or email); if the organization does not exist, ml-connector creates it. Wave invoices map to Pipedrive deals linked to that organization, with the invoice ID stored in a custom field for deduplication and replay. Access tokens for both systems are checked on each request; if Wave returns 401 or Pipedrive returns 401, the stored refresh token is used to obtain a new access token before retrying. Pipedrive's token budget is tracked; if a request returns 402 (insufficient quota), ml-connector backs off and retries after the budget resets at the next billing period. Signature verification uses the unmodified raw request body, so ml-connector captures the body stream before JSON parsing. Every record change is logged in the audit trail with timestamp, webhook or polling source, and final state.
A real-world example
A small professional services firm uses Wave Accounting to invoice clients and track revenue, and Pipedrive to manage sales proposals and deal pipelines. Before the integration, when a deal closed, the sales team moved it to Won but the finance team had to manually find the resulting invoice in Wave and record it as paid in their own pipeline spreadsheet. With Wave and Pipedrive connected, the moment a customer is created or an invoice is sent in Wave, it appears in Pipedrive as an organization or activity. The sales team sees invoiced amounts tied to closed deals, and the finance team has Pipedrive's deal history as a source of truth for which sales have been billed.
What you can do
- Sync customers from Wave Accounting to Pipedrive as organizations, with email and name matching to deduplicate.
- Create or link Wave invoices to Pipedrive deals, storing the invoice ID in a custom field for replay and dedup.
- Update Pipedrive deal stages and activities when Wave invoices are created, updated, or marked paid.
- Refresh OAuth tokens for both Wave and Pipedrive on expiry, and verify webhook signatures using HMAC-SHA256.
- Track Pipedrive token budget consumption and back off when quota is exhausted, retrying after the next billing period.
Questions
- Which direction does data flow between Wave and Pipedrive?
- The primary flow is Wave Accounting to Pipedrive. Customers, invoices, and payment events from Wave appear in Pipedrive as organizations, deals, and activity updates. Pipedrive deal changes do not flow back into Wave invoices, since Wave invoices are immutable after creation.
- How does ml-connector handle OAuth token expiry for both systems?
- ml-connector stores the access token and refresh token for each system encrypted in the database. Before each API call, it checks the token expiry timestamp. If expired, it exchanges the refresh token for a new access token using the OAuth2 token endpoint. If the refresh token itself is invalid or revoked, the integration returns an error and stops until the credential is renewed.
- What happens if a Wave customer or invoice already exists in Pipedrive?
- ml-connector stores the Wave customer ID or invoice ID in a custom Pipedrive field on the first sync. On subsequent updates, it looks up the existing organization or deal by that ID, updates its fields (name, email, invoice amount, status), and replays the change if the Pipedrive write fails.
Related integrations
More Wave Accounting integrations
Other systems that connect to Pipedrive
Connect Wave Accounting and Pipedrive
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started