A customer opens a ticket asking why they were charged twice. The support agent can see the conversation history in Zendesk, but the invoice, the payment and the credit memo all live in Sage Intacct – a system the agent cannot open, and probably should not.
So the agent forwards the ticket to finance. Finance answers two days later. The customer has written three more times.
A Zendesk Sage Intacct integration closes that gap. Done well, it gives support the financial context to answer billing questions on first contact, and gives finance a controlled way to act on decisions made in support – without turning the helpdesk into a back door into the general ledger.
This article covers what each side actually needs, three integration patterns, and the design decisions that determine whether finance will sign off on it.
What support needs, and what finance needs
The two teams want different things from the integration, and the design should start there rather than with the APIs.
| Team | Needs | Should not get |
|---|---|---|
| Support | Account status, open and recent invoices, payment status, credit memos, contract or subscription dates | The ability to post transactions, change customer financial records, or see other customers’ data |
| Finance | Visibility of billing disputes, refund or credit requests with an approval trail, and early warning of collection issues | Unstructured requests by email that cannot be reconciled or audited |
| Both | One agreed identity for each customer across both systems | Two customer records that each system believes is correct |
Most of the value comes from the first row: read-only financial context, in front of the agent, inside the ticket.
Three integration patterns
1. Read-only lookup in the agent workspace
A Zendesk app in the ticket sidebar looks up the requester’s organization in Sage Intacct on demand and shows recent invoices, balances and payment status.
- Strengths: No data is copied, nothing in Intacct can change, and the agent always sees current figures.
- Weaknesses: Every lookup is a live call, so the integration has to handle Intacct API limits, latency and outages gracefully. The credentials must sit server-side – never in the browser.
- Best for: Most organizations, as the first phase.
2. Scheduled synchronization of customer and billing summaries
Customer records and selected billing fields are synchronized from Intacct into Zendesk organizations on a schedule – for example account status, outstanding balance band, or contract renewal date.
- Strengths: Fields are available to Zendesk triggers, views, routing and reporting. Tickets from customers with overdue balances can route to a specialist queue automatically.
- Weaknesses: Data is only as fresh as the last sync, and every synchronized field needs an owner and a conflict rule.
- Best for: Routing and reporting that depend on financial status.
3. Event-driven workflow from support to finance
A ticket event in Zendesk – such as an approved refund or credit request – triggers a workflow that creates a pending record or approval request for finance, not a posted transaction. Status flows back into the ticket when finance acts.
- Strengths: Finance gets structured, auditable requests. Support sees the outcome without chasing.
- Weaknesses: This is the pattern that writes to the financial system, so it carries the most design responsibility: approvals, idempotency, and a clear audit trail.
- Best for: Organizations with a regular volume of billing disputes, credits or refunds handled through support.
Many teams start with pattern 1, add pattern 2 for routing, and introduce pattern 3 only once the customer identity problem is solved.
The hard part: matching customers
Zendesk thinks in users and organizations. Sage Intacct thinks in customers, often across multiple entities, with parent-child relationships and dimensions. The same company may be one Zendesk organization and three Intacct customer records – or the reverse.
Before anything else, decide:
- Which system owns customer identity, and which identifier links the two. Matching on company name or email domain is how integrations show one customer another customer’s invoices.
- How multi-entity customers are handled. A customer billed by two legal entities may need both shown, with entity clearly labeled.
- What happens when no match is found. The answer should be a visible exception for someone to resolve, never a best guess.
- How merges and changes propagate. Customer records get merged, renamed and re-parented in both systems. The link has to survive that.
Getting the dimensional and customer structure right before integration hardens the wrong one in place is far cheaper than fixing it afterwards.
Controls finance will ask for
If the integration touches financial data at all, expect – and design for – these questions:
- Who can see what? Restrict financial fields to the agent roles that need them. Support for a retail customer may not need to see a wholesale account’s credit limit.
- Which credentials does the integration use? A dedicated Intacct integration user with the minimum permissions required, with credentials stored server-side and rotated.
- Can a ticket create a financial transaction? Ideally only as a request that finance approves. If credits or refunds are posted automatically below a threshold, the threshold and the policy belong to finance.
- What stops duplicates? A ticket updated twice, or a workflow retried after a timeout, must not create two credit requests. Each request needs a unique key tied to the ticket.
- Is there an audit trail? Every request should be traceable from Intacct back to the ticket, the agent and the approver.
Smart Events and Smart Rules on the Intacct side can enforce part of this at the platform level, so invalid data is refused rather than reported later.
Interfaces and practical constraints
On the Intacct side, transactional integration runs through the Sage Intacct Web Services API (and, on newer tenants, its REST API) for customers, invoices, payments and related records. On the Zendesk side, the Support API, webhooks and triggers, and the apps framework for sidebar apps cover the patterns above.
Check current API capabilities and limits for both platforms against the client’s subscription before committing to a design.
A few practical points regularly catch teams out:
- API limits apply to both systems. A sidebar app that calls Intacct every time any agent opens any ticket can exhaust capacity on a busy morning. Cache sensibly and call only when the panel is opened.
- Time zones and periods matter. “Last month’s invoices” must mean the same thing in both systems.
- Sandbox data rarely reflects production. Test customer matching against a copy of real customer records, with personal data handled appropriately.
- Plan for outages. When Intacct is unavailable, the sidebar should say so clearly, not show a misleading zero balance.
A sensible rollout
- Agree the customer identity link and fix the records that do not match.
- Ship read-only lookup to a pilot group of agents and measure how many billing tickets are answered without a finance handoff.
- Add synchronized status fields where routing or reporting needs them.
- Introduce support-to-finance requests with approval, idempotency and audit in place from day one.
- Hand over runbooks and monitoring so someone knows when the sync stops – before a customer does.
Illustrative scenario: billing answers on first contact
This scenario is a composite. It is representative of the integration work we do with Sage Intacct and support platforms, but it does not describe a specific client, and nothing in it is a reported result.
The situation
A B2B software company runs support in Zendesk and finance in Sage Intacct across two legal entities. A large share of tickets are billing questions, and almost all of them are forwarded to a small finance team. Credits are agreed in tickets and then re-keyed into Intacct by hand, and some are entered twice.
The approach
- Identity first. Each Zendesk organization is linked to its Intacct customer records by the Intacct customer ID, stored in an organization field. Unmatched organizations go to a short exception list that finance clears before anything else ships.
- Read-only sidebar. A Zendesk app shows open invoices, recent payments and credit memos for both entities, clearly labeled. It calls a small server-side service that holds the Intacct credentials, caches results briefly, and says plainly when Intacct is unavailable.
- Routing. A nightly sync writes an “account standing” field to each organization, so tickets from accounts with overdue balances route to a billing queue.
- Credit requests. Agents request credits from the ticket. Each request creates an approval item for finance, using the ticket ID as its idempotency key, so a retried workflow cannot create a second request. The outcome is written back to the ticket.
What a good outcome looks like
Agents answer routine billing questions without leaving the ticket, finance reviews structured requests instead of forwarded emails, and every credit in Intacct traces back to a ticket, an agent and an approver.
Related reading
- Integration reconciliation reports: proving two systems agree
- Idempotent webhooks: duplicates, retries and out-of-order events
Working with eProxim
eProxim does not run a Sage Intacct or a Zendesk practice. We work alongside the partners who own those platforms and the client relationship, and we build the layer between them: Intacct integration for invoices, payments, journal entries and dimensions; event-driven and scheduled synchronization with reconciliation finance can rely on; and the controls that keep support-to-finance workflows auditable.
The work can be delivered under your brand, as a scoped work package with acceptance criteria, or by engineers embedded in your team.
Have a client asking for Zendesk and Sage Intacct to talk to each other? See our Sage Intacct partner page, or start a partner conversation.