A
ARHive CF7
Documentation · v3.0
View on CodeCanyon →
ARHive CF7 · Documentation

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.

23
Autoresponders supported
PHP 8.1+
Modern, future-ready
0
External dependencies
CF7 5+
Tested compatibility
01 · Overview

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.

23 integrations

From household names like Mailchimp and HubSpot to specialised tools like beehiiv and Mautic.

Per-form mapping

Different forms can connect to different providers and different lists. Set it once per form.

Zero-config field map

Auto-detects name and email fields. Manual override available for custom fields.

🔐
OAuth where needed

Constant Contact, Mautic, AWeber, and CleverReach use secure OAuth — no copying tokens.

🛡️
Security-hardened

All AJAX endpoints require authentication. All inputs sanitised. Zero unauthenticated routes.

No bloat

No jQuery, no React, no external libraries. Plain PHP + vanilla JS. Loads fast, stays out of the way.

💡
New in v3.0

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 →

02 · Server requirements

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.

RequirementMinimumRecommendedNotes
WordPress6.06.7+Tested up to 6.7. Older versions not supported.
PHP8.18.2 or 8.3PHP 8.0 and below are end-of-life — not supported.
Contact Form 75.0LatestRequired dependency. Free from wordpress.org.
MySQL5.78.0+MariaDB 10.3+ also works.
Outbound HTTPSRequiredRequiredPlugin talks to provider APIs over HTTPS via wp_remote_post.
Browser (admin)Chrome / Firefox / Safari / Edge — latest two versionsIE11 not supported. Aurora UI uses backdrop-filter.
⚠️
PHP 8.0 and below

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.

03 · Installation

Up in under a minute.

1
Install Contact Form 7

If you don't already have it: WP Admin → Plugins → Add New, search for "Contact Form 7", install, activate. It's free.

2
Download the plugin

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.

3
Upload 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.

4
Open the settings page

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.

That's the install

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.

04 · Your first form

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.

1
Connect the 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).

2
Open a CF7 form

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.

3
Pick provider + list

On the Autoresponder tab, pick Mailchimp from the provider dropdown. The list dropdown loads. Pick the target list.

4
Map fields (optional)

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.

5
Save the form

Click Save on the form (CF7's standard save button). That's it — submissions to this form will now also push to Mailchimp.

💡
Test the integration

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.

05 · Architecture

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.

Architecture
   # 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.

06 · Submission data flow

What happens when a visitor hits Send.

#StepWho
1Visitor submits CF7 form on your siteContact Form 7
2CF7 fires its wpcf7_mail_sent action after the email is dispatchedContact Form 7
3ARHive's Submission Dispatcher catches the actionARHive CF7 core
4Dispatcher reads the form's saved provider slug + list ID from post metaARHive CF7 core
5Dispatcher extracts mapped fields (email, name, custom) from the form submissionARHive CF7 core
6Dispatcher calls the provider class: add_subscriber(list_id, fields)ARHive CF7 core
7Provider class sends HTTP request to provider API via shared HTTP helperProvider class
8Result logged to activity log (success / error)ARHive CF7 core
💡
Non-blocking

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.

07 · Security model

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.

ConcernHow v3 handles it
AJAX authenticationEvery endpoint requires wp_verify_nonce + current_user_can('manage_options'). No exceptions.
Input sanitisationAll POST values pass through sanitize_text_field, sanitize_email, etc. before storage.
Output escapingAll admin output uses esc_html, esc_attr, esc_url. No raw echo of user input.
SQL injectionNo raw SQL anywhere. All data accessed via get_option / get_post_meta.
API credentialsStored in the WP options table. Never logged. Never echoed back to the browser after save.
HTTP requestsAlways over HTTPS. wp_remote_* with explicit timeout (15s) and SSL verification.
OAuth stateRandom 32-byte state token per flow. Verified on callback. Single-use.
Error handlingProvider failures never crash the form submission. All exceptions caught at the dispatcher level.
08 · 23 providers

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.

Mailchimp API Key
ActiveCampaign API Key
Brevo API Key
GetResponse API Key
Constant Contact OAuth
Kit API Key
iContact API Key
Drip API Key
MailerLite API Key
Campaign Monitor API Key
Sendlane API Key
MailWizz API Key
Mautic OAuth
Klaviyo API Key
HubSpot API Key
Omnisend API Key
EmailOctopus API Key
AWeber OAuth
Moosend API Key
CleverReach OAuth
beehiiv API Key
SendPulse API Key
SendFox API Key
09 · Field mapping

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 nameMaps to
your-email, email, email-addressProvider's email field (required)
your-name, name, full-nameProvider's first/full name field
first-name, fnameProvider's first-name field
last-name, lnameProvider's last-name field
phone, your-phoneProvider'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.

💡
Custom fields in the provider

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.

10 · OAuth providers

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

1
Click Connect on the provider card

The OAuth providers show a "Connect" button instead of an API key field. Click it.

2
Authorise on the provider's site

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.

3
Token stored, ready to use

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.

💡
Auto-refresh

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.

11 · Per-form configuration

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

OptionEffect
ProviderWhich autoresponder to send to. Dropdown of connected providers only.
List / Audience / GroupWhich list within the provider. Loads via AJAX when provider is picked.
Field mapCF7 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.
12 · Provider guides

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.

Mailchimp
Email & marketing CRM · API Key

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.

Klaviyo
E-commerce marketing automation · API Key

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.

HubSpot
CRM + marketing platform · API Key (Private App)

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.

Brevo (formerly Sendinblue)
Email & SMS marketing · API Key

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.

MailerLite
Modern email marketing · API Key

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.

Constant Contact
Marketing toolkit · OAuth

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.

13 · Upgrading from v2

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.

1
Back up first

Standard practice for any plugin update: take a database backup. WordPress's built-in plugin updater handles the file swap.

2
Update via WordPress

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.

3
Migration runs automatically

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.

4
Verify your forms

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

Areav2v3
Providers supported1323
PHP version8.1+8.1+ (8.4 tested)
Admin UITabbed form-based settingsCard grid with live search
OAuth providersConstant Contact, Mautic+ AWeber, CleverReach
SecuritySome unauthenticated AJAXFully nonce-gated
External librariesMultiple SDKs (Composer)Zero — pure wp_remote_*
Field mappingEmail onlyAny CF7 field → any provider field
14 · Troubleshooting

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.

💡
Still stuck?

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.

15 · Developer hooks

Extend without forking.

v3 exposes WordPress actions and filters so developers can extend behaviour without modifying plugin files.

Filter: modify subscriber data before push

PHP
// 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

PHP
// 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

PHP
// 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 );
16 · FAQ

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.

17 · Changelog

Release history.

v3.0.1 — May 11, 2026

  • Critical fix: resolved fatal error on PHP 8.1 installs caused by true|WP_Error return types (a PHP 8.2+ feature). All provider method signatures now use bool|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.