Home
Integrations Library
Customer Relationships Integrations
Zoho Integration
Zoho Integration

SERIES:

Zoho Integration

Connect any Zoho product to Everflow using webhooks and server-to-server postbacks. Send conversions from Zoho, map your fields, and only pay for leads Zoho has confirmed.

What this guide covers

You can connect Zoho to Everflow. This works for any Zoho product you use, including Zoho CRM, Zoho Desk, Zoho Invoice, Zoho Books, and Zoho Flow. Everflow does not have a one click Zoho app, and it does not need one. Zoho sends a postback? to Everflow whenever something important happens, like a new lead or a paid invoice. That message tells Everflow to record the conversion.

What's Changed Last updated Jul 31, 2026
Jul 31, 2026 Added
Initial publication.

How the connection works

Data can move in two directions. Most setups only need the first one.

DirectionWhat happens
Zoho to EverflowSomething happens in Zoho (a lead is created, an invoice is paid). Zoho sends a postback to Everflow, and Everflow records the conversion and credits the right partner. This is the common setup.
Everflow to ZohoAfter Everflow credits a conversion, it can send the details back out to Zoho or to a partner's own platform. This step is optional.

Zoho can send that postback in three ways: through Zoho Flow, through Zapier, or straight from Zoho itself. You will pick one of these below. They all end up doing the same thing, which is calling an Everflow web link that records the conversion.

Why not connect directly to Zoho's API? Zoho's API needs a login token that expires every hour, which a simple postback cannot handle. Webhooks avoid all of that, because Zoho does the sending and Everflow just receives the message. That is why the webhook path is the one we recommend.

What you need before you start

Grab these three things from your Everflow account first.

Your tracking domain, for example www.yourtracking.com. This is the start of every postback link. Your Network ID, which is the number that identifies your Everflow account. It goes in the nid part of the link. A plan for saving the transaction ID. This is explained in the next section.

Save the transaction ID

Everflow gives every click a transaction ID?. Everflow forgets the click once the visitor leaves your landing page, so your Zoho record has to store this code and send it back when the conversion happens. Where you find it depends on your tracking link type.

Redirect tracking links: the code arrives on your landing page address as _ef_transaction_id. Capture it in your lead form and save it to a field in Zoho. Direct tracking links: the code is kept in a first party cookie named EFTID. Read it with the Everflow JavaScript SDK, then send it to Zoho with the rest of the lead.
Watch the 90 day window Everflow keeps click data for 90 days. If a conversion arrives after that, the postback fails with Error 12 (Invalid Transaction ID). Zoho sales cycles can be long, so fire a small early event as soon as the lead is created. This locks the transaction ID in place so it is still valid when the deal closes later.

Pick how Zoho sends the data

The right method depends on which Zoho product you use, because Zoho products send webhooks differently. Some can call Everflow directly. Others send their webhook as a POST with a JSON body, which the Everflow postback link cannot read on its own, so they need Zoho Flow or Zapier in the middle to turn the message into a simple link. Use this table to find your product.

Your Zoho productCan it call Everflow directly?What to useZoho CRMYesNative CRM webhook, or Zoho FlowZoho DeskNo (it sends a POST with JSON)Zoho Flow or ZapierZoho Books or Zoho InvoiceNo (no GET option)Zoho Flow or ZapierAny other Zoho appThrough Zoho FlowZoho Flow

Zoho Flow works for every product, so start there if you are not sure. Open the option you want below.

Option 1: Zoho Flow (works for every product)

Zoho Flow is the automation tool built into Zoho. It works with every Zoho product and needs no extra vendor. For the full walkthrough with screenshots, see Set up Zoho Flow, step by step, further down this article.

Zoho guides: Outgoing webhooks in Zoho Flow and Webhook trigger in Zoho Flow.

Option 2: Zapier

