Contact Form 7,
connected.
Everything you need to install, connect, and operate ARHive CF7 v3 — the WordPress plugin that wires Contact Form 7 to 23 email marketing platforms, from a single admin screen.
What is ARHive CF7?
ARHive CF7 is a WordPress plugin that connects Contact Form 7 — the most popular contact form plugin on the planet — to 23 email marketing services. When a visitor submits a CF7 form, their details are automatically pushed to the autoresponder you've configured for that form.
Each CF7 form gets its own autoresponder + list assignment. So your contact form can drop submissions into a "General Enquiries" list in Mailchimp, while your newsletter signup form lands in a "Subscribers" segment in Klaviyo, while your demo request form hits a "Hot Leads" list in HubSpot — all from the same WordPress install, no code required.
From household names like Mailchimp and HubSpot to specialised tools like beehiiv and Mautic.
Different forms can connect to different providers and different lists. Set it once per form.
Auto-detects name and email fields. Manual override available for custom fields.
Constant Contact, Mautic, AWeber, and CleverReach use secure OAuth — no copying tokens.
All AJAX endpoints require authentication. All inputs sanitised. Zero unauthenticated routes.
No jQuery, no React, no external libraries. Plain PHP + vanilla JS. Loads fast, stays out of the way.
10 new providers added: Klaviyo, HubSpot, AWeber, Omnisend, EmailOctopus, Moosend, CleverReach, beehiiv, SendPulse, and SendFox. Plus a redesigned admin, security hardening, and PHP 8.4 compatibility. See the upgrade guide →
What you need.
ARHive CF7 runs on any modern WordPress install. There are no external services to provision, no databases to set up, no servers to maintain — the plugin sits inside WordPress and uses your provider's HTTP API to push data.
| Requirement | Minimum | Recommended | Notes |
|---|---|---|---|
| WordPress | 6.0 | 6.7+ | Tested up to 6.7. Older versions not supported. |
| PHP | 8.1 | 8.2 or 8.3 | PHP 8.0 and below are end-of-life — not supported. |
| Contact Form 7 | 5.0 | Latest | Required dependency. Free from wordpress.org. |
| MySQL | 5.7 | 8.0+ | MariaDB 10.3+ also works. |
| Outbound HTTPS | Required | Required | Plugin talks to provider APIs over HTTPS via wp_remote_post. |
| Browser (admin) | Chrome / Firefox / Safari / Edge — latest two versions | — | IE11 not supported. Aurora UI uses backdrop-filter. |
If your hosting still runs PHP 7.x or 8.0, contact your host and upgrade. These versions are end-of-life and receive no security patches. ARHive CF7 v3 requires PHP 8.1 minimum and will refuse to activate on older versions.
Up in under a minute.
If you don't already have it: WP Admin → Plugins → Add New, search for "Contact Form 7", install, activate. It's free.
From your CodeCanyon downloads page, click the download menu and pick Installable WordPress file only — that's the arhive-cf7.zip file.
If you grab the "All files & documentation" bundle instead, you'll get a parent zip containing the actual installable zip plus the licence and docs. Extract that bundle first, then upload the inner zip to WordPress.
In WP Admin → Plugins → Add New → Upload Plugin, choose the zip, install, then click Activate. A new menu item — ARHive CF7 — appears in the sidebar.
Click ARHive CF7 → Settings. You'll see all 23 providers laid out in a grid. None are configured yet — each card shows the "Available" pill.
You don't need to enter a licence key — Envato handles licensing on their end. The plugin is ready to configure as soon as it's activated.
Connect a form in 30 seconds.
The full happy path from "plugin just activated" to "subscriber in my list." The example below uses Mailchimp, but the steps are identical for every provider.
From the Settings page, click the Mailchimp card. A modal opens asking for your API key. Each provider's modal links to the exact help article showing where to find that credential — labelled "Where to find your API key →".
Paste the key. The list dropdown populates automatically. You can pick a default list here, but the actual list mapping happens per-form (next step).
Go to Contact → Contact Forms and click any form. You'll see CF7's normal editor (Form, Mail, Messages, Additional Settings tabs) — plus a new Autoresponder tab.
On the Autoresponder tab, pick Mailchimp from the provider dropdown. The list dropdown loads. Pick the target list.
If your CF7 form's fields are named the obvious way — your-name, your-email — they auto-map to the provider's name and email fields. If you have custom fields, the mapping table lets you connect any CF7 field to any provider field.
Click Save on the form (CF7's standard save button). That's it — submissions to this form will now also push to Mailchimp.
Submit the form yourself once with a test email address. Check your provider's dashboard — the test subscriber should appear within seconds. If it doesn't, see troubleshooting.
Three layers, clean separation.
ARHive CF7 is structured as three logical layers that talk through small, well-defined interfaces. This is why adding a new provider only takes one file, and why a bug in one provider can't break the rest.
# LAYER 1 — User-facing CF7 Form (front-end) Settings Page (admin) │ │ │ submission │ AJAX ▼ ▼ # LAYER 2 — Plugin core Submission Dispatcher ←—→ AJAX Handlers │ │ │ calls provider │ calls provider ▼ ▼ # LAYER 3 — Provider implementations (23 of these) Mailchimp · Klaviyo · HubSpot · Brevo · MailerLite ... │ │ HTTP via shared helper ▼ wp_remote_post() / wp_remote_get()
Layer 1 — User-facing
Two entry points. The front-end CF7 form submission, which fires on every visitor signup. And the admin settings page, where you configure providers and CF7 form mappings.
Layer 2 — Plugin core
The Submission Dispatcher hooks into CF7's wpcf7_mail_sent action. When it fires, the dispatcher reads the form's saved provider + list assignment, extracts the field values from the submitted form, and calls the right provider class's add_subscriber() method.
The AJAX Handlers serve the admin side: list-fetch, credential-save, connection-test. Every endpoint is gated by nonce + manage_options capability.
Layer 3 — Provider classes
One PHP class per provider, all extending ARHive_CF7_Provider_Base. Each implements three methods: get_campaigns() to fetch lists, add_subscriber() to push a contact, and an identity check for the credentials format.
What happens when a visitor hits Send.
| # | Step | Who |
|---|---|---|
| 1 | Visitor submits CF7 form on your site | Contact Form 7 |
| 2 | CF7 fires its wpcf7_mail_sent action after the email is dispatched | Contact Form 7 |
| 3 | ARHive's Submission Dispatcher catches the action | ARHive CF7 core |
| 4 | Dispatcher reads the form's saved provider slug + list ID from post meta | ARHive CF7 core |
| 5 | Dispatcher extracts mapped fields (email, name, custom) from the form submission | ARHive CF7 core |
| 6 | Dispatcher calls the provider class: add_subscriber(list_id, fields) | ARHive CF7 core |
| 7 | Provider class sends HTTP request to provider API via shared HTTP helper | Provider class |
| 8 | Result logged to activity log (success / error) | ARHive CF7 core |
If the provider's API is down or slow, the visitor never sees a delay or error — the CF7 success message displays normally. The provider sync runs after the response is sent. Failures are recorded to the activity log; nothing is lost.
Hardened by default.
v3 was rebuilt from the ground up with a security-first mindset. The v2 plugin had a few unauthenticated AJAX endpoints that allowed any visitor to overwrite saved API credentials — that class of bug is no longer possible in v3.
| Concern | How v3 handles it |
|---|---|
| AJAX authentication | Every endpoint requires wp_verify_nonce + current_user_can('manage_options'). No exceptions. |
| Input sanitisation | All POST values pass through sanitize_text_field, sanitize_email, etc. before storage. |
| Output escaping | All admin output uses esc_html, esc_attr, esc_url. No raw echo of user input. |
| SQL injection | No raw SQL anywhere. All data accessed via get_option / get_post_meta. |
| API credentials | Stored in the WP options table. Never logged. Never echoed back to the browser after save. |
| HTTP requests | Always over HTTPS. wp_remote_* with explicit timeout (15s) and SSL verification. |
| OAuth state | Random 32-byte state token per flow. Verified on callback. Single-use. |
| Error handling | Provider failures never crash the form submission. All exceptions caught at the dispatcher level. |
Every supported autoresponder.
Each provider is implemented as its own PHP class. The full list, with the authentication method each one uses. API Key means paste a key and go. OAuth means click "Connect" and authorise through the provider's website — no token copying needed.
CF7 fields → provider fields.
Most CF7 forms have an email field and maybe a name field. ARHive CF7 looks for these by their CF7 field names and auto-maps them. If you have custom fields — phone number, company, custom tags — you can map them manually on the Autoresponder tab.
Auto-detected field names
If your CF7 form uses any of these names, ARHive maps them automatically:
| CF7 field name | Maps to |
|---|---|
your-email, email, email-address | Provider's email field (required) |
your-name, name, full-name | Provider's first/full name field |
first-name, fname | Provider's first-name field |
last-name, lname | Provider's last-name field |
phone, your-phone | Provider's phone field (if supported) |
Manual mapping
For any field that doesn't auto-detect, the Autoresponder tab shows a mapping table: every CF7 field on the left, the provider's fields on the right, drag/dropdown to connect them. Mappings save per-form, so different forms can map differently.
If your provider supports custom fields (Mailchimp merge tags, Klaviyo profile properties, HubSpot custom properties), those appear in the mapping dropdown alongside the standard fields. The list refreshes when you change provider or list.
Authorise without copying tokens.
Four providers use OAuth instead of plain API keys: Constant Contact, Mautic, AWeber, CleverReach. For these, you don't paste credentials — you click "Connect", get redirected to the provider's site, log in, click "Allow", and get redirected back. The plugin handles the token exchange and storage automatically.
How it works
The OAuth providers show a "Connect" button instead of an API key field. Click it.
You're redirected to (e.g.) app.constantcontact.com/oauth2/.... Log in if needed. Click Allow. The provider redirects you back to your WordPress site.
The plugin exchanges the OAuth code for an access token, stores it encrypted, and shows the provider as "Connected". Lists load. Refresh happens automatically when the token expires.
Most OAuth tokens expire after a few hours. ARHive CF7 stores the refresh token and uses it to silently get a new access token before each request — you'll never see an "expired token" error.
Different forms, different destinations.
Each CF7 form has its own autoresponder configuration. Three forms on your site can push to three different providers and three different lists — or all to the same one. It's controlled per-form, not globally.
The configuration is stored as WordPress post meta on the CF7 form post type. It travels with the form — if you export the CF7 form via CF7's built-in export feature and re-import on another site, the autoresponder config goes with it (provided the same provider is also connected on the destination site).
Form-level options
| Option | Effect |
|---|---|
| Provider | Which autoresponder to send to. Dropdown of connected providers only. |
| List / Audience / Group | Which list within the provider. Loads via AJAX when provider is picked. |
| Field map | CF7 field → provider field connections. Auto-populated with sensible defaults. |
| Double opt-in | (Where supported) Send a confirmation email. Default: provider's default. |
| Tags | (Where supported) Comma-separated tags to apply to every subscriber from this form. |
Where to find each credential.
Step-by-step credential discovery for the most-used providers. The general pattern is the same for all 23: find an API key or token in your provider's dashboard, paste it into ARHive's connect modal. Below: the exact menu paths.
Step 1 — Generate an API key
In Mailchimp: click your profile (top right) → Profile → Extras → API keys → Create A Key. The key looks like a1b2c3d4e5f6g7h8-us21. The suffix after the dash (us21) is your data centre — Mailchimp embeds it in the key itself, so the plugin doesn't ask for it separately.
Step 2 — Connect in ARHive
Click the Mailchimp card on ARHive's Settings page. Paste the key. Save. Your audiences populate automatically in the list dropdown.
Step 1 — Generate a Private API Key
In Klaviyo: Settings → API Keys → Create Private API Key. Give it a name like "ARHive CF7". Grant Full Access scope (or just Profiles + Lists if you prefer least-privilege). Copy the key — starts with pk_.
Step 2 — Connect in ARHive
Klaviyo card → paste key → save. Lists load. Klaviyo uses "Lists" not "Audiences" — pick the target list.
Step 1 — Create a Private App
In HubSpot: Settings (gear icon) → Integrations → Private Apps → Create a private app. Name it "ARHive CF7". Under Scopes, grant crm.objects.contacts.write and crm.lists.read. Create the app.
Step 2 — Copy the access token
On the app detail page, click Show token and copy it. Starts with pat-na1-... or similar.
Step 3 — Connect in ARHive
HubSpot card → paste token → save. Contact lists load.
Step 1 — Generate API v3 key
In Brevo: click your account (top right) → SMTP & API → API Keys → Generate a new API key. Name it "ARHive CF7". Copy the key — starts with xkeysib-.
Step 2 — Connect in ARHive
Brevo card → paste key → save. Lists load.
If you're a long-time Sendinblue user: same product, same API. The plugin still uses sendinblue as the internal slug to keep existing buyer configurations working — only the display name changed.
Step 1 — Generate an API token
In MailerLite: Integrations → MailerLite API → Generate new token. Name it, copy the token.
Step 2 — Note: Classic vs New
MailerLite has two platforms — Classic and the newer "MailerLite". The plugin auto-detects which one your token belongs to based on the API response format. You don't need to pick.
Step 3 — Connect in ARHive
MailerLite card → paste token → save. Groups load (MailerLite uses Groups instead of Lists).
If the list dropdown shows "No lists found", your MailerLite account has no Groups created. Log in to MailerLite, go to Subscribers → Groups, create at least one group, then refresh the dropdown.
Step 1 — Click Connect
No API key needed. On the Constant Contact card, click Connect.
Step 2 — Authorise on Constant Contact
You're redirected to app.constantcontact.com. Log in with your Constant Contact account. Click Allow on the authorisation screen.
Step 3 — Done
You're redirected back to ARHive's settings page. The Constant Contact card now shows "Connected". Lists load.
OAuth tokens last about 24 hours, but the refresh token is valid for years. ARHive refreshes silently before each API call — you'll never see an "expired token" error in normal operation.
All other providers
The remaining 17 providers follow the same pattern as the ones above — find an API key in your provider's dashboard, paste it into ARHive. The connect modal for each one shows a "Where to find your API key →" link that goes to the exact help article for that provider, including which menu to click and what the credential looks like.
Quick reference for the most common ones: AWeber and CleverReach use OAuth (same flow as Constant Contact). ActiveCampaign needs both an API URL and an API Key (both visible at Settings → Developer). GetResponse, Kit, Drip, iContact, Campaign Monitor, Sendlane, MailWizz, Omnisend, EmailOctopus, Moosend, beehiiv, SendPulse, and SendFox all use a single API key/token found in their respective Settings → API screens.
Upgrading is painless.
v3 reads v2's saved data automatically. No re-configuration needed for existing forms. Existing API keys, list selections, and field mappings all carry over.
Standard practice for any plugin update: take a database backup. WordPress's built-in plugin updater handles the file swap.
If you're an existing CodeCanyon buyer, you'll see an update notification in Plugins → Installed Plugins. Click "Update Now". Alternatively, deactivate the v2 plugin, delete the files, and install v3 fresh — your settings live in the database and survive.
On first activation, v3 runs a one-time migration that reads v2's option keys and copies them to v3's namespace. You'll see a one-time admin notice confirming success.
Submit a test form for each of your live CF7 forms to confirm sync still works. Check the activity log (ARHive CF7 → Activity) for any failures.
What changed in v3
| Area | v2 | v3 |
|---|---|---|
| Providers supported | 13 | 23 |
| PHP version | 8.1+ | 8.1+ (8.4 tested) |
| Admin UI | Tabbed form-based settings | Card grid with live search |
| OAuth providers | Constant Contact, Mautic | + AWeber, CleverReach |
| Security | Some unauthenticated AJAX | Fully nonce-gated |
| External libraries | Multiple SDKs (Composer) | Zero — pure wp_remote_* |
| Field mapping | Email only | Any CF7 field → any provider field |
When things don't go right.
Form submits, but no subscriber appears in the provider
Most likely cause: the form's Autoresponder tab isn't set, or the provider's API key is invalid.
- Check ARHive CF7 → Activity for the most recent submission — it'll show success or failure with reason.
- Open the CF7 form editor, click the Autoresponder tab, verify the provider + list are picked and a list is selected.
- Go to ARHive's Settings page and re-test the provider connection (the "Test connection" button on each connected card).
"No lists found" in the form's list dropdown
Your provider account doesn't have any lists/audiences/groups created yet. Log into the provider, create at least one, then come back and refresh the dropdown.
OAuth provider says "Token expired"
Rare — the auto-refresh logic handles this in normal operation. If you see it, click Disconnect on the provider card and reconnect. Usually means the OAuth scope was revoked from the provider's side.
Fatal error on PHP 8.0 or below
v3 requires PHP 8.1 minimum. Contact your host and upgrade to a supported PHP version. 8.0 went end-of-life in November 2023 and receives no security patches.
"There has been a critical error on this website"
If this appears right after activating v3, your PHP version is likely 8.0 or lower. Check via Tools → Site Health → Info → Server. Upgrade PHP via your host's control panel.
Email support at support@ommune.com. Include your WordPress version, PHP version, the provider you're trying to connect, and the most recent entry from the Activity log. We typically respond within one business day.
Extend without forking.
v3 exposes WordPress actions and filters so developers can extend behaviour without modifying plugin files.
Filter: modify subscriber data before push
// Transform field values before they're sent to the provider. add_filter( 'arhive_cf7_subscriber_data', function( $data, $provider_slug, $form_id ) { // Example: prefix every name with "Lead: " for Klaviyo. if ( $provider_slug === 'klaviyo' && isset( $data['first_name'] ) ) { $data['first_name'] = 'Lead: ' . $data['first_name']; } return $data; }, 10, 3 );
Action: react to a successful submission
// Fires after a subscriber is successfully pushed to a provider. add_action( 'arhive_cf7_subscriber_pushed', function( $provider_slug, $list_id, $subscriber_data ) { // Example: log every Mailchimp signup to a custom table. if ( $provider_slug === 'mailchimp' ) { do_action( 'my_custom_logger', $subscriber_data['email'] ); } }, 10, 3 );
Filter: skip the push entirely
// Return true to skip the autoresponder push for this submission. add_filter( 'arhive_cf7_skip_submission', function( $skip, $form_id, $submitted_data ) { // Example: skip pushes from internal emails. if ( isset( $submitted_data['your-email'] ) ) { $email = $submitted_data['your-email']; if ( str_ends_with( $email, '@mycompany.com' ) ) { return true; } } return $skip; }, 10, 3 );
Common questions.
Do I need a separate plugin for each autoresponder?
No — that's the point. One plugin, 23 providers. Configure as many or as few as you need; the ones you don't use don't slow anything down.
Does this work with the free Contact Form 7?
Yes — that's the only version of CF7 there is. ARHive CF7 is the paid add-on that gives CF7 autoresponder superpowers.
Does it work with WPCF7 add-ons like Conditional Fields or Flamingo?
Yes. ARHive hooks into CF7's standard wpcf7_mail_sent action, which fires after any other CF7 add-on has finished its work. Conditional Fields, Flamingo, Multi-Step, and similar add-ons all coexist cleanly.
Will my form submissions still send to my inbox?
Yes. CF7's built-in email-sending (the Mail tab) runs independently of ARHive. The autoresponder push happens in addition to your normal CF7 email, not instead of it.
What if my provider's API is down?
The form submission still succeeds for the visitor — they see the normal "Thank you" message and receive any auto-reply email you've configured in CF7's Mail 2 tab. The autoresponder push retries logic depends on the provider; the failure is logged to the Activity log either way.
Can I see logs of all sync attempts?
Yes — ARHive CF7 → Activity shows every push with timestamp, provider, list, status, and error message (if any).
Does the plugin work on multisite?
Yes. Configure providers per-site or share via the network admin — your call. Each site has its own settings.
How often do you update?
Patches as needed (typically same-week for any reported breakage). Feature releases roughly twice a year. Buyers get lifetime updates included with the purchase.
What's the refund policy?
CodeCanyon's standard refund policy applies — see their refund rules. We'll help resolve any issues before considering a refund; most reported problems are fixable within a day.
Release history.
v3.0.1 — May 11, 2026
- Critical fix: resolved fatal error on PHP 8.1 installs caused by
true|WP_Errorreturn types (a PHP 8.2+ feature). All provider method signatures now usebool|WP_Error, which works correctly on PHP 8.1+. - Removed two empty literal-glob directories from the zip.
v3.0.0 — May 10, 2026
Major release — full rebuild from the ground up.
- 10 new autoresponder integrations: Klaviyo, HubSpot, AWeber, Omnisend, EmailOctopus, Moosend, CleverReach, beehiiv, SendPulse, SendFox. Total: 23 providers.
- Sendinblue is now Brevo. ConvertKit is now Kit. Existing credentials carry over.
- Redesigned admin: pastel-glass UI, live provider search, one-click connect modal.
- All AJAX endpoints now require authenticated admin + nonce. Removed unauthenticated AJAX from v2.
- MailerLite auto-detects new vs Classic accounts.
- Mautic migrated off the abandoned api-library SDK to a direct OAuth2 implementation.
- Tested against PHP 8.1, 8.2, 8.3, 8.4. WordPress 6.7.
v2.0 — March 28, 2023
- Updated all APIs and fixed deprecated code to work with PHP 8.1.
v1.0 — November 21, 2016
- Initial release on CodeCanyon.