Automation Blog

How to Connect WordPress Contact Form 7 to Zapier via Webhook

Contact Form 7 does not have a native Zapier connector — but it can send form submissions to any URL via webhook. Here is how to configure CF7 to POST to a Zapier Catch Hook and build automated workflows that fire the moment someone submits your WordPress contact form.

ZapierWordPressWebhooks

By Troy Tessalone · · 4 minutes

Automation Guide

A practical field guide from Automation Ace.

How to Connect WordPress Contact Form 7 to Zapier via Webhook

Contact Form 7 is one of the most widely installed WordPress form plugins — but it does not have a native Zapier integration in the traditional sense. There is no CF7 app in the Zapier library that polls for new submissions. Instead, the correct approach is to configure CF7 to send a webhook on submission and use Zapier's Webhooks by Zapier Catch Hook as the receiving trigger. This makes the Zap instant — it fires the moment the form is submitted, not on a polling interval. This guide covers two methods: using the CF7 Webhook plugin and using a custom WordPress action hook with a small PHP snippet.

Why CF7 Needs a Webhook Rather Than a Native Connector

Contact Form 7 stores submissions in WordPress's mail queue by default — it is not a database-backed form system with an API. Without a dedicated plugin that exposes an API endpoint, there is no way for Zapier to poll CF7 for new submissions. The webhook approach bypasses this limitation: CF7 pushes data to Zapier at the moment of submission, making it an instant trigger rather than a polling trigger.

For a broader look at how WordPress plugins integrate with Zapier, see the WordPress and Zapier integrations overview.

Method A: CF7 to Zapier via the CF7 Webhook Plugin (Easiest)

The Contact Form 7 – Webhooks plugin (also known as cf7-to-webhook or similar variants available in the WordPress plugin directory) adds webhook sending capability directly to Contact Form 7 without writing code. After installing it:

  1. In WordPress, go to Contact → Integration (or the webhook settings added by the plugin to the CF7 form editor).
  2. Enter the Zapier Catch Hook URL in the webhook URL field (see Step 1 below to get this URL).
  3. Save the form. The plugin will now POST all form field values as JSON or form-encoded data to the Zapier URL on each submission.

Different webhook plugins vary in their configuration interface — some apply per-form, others globally. Check the specific plugin's documentation for field mapping and payload format options.

Method B: Custom WordPress Code with wpcf7_before_send_mail Hook

For full control over the payload — choosing which fields to send, formatting values, or adding custom metadata — use WordPress's CF7 action hook in your theme's functions.php or a site-specific plugin:

add_action('wpcf7_before_send_mail', function($cf7) {
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) return;

    $posted_data = $submission->get_posted_data();

    $payload = array(
        'your_name'    => $posted_data['your-name'] ?? '',
        'your_email'   => $posted_data['your-email'] ?? '',
        'your_subject' => $posted_data['your-subject'] ?? '',
        'your_message' => $posted_data['your-message'] ?? '',
        'form_id'      => $cf7->id(),
        'form_title'   => $cf7->title(),
        'submitted_at' => current_time('c'),
    );

    wp_remote_post('https://hooks.zapier.com/hooks/catch/123456/abcdef/', array(
        'method'      => 'POST',
        'headers'     => array('Content-Type' => 'application/json'),
        'body'        => wp_json_encode($payload),
        'blocking'    => false, // non-blocking so form submission is not delayed
        'data_format' => 'body',
    ));
}, 10, 1);

Replace your-name, your-email, etc. with your actual CF7 field names (the name attribute values from the CF7 shortcodes). Replace the Zapier URL with your actual Catch Hook URL. The 'blocking' => false setting sends the webhook asynchronously so it does not add latency to the form submission response time for the user.

Step 1: Get the Zapier Catch Hook URL

  1. In Zapier, create a new Zap and choose Webhooks by Zapier as the trigger app.
  2. Select Catch Hook as the trigger event.
  3. Copy the unique webhook URL Zapier generates — it will look like https://hooks.zapier.com/hooks/catch/123456/abcdef/.
  4. Paste this URL into your CF7 webhook plugin settings or into the wp_remote_post URL in the code snippet above.

Following the best practice of including the webhook ID in your Zap name — e.g., "CF7 Contact Form → CRM [wh:abcdef]" — makes it easy to trace this Zap back to the specific form later.

Step 2: Send a Test Submission

  1. With the Catch Hook step open in the Zapier editor, submit your WordPress contact form with test data.
  2. Zapier should detect the inbound request within seconds and show "We found a request."
  3. The form field values you sent appear as named output fields available for mapping in subsequent steps.

If the test submission does not appear in Zapier, check: Is the webhook URL correct? Is the CF7 plugin active and the form saved? Are there any WordPress firewall or caching plugins blocking outbound HTTP requests?

Step 3: Build the Zap Actions

With the form data captured from the test submission, build the Zap's action steps to handle the submission:

  • Create a contact in HubSpot, Salesforce, or another CRM using the name and email fields
  • Add a row to a Google Sheet or Airtable base as a leads log
  • Send a Slack notification to a #leads channel with the submission details
  • Send a confirmation email via Gmail or SendGrid
  • Route to different actions based on the form's subject or message content using a Filter or Paths step

Handling Multiple CF7 Forms

If you have multiple Contact Form 7 forms on your site and want each to trigger a different Zap, create a separate Catch Hook URL for each form and configure each form's webhook to use its own URL. Include the form ID or title in the Zap name for easy identification — the code snippet above includes form_id and form_title in the payload for exactly this purpose.

Alternatively, route all forms to a single Catch Hook and use a Filter or Paths step in Zapier to branch based on the form_id field.

The webhook approach makes Contact Form 7 behave as an instant Zapier trigger — submissions arrive in Zapier within seconds of the user clicking submit, without any polling lag. For teams using CF7 on a WordPress site alongside a CRM or project management tool, this is the most reliable way to ensure every form submission is captured and routed immediately.

For a comparison of WordPress form plugins that do have native Zapier connectors (Gravity Forms, WPForms, Formidable), see the WordPress and Zapier integrations guide. For help setting up a CF7-to-CRM workflow, talk to Automation Ace.

ZapierWordPressWebhooks

Disclaimer: This article may include links to apps, products, or services. Some links may be affiliate links, which means Automation Ace may earn a commission at no extra cost to you.

Build Better Systems

Ready to automate with confidence?

Share your tools, process, and goals. Automation Ace can design the workflow, integration, AI assist, or code bridge that fits your business.

Start a Project →