ml-connector
FreshBooksZendesk

FreshBooks and Zendesk integration

FreshBooks runs billing and invoicing for your business. Zendesk runs customer support. When the two are connected, your support team has complete visibility into what each customer has been invoiced, what they owe, and what expenses are associated with their account - without switching tabs. Invoice and expense changes flow into Zendesk as contextual notes on customer records, so support can answer billing questions on the spot. Client information from FreshBooks stays in sync with Zendesk organizations so both systems agree on who the customer is.

How FreshBooks works

FreshBooks exposes invoices, bills, payments, expenses, clients, chart of accounts, journal entries, and items through a REST API under https://api.freshbooks.com. Authentication uses OAuth 2.0 with user-delegated authorization (not Client Credentials), and scopes are granular per resource. FreshBooks pushes real-time events via webhooks signed with HMAC-SHA256, covering invoice, payment, bill, expense, client, and item lifecycle events. Webhook delivery can range from seconds to several minutes, and ml-connector must handle timeouts and retries when Zendesk is slow to respond. Status fields on invoices and payments are computed by the system and read-only.

How Zendesk works

Zendesk exposes tickets, users, organizations, and groups through a Support API at https://{subdomain}.zendesk.com/api/v2/. Authentication uses OAuth 2.0 (recommended for connectors) or API token with basic auth. Zendesk accepts webhooks for ticket, user, and organization events, verified via HMAC-SHA256 signature, and ml-connector must subscribe to ticket and user event categories. Zendesk has no finance entities - no invoices, purchase orders, payments, GL accounts, or items - so ml-connector enriches support tickets and user profiles with FreshBooks financial context instead.

What moves between them

FreshBooks invoices and expenses flow into Zendesk as notes attached to matching customer organizations and support tickets. When FreshBooks fires an invoice.create, invoice.update, or payment.create event, ml-connector looks up the client in Zendesk by matching FreshBooks client names to Zendesk organizations, then records the invoice amount, due date, and status as a note visible to support agents. Expense records tagged with a customer or project in FreshBooks similarly post as notes in Zendesk. Client data flows both ways: updates to a FreshBooks client name, email, or address trigger a sync to the matching Zendesk organization, and new organizations created in Zendesk are checked against FreshBooks to flag potential duplicates. Ticket context is one-way (FreshBooks to Zendesk) since Zendesk has no accounting entities to write.

How ml-connector handles it

ml-connector stores both credential sets encrypted and handles OAuth 2.0 user-delegated flows for FreshBooks and OAuth 2.0 application authorization for Zendesk independently. It listens to webhook payloads from both systems, validates each with HMAC-SHA256, and deserializes the JSON. When a FreshBooks invoice.create webhook arrives, ml-connector reads the client and invoice detail, searches Zendesk organizations by name (exact then fuzzy match), and appends a note with the invoice ID, amount, due date, and payment status. For expenses, it attaches a note with the category, amount, and optional customer reference. Updates to client records in FreshBooks post as organization updates in Zendesk, syncing name, email, and address fields. FreshBooks webhook timeouts and non-2xx responses are normal - ml-connector retries on Zendesk side and tracks webhook delivery state so missed events can be played back. Client name mismatches (e.g. 'Acme Corp' in FreshBooks vs 'Acme Corporation' in Zendesk) are flagged as warnings in the audit log, and support staff can manually link them in the Zendesk organization record. Rate limits on both sides are respected with exponential backoff.

A real-world example

A software-as-service company with 200 customers uses FreshBooks for invoicing and subscription management, and Zendesk for customer support. Support agents receive dozens of billing questions daily - what did we invoice them for, when is the next bill due, did their payment process. Before the integration, support checked FreshBooks in a separate browser tab and often cited stale information from memory. With FreshBooks and Zendesk connected, every incoming support ticket from a known customer shows recent invoices and expenses in the organization profile. When an agent opens a ticket from acme-corp asking 'when is our next invoice due', they see the last three invoices, payment status, and outstanding balance in the notes without leaving Zendesk.

What you can do

  • Sync FreshBooks invoices, payments, and expenses into Zendesk as contextual notes on customer organizations and support tickets.
  • Keep FreshBooks client names, emails, and addresses in sync with Zendesk organizations bidirectionally.
  • Verify invoice and expense records match the correct customer by matching FreshBooks client names to Zendesk organization names.
  • Handle OAuth 2.0 user-delegated authorization for FreshBooks and OAuth 2.0 application authorization for Zendesk independently.
  • Process real-time webhook events from both systems with HMAC-SHA256 signature verification and automatic retries on timeout or rate-limit.

Questions

Which direction does data move between FreshBooks and Zendesk?
Invoices, payments, and expenses flow from FreshBooks into Zendesk as notes on organizations and tickets. Client information syncs both ways so that FreshBooks clients stay aligned with Zendesk organizations. Zendesk has no finance or accounting entities, so all financial data is enrichment-only and read-only on the Zendesk side.
How does ml-connector match FreshBooks clients to Zendesk organizations?
ml-connector searches Zendesk organizations by matching the FreshBooks client name. It tries exact match first, then fuzzy matching if no exact match is found. Name mismatches are flagged in the audit log, and support staff can manually link organizations in the Zendesk UI when the names diverge.
What happens if FreshBooks webhook delivery is slow or times out?
FreshBooks webhook delivery can range from seconds to several minutes, and delivery timeouts are normal. ml-connector retries on the Zendesk side and tracks webhook state in the audit log. If an event is missed, it can be replayed from the audit trail without re-posting duplicate notes.

Related integrations

Connect FreshBooks and Zendesk

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

Get started