How Do I Send Contact Form 7 Entries to Slack?

You can send Contact Form 7 entries to a Slack channel without a paid third-party service. The three practical routes are: a visual WordPress workflow builder, a lightweight dedicated plugin, or a custom function using CF7’s own wpcf7_mail_sent hook and WordPress’s built-in wp_remote_post(). Each takes under fifteen minutes to configure, and none requires a Zapier account or a recurring automation subscription.

This tutorial covers all three methods in order of effort. Work through the decision table first, then jump to the section that matches your setup. We tested each approach on WordPress 6.5 with Contact Form 7 5.9 and confirmed that Slack notifications arrived within two seconds of a form submission.

Which Method Is Right for You?

The right choice depends on how many automations you run, whether you want a visual audit trail, and how comfortable you are editing functions.php. Use this table before reading further.

SituationBest methodApproximate setup time
You already run other site automations and want one place to manage themVisual workflow builder8 to 12 minutes
You want Slack notifications only, nothing else, and prefer a small plugin footprintDedicated CF7 Slack plugin5 to 8 minutes
You are a developer, you avoid extra plugins on principle, and you want zero recurring costsCustom code via wpcf7_mail_sent10 to 15 minutes
You need conditional routing (e.g. VIP leads go to #sales, everything else to #general)Visual workflow builder with branching15 to 20 minutes

Step 1: Create a Slack Incoming Webhook

Every method in this guide requires a Slack Incoming Webhook URL. This is a unique endpoint Slack generates for your workspace. When your WordPress site posts data to that URL, Slack delivers it as a message in the channel you specify.

Here is exactly what you will see on screen:

  1. Go to api.slack.com/apps and click Create New App.
  2. Choose From scratch, name the app (e.g. “CF7 Notifications”), and select your workspace.
  3. In the left sidebar, click Incoming Webhooks, then toggle Activate Incoming Webhooks to On.
  4. Scroll down and click Add New Webhook to Workspace.
  5. Choose the channel you want to receive notifications, click Allow.
  6. Copy the webhook URL. It begins with https://hooks.slack.com/services/.

Keep that URL in a text file. You will paste it into whichever method you choose below. The official Slack Incoming Webhooks documentation covers rate limits (one message per second per webhook) and payload formatting in detail.

A Slack webhook URL is a secret. Anyone with it can post to your channel. Store it in your WordPress options table or an environment variable, never in a public repository.

Method A: Visual Workflow Builder (Recommended for Most Sites)

This is the approach we use and recommend for sites that handle more than a handful of automations. You build the workflow on a drag-and-drop canvas, which means every trigger, action, and condition is visible, editable, and logged without touching any code.

Browse the full feature list to see what else the workflow builder handles beyond Slack notifications.

Install and Activate the Plugin

  1. In your WordPress dashboard, go to Plugins Add New and search for Krom Automation.
  2. Click Install Now, then Activate. Alternatively, download it free from WordPress.org and upload the ZIP under Plugins Add New Upload Plugin.
  3. After activation, a Krom item appears in the left admin menu.

Connect Slack as a Messaging Integration

  1. Go to Krom Integrations and find the Slack card.
  2. Paste your Incoming Webhook URL into the field provided.
  3. Click Test Connection. If the connection is valid, a test message arrives in your Slack channel within a few seconds.
  4. Save the integration.

The full setup is documented in the messaging integrations reference for Slack, Discord, Twilio, and Telegram, including how to configure multiple webhooks for different channels.

Build the CF7 Workflow

  1. Go to Krom Workflows and click New Workflow.
  2. On the canvas, click the trigger node and search for Contact Form 7: Form Submitted. Select the specific form you want to watch, or leave it set to “Any form” to catch all submissions.
  3. Click the plus icon below the trigger node to add an action. Search for Send Slack Message.
  4. In the action panel, select the Slack integration you just connected and choose the target channel.
  5. Write your message. Use merge tags to inject live form data. For example: New enquiry from {{cf7.your-name}}. Email: {{cf7.your-email}}. Message: {{cf7.your-message}}.
  6. Click Save, then toggle the workflow to Active.

Submit a test entry through your CF7 form. The notification should appear in Slack within two to three seconds. You can check the execution log under Krom Logs to confirm the workflow ran and see the exact payload that was sent.

For full details on the Contact Form 7 trigger and the fields it exposes, see the Contact Form 7 integration documentation, which lists every available merge tag and covers multi-form setups.

Add Conditional Routing (Optional)

If you want VIP leads routed to #sales and general enquiries to #general, add a condition node between the trigger and the action. Set the condition to check a form field value (such as “Budget” or a checkbox), then connect each branch to its own Slack action pointing at the appropriate channel.

The conditions and branching documentation explains Yes/No path logic in detail, including how to match partial strings and combine multiple conditions.

Conditional routing is where a visual canvas earns its place. Trying to replicate branching logic in functions.php takes four times as long and is invisible when something breaks.

Method B: Dedicated CF7 Slack Plugin

If Slack notifications are the only automation your site needs, a dedicated plugin is a lighter option. Several exist on WordPress.org. The setup pattern is identical across all of them:

  1. Install the plugin and activate it.
  2. Go to the plugin’s settings page, usually under Contact CF7 Slack or Settings CF7 to Slack.
  3. Paste your Slack Incoming Webhook URL.
  4. Select which forms trigger notifications.
  5. Configure the message template using the plugin’s placeholder syntax.
  6. Save and submit a test entry.

The trade-off is narrow functionality. These plugins handle one job well.

The moment you need a second action (logging to a spreadsheet, tagging a CRM contact, sending a follow-up email), you install a second plugin. Three automations can mean three plugins, three settings screens, and three failure points.

Method C: Custom Code via wpcf7_mail_sent

This approach adds zero plugins. It uses Contact Form 7’s own action hook, which fires after a form submission passes validation and sends its mail, and WordPress’s native HTTP API to POST data to Slack. According to the Contact Form 7 developer documentation, wpcf7_mail_sent receives the WPCF7_ContactForm object, giving you access to all submitted field values.

Add the following to your theme’s functions.php or a site-specific plugin:

add_action( 'wpcf7_mail_sent', 'send_cf7_to_slack' );

function send_cf7_to_slack( $contact_form ) {
    $webhook_url = 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL';
    $submission  = WPCF7_Submission::get_instance();

    if ( ! $submission ) {
        return;
    }

    $data    = $submission->get_posted_data();
    $name    = sanitize_text_field( $data['your-name'] ?? 'Unknown' );
    $email   = sanitize_email( $data['your-email'] ?? '' );
    $message = sanitize_textarea_field( $data['your-message'] ?? '' );

    $payload = wp_json_encode( [
        'text' => "*New CF7 Submission*\nName: {$name}\nEmail: {$email}\nMessage: {$message}",
    ] );

    wp_remote_post( $webhook_url, [
        'body'    => $payload,
        'headers' => [ 'Content-Type' => 'application/json' ],
        'timeout' => 10,
    ] );
}

Replace the field names (your-name, your-email, your-message) with the actual names from your CF7 form. You can find these under Contact Contact Forms Edit Form. The name attribute inside each field shortcode is what you need.

This runs synchronously on the page load that processes the form. On a site with very slow Slack responses (rare but possible), a 10-second timeout could delay the thank-you message. Setting blocking to false in wp_remote_post() makes the call fire-and-forget, which avoids that risk at the cost of losing the response for debugging.

What Gets Sent: Field Mapping Reference

Regardless of method, this is the data available from a Contact Form 7 submission and where it lands in a Slack message:

CF7 field nameData typeSlack message variableNotes
your-nameText{{cf7.your-name}} or $data['your-name']Set by CF7 default template
your-emailEmail{{cf7.your-email}} or $data['your-email']Validated as email before saving
your-messageTextarea{{cf7.your-message}} or $data['your-message']Preserves line breaks if formatted
your-subjectText{{cf7.your-subject}} or $data['your-subject']Only present if field exists in form
_wpcf7_unit_tagSystem fieldNot used in messagesInternal CF7 submission identifier

Custom field names you add to your form are immediately accessible using the same pattern. A field named company becomes {{cf7.company}} in merge tags or $data['company'] in code.

Troubleshooting: Why Slack Notifications Fail

This is the section most tutorials skip. Here are the four failure modes we have seen in practice, ordered by how often they occur:

1. The webhook URL is invalid or revoked

Slack returns a 400 Bad Request or invalid_payload error. The most common cause is copying the webhook URL with a trailing space, or regenerating the webhook in Slack without updating WordPress. Go to api.slack.com/apps, find your app, navigate to Incoming Webhooks, and confirm the URL matches what is stored in your plugin or code.

2. The form did not actually submit

CF7’s wpcf7_mail_sent hook only fires when the form passes validation AND the mail action succeeds. If CF7’s own email is failing (misconfigured SMTP, blocked by hosting), the Slack notification will not fire either. Check Contact Integration Additional Settings and use CF7’s built-in mail debugging, or install WP Mail Log to confirm whether CF7 emails are being sent at all.

3. Spam filter interception

CF7’s Akismet integration can silently reject a submission before the hook fires. If you are testing with data that looks like spam (short messages, common test phrases), Akismet may drop it. Use realistic test data: a real-looking name, a valid email address, a sentence-length message.

4. WP-Cron delay on low-traffic sites

If your workflow builder processes actions via Action Scheduler (a background queue), and your site receives fewer than a few visits per hour, WP-Cron may not fire promptly. The fix is to disable the default WP-Cron in wp-config.php and configure a real server cron to call wp-cron.php every minute.

Your hosting provider’s documentation will have the exact command. This is also covered in the guide to testing automations before they go live.

A workflow that fires on 80% of submissions is not a workflow. It is a guessing game. Always check execution logs after setup, not just the first test.

Year-One Cost Comparison

This table covers the realistic first-year cost for each approach, including your time at an estimated developer rate of $75 per hour.

MethodPlugin costSetup timeTime cost at $75/hrOngoing maintenance
Visual workflow builder (free tier)$010 min~$12Minimal, visual logs flag issues
Dedicated CF7 Slack plugin$0 (most are free)6 min~$7Low, but narrow. Breaks if CF7 updates field API
Custom code$015 min + testing~$19Higher. Silent failures with no log unless you add logging
Zapier (Professional plan, as of September 2026)~$240/year10 min~$12Task-based billing. 750 tasks/month then overage charges apply

The custom code route looks cheapest until you factor in debugging time. A silent failure in a functions.php hook has no log, no retry, and no alert.

You find out when a client asks why they received no follow-up. The visual builder’s execution log alone is worth the additional six minutes of setup.

Extending the Workflow Beyond Slack

Once CF7 is triggering a workflow, adding a second action costs nothing and takes about ninety seconds. Common combinations we see on agency sites:

  • Send to Slack AND add the submitter as a contact in FluentCRM (see the FluentCRM integration docs).
  • Send to Slack AND log the row to Google Sheets for monthly reporting (see the Google Sheets integration docs).
  • Send to Slack AND subscribe the user to a Mailchimp audience (see the Mailchimp integration docs).
  • Route to different Slack channels based on which CF7 form was submitted, using conditional branching.

If you are also routing WooCommerce orders to Slack, the same workflow builder handles both. The guide to WooCommerce order notifications in Slack covers the order-specific setup alongside form notifications.

For sites already using other form plugins, the same pattern applies. The workflow builder also supports Gravity Forms, WPForms, Fluent Forms, Elementor Forms, and Ninja Forms with the same trigger-and-action structure.

Other Tools from wpRigel Worth Knowing About

Pollify is a Gutenberg-native poll, survey and quiz plugin. Polls are built as real blocks inside the editor, so there are no shortcodes to paste and no separate dashboard to learn. It suits content sites and community platforms that want audience feedback without a separate SaaS subscription.

Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump anywhere, search posts, users, and settings, and run admin actions without clicking through menus. It is the only WordPress command palette with genuine WooCommerce depth: orders, products, and customers are all searchable and editable from the palette.

Next Steps

If you are setting up Slack notifications for one form and nothing else, any of the three methods works. If you have more than one automation on this site, or you expect to add more within the next six months, the visual workflow builder pays back its setup time within the first debugging session it saves you. Start with the free version, which includes the CF7 trigger, the Slack action, merge tags, and execution logging at no cost.

Try Krom Automation free on WordPress.org

Frequently Asked Questions

Does Contact Form 7 have a built-in Slack integration?

No. CF7 handles form capture and email delivery natively, but has no built-in Slack connection. You need either a plugin, a workflow builder, or custom code using the wpcf7_mail_sent hook to bridge the two.

Can I send different CF7 fields to different Slack channels?

Yes, using conditional branching in a visual workflow builder. You set a condition on a specific field value (such as a dropdown selection or a budget range), then connect each branch to a separate Slack action pointing at a different channel. This is not possible with most dedicated CF7 Slack plugins, which send all submissions to one channel.

Why is my CF7 not sending notifications to Slack even though the form submits?

The most common causes are: an invalid or revoked webhook URL, CF7’s own mail action failing before the hook fires, or a spam filter (usually Akismet) rejecting the submission silently. Check your execution log if you are using a workflow builder, or add temporary error_log() calls if you are using custom code, to isolate which step is failing.

Is there a free way to do this without Zapier?

Yes. The custom code method is entirely free and has no run limits.

A visual workflow builder also offers a free tier with the CF7 trigger and Slack action included. Zapier’s Professional plan costs around $240 per year as of September 2026, with task-based billing that adds charges if you exceed 750 tasks per month.

Can I notify a specific Slack user (not a channel) when a CF7 form is submitted?

Slack’s Incoming Webhooks post to a channel, not directly to a person. The practical approach is to post to a private channel where only that person is a member, or include an @mention in the message body (e.g.

@jane.smith New lead received). Slack will then send Jane a notification from within the channel.