Use this if you already run Zapier. You start a Zap with a Zoho trigger, or with a Catch Hook that Zoho sends to, then finish it with Webhooks by Zapier set to a GET request pointed at your Everflow postback link. For the full walkthrough with screenshots, see Set up Zapier, step by step, further down this article.

Zapier guide: Send webhooks in Zaps.

Option 3: Native Zoho CRM webhook (Zoho CRM only)

Zoho CRM can call Everflow on its own, with no middleware, because its webhook supports the GET method and lets you build the link with merge fields. This direct method is for Zoho CRM only. Zoho Desk and Zoho Books send their webhooks as a POST and cannot call the Everflow link directly, so use Option 1 or Option 2 for those. For the full walkthrough with screenshots, see Set up a Zoho CRM webhook, step by step, further down this article.

Zoho guide: Configuring webhooks in Zoho CRM.

Using Zoho Desk? Desk webhooks are available on the Professional plan and higher, and Desk sends its webhook as a POST that expects a reply within 5 seconds. Zoho Flow and Zapier take care of that reply for you, which is why Desk should always go through one of them instead of calling Everflow directly.

Other Zoho products can feed Everflow too. Zoho Forms submissions, which are great for lead generation, and Zoho Checkout payments can both start a Zap or a Zoho Flow, then send the conversion to Everflow the same way. Pick Zoho Flow or Zapier as the connector, just like the options above.

Set up Zoho Flow, step by step

Zoho Flow is the recommended path because it works with every Zoho product. Here is the full setup.

1. Create a new flow

In Zoho Flow, open My Flows and click Create Flow. Give it a clear name, such as Everflow conversion.

Zoho Flow My Flows page with the Create Flow button highlighted

2. Choose what triggers the flow

Choose the App option, then pick your Zoho event, such as a new lead in Zoho CRM or a paid invoice in Zoho Books. The Webhook option on this screen is for receiving data into a flow, which you do not need for this setup.

Zoho Flow trigger screen showing App, Schedule, and Webhook options with the App option highlighted

Then choose your Zoho app and the exact event, such as New lead or Updated deal in Zoho CRM.

Zoho Flow Choose Zoho CRM Trigger screen listing events such as New contact, New lead, and Updated deal

3. Add a Webhook action that calls Everflow

Add a Webhook action, which is Zoho's outgoing webhook. Search for Webhook in the actions panel, set the method to GET, and paste your Everflow postback link. Then map your Zoho fields into the link, especially the saved transaction ID.

4. Turn the flow on

Switch the flow on with the toggle in the top right, then fire a test event and confirm the conversion appears in your Everflow Advertiser Postback Report.

Zoho Flow builder with the flow toggled on and a confirmation that the flow has been switched on

Set up Zapier, step by step

Use Zapier if you already work in it, or when your Zoho product cannot call Everflow directly. This path uses the Catch Hook trigger.

1. Add a Catch Hook trigger

In Zapier, create a Zap and choose Webhooks by Zapier as the trigger. For the trigger event, pick Catch Hook, which waits for a request sent to a Zapier URL.

Zapier trigger setup with Webhooks by Zapier selected and the Catch Hook event chosen in the dropdown

2. Copy the webhook URL

Zapier generates a webhook URL. Copy it, then paste it into Zoho as the place to send data. In Zoho CRM you add it as a Workflow Rule webhook. In Zoho Desk or Zoho Books you point the app's webhook or workflow at it.

Zapier Catch Hook step showing the generated Your webhook URL field with a Copy button

3. Send a GET to Everflow

Add an action step with Webhooks by Zapier, set it to a GET request, and use your Everflow postback link as the URL. Map the Zoho fields into it, especially the saved transaction ID, then turn the Zap on.

Set up a Zoho CRM webhook, step by step

This is the direct path, and it is for Zoho CRM only. It needs no Flow or Zapier, because Zoho CRM can call your Everflow link on its own.

1. Create a workflow rule

In Zoho CRM, go to Settings, then Workflow Rules, and click Create Rule. Pick the module, such as Deals or Leads, and give the rule a name.

