Hi,
I’m building a lead profiling workflow for a client:
Pull leads from Zoho CRM
Enrich each lead with their website behaviour from Zoho SalesIQ
Build a complete lead profile per contact
The missing piece is a Zoho SalesIQ integration. What’s the best way to connect to the SalesIQ API (EU datacenter) within n8n — is there a community node, or is an HTTP Request node with custom OAuth2 the recommended approach? And if HTTP Request is the way to go, how would you set that up correctly?
hi @LNH good morning!
nowadays there’s no node for zoho, the best approach is to go with the http request node with a custom oauth api credential. one thing to note, zoho lists https://accounts.zoho.eu as the OAuth server for Europe.
Hi LNH. I can help with the Zoho SalesIQ side as a bounded paid integration slice.
For this I would not start by guessing a whole architecture. I would first verify the EU OAuth/API path, build one SalesIQ → lead profile enrichment route in n8n, map the result back to the target Zoho CRM fields, and add error logging plus short handoff notes.
That first slice would be $450-$650 depending on how much of the SalesIQ API response and CRM mapping is already known. I would use redacted sample contacts/screenshots first, then only touch live credentials after the exact flow is agreed.
One question: do you already have the SalesIQ API endpoint / sample response for website behaviour, or is the first step to discover the correct endpoint and OAuth scopes?
Yeah, no node for SalesIQ — HTTP Request with a Generic OAuth2 credential is the move. Two things that trip people up on the EU datacenter:
Auth host and API host are different: token endpoint is accounts.zoho.eu, but your actual SalesIQ calls go to the .eu data domain, not .com. Mixing them is the usual cause of silent 401s.Scopes are case- and product-specific. Grab the exact SalesIQ scope string from Zoho’s API console rather than guessing — a too-broad CRM scope won’t cover SalesIQ visitor data.
Once the token refreshes cleanly, the rest is just GET against the visitor-tracking endpoints. Test the raw call in Postman first so you know it’s the n8n credential and not the scope.
Hi @LNH,
Since there isn’t a dedicated native node for SalesIQ, using the HTTP Request node with a custom OAuth2 credential is the standard approach. Here is the technical breakdown to get your EU datacenter integration running:
1. OAuth2 Credential Setup
Create a new OAuth2 API credential in n8n. Zoho’s EU auth endpoints are specific, so configure them as follows:
-
Authorization URL:
https://accounts.zoho.eu/oauth/v2/auth -
Access Token URL:
https://accounts.zoho.eu/oauth/v2/token -
Scope: You will need specific scopes for SalesIQ (e.g.,
ZohoSalesIQ.visitors.READ,ZohoSalesIQ.reports.READ). Check the Zoho API Console to ensure you’ve selected the correct ones.
2. API Endpoint Strategy
For visitor/behavior data, you aren’t just hitting a single endpoint.
-
Base URL: Ensure you are targeting the EU-specific API base:
https://salesiq.zoho.eu/api/v2/ -
Mapping: Since you’re building a lead profile, prioritize the
/visitorsor/chatsendpoints. Use thezoho_crm_lead_id(if passed as a custom parameter in the SalesIQ visitor tracking script) to perform the join in your workflow.
3. Execution Flow
-
Zoho CRM Trigger: Pull your lead list.
-
HTTP Request (GET): Query SalesIQ using the lead’s identifier.
-
Set/Edit Fields: Since SalesIQ responses are often nested JSON, use the Set or Edit Fields node to flatten the behavior data into a key-value structure that matches your CRM lead object.
-
Zoho CRM (PATCH/UPDATE): Push the enriched profile back to the CRM.
Before building the full workflow, use a Postman collection or a simple curl command to hit the /visitors endpoint and verify your OAuth2 token is returning the expected payload. If you get a 403, double-check your scope permissions in the Zoho API Console; it’s almost always a mismatch between the requested scope and the token generated.