Zoho CRM and WordPress: How to Track Lead Source Through to Your CRM

Zoho CRM is one of the most popular CRM platforms for small and mid-sized businesses. It is affordable, flexible, and integrates with almost everything. But like every CRM on the market, it has a quiet attribution problem.

When a lead fills out your WordPress form, Zoho captures their name, email, and phone number. What it does not capture is how they found you. The UTM parameters in their URL, the Google Ads click ID, the campaign they came from, the keyword they searched, the landing page they hit first — all of that disappears. Zoho gets a lead. You get no idea which marketing channel sent it.

This guide walks through how to fix that. By the end, every lead that enters Zoho CRM from your WordPress site will carry full attribution data, and every deal you close will be traceable back to the ad, campaign, or channel that started it.

Why Zoho Does Not Track UTMs by Default

Zoho CRM has a native web forms feature and integrates directly with Zoho Forms. Both can send submission data into Leads or Contacts in your CRM. But neither product reads the URL parameters that tell you where the visitor came from.

When someone clicks a Google Ad and lands on your site, their URL might look like this:

yourdomain.com/service-page/?utm_source=google&utm_medium=cpc&utm_campaign=service-name&gclid=AbC123xyz

Zoho’s form does not read that URL. It only captures what is in the form fields. So unless you explicitly pass those parameters through hidden fields — and set up the infrastructure to capture them in the first place — none of that data reaches your CRM.

The fix is a two-layer approach: capture attribution data from the URL and store it in a first-party cookie, then pass that data through hidden form fields into Zoho CRM as custom fields on the Lead or Contact record.

Step 1: Capture UTMs and Click IDs to a First-Party Cookie

The first layer is a small JavaScript snippet that runs on every page of your WordPress site. When a visitor lands with UTM parameters or a Google click ID (gclid) or Meta click ID (fbclid) in the URL, the script saves those values to a first-party cookie. If the visitor navigates to other pages before submitting the form, the cookie persists and the attribution data is still there at form submission time.

The fields you want to capture are:

  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content
  • Landing page URL (first page the visitor hit)
  • gclid (Google Ads click ID)
  • fbclid (Meta Ads click ID)

Set the cookie expiration to 30 days. This ensures attribution is preserved even when a visitor comes back a few weeks after their first click to finally submit the form.

See the full implementation guide at UTM parameter tracking on WordPress for the exact script and installation steps via Google Tag Manager or WPCode.

Step 2: Create Custom Fields in Zoho CRM

Before you can store attribution data in Zoho CRM, you need somewhere to put it. Create the following custom fields on both the Leads module and the Contacts module:

  • Lead Source UTM (single-line text) — maps to utm_source
  • Lead Medium UTM (single-line text) — maps to utm_medium
  • Lead Campaign UTM (single-line text) — maps to utm_campaign
  • Lead Term UTM (single-line text) — maps to utm_term
  • Lead Content UTM (single-line text) — maps to utm_content
  • Landing Page (URL field) — the first page they visited
  • GCLID (single-line text) — Google Ads click ID
  • FBCLID (single-line text) — Meta Ads click ID

In Zoho CRM: go to Setup > Customization > Modules and Fields. Select the Leads module, click Fields, and add each field above. Repeat for Contacts.

You will also want to add the same fields to the Deals module. This is where deal-level attribution reporting happens — and it is how you eventually trace a closed deal back to the keyword or campaign that drove it. More on that below.

Step 3: Connect Your WordPress Form to Zoho CRM

There are three main ways to send form submissions from WordPress into Zoho CRM. The right path depends on which form plugin you are using and how much customization you need.

Option A: Zoho Forms with Hidden Fields

If you are using Zoho Forms embedded on your WordPress site, you can add hidden fields to the form and populate them with JavaScript from the cookie you set in Step 1. Zoho Forms supports hidden fields natively. Map each hidden field to the corresponding custom Zoho CRM field when setting up your form-to-CRM connection in Zoho Forms.

This is the simplest path if you are already in the Zoho ecosystem, but it limits your WordPress form design flexibility.

Option B: WordPress Form Plugin with Native Zoho Integration

Several popular WordPress form plugins have native Zoho CRM integrations:

  • Gravity Forms — Zoho CRM Add-On (official add-on, maps fields directly to CRM modules)
  • WPForms — Zoho CRM integration via the Zapier add-on or direct REST webhook
  • Fluent Forms — Zoho CRM integration (direct, included in the Pro version)

The flow is: add hidden fields to your WordPress form, populate them with JavaScript from the attribution cookie, and then map those hidden fields to the custom fields you created in Zoho CRM. When a form is submitted, the plugin sends the lead data including UTM values directly into Zoho.