Zoho CRM Create New Rule dialog with the Module set to Deals and a rule name filled in

2. Choose when the rule runs

Set when the rule should fire, for example on edit when a deal stage changes to Closed Won, or when a specific field is modified. This decides which events send data to Everflow.

Zoho CRM workflow rule execution settings showing On a record action and Specific fields modified options

3. Add the Webhook action

Add a Webhook action to the rule. Set the API method to GET, and in the URL to Notify paste your Everflow postback link with merge fields where each value goes, for example https://www.yourtracking.com/?nid=123&transaction_id=${Deals.EF Transaction Id}&adv1=${Deals.Stage}. Zoho fills in each merge field from the record. Keep in mind the URL to Notify is limited to 300 characters, so if your link is long, use Zoho Flow or Zapier instead.

Build the postback link

An Everflow postback is a single web link. At a minimum it needs your Network ID and the transaction ID.

Everflow Postback URL
https://www.yourtracking.com/?nid=YOUR_NID&transaction_id={saved_transaction_id}

Add more details as your funnel needs them. A lead that carries the Zoho status, a sale amount, and the lead's email looks like this. It is shown on several lines to make it easy to read, but you send it as one link.

Everflow Postback URL With Details
https://www.yourtracking.com/?nid=123
  &transaction_id={saved_transaction_id}
  &event_id=3
  &amount=149.99
  &currency=USD
  &adv1={zoho_status}
  &order_id={zoho_record_id}
  &email={zoho_email}

Match your Zoho fields to Everflow

Everflow gives you ten spare fields, named adv1 through adv10, to carry any Zoho data you want to see in reports or use in rules. You add them to the postback link as shown above. Here is a common mapping.

Everflow fieldZoho sourceExample valuetransaction_idThe saved Everflow click code on the Zoho recorda1b2c3... (32 characters)adv1Lead status or invoice statuspaid, qualifiedadv2 to adv10Email, product type, quality score, and other detailsjumbo, 750amountDeal or invoice value149.99order_idThe Zoho record ID, used to avoid duplicatesORD-456789emailContact email, which also turns on email attributionuser@example.com

If you send personal data such as an email, you can hash it first. Add >SHA256 inside the field, for example {zoho_email>LC_SHA256} lowercases the value and then hashes it.

Only pay for real conversions

This is where the Zoho connection really pays off. With Postback Controls, Everflow reads a value you passed from Zoho and decides whether to accept the conversion. This means you only pay partners for leads that Zoho has already confirmed.

Here is a real example. A medical services advertiser only pays when a Zoho invoice is actually paid. They send the Zoho invoice status into adv1 and set one simple rule:

Accept the conversion if adv1 equals paid. The partner gets paid. Reject or hold anything else, such as pending, cancelled, or empty.

Set up the Postback Control

In Everflow, go to Advertisers, then Postback Controls, and click Add. On the General step, name the control, set Status to Active, and choose the Control Type Accept.

Everflow Add Postback Control General step with Name, Status Active, Effective Between Always On, and Control Type Accept

On the Rules step you can target specific offers, advertisers, or partners, then build the rule. Set the condition to All Must Apply and add a rule where the variable adv1 equals paid.

Everflow Add Postback Control Rules step showing Set Specific Target and the Build Your Rules area with a condition selector
Watch the capital letters This is the most common Zoho mistake. Zoho sends the status in lowercase, so it sends paid, not Paid. If your rule looks for Paid with a capital P, it will never match and no conversions will be accepted. Before you write a rule, open the Advertiser Postback Report, find the exact value Zoho sent, and copy it word for word.

One more thing to know. Postback Controls can only read data that is in the postback link. If a Zoho field is not mapped to an adv value, no rule can use it, so map it first.

Send data back to Zoho

You can also push data the other way, from Everflow into Zoho, so a Zoho record updates when a conversion is confirmed. Everflow has an outbound webhook feature for this. Go to Control Center, then Automations, then Webhooks, add a webhook, choose an event such as Conversion Registered, pick GET or POST, and set the URL to a Zoho Flow incoming webhook or a Zapier Catch Hook, which then updates Zoho. The webhook payload carries the details you need, including the transaction ID, the adv fields, the order ID, and the sale amount.

Everflow only sends a body with a POST. A GET webhook puts its values in the link and sends no body, so match the method to what your Zoho side expects. For partner-facing pings, a Partner Postback is the better tool. It fires only once, on the first conversion, and does not fire again if the amount changes later. Keep that in mind if your Zoho amounts get updated after the sale. If you call Zoho's own API instead of a webhook, use the correct Zoho region address, such as zoho.com, zoho.eu, zoho.in, or zoho.com.au. The wrong region fails quietly.

Test it before you trust it

Run one full test from click to conversion before you turn partners loose.

1 Create a test click Click your own offer link, then confirm the transaction ID shows up in Zoho.
2 Trigger the Zoho event Create the lead or mark the invoice as paid, so Zoho sends its postback.
3 Check the report Open the Advertiser Postback Report and confirm the message arrived with the values you expect. Use the Investigator Tool and paste the transaction ID to see exactly why a conversion was accepted, held, or rejected.

Troubleshooting

If something is not working, open the matching question below.

No conversions are being accepted

This is almost always a capital letter mismatch in a Postback Control, such as Paid versus paid. Open the Advertiser Postback Report, copy the exact value Zoho sent, and match it word for word in your rule.

Error 12: Invalid Transaction ID

The transaction ID was never saved, was typed wrong, or the click is more than 90 days old and has been removed. Check that you are saving the ID, and for long sales cycles fire an early event to lock it in.

Error 21: Invalid Verification Token

The verification token in your postback does not match the one set on the Advertiser under Advanced Options. Tokens are case sensitive and can be up to 50 characters.

The conversion is recorded but not credited to a partner

Everflow could not match the conversion to a click. Add the email field to turn on email attribution, or make sure the transaction ID makes the full round trip through Zoho.

My Zoho API calls fail

This usually means the login token expired, a required header is missing, or you used the wrong Zoho region address. Refresh the token and confirm your region, such as zoho.com or zoho.eu.

For developers

Most teams use Zoho Flow or Zapier and never open this section. It is here for developers who want to build their own listener for Zoho Desk.

Zoho Desk webhook API and security

Zoho Desk can create and manage webhooks through its API at desk.zoho.com/api/v1/webhooks. Each call needs an OAuth token and your orgId header. Desk sends each event as a POST with a JSON body, and your endpoint must reply with a 200 within 5 seconds or the event is counted as failed. A 410 response removes the subscription, and five failures in a row disable the webhook.

To confirm an event really came from Zoho, check the X-ZDesk-JWT header on the request. It is a signed token you verify against Zoho's public keys at desk.zoho.com/.well-known/jwks.json. To avoid loops when your own API calls trigger events, set an ignoreSourceId on the webhook and send the same value as a sourceId header on those calls.

Because Desk sends a POST with JSON, it cannot call the Everflow postback link directly. Use Zoho Flow or Zapier to turn the event into a GET, or have your own listener read the JSON and then call the Everflow link.

Explore Related Content Keep going on tracking and postbacks:

Understanding Tracking With Server To Server Postbacks — how server to server postbacks work.

Accessing & Editing S2S Postback URLs — where to find and edit your postback URL.

Postback Controls To Reject, Approve, Or Hold Conversions — gate payouts on a value like adv1.

Your Guide To Parameters & Macros — every macro you can pass, including the adv fields.

Passing Data Into Everflow With Zapier — the Zapier method in full.

What Are Automations? — set up Everflow's own outbound webhooks.

On the Zoho side: Configuring webhooks in Zoho CRM, Outgoing webhooks in Zoho Flow, Setting up webhooks in Zoho Desk, Webhooks in Zoho Books, and Send webhooks in Zaps.