Elementor Forms → Zoho CRM Integration Guide

I see this setup in about 30% of WordPress sites I audit, and it’s broken more often than not. The main issue? People try to use Elementor’s built-in webhook action without properly mapping fields, so leads either don’t sync or they sync with incomplete data. Most teams don’t realize when it stops working until they notice their lead volume drop weeks later.

What You’ll Have Working By The End

Prerequisites

Step 1: Choose Your Integration Method

You have three real options here. I’ll rank them by reliability:

Option A: Zapier Integration (Recommended) Most reliable for non-technical teams. Costs $20/month but worth it for the error handling and field mapping flexibility.

Option B: Direct Webhook to Zoho API More technical but no monthly cost. Requires PHP knowledge to handle authentication and error responses.

Option C: Zoho Forms Native Integration Technically possible by embedding Zoho forms instead of Elementor forms, but you lose Elementor’s styling control.

For this guide, I’m covering Options A and B since they’re the most practical.

Create the Zap

  1. In Zapier, create new Zap: Elementor Pro → Zoho CRM
  2. For Elementor Pro trigger, select “New Form Submission”
  3. Connect your WordPress site (you’ll need to install Zapier’s WordPress plugin)
  4. Select your specific Elementor form from the dropdown

Configure Zoho CRM Action

  1. Choose “Create Lead” as the action (not “Create Contact” - leads are for new prospects)
  2. Connect your Zoho CRM account
  3. Map fields carefully:
Elementor Field → Zoho CRM Field
First Name → First Name
Last Name → Last Name  
Email → Email
Phone → Phone
Company → Company
Message → Description
Form Name → Lead Source (custom field recommended)
Page URL → Website (or custom "Source Page" field)

Handle Missing Fields

If your Elementor form has fields that don’t exist in Zoho CRM:

I recommend creating a “Lead Source Detail” text field in Zoho to capture the specific form name and page URL.

Step 3: Direct Webhook Integration (Technical Method)

Set Up Zoho CRM API Access

  1. Go to Zoho Developer Console
  2. Create server-based application
  3. Note your Client ID and Client Secret
  4. Generate refresh token with scope: ZohoCRM.modules.leads.CREATE,ZohoCRM.modules.leads.UPDATE

Configure Elementor Form Webhook

In your Elementor form → Actions After Submit → Add Action → Webhook:

Webhook URL: https://yoursite.com/wp-content/themes/yourtheme/zoho-webhook.php

Create Webhook Handler (PHP)

Create zoho-webhook.php in your theme directory:

<?php
// Zoho CRM webhook handler for Elementor Forms
if ($_POST) {
    $client_id = 'YOUR_CLIENT_ID';
    $client_secret = 'YOUR_CLIENT_SECRET';
    $refresh_token = 'YOUR_REFRESH_TOKEN';
    
    // Get access token
    $auth_url = "https://accounts.zoho.com/oauth/v2/token";
    $auth_data = array(
        'refresh_token' => $refresh_token,
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'grant_type' => 'refresh_token'
    );
    
    $auth_response = wp_remote_post($auth_url, array('body' => $auth_data));
    $auth_body = json_decode(wp_remote_retrieve_body($auth_response), true);
    $access_token = $auth_body['access_token'];
    
    // Prepare lead data
    $lead_data = array(
        'data' => array(
            array(
                'First_Name' => sanitize_text_field($_POST['form_fields']['first_name']),
                'Last_Name' => sanitize_text_field($_POST['form_fields']['last_name']),
                'Email' => sanitize_email($_POST['form_fields']['email']),
                'Phone' => sanitize_text_field($_POST['form_fields']['phone']),
                'Company' => sanitize_text_field($_POST['form_fields']['company']),
                'Description' => sanitize_textarea_field($_POST['form_fields']['message']),
                'Lead_Source' => 'Website Form',
                'Lead_Status' => 'New'
            )
        )
    );
    
    // Send to Zoho CRM
    $api_url = "https://www.zohoapis.com/crm/v2/Leads";
    $headers = array(
        'Authorization' => 'Zoho-oauthtoken ' . $access_token,
        'Content-Type' => 'application/json'
    );
    
    $response = wp_remote_post($api_url, array(
        'headers' => $headers,
        'body' => json_encode($lead_data)
    ));
    
    // Log errors for debugging
    if (is_wp_error($response)) {
        error_log('Zoho CRM API Error: ' . $response->get_error_message());
    }
    
    http_response_code(200);
}
?>

Security Considerations

Step 4: Set Up Lead Assignment Rules in Zoho

Don’t let all leads go to one person. Set up automatic assignment:

  1. Go to Zoho CRM → Setup → Automation → Assignment Rules
  2. Create rule for Leads module
  3. Set criteria based on Lead Source or other fields
  4. Assign to specific users or round-robin

I recommend creating separate assignment rules for different forms so your sales team knows the lead context.

Step 5: Testing & Verification

Test the Form Submission

  1. Submit a test form with fake data (use your own email)
  2. Check Zapier history (if using Zapier) - should show successful trigger and action
  3. Check Zoho CRM → Leads for the new record
  4. Verify all fields mapped correctly

Cross-Check Data Accuracy

Submit forms with different field combinations:

The lead should appear in Zoho within 2-3 minutes max. If using webhooks, it should be instant.

Monitor Integration Health

Set up monitoring:

Troubleshooting Common Issues

Problem: Forms submit but no leads appear in Zoho CRM Solution: Check if leads are going to Contacts instead. Zapier sometimes defaults to Contacts module. Change action to “Create Lead” specifically.

Problem: Leads created but missing field data Solution: Field names in Elementor don’t match Zoho API names. Check Zoho CRM → Setup → Developer Space → APIs → CRM API to get exact field names. Use First_Name not firstname.

Problem: Duplicate leads for same email address Solution: Enable duplicate detection in Zoho CRM → Setup → Data Administration → Duplicate Check Settings. Set Email as unique identifier for Leads module.

Problem: Zapier shows “Invalid Field” error Solution: You’re trying to map to a field that doesn’t exist in your Zoho CRM. Either create the custom field in Zoho first, or map to a different existing field.

Problem: Webhook returns 401 Unauthorized Solution: Your access token expired. Zoho access tokens last 60 minutes. Implement automatic token refresh in your webhook handler or switch to Zapier.

Problem: Integration worked then stopped Solution: Usually an API limit issue. Zoho CRM has API call limits based on your plan. Check Setup → Developer Space → API Limits. Consider caching tokens or batching requests.

What To Do Next

Once your Elementor forms are flowing to Zoho CRM, set up these related integrations:

Want me to audit your current form-to-CRM setup? I can spot the gaps that are costing you leads. Get a free tracking audit here.

This guide is part of the Zoho CRM Integrations Hub — connecting Zoho CRM to form tools, ad platforms, and marketing automation systems.