This is the recommended path for most WordPress sites. You keep full control of form design and UX while getting clean Zoho CRM integration.

Option C: Webhook to Zoho CRM API

For maximum control, you can configure your WordPress form to POST directly to the Zoho CRM API via webhook. This bypasses any third-party plugin integration and lets you build exactly the payload Zoho expects.

Zoho CRM’s REST API accepts Lead creation at POST /crm/v2/Leads. You pass a JSON body with all standard and custom field values. This approach works well if you have a developer available or are using a form plugin like Gravity Forms that supports custom webhooks with full control over the request body.

See the broader integration guide at CRM integration for WordPress for the direct webhook architecture and field-mapping approach that applies across CRM platforms.

Step 4: Copy Attribution Fields from Lead to Deal with Zoho Workflow

Getting attribution data into the Lead record is only half the job. When a Lead converts to a Contact and a Deal is created, those attribution fields do not automatically carry over in Zoho CRM. You need a Workflow to copy them.

In Zoho CRM, go to Setup > Automation > Workflow Rules. Create a new rule for the Deals module. Set the trigger to “A record is created.” Add a field update action for each attribution field — source from the associated Contact record’s custom fields and write them to the corresponding Deal fields.

After this workflow is active, every new Deal will automatically inherit the attribution data from the Contact that created it. Your sales pipeline now carries full source, medium, campaign, keyword, and click-ID data on every open and closed opportunity.

Step 5: Report on Deals by Attribution in Zoho Analytics

Once attribution fields are on your Deal records, Zoho CRM’s built-in reporting becomes genuinely useful for marketing decisions.

Create a custom report on the Deals module and group by Lead Source UTM or Lead Campaign UTM. You can then compare close rate, deal value, and revenue by channel. This is the closed-loop view that most marketing attribution setups never achieve — not just “which channel drove leads” but “which channel drove revenue.”

Zoho Analytics (their dedicated BI product) connects directly to Zoho CRM and lets you build more sophisticated dashboards, but the Deals module reports in core Zoho CRM are sufficient for most use cases.

Step 6: Upload GCLIDs to Google Ads as Offline Conversions

If you are running Google Ads, the GCLID on each Deal record is valuable beyond just reporting. You can upload closed Deals back to Google Ads as offline conversions, telling the bidding algorithm exactly which clicks produced revenue rather than just form submissions.

There are two paths to do this from Zoho:

  • Manual CSV upload: Export won Deals with their GCLID and deal close date from Zoho CRM. Upload the CSV in Google Ads under Tools > Conversions > Upload. This works and takes about 10 minutes per week.
  • Automated via Zoho Flow: Use Zoho Flow (their native automation platform, similar to Zapier but within the Zoho ecosystem) to trigger on “Deal Stage Changed to Closed Won” and POST the GCLID and conversion value to the Google Ads offline conversions API. This runs automatically with no weekly manual step.

The same logic applies to Meta Ads via the fbclid field — Meta accepts offline conversions through its Conversions API. A Zoho Flow trigger on Closed Won can POST the fbclid and conversion data directly to Meta.

For a detailed walkthrough of the Google Ads side, see Google Ads conversion tracking on WordPress.

Testing the Full Stack

Before you trust the data, run an end-to-end test:

  • Visit your WordPress site with UTM parameters in the URL (e.g., ?utm_source=test&utm_medium=cpc&utm_campaign=test-campaign&gclid=test123)
  • Submit a test form with a recognizable email address
  • Open the Lead record in Zoho CRM and confirm all 8 attribution fields populated correctly
  • Convert the Lead to a Contact and Deal
  • Confirm the Workflow fired and the Deal record now has the same attribution values
  • Run a Deals report grouped by Lead Source UTM and confirm your test Deal appears

If any field is missing, work backward: check the cookie (browser dev tools > Application > Cookies), then the hidden field (inspect the form element), then the Zoho field mapping, then the Workflow trigger.

The Attribution Gap Most Zoho Users Never Close

Most businesses using Zoho CRM and WordPress have a usable lead pipeline but no idea which marketing channel drives their best customers. They know their Google Ads spend and their form fill rate. They do not know their close rate by channel, their revenue per click by campaign, or which keywords actually pay off.

The setup above closes that gap. It is not a complicated integration — it is a UTM capture script, eight custom fields, a form field mapping, and one Workflow. Once it is running, every lead that comes in carries attribution data, and every deal you close is traceable back to the click that started it.

If you use a different CRM, the same approach applies — see the guides for HubSpot, Pipedrive, Salesforce, and ActiveCampaign.