Connect Zoho CRM to Fibbler

Fibbler reads your Zoho CRM Deals and Accounts to work out which deals your ads influenced. If you turn on CRM Data Sync or Ad Engagement Signals, it also writes its own fields onto your Accounts. Zoho CRM is available on every plan, including Growth.

Before you connect

  • LinkedIn Ads first. Until LinkedIn Ads is connected, Data Sources shows "Connect LinkedIn Ads first." where the "Connect CRM" button would be.
  • Permission in Fibbler. You need to be someone who can manage data sources in the Fibbler workspace. If you aren't, Fibbler stops the connection and asks you to get a workspace admin to connect Zoho.
  • The right Zoho user. Sign in to Zoho as a user who has access to Zoho CRM. Reading deals works for any such user. CRM Data Sync and Ad Engagement Signals also create custom fields on Accounts, and Zoho only lets a Zoho administrator, or a user whose profile has permission to customize modules, do that. If you plan to use either feature, connect as a Zoho administrator.
  • Any Zoho data centre. Your Zoho org lives in one data centre, and Fibbler works with all of them: US (zoho.com), EU (zoho.eu), UK (zoho.uk), India (zoho.in), Australia (zoho.com.au), Japan (zoho.jp), Canada (zohocloud.ca), Saudi Arabia (zoho.sa) and China (zoho.com.cn). You don't pick one. Zoho sends you to your own data centre when you sign in and tells Fibbler which one it is, and Fibbler only talks to that one from then on.

Connecting

  1. In Fibbler, go to Data Sources
  2. Click "Connect CRM" and pick Zoho CRM from the list
  3. Sign in to Zoho and approve the permissions Fibbler asks for
  4. You'll be redirected back to Fibbler's Data Sources page, where Zoho CRM now has its own card

Fibbler starts importing your deals and Accounts as soon as you're connected. The first import goes back as far as your LinkedIn data does. After that, Fibbler picks up new and changed deals every weekday.

Permissions Fibbler asks for

Zoho shows every permission on one screen when you connect, whether or not you use the feature it belongs to. Fibbler connects with OAuth and never asks for your Zoho password.

Read only

  • Deals ZohoCRM.modules.deals.READ: reads the deal name, stage, pipeline, type, amount, currency, exchange rate, closing date, created time and the Account the deal belongs to. Fibbler can read deals but never change them
  • Pipelines and layouts ZohoCRM.settings.pipeline.READ ZohoCRM.settings.layouts.READ: lists your deal pipelines and their stages, so you can pick them in Fibbler
  • Organization ZohoCRM.org.READ: tells us which Zoho org you connected and its home currency

Read and write

  • Accounts ZohoCRM.modules.accounts.ALL: reads each Account's name and Website, which is how ad engagement is matched to your companies. Writing is only used by CRM Data Sync and Ad Engagement Signals
  • Fields ZohoCRM.settings.fields.ALL: lists the fields on Accounts and Deals, and creates Fibbler's own custom fields on Accounts when you turn on CRM Data Sync or Ad Engagement Signals
  • Tags ZohoCRM.settings.tags.ALL: Ad Engagement Signals only. Each signal tags the Accounts it sends, so your team can filter on them
  • Views ZohoCRM.settings.custom_views.ALL: Ad Engagement Signals only. Each signal gets one saved view of the Accounts carrying its tag, so you can open its list from Fibbler
  • Notes ZohoCRM.modules.notes.CREATE: Ad Engagement Signals only. Adds a note to the Account saying why it was surfaced. This permission creates notes and nothing else, so Fibbler can't read or edit the notes your team writes
Fibbler only reads Deals and Accounts. It does not read your Contacts or Leads, and it never deletes a record in Zoho.
Data storage: Fibbler stores company-level and deal/opportunity data from your CRM to power attribution and analytics features. This includes company names, domains, deal amounts, and deal stages. All stored data is encrypted at rest. See our Security page for details.

How deals and companies are matched

A deal is tied to a company through the Account it belongs to, and that Account is matched to your LinkedIn data by the domain in its Websitefield. So an Account with an empty Website can't be matched, and neither can its deals. There is no fallback on the Account name.

Every amount is converted to your Zoho org's home currency before anything is added up. A deal already in that currency is used as it is. For a deal in another currency, Fibbler divides by the exchange rate Zoho stored on the deal, and only uses a market rate when the deal has none. A deal whose amount can't be converted is still imported, it just has no value in pipeline and revenue.

A deal's date in Fibbler is the day it was created in Zoho, as for every other CRM.

Choose pipelines and won and lost stages

Open the Zoho CRM card on the Data Sources page to see your deal settings.

  • Select your sales pipelines: Pick the Zoho pipelines Fibbler should count. You can pick more than one, or leave it empty to include deals from all pipelines. The picker only shows up when your org has more than one pipeline. If your Zoho edition has no pipelines, every deal is counted and the stages come from the Stage field on Deals
  • How do you define a won deal? / How do you define a lost deal?: Each pipeline you count gets its own block with these two pickers, listing that pipeline's stages. You can pick more than one stage for each
  • Click "Save Properties"

Keeping renewals out.Unlike HubSpot and Salesforce, the Zoho CRM card has no deal type setting. To keep renewals or upsells out of your numbers, keep them in their own Zoho pipeline and leave that pipeline unselected. If they share a pipeline with new business, contact us and we'll help you set it up.

You often don't need to touch the stages. When you connect, Fibbler fills in Won and Lost from Zoho's own forecast type on each stage: every stage Zoho marks as Closed Won is picked as won, and every stage marked Closed Lostis picked as lost. If Fibbler couldn't fill in a won stage that way, the Zoho CRM card opens by itself so you can pick them.

Fibbler imports deals from every pipeline, whatever you select. The selection only decides which deals count. So when you change a pipeline or a stage and save, nothing is imported again: Fibbler re-evaluates the deals it already has, which usually takes a few minutes.

What Fibbler writes to Zoho CRM

Nothing, until you turn a feature on. Two features write to your Accounts, and both are off by default. On an Account that already exists they only ever write Fibbler's own fields: the name, Website, owner and everything else your team maintains are never changed by us.

How many fields Fibbler uses

Every field Fibbler writes is a custom field on Accounts, and Zoho limits how many custom fields Accounts can have by edition. So it's worth knowing the count before you switch things on:

What you turn onFieldsField types
LinkedIn CRM Data Sync, per window (7, 30 or 90 days)76 Number, 1 Single Line
Google Ads visits, per window1Number
Meta Ads visits, per window1Number
A LinkedIn campaign group, per window54 Number, 1 Single Line
Ad Engagement Signals, once for the whole org64 Single Line, 1 Date, 1 Checkbox

With every window on for LinkedIn, Google Ads and Meta Ads, plus signals, that's 33 fields: 24 Number, 7 Single Line, 1 Date and 1 Checkbox. Each campaign group adds 5 more per window. The Zoho cards on the CRM Sync page and the campaign group form show how many fields each window adds.

What fits in your Zoho edition

These are Zoho's own limits for custom fields on Accounts. They count every custom field on Accounts, your own included, and a field moved to Unused Fields still counts until it's deleted.

Zoho editionIn totalNumberSingle Line and picklistDateCheckbox
Free00000
Standard1010101010
Professional15520601520
Enterprise300402005080
Ultimate500402005080
  • Free: Accounts can't have custom fields at all, so CRM Data Sync can't be switched on. Ad Engagement Signals still work without their six fields, see below.
  • Standard: 10 in total, whatever the type, is room for one small set. One LinkedIn window takes 7 and leaves 3, enough for three visit fields. Signals take 6. A LinkedIn window and signals together don't fit, and neither do two LinkedIn windows. Your own custom fields come out of the same 10.
  • Professional: there's plenty of room in total, but only 20 Number fields. All three LinkedIn windows use 18 of them. Add more than two Google Ads or Meta Ads visit windows, or a single campaign group window, and the Number fields run out.
  • Enterprise and Ultimate: everything fits. Every LinkedIn, Google Ads and Meta Ads window uses 24 of the 40 Number fields, and the 16 left are room for four campaign group windows, fewer if Accounts already has Number fields of your own.

When there isn't room

Fibbler reads your edition when you connect, and reads it again from time to time when it loads your pipelines. A Zoho trial counts as the edition you're trying. When you switch on a LinkedIn, Google Ads or Meta Ads window on the CRM Sync page, Fibbler counts the fields that window needs against what your edition has left before it creates anything. A field that already exists with the right label costs nothing. If the new ones don't fit, the switch stays off, nothing is created, and the message says which limit it is, for example: "Your Zoho CRM edition (Professional) allows 20 number fields on Accounts and 20 are in use. This sync needs 1 more. Remove unused fields in Zoho or upgrade your edition." If Fibbler can't tell which edition you're on, it skips this check and leaves the answer to Zoho.

Zoho can also refuse a field itself, for example during the weekly sync or for a campaign group. Then the Zoho CRM card on Data Sources shows "No room for more custom fields", and the workspace owner and admins get one email about it. Reconnecting doesn't help, so there's no Reconnect button. Remove fields you no longer use or upgrade your Zoho edition, and the next sync creates the field and carries on.

CRM Data Sync fields for LinkedIn (optional)

CRM Data Syncis optional. The Zoho CRM card on the CRM Sync page has a switch for the last 90, 30 and 7 days. When you switch one on, Fibbler creates seven custom fields on Accounts for that window straight away, so a permission problem or a full edition shows up while you're still on the page.

Fibbler uses one of two sets of labels. A new connection gets the set with your LinkedIn ad account id in it, which is the number Campaign Manager shows for the ad account. The older set without the id is used instead when your org already has at least six of its seven fields for that window. If your org has both, the set without the id wins. Fibbler finds its fields by label on every run, so please don't rename them in Zoho. A renamed field is one Fibbler can't find, and it would create a new one next to it.

Labels with your ad account id (a new connection)

Field LabelField type
fibbler_linkedin_ad_impressions_<ad account id>_7_daysNumber
fibbler_linkedin_ad_clicks_<ad account id>_7_daysNumber
fibbler_linkedin_ad_engagements_<ad account id>_7_daysNumber
fibbler_linkedin_organic_impressions_<ad account id>_7_daysNumber
fibbler_linkedin_organic_engagements_<ad account id>_7_daysNumber
fibbler_linkedin_engagement_level_<ad account id>_7_daysSingle Line
fibbler_linkedin_ad_video_views_<ad account id>_7_daysNumber
fibbler_linkedin_ad_impressions_<ad account id>_30_daysNumber
fibbler_linkedin_ad_clicks_<ad account id>_30_daysNumber
fibbler_linkedin_ad_engagements_<ad account id>_30_daysNumber
fibbler_linkedin_organic_impressions_<ad account id>_30_daysNumber
fibbler_linkedin_organic_engagements_<ad account id>_30_daysNumber
fibbler_linkedin_engagement_level_<ad account id>_30_daysSingle Line
fibbler_linkedin_ad_video_views_<ad account id>_30_daysNumber
fibbler_linkedin_ad_impressions_<ad account id>_90_daysNumber
fibbler_linkedin_ad_clicks_<ad account id>_90_daysNumber
fibbler_linkedin_ad_engagements_<ad account id>_90_daysNumber
fibbler_linkedin_organic_impressions_<ad account id>_90_daysNumber
fibbler_linkedin_organic_engagements_<ad account id>_90_daysNumber
fibbler_linkedin_engagement_level_<ad account id>_90_daysSingle Line
fibbler_linkedin_ad_video_views_<ad account id>_90_daysNumber

Labels without the id (the older set)

Field LabelField type
fibbler_linkedin_ad_impressions_7_daysNumber
fibbler_linkedin_ad_clicks_7_daysNumber
fibbler_linkedin_ad_engagements_7_daysNumber
fibbler_linkedin_organic_impressions_7_daysNumber
fibbler_linkedin_organic_engagements_7_daysNumber
fibbler_linkedin_engagement_level_7_daysSingle Line
fibbler_linkedin_ad_video_views_7_daysNumber
fibbler_linkedin_ad_impressions_30_daysNumber
fibbler_linkedin_ad_clicks_30_daysNumber
fibbler_linkedin_ad_engagements_30_daysNumber
fibbler_linkedin_organic_impressions_30_daysNumber
fibbler_linkedin_organic_engagements_30_daysNumber
fibbler_linkedin_engagement_level_30_daysSingle Line
fibbler_linkedin_ad_video_views_30_daysNumber
fibbler_linkedin_ad_impressions_90_daysNumber
fibbler_linkedin_ad_clicks_90_daysNumber
fibbler_linkedin_ad_engagements_90_daysNumber
fibbler_linkedin_organic_impressions_90_daysNumber
fibbler_linkedin_organic_engagements_90_daysNumber
fibbler_linkedin_engagement_level_90_daysSingle Line
fibbler_linkedin_ad_video_views_90_daysNumber

Number fields hold whole numbers. The engagement level field holds one of VERY_HIGH, HIGH, MEDIUM, LOW or VERY_LOW.

The sync runs every Sunday and only updates Accounts that already exist. It matches an Account by the domain in its Website field, and when several Accounts share a domain, all of them are written. An Account that was active in an earlier week but not in the current window has its fields emptied rather than set to 0. CRM Data Sync never creates an Account.

Campaign group fields

If you sync a named group of campaigns instead of the whole ad account, each group gets five fields per window. The label is LI, the metric, the window, your group name and a short code in brackets, which is the end of the group's own id and keeps two groups with similar names apart. For a group called Brand on the 30-day window:

Field Label (example)Field type
LI Impressions 30d - Brand (abc123)Number
LI Clicks 30d - Brand (abc123)Number
LI Engagements 30d - Brand (abc123)Number
LI Engagement Level 30d - Brand (abc123)Single Line
LI Video Views 30d - Brand (abc123)Number

The 7 and 90-day windows say 7d or 90d. A long group name is shortened and ends in ... so the whole label stays within 50 characters. The code is six characters, or twelve if another group already has the six-character label. If you rename a group, it keeps the labels it started with, so its fields don't move.

Google Ads and Meta Ads visit fields (optional)

With the Google Ads or Meta Ads add-on, CRM Data Sync can also write the website visits that came from those channels onto the same Accounts. Each channel is set up separately, and each creates one field per window:

Field LabelField type
fibbler_google_ads_visits_7_daysNumber
fibbler_google_ads_visits_30_daysNumber
fibbler_google_ads_visits_90_daysNumber
fibbler_meta_ads_visits_7_daysNumber
fibbler_meta_ads_visits_30_daysNumber
fibbler_meta_ads_visits_90_daysNumber

In Zoho the label is the name you see, so these are what show up on the Account. They run weekly on Sundays and only update Accounts that already exist. The details are in the Google Ads CRM Sync and Meta Ads CRM Sync docs.

Ad Engagement Signals in Zoho CRM (optional)

Ad Engagement Signals sends the companies engaging with your ads to the place your team already works. With Zoho CRM as a destination, a signal does four things in your org.

It creates six fields on Accounts, the first time a signal writes to Zoho. There is one set however many signals you run, and it never grows:

Field LabelField typeWhat it holds
Fibbler Signal TypeSingle LineWhy the Account was surfaced, New or Rising fast
Fibbler Signal DateDateWhen Fibbler last surfaced it
Fibbler Signal NameSingle LineWhich signal surfaced it
Fibbler Signal ChannelsSingle LineWhich ad channels it engaged with
Fibbler Signal WhySingle LineThe evidence, in one line
Created by FibblerCheckboxTicked only on an Account a signal created

The text fields hold up to 255 characters, and a longer value is cut to fit.

If your edition has no room for the six fields, Free included, the signal still runs. It finds or creates the Account, tags it and leaves the note, and only the six fields are left off. The Zoho CRM card on Data Sources then shows "No room for more custom fields" and the workspace owner and admins get one email about it. Once there's room, the next run creates the fields.

It tags the Accounts it sends. Zoho has no lists we can fill, so each signal gets its own tag, and your team filters Accounts on it. The tag is Fibbler: followed by the signal's name and a short code, like Fibbler: Enterprise #k3x9. The whole tag is kept to 25 characters, so a long signal name is cut short, and the code at the end is what keeps two signals with similar names on separate tags. An Account keeps the tag for 30 days after it was last sent and then the tag comes off. The record, its fields and its notes stay. If you rename a signal, it keeps the tag it started with. The first run also makes a saved view of Accounts named after the tag, like Fibbler Enterprise k3x9, that shows every Account carrying it. Open in Zoho CRMon the signal in Fibbler opens that view. Zoho doesn't let apps delete views, so if you delete the signal, delete its view in Zoho as well. If you connected Zoho before the view was added, reconnect it once to get the view.

It leaves a note on the Account, titled Fibbler: followed by the signal's name, with the one-line reason a rep reads.

It creates an Account that is missing, if you chose that when you set up the signal. Fibbler looks for the company first, by the domain in your Accounts' Website field, with or without www and http. Only when nothing matches does it create one, filled in with the company name, Website, number of employees and billing country, and with Created by Fibbler ticked so you can find them all again, when the org has that field. Creating needs a website: a company Fibbler has no domain for is never created in Zoho, because nothing would find that Account again on the next run.

If Zoho refuses a create because the company already exists under a unique field, usually the Account name, Fibbler writes the signal fields onto that existing Account instead of making a second one.
Mandatory fields stop creates. If your org has made a field on Accounts mandatory and Fibbler has no value for it, Zoho refuses every new Account. Fibbler then stops creating for the rest of that run and says which field it was. Accounts that already exist are still updated. Make the field optional, or switch the signal to update existing Accounts only.

Create the fields yourself

Fibbler normally creates its own fields, which takes a Zoho user who may customize modules. If you'd rather connect Fibbler as a user who can't, a Zoho administrator can create the fields first, and Fibbler finds them by label on the next run. Fibbler only ever creates a field that is missing, so once they exist, nothing else needs that permission. That also goes for every new window, channel or signal you add later.

  1. In Zoho CRM, go to Setup > Customization > Modules and Fields
  2. Open Accounts, then the Standard layout
  3. Drag the field type onto the layout: Number for the counts, Single Line for the engagement level and the signal text fields, Date for Fibbler Signal Date and Checkbox for Created by Fibbler
  4. Set the Field Label to exactly the label in the tables above, and save the layout

The label has to match character for character: the same underscores, the same lower case and capitals, and no extra spaces. A label that is one character off is a different field to Fibbler, and it creates its own next to yours. For LinkedIn, create all seven fields for a window, with your ad account id where the table says <ad account id>. Campaign group labels end in a code from the group's id, so leave those to Fibbler.

We never delete anything in Zoho.Fibbler creates a field once and then only writes values into it. It never deletes a field or a record, and on an Account that already exists it only writes Fibbler's own fields.

Remove fields you no longer use

Because Fibbler never deletes a field, the fields of a window or a group you've turned off stay in your org, and Zoho keeps counting them toward your edition's limit. Taking a field off the layout isn't enough, because a field in Unused Fields still counts. To free the room, delete it:

  1. In Zoho CRM, go to Setup > Customization > Modules and Fields, and open the Standard layout of Accounts
  2. Remove the field from the layout. It moves to Unused Fields
  3. Delete it from Unused Fields

Deleting a field in Zoho deletes the values in it as well. These are safe to remove:

  • The LinkedIn fields of a window you've switched off on the CRM Sync page
  • The Google Ads or Meta Ads visit fields of a window or a channel you no longer sync
  • The fields of a campaign group you've turned off or removed
  • The fields with an old ad account id, after you've switched Fibbler to a different LinkedIn ad account
  • The LinkedIn set Fibbler isn't using, when your org has both. If at least six of the seven fields without the id exist for a window, that is the set Fibbler writes, and the set with the id is unused
  • The six signal fields, once no signal sends to Zoho CRM anymore

If you delete a field Fibbler still uses, nothing breaks, but it creates the field again on its next run, empty, and it takes up the same room as before. One case works differently: if you delete the set without the id while Fibbler is writing it, the next run switches to the set with your ad account id and creates that.

Disconnecting

Go to Data Sources, open the Zoho CRM card and click Disconnect. Fibbler revokes its access at Zoho, so the grant disappears from your Zoho account as well, and stops syncing. The fields Fibbler created stay on your Accounts with their last values until you delete them.

Reconnecting replaces the old grant, and Fibbler revokes the one it replaced. If you reconnect to a different Zoho org, the deals and Accounts imported from the old org are removed and your pipeline and stage settings start over, because the old org's stages mean nothing in the new one.

Troubleshooting

"This connection needs to be renewed"

Zoho stopped accepting Fibbler's access, for example because someone removed it on the Zoho side. Fibbler stops updating your Accounts and the Zoho CRM card shows this message with a Reconnect button. The workspace owner and admins each get one email about it. Reconnect and the next run carries on. Your settings stay as they were.

The deal settings on the card can show "Your Zoho token could not be refreshed. Please reconnect your account." for the same reason. The fix is the same.

"The connected user needs more permissions"

Fibbler is connected as a Zoho user who isn't allowed to create custom fields, so the weekly sync can't write LinkedIn data onto your Accounts. When you switch on a CRM Sync window or set up a signal, the same problem shows as "Your Zoho CRM user is not allowed to create fields on Accounts." Ask a Zoho administrator to give that user's profile permission to customize modules, or reconnect Zoho signed in as an administrator.

"No room for more custom fields"

Your Zoho edition has no room left for custom fields on Accounts, so Fibbler can't add a field it needs. A sync whose fields all exist already carries on as before. Delete custom fields you no longer use, as described in Remove fields you no longer use, or upgrade your Zoho edition. How many fields Fibbler uses shows what fits in each edition.

Errors when you connect

  • "You do not have permission to connect data sources in this workspace": your role in the Fibbler workspace can't connect a CRM. A workspace admin needs to do it.
  • "Could not read your Zoho CRM organization": the Zoho user you signed in with has no access to Zoho CRM. Connect with a user who does.
  • "Your Zoho data centre is not supported yet": Zoho sent you back from a data centre Fibbler doesn't know. Contact support@fibbler.co and tell us where your Zoho org is hosted.
  • "Zoho connection was cancelled": the permission screen was closed or declined. Start again from Data Sources.

A deal is missing

Check that the deal has an Account, that the Account has a Website, and that the deal's pipeline is one you count. A deal with no Account, or on an Account without a Website, can't be matched to anyone who saw your ads. More checks are in Deals Not Appearing.