14+ years building on WordPress / Replies in under 5 hours
Integrations 7 min read · Updated July 2026

How to Integrate Zoho CRM with WordPress (2026 Guide)

Photo of Ajay Khandal
Ajay Khandal
WordPress Developer
How to Integrate Zoho CRM in Your WordPress Website (2025)
TL;DR

Four ways to integrate Zoho CRM with WordPress: (1) **CRM Perks Zoho Integration plugin** — free, supports Contact Form 7, WPForms, Gravity Forms, Ninja Forms; create a Zoho Connected App at api-console.zoho.com to get Client ID + Client Secret, paste into the plugin, click Authorize (OAuth flow), then map form fields to Zoho CRM Lead fields per-form. (2) **Native form addons** — WPForms Elite includes a Zoho CRM addon; Gravity Forms uses its Zapier addon to webhook to Zoho. (3) **Zapier or Zoho Flow** — no-code middleware; Zapier webhook triggers on form submission, Zoho CRM action creates the Lead. Zapier free tier = 100 tasks/month; Zoho Flow is included in Zoho One. (4) **Direct REST API** — POST to `https://www.zohoapis.com/crm/v7/Leads` with a `Zoho-oauthtoken` Authorization header; use `wp_remote_post()` in WordPress, hook into CF7's `wpcf7_mail_sent` or WPForms' `wpforms_process_complete`. Key gotchas: Last Name is required by Zoho (split single name fields before sending); use the `/upsert` endpoint to avoid duplicate records on repeated submissions; access tokens expire hourly — implement refresh logic for production.

Integrating Zoho CRM with WordPress lets you automatically capture leads from contact forms, quote requests, and landing pages into your CRM — without manual copy-paste between systems. Every submission goes straight to a Zoho CRM Lead or Contact record, ready for follow-up.

There are four approaches: a plugin like CRM Perks (handles OAuth and field mapping with a UI), a native form plugin addon (if you’re already on WPForms Pro or Gravity Forms), a no-code bridge via Zapier or Zoho Flow, or a direct REST API call for custom requirements. This guide covers all four so you can pick the one that fits your stack.

Before you start: create a Zoho Connected App

Every integration method except Zapier requires OAuth 2.0 credentials from Zoho. You create these once and reuse them across any integration:

  1. Go to api-console.zoho.com and sign in with your Zoho account
  2. Click Add Client → choose Server-based Applications
  3. Fill in:
    • Client Name: anything descriptive (e.g. “My WordPress Site”)
    • Homepage URL: your WordPress site URL
    • Authorized Redirect URIs: the callback URL from your plugin or integration (each plugin provides this — set it after installing)
  4. Click Create — Zoho generates a Client ID and Client Secret

Keep both values — you’ll paste them into whichever integration method you use below. The access tokens are refreshed automatically by the integration layer; you won’t need to manage them manually.

Method 1: CRM Perks Zoho Integration plugin

CRM Perks Zoho Integration is the most widely used plugin for this connection. It supports Contact Form 7, WPForms, Gravity Forms, Ninja Forms, and Elementor Forms — so whichever form plugin you use, one plugin handles the CRM sync. The core integration is free; some premium form types require a paid add-on.

Setup

  1. In WordPress: Plugins → Add New → search “CRM Perks” → install and activate
  2. Go to CRM Perks → Zoho CRM in the WordPress admin sidebar
  3. Paste your Client ID and Client Secret from the Zoho Connected App
  4. Click Authorize — the plugin redirects to Zoho’s OAuth consent screen. Accept, and Zoho redirects back with tokens stored in WordPress
  5. Copy the Redirect URI shown by the plugin and paste it into your Zoho Connected App’s Authorized Redirect URIs field (back in api-console.zoho.com)

Field mapping

Once connected, open any form in the editor. CRM Perks adds a Zoho CRM tab to each form’s settings. Here you configure:

  • CRM Module: Leads, Contacts, or Deals
  • Field mapping: match each form field to a Zoho CRM field (First Name, Last Name, Email, Phone, Lead Source, Description, etc.)
  • Conditional sync: only send to CRM if a specific field is filled or has a particular value (e.g. only sync “Request a quote” form, not newsletter signups)

Common mapping for a contact form:

  • Name (split or combined) → First Name / Last Name
  • Email → Email
  • Phone → Phone
  • Message → Description
  • Fixed value “WordPress Website” → Lead Source

Method 2: WPForms or Gravity Forms native Zoho addon

If you’re already using WPForms Pro or Gravity Forms, their native Zoho addons are the cleaner option — no separate plugin needed.

WPForms + Zoho CRM Addon: Available with WPForms Elite (or the Zoho CRM addon purchased separately). Go to WPForms → Addons → Zoho CRM → Install. Then in any form’s settings, open the Zoho CRM tab, connect with your Client ID/Secret via OAuth, and map form fields to Zoho modules.

Gravity Forms + Zapier addon: Gravity Forms has a Zapier addon (free from the Gravity Forms account) that fires a webhook on form submission. Wire it to a Zoho CRM Zap in Zapier (covered in Method 3 below).

For a full breakdown of which form plugin to use for your site, see the WordPress contact form plugins comparison — it covers WPForms, Gravity Forms, Contact Form 7, and Fluent Forms with their integration capabilities.

Method 3: Zapier or Zoho Flow (no-code)

Zapier and Zoho Flow both act as middleware between WordPress form submissions and Zoho CRM, without writing code or installing a Zoho-specific plugin. The tradeoff: both cost money for meaningful automation volume.

Zapier

  1. In Zapier, create a new Zap
  2. Trigger: Webhooks by Zapier (Catch Hook) — Zapier gives you a webhook URL
  3. In WordPress, configure your form to POST to that webhook URL on submission (WPForms and Gravity Forms both support webhooks natively)
  4. Action: Zoho CRM → Create/Update Lead — map the webhook payload fields to Zoho CRM Lead fields
  5. Test with a form submission — Zapier shows the payload and the created Lead

Zapier’s free tier allows 100 tasks/month (each form submission = 1 task). Paid plans start at around $20/month for 750 tasks.

Zoho Flow

Zoho Flow is Zoho’s own automation platform — like Zapier but with deeper Zoho ecosystem integration. If you’re already in the Zoho One suite, Zoho Flow is included. The WordPress connector in Zoho Flow triggers on form submissions via webhook; the Zoho CRM action creates records natively.

Method 4: Direct Zoho CRM REST API (developer approach)

For custom integration logic — conditional routing to different modules, enriching data before sending, or integrating from a custom PHP flow — the Zoho CRM REST API gives full control. The current API version is v7.

Get a server-to-server access token using a Self Client in Zoho API Console, then create a Lead via wp_remote_post():

function create_zoho_lead( array $data ): bool {
    $access_token = get_option( 'zoho_crm_access_token' ); // stored after OAuth

    $response = wp_remote_post(
        'https://www.zohoapis.com/crm/v7/Leads',
        [
            'headers' => [
                'Authorization' => 'Zoho-oauthtoken ' . $access_token,
                'Content-Type'  => 'application/json',
            ],
            'body' => wp_json_encode( [
                'data' => [
                    [
                        'First_Name'  => sanitize_text_field( $data['first_name'] ),
                        'Last_Name'   => sanitize_text_field( $data['last_name'] ),
                        'Email'       => sanitize_email( $data['email'] ),
                        'Phone'       => sanitize_text_field( $data['phone'] ),
                        'Description' => sanitize_textarea_field( $data['message'] ),
                        'Lead_Source' => 'WordPress',
                    ],
                ],
            ] ),
        ]
    );

    if ( is_wp_error( $response ) ) {
        error_log( 'Zoho CRM error: ' . $response->get_error_message() );
        return false;
    }

    $body = json_decode( wp_remote_retrieve_body( $response ), true );
    return isset( $body['data'][0]['code'] ) && $body['data'][0]['code'] === 'SUCCESS';
}

// Hook into a Contact Form 7 submission:
add_action( 'wpcf7_mail_sent', function( $contact_form ) {
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {
        $data = $submission->get_posted_data();
        create_zoho_lead( [
            'first_name' => $data['your-name'] ?? '',
            'last_name'  => '',
            'email'      => $data['your-email'] ?? '',
            'phone'      => $data['your-phone'] ?? '',
            'message'    => $data['your-message'] ?? '',
        ] );
    }
} );

Zoho CRM access tokens expire every hour. For a production integration, implement a refresh flow: store the refresh token in WordPress options, and refresh the access token when an API call returns a 401. The Zoho OAuth documentation covers the refresh endpoint.

Testing the integration

Whichever method you use:

  1. Submit a test form entry with recognisable data (e.g. email: zoho-test-[timestamp]@example.com)
  2. In Zoho CRM, go to Leads (or whichever module you’re syncing to) and look for the record
  3. Check that all mapped fields populated correctly — name, email, phone, lead source
  4. If using CRM Perks or a plugin, check CRM Perks → Logs for the submission record and any error details

If data isn’t appearing in Zoho CRM: check the OAuth connection is still valid (re-authorize if needed), verify the Redirect URI in Zoho Connected App matches exactly what the plugin shows, and confirm your Zoho CRM user has API access enabled (Zoho CRM → Setup → Developer Space → API).

Common troubleshooting

  • Authentication error / invalid token: Re-authorize the OAuth connection from the plugin settings. If using the API directly, check that the access token hasn’t expired and implement refresh logic.
  • Required field errors (202 error from Zoho): Zoho CRM requires Last Name for Lead records. If your form only has a single Name field, split it before sending or map the entire name to Last Name.
  • Duplicate records: Zoho CRM creates a duplicate if the email already exists and you’re not using the Upsert endpoint. Switch to POST /crm/v7/Leads/upsert with the duplicate_check_fields parameter set to Email to update existing records instead of creating duplicates.
  • Data sync delay: Plugin-based integrations send synchronously on form submission. If there’s a delay, check if your server’s outbound HTTP requests are rate-limited or if Zoho’s API is rate-limiting your account (Zoho CRM API limit is 5,000 calls/day on standard plans).

Zoho CRM is one of several CRM and marketing platforms you can connect to WordPress. For similar setups with other platforms, see the guides to integrating HubSpot with WordPress, connecting Mailchimp to WordPress contact forms, and connecting Marketo to your WordPress site. The hosting and plugin decisions that affect how reliably outbound integrations work are covered in five things to decide before building a WordPress site.

Frequently asked questions

The CRM Perks Zoho Integration plugin is the most straightforward option for most WordPress sites. Install it from wordpress.org, create a Zoho Connected App at api-console.zoho.com to get your Client ID and Client Secret, paste them into the plugin settings, and click Authorize to complete the OAuth flow. From there, each form (Contact Form 7, WPForms, Gravity Forms, or Ninja Forms) gets a Zoho CRM tab in its settings where you map form fields to Zoho Lead or Contact fields. No coding required.

A Zoho Connected App is an OAuth 2.0 client registration that allows external applications (like your WordPress site) to access the Zoho CRM API on behalf of your Zoho account. You create one at api-console.zoho.com — choose 'Server-based Applications,' fill in your site URL and the redirect URI from your plugin, and Zoho gives you a Client ID and Client Secret. You need a Connected App for every integration method except Zapier, which handles its own Zoho authentication internally. The Connected App is free to create and doesn't require a paid Zoho plan.

Zoho CRM's free plan (up to 3 users) includes API access, so the basic integration works without a paid subscription. The API rate limit on the free plan is lower than paid plans (800 calls/day vs 5,000+ on paid plans), which is fine for low-volume form submissions. WPForms' native Zoho CRM addon requires WPForms Elite (paid). Zapier integration is free up to 100 tasks/month, then requires a paid Zapier plan. Zoho Flow is included in the Zoho One suite.

Contact Form 7 is the most commonly used with CRM Perks (free, handles the Zoho OAuth and field mapping). WPForms Pro has a native Zoho CRM addon that's slightly more polished if you're already a WPForms customer. Gravity Forms works with Zapier via the Gravity Forms Zapier addon (free for Gravity Forms license holders). Ninja Forms and Elementor Forms also work with CRM Perks. The choice should be driven by your form requirements first — the Zoho integration works well across all of them.

By default, Zoho CRM's API creates a new Lead record on every API call, even if the email already exists — it doesn't deduplicate automatically. To avoid duplicates, use the Upsert endpoint instead of the standard Create endpoint: POST to `/crm/v7/Leads/upsert` and include `duplicate_check_fields: ["Email"]` in the request body. Zoho will update the existing Lead if an email match is found, or create a new one if not. Most plugins (CRM Perks, WPForms addon) have a 'Skip duplicate' or 'Update existing' toggle in their settings that handles this automatically.

Zoho CRM requires Last Name as the only mandatory field for Lead records. If your WordPress form only has a single 'Full Name' field, you need to split it before sending to Zoho — either in the plugin's field mapping settings (some plugins support this) or in your PHP code using `explode(' ', $full_name, 2)` to get first and last names. Other commonly mapped fields: Email, Phone, Lead Source (set a fixed value like 'WordPress Website'), and Description (for the form message). First Name is optional but recommended.

Photo of Ajay Khandal

Written by Ajay Khandal

I'm a freelance WordPress developer with 14+ years of experience building, fixing, and speeding up sites for businesses, agencies, and store owners across the US, UK, Europe, and Australia. I specialize in custom themes, WooCommerce, and performance — the kind of work that shows up as faster load times and fewer support tickets. No account managers, no outsourced tickets — you work directly with me, with replies typically inside 5 hours.

Work with me →