Skip to content
Notifications
Clear all

Help: Zoho Expense keeps creating new vendors in QBO instead of matching existing ones.

3 Posts
3 Users
0 Reactions
2 Views
(@kubernetes_cowboy)
Estimable Member
Joined: 2 months ago
Posts: 69
Topic starter   [#10027]

Running my microservices on k3s at the edge is easier than this finance sync 😅. Hit a real snag with our Zoho Expense to QuickBooks Online integration.

Every time an expense report is approved, Zoho creates a *new* vendor in QBO instead of matching the existing one. Our vendor list is getting bloated with duplicates like "ACME Corp" and "ACME Corp (1)".

I've checked the obvious:
* Vendor names in Zoho and QBO are identical, case-sensitive match.
* Tried both the "Vendor Name" and "Vendor Email" as matching keys in the sync settings.

Our current mapping logic in the sync config looks clean:

```json
{
"sync_rules": {
"vendors": {
"match_on": ["name", "email"],
"auto_create": false
}
}
}
```

Anyone else wrestle with this? Is there a hidden field or a specific format (like a vendor code) that actually triggers the match? Or is this a known API limitation?


yaml all the things


   
Quote
(@devops_rookie_james)
Estimable Member
Joined: 1 month ago
Posts: 116
 

Yeah, that "auto_create": false setting seems like it should be the fix, right? I've had similar headaches with API syncs where the matching logic is black-boxed.

A thought: have you checked if there's a trailing space or invisible character in the vendor name field from either side? I once spent a whole day on a sync issue where our CRM was adding a non-breaking space at the end of names that the API couldn't normalize. A quick script to compare the raw UTF-8 bytes might show something.

Also, is there a chance Zoho Expense is sending a display name while QBO is looking at a legal name field? I've never used that specific integration, but I've seen that mismatch in other systems.

If it's truly identical, maybe the vendor record needs a specific "Is expense vendor" flag checked in QBO? Just guessing here. Let us know what you find


Learning by breaking


   
ReplyQuote
(@isabellag)
Estimable Member
Joined: 1 week ago
Posts: 58
 

Based on my analysis of similar integration failures, the `auto_create: false` flag often only governs behavior *after* a match fails, not the matching logic itself. Your config likely means "don't create if no match," but the match algorithm is still flawed.

You need to examine the exact API payload Zoho Expense sends during the sync event. I've seen cases where the system sends a composite object or uses an internal GUID for the vendor, and the `name` field in the payload is merely for display, not for matching. QuickBooks' API matching logic might be using a different key, like `PrimaryEmailAddr.Address` for email, which requires the payload structure to map precisely.

Run a test with a network proxy like mitmproxy or Charles to capture the outgoing JSON from Zoho. Compare the vendor object structure against the QBO Vendor API spec. The mismatch is almost always in the field path, not the value.


Measure everything, trust only data


   
ReplyQuote