Title: MirooCRM Sync for Contact Form 7
Author: Doozy.it
Published: <strong>July 14, 2026</strong>
Last modified: July 14, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/miroocrm-sync-for-contact-form-7.svg)

# MirooCRM Sync for Contact Form 7

 By [Doozy.it](https://profiles.wordpress.org/wpdoozy/)

[Download](https://downloads.wordpress.org/plugin/miroocrm-sync-for-contact-form-7.1.1.0.zip)

 * [Details](https://wordpress.org/plugins/miroocrm-sync-for-contact-form-7/#description)
 * [Reviews](https://wordpress.org/plugins/miroocrm-sync-for-contact-form-7/#reviews)
 *  [Installation](https://wordpress.org/plugins/miroocrm-sync-for-contact-form-7/#installation)
 * [Development](https://wordpress.org/plugins/miroocrm-sync-for-contact-form-7/#developers)

 [Support](https://wordpress.org/support/plugin/miroocrm-sync-for-contact-form-7/)

## Description

MirooCRM Sync for Contact Form 7 listens to the Contact Form 7 `wpcf7_mail_sent`
hook and, for the forms you select in the plugin settings, creates the following
on MirooCRM:

 1. A **Customer** record, with the form message stored in `notes` and the `lead_source`
    field filled in (default: “CF7 Sito”).
 2. A **Contact** linked to that customer, with name, surname, email and phone taken
    from the CF7 fields.

The MirooCRM JWT token always stays on the WordPress server: it is never exposed
to the browser.

#### Features

 * Settings page under **Settings  MirooCRM Sync for Contact Form 7** for API URL,
   JWT and lead source.
 * Explicit selection of the CF7 forms to sync: forms that are not selected are 
   ignored.
 * Configurable CF7  MirooCRM field mapping from the admin.
 * **Asynchronous sync** via WP-Cron: the submission responds immediately and the
   API calls run in the background. Can be disabled with the `miroocrm_cf7_async`
   filter.
 * **JWT token encrypted at rest** (AES-256-GCM with a key derived from the WordPress
   salts) and never printed back to the browser.
 * **Duplicate-submission guard**: identical submissions sent in quick succession
   are ignored.
 * **Automatic retry** on API calls in case of a network error or a 5xx/429 response.
 * Admin-readable log with personal data masked; mirrored to `error_log()` when `
   WP_DEBUG` is enabled.
 * WordPress filters for custom logic: `miroocrm_cf7_field_map`, `miroocrm_cf7_customer_attrs`,`
   miroocrm_cf7_contact_attrs`, `miroocrm_cf7_async`, `miroocrm_cf7_dedup_ttl`, `
   miroocrm_cf7_http_timeout`, `miroocrm_cf7_http_retries`, `miroocrm_cf7_log_redact`.
 * Action hooks `miroocrm_cf7_sync_success`, `miroocrm_cf7_sync_error`, `miroocrm_cf7_sync_partial`.

#### Requirements

 * Contact Form 7 active.
 * A reachable MirooCRM API endpoint (e.g. `https://app.miroocrm.com/api/v1`).
 * A MirooCRM Bearer JWT with permission to `POST /customers` and `POST /contacts`.

### External services

This plugin connects to MirooCRM, a CRM service operated by Doozy Service Srl. It
is used to turn the Contact Form 7 submissions you choose into CRM records: for 
each selected form it creates a customer and a linked contact in your MirooCRM account.

What data is sent, and when: when a visitor successfully submits one of the CF7 
forms you enabled in the plugin settings, the plugin sends the mapped submission
fields (such as name, surname, email, phone, message and company) to the MirooCRM
REST API endpoint you configure (for example `https://app.miroocrm.com/api/v1`).
Nothing is sent for forms that are not selected, and nothing is sent until an administrator
has entered the API base URL and an API token. The token is stored on your server
and is never sent to the browser.

Using the MirooCRM service requires a MirooCRM account; its terms of use are accepted
when the account is created. Legal documents for the service:

 * Privacy policy: https://miroocrm.it/privacy-policy/
 * Cookie policy: https://miroocrm.it/cookie-policy/

The plugin does not communicate with any other external service.

## Installation

 1. Upload the `miroocrm-sync-for-contact-form-7` folder to `wp-content/plugins/`.
 2. Activate the plugin from the Plugins screen.
 3. Go to **Settings  MirooCRM Sync for Contact Form 7** and configure the API URL 
    and JWT.
 4. Select the CF7 forms to sync and save.

## FAQ

### Does the plugin send emails?

No. Email delivery is still handled by Contact Form 7. This plugin only adds the
MirooCRM sync, after the main email has been sent successfully.

### What happens if the API is down?

The call is retried automatically on a network error or a 5xx/429 response. If it
keeps failing, the error is logged and propagated through `miroocrm_cf7_sync_error`.
The CF7 submission still succeeds for the user: the MirooCRM sync runs in the background
and is best-effort.

### Is the sync immediate?

The API calls run asynchronously via WP-Cron right after the submission, so the 
user does not wait for MirooCRM. On low-traffic sites, where WP-Cron fires on the
next visit, there may be a small delay. To force inline (blocking) sync, use the`
miroocrm_cf7_async` filter and return `false`.

### Can I exclude a specific form (e.g. “Work with us”)?

Yes. Just leave it unselected in the list of forms to sync. Only the checked forms
create a record on MirooCRM.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“MirooCRM Sync for Contact Form 7” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Doozy.it ](https://profiles.wordpress.org/wpdoozy/)

[Translate “MirooCRM Sync for Contact Form 7” into your language.](https://translate.wordpress.org/projects/wp-plugins/miroocrm-sync-for-contact-form-7)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/miroocrm-sync-for-contact-form-7/),
check out the [SVN repository](https://plugins.svn.wordpress.org/miroocrm-sync-for-contact-form-7/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/miroocrm-sync-for-contact-form-7/)
by [RSS](https://plugins.trac.wordpress.org/log/miroocrm-sync-for-contact-form-7/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.1.0

 * Performance: API calls run asynchronously via WP-Cron, so the CF7 submission 
   no longer waits for MirooCRM.
 * Security: JWT token encrypted at rest (AES-256-GCM) and no longer printed back
   to the browser on the settings page.
 * Security: personal data is masked in the log.
 * Robustness: duplicate-submission guard, automatic retry on network/5xx/429 errors,
   guard against incomplete mapping.
 * Added `uninstall.php` to clean up options, cron events and transients on uninstall.
 * New filters: `miroocrm_cf7_async`, `miroocrm_cf7_dedup_ttl`, `miroocrm_cf7_http_timeout`,`
   miroocrm_cf7_http_retries`, `miroocrm_cf7_log_redact`.

#### 1.0.0

 * Initial release: sync customers + contacts via JSON:API, settings page, configurable
   mapping.

## Meta

 *  Version **1.1.0**
 *  Last updated **13 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [cf7](https://wordpress.org/plugins/tags/cf7/)[contact form 7](https://wordpress.org/plugins/tags/contact-form-7/)
   [crm](https://wordpress.org/plugins/tags/crm/)[lead](https://wordpress.org/plugins/tags/lead/)
 *  [Advanced View](https://wordpress.org/plugins/miroocrm-sync-for-contact-form-7/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/miroocrm-sync-for-contact-form-7/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/miroocrm-sync-for-contact-form-7/reviews/)

## Contributors

 *   [ Doozy.it ](https://profiles.wordpress.org/wpdoozy/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/miroocrm-sync-for-contact-form-7/)