Contact Form 7 Webhook: Send Submissions to Static Forms
Contact Form 7 emails you through wp_mail(), and on many hosts that call fails or lands in spam. The Static Forms WordPress plugin adds a second path. When a visitor submits a valid form, the plugin sends a copy of the fields to Static Forms, which handles the notification email, spam filtering and the Inbox.
The plugin hooks wpcf7_before_send_mail, so forwarding runs before Contact Form 7 tries to send its own mail. A broken wp_mail() doesn't stop the copy from leaving. This helps most in the middle of a migration, when mail setup is in flux.
We make Static Forms, the form backend in the examples. Contact Form 7 is a separate WordPress plugin.
What you need
- WordPress with Contact Form 7 active
- A free Static Forms account and a form in the Static Forms app
- The Static Forms plugin ZIP, from the WordPress integration docs
Step 1: Install the plugin
Upload the ZIP under Plugins → Add New → Upload Plugin and activate it.
Step 2: Add the form key
Copy your form's API key from the General tab of the form in Static Forms. It starts with sf_ and identifies the form without being a secret. Then in WordPress:
- Go to Settings → Static Forms.
- Paste the key into Default form key.
- Tick Forward Contact Form 7 submissions to Static Forms.
- Click Save.
The checkbox stays disabled while Contact Form 7 is inactive, and the page says so.
The Account API key field above it is a different key. It connects the Static Forms block to your account and isn't needed for Contact Form 7 forwarding. The WordPress docs explain both keys.
Step 3: Send a test submission
Submit a Contact Form 7 form on your site. The fields should show up in the Inbox of the form in the app, and the notification email follows.
What the plugin forwards, from its code:
- Every posted field except names that start with
_. Contact Form 7's internal fields, such as_wpcf7, are skipped. - Multi-value fields (checkboxes, multi-selects) as one comma-separated string.
- The fields as Contact Form 7 names them.
your-messagearrives asyour-message.
The plugin forwards posted field values only. It contains no code for file uploads, so don't count on attachments arriving.
Step 4: Turn forwarding on or off for one form
Open the form in Contact Form 7, go to Additional Settings and add one line:
staticforms: offThat form no longer forwards. The opposite also works. With the global checkbox off, staticforms: on in a form's Additional Settings forwards that one form.
All forwarded forms use the same Default form key, so they share one Static Forms form and one Inbox. The plugin reads no per-form key for Contact Form 7. If one inbox per form matters, use staticforms: off on the others and send those through a different route, such as a plain HTML form.
Step 5: Get a reply-to address
Static Forms takes the reply-to address from a field named email or replyTo. The default Contact Form 7 template names its email field your-email, which Static Forms treats as a regular field. Replying to the notification then writes to the notification's own sender.
To fix it, rename the tag in the form editor:
[email* email autocomplete:email]Contact Form 7 mail templates refer to fields by tag name. After the rename, change [your-email] to [email] in the Mail tab, or Contact Form 7's own email loses the address. The API reference lists the special field names.
What happens when forwarding fails
The visitor never sees an error. The request to Static Forms has a five-second timeout, so a slow response can delay the form's confirmation by up to that long. With WP_DEBUG on, the plugin writes Static Forms CF7 forwarding failed: and the reason to the PHP error log. With debugging off, the failure is silent, so check the Inbox after setup instead of assuming it works.
The plugin doesn't change Contact Form 7's own mail settings. If you want a single email, edit or remove the Contact Form 7 mail on the Mail tab yourself.
Static exports
Forwarding runs in PHP on your WordPress server. If you export the site to static HTML, nothing runs PHP on the live copy and nothing forwards. The static WordPress contact form guide covers the HTML form to use there.
Troubleshooting
Nothing reaches the Inbox
Check, in order: the plugin is active, the checkbox is ticked (or the form has staticforms: on), the form has no staticforms: off line, and Default form key holds the key of the form you are watching. Turn on WP_DEBUG and WP_DEBUG_LOG and look for the forwarding message.
403 "is not in the allowed domains list"
Domain restriction is available on Starter and up, so a Free form never returns this error. If it is on and your site's domain isn't on the allowed list, the plugin sends your site URL as Origin and Referer for this check, so add that domain to the form's allowed domains. See domain restriction.
"Invalid API key"
The Default form key has a typo or a stray space. Paste it again from the General tab.
Related guides
- Gravity Forms to Static Forms
- Elementor forms to Static Forms
- Platform-independent forms in WordPress
- WordPress integration docs and the form General tab
FAQ
Does the plugin replace Contact Form 7?
No. Contact Form 7 still renders the form and runs validation. The plugin forwards a copy of valid submissions.
Can I hide fields from the notification email?
Yes. The form's General tab has a Hide fields from notification emails setting. It leaves names out of the email only. Hidden fields are still saved.
Next steps
Create a free Static Forms account, install the plugin and tick the checkbox. Submit one test message and look for it in the Inbox.
Related Articles
Elementor Form Backend: Send Submissions to Static Forms
Add Static Forms as an Elementor Pro form action: install the plugin, set a key, pick the action and send test entries, with the email field handled for you.
Gravity Forms Webhook to Static Forms: Setup Guide
Send Gravity Forms entries to Static Forms with a Select Fields feed, or post the form HTML directly and hide gform_* and state_ fields. Steps and fixes.
Contact Form on a Static WordPress Site (Simply Static)
Add a contact form to a static WordPress site that survives a Simply Static or WP2Static export: why plugin forms break, the HTML fix and how to test it.









