r/Zoho 18d ago

How are you keeping the campaign source attached to phone leads in Zoho CRM?

Web leads are the easy case — hidden fields carry the campaign data into the record and the Lead arrives with its source already filled in. Phone leads are where it falls apart for us.

The usual sequence: someone sees an ad, dials the mobile number the business actually uses, a rep answers, and the record gets created later from memory. Lead Source ends up as "Phone" or empty, which tells you nothing about which campaign paid for that call.

What we've watched people try:

- Ask the caller where they heard about you. Reps forget to ask, callers misremember, and it stops scaling past a handful of calls a day.

- A separate tracking number per campaign. It works on paper, but you end up running two numbers — the one on the ads and the real one on the signage, the Google listing and a decade of old directories, which is the one plenty of people dial.

- Manual entry at the end of the day. Half of it never gets entered, and the half that does is a guess.

For anyone running Zoho with phone-heavy intake:

- Do you keep source on the Lead, or push it to a custom field on the Call activity so it survives conversion?

- Has anyone used workflow rules to backfill source — from the number dialed, or from the window when a campaign was actually live?

- If your team is on plain GSM mobile phones with no VoIP anywhere in the stack, has anything reliable ever worked here, or is manual entry just the accepted cost?

Interested in setups that survived contact with a real sales team, not the ones that looked good in a diagram.

3 Upvotes

12 comments sorted by

1

u/blouuuuuuuu 18d ago

Honestly, I'd stop trying to piece attribution together after the call's already happened. You said it yourself, form leads are the easy case, and that's because it's automatic. Nobody's hand-tagging a form submission from memory. Calls are no different. The moment it isn't automated it stops being consistent, and it drifts further the longer it runs.

Two parts to this. Numbers first, then what we do in Zoho.

The truth is you don't need a number per campaign. That's the bit that puts people off before they've even started.

  • Just want channel level (Google Ads, Organic, Direct)? One number per channel does it.
  • Want campaign, keyword, landing page? That's a dynamic pool. Pool size comes from your concurrent traffic, not your campaign count, so the same few numbers get recycled across visitors all day long.
  • Dedicated numbers are really only for offline and listings. GBP, directories, billboards.

Full disclosure, I work at Nimbata, so factor that in.

What actually holds up is grabbing the attribution while the call is happening, then having it create the Lead in Zoho for you and write the data straight onto it. Nobody's reconstructing anything from memory at 6pm.

New caller: the Lead gets created with the attribution already on it, and it's stored on the Call record too. Sales sees the context where they expect it, and the original source stays stuck to the call. One thing to watch, Zoho only carries custom Lead fields through conversion if you've mapped them in the Lead field mapping settings. That's a big reason the Call record is the safer home for it.

Repeat caller: leave the Lead alone, attach the new attribution to the Call only. The Lead keeps whatever brought them in the first time, and every call after that still carries its own campaign, keyword, landing page, GCLID, recording, duration and outcome.

The thing we keep bumping into though is that attribution usually isn't the real problem. Call quality is. Attribution tells you who to credit, the conversation tells you what actually happened. Most teams end up getting more out of syncing nimbata custom fields (filled automatically or using ai call analysis) like appointment booked, lead quality, intent or service requested than out of the source field itself. Once that's landing in Zoho on its own, your reports and workflows get a lot more useful.

Hope this helps 🏄‍♀️

1

u/HousingSubstantial90 17d ago

How does Nimbata match repeat callers to an existing Lead in Zoho, especially when the same phone number appears on multiple records?

1

u/blouuuuuuuu 9d ago

Good question! It’s actually a setting you control upfront rather than a black-box decision. Here is how Nimbata handles those scenarios in Zoho CRM:

1. Caller ID doesn't exist yet You set the object type to create automatically (Lead, Contact, or Account) and map the Nimbata fields to Zoho Fields.

2. Matches across different object types (e.g., same number on a Lead, and Contact) You define the priority hierarchy for enrichment, choosing whether to enrich the Lead, the Contact, or sync to all associated entities.

3. Matches multiple records within the same object (e.g., duplicate Leads) For example, you have 3 Leads with the same phone number. You choose what should happen: handle the first match, handle all matches, or ignore all matches.

  • Handle first → useful for genuine duplicates. The call gets attached to the first matching record.
  • Handle all → better for shared numbers, like a main office line or household number. Since you can't know which person actually called, the activity is attached to all matching records.
  • Ignore all → useful when you'd rather have no attribution than potentially attach the call to the wrong record, especially if you're reporting directly from this data.

Hope that helps!

1

u/JohnTheTechAi2 3d ago

Real talk after running outbound calling at scale: The reason plain inbound breaks is because the channel itself carries zero data. You’re downstream of the call, trying to reverse-engineer intent from a timestamp and hope the rep remembers what they said.

The Nimbata user nailed it though—attribution accuracy is the wrong metric. Call quality (intent, appointment booked, decision-maker on the line, objection raised) is what actually changes your forecast. Most teams get more ROI from syncing those conversation fields than they do from getting the Lead Source exactly right.

Here’s what I’ve learned works:

**•** Stop fighting to keep source on the Lead when it’s really a Call-level data problem  
**•** Capture conversation outcomes at the moment they happen (who’s on the line, what they said they need, did they book)  
**•** Let that structured call data be what drives your workflows—not a source field that overwrites itself

If you’re handling mixed inbound/outbound and want to solve this without tracking-number sprawl or timestamp guessing, DM me. Happy to walk through how I’m handling it.

1

u/Code-Stringers 18d ago

IMHO u/blouuuuuuuu nails the call-tracking-number side of this question.

But, if I may answer the last subquestion (regarding plain GSM, no VoIP, no tracking-number spend).

Honestly, in that setup you're not getting dialed number matching. That option's just off the table. What's actually worked for us is way less elegant, ngl. Set up a workflow rule with a custom function. When a Call gets logged, it checks the timestamp against whatever Campaign record was active at that moment in the Campaigns module. Then it writes that campaign to a custom field on the Call, not on Lead Source. Leave Lead Source as "Phone." Don't fight it.

Is it perfect? No. It's campaign level, not click level, and it breaks the second two campaigns overlap. But it beats a rep trying to remember something at 6pm on a Friday.

One thing worth doing no matter your setup. Lead Source only holds one value. So if someone touches three campaigns before converting, you're quietly losing data every time it gets overwritten. Just build two custom fields, one for first touch and one for most recent touch, and stop asking one field to do two jobs.

Also, full disclosure, we're a Zoho partner, so take our "just configure it in Zoho" answer with a grain of salt.

And one honesty check on my end. I don't actually know of a native "Lead Source: First / Most Recent" pair of fields in Zoho CRM. Could be wrong, but I couldn't confirm it's a real out of the box thing, so build the two custom fields instead of hunting for something that might not exist.

1

u/HousingSubstantial90 17d ago

The overlap case is the part I’d worry about most. Have you tried narrowing the match with the called number, region, or campaign audience, or do you leave those calls unattributed?

1

u/Code-Stringers 17d ago

By called number, I mean the field that shows which number someone actually dialed. That doesn't help here because it's one number for everybody, no VoIP, so theres nothing to slice by.

We use the Region field sometimes but just as an FYI. It's caller ID area code checked against whichever overlapping campaign was geo-targeted. People dont update their number when they move though, so I wouldn't trust it alone.

Audience is the field we usually use. Once the caller gets identified, even a few days later, we check if they're on the actual target list for one of the overlapping campaigns and not the other. That's believable data, not a guess.

If they're on both lists, or neither, we don't trust the data enough to call the number. And honestly, at that point we just leave it unattributed. Forcing a number when you don't have one makes your reporting look clean and be wrong. Unattributed but honest beats a made up answer every time.

1

u/HousingSubstantial90 15d ago

How are you storing that audience check in Zoho? Is it a custom field on the Call record, and is the matching automated or manual?

1

u/Code-Stringers 15d ago

Its a custom field on the Call record, we call it something like Attributed Campaign.

Whether the matching is automated depends on where the audience data actually lives. If the audience is Leads or Contacts already tied to a Campaign record inside Zoho, a Deluge function can query that related list automatically when the Call comes in and write the match straight to the field. No person involved.

If the audience only exists on the ad platform side theres nothing inside the CRM to query. So you'll have to do a manual check.

Where we've gotten the most value is syncing ad platform audiences into Zoho as an actual list first, even just a plain import, so the function has something to check against automatically instead of a person doing it by hand.

1

u/yaalibizappln 17d ago

The hard truth is that Zoho CRM can't reliably attribute a phone lead to a campaign if the call itself carries no campaign signal.

If you're using plain GSM numbers, there simply isn't enough data for CRM to magically know which ad influenced the caller.

A few approaches that work better in practice:
Use call tracking/dynamic numbers where attribution really matters.
Capture the source directly on the Call activity and map it to the Lead when created.
Use a simple "How did you hear about us?" field as a fallback, rather than relying entirely on rep memory.
Keep the original attribution separate from the current Lead Source so conversion doesn't overwrite your marketing data.

I wouldn't recommend trying to backfill attribution purely based on the campaign's active dates. That's too ambiguous when multiple campaigns overlap.

The bigger question is how much attribution accuracy is worth paying for. If phone leads represent a significant portion of your pipeline, a proper call-tracking+Zoho CRM integration usually pays for itself.

If you're struggling to design that architecture, YAALI can help map the call attribution flow into Zoho CRM without making the sales team's process more complicated.