> ## Documentation Index
> Fetch the complete documentation index at: https://help.retainful.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Fix: "WooCommerce plugin not installed"

> What to do when Retainful reports the WooCommerce plugin is not installed, even though you've installed and activated it.

You installed the Retainful plugin on your WordPress site, activated it, and Retainful still says the plugin isn't installed. This almost always means one of two things: a different plugin is installed, or your server is blocking Retainful's verification request.

Work through the steps below in order.

## Step 1: Verify the correct plugin is installed

Retainful looks for one specific plugin: **Email Marketing for WordPress and WooCommerce - Retainful**. An older or similarly-named plugin won't be detected.

To check what you have:

1. Log in to your **WordPress admin**.
2. Go to **Plugins → Installed Plugins**.
3. Search for **Email Marketing for WordPress and WooCommerce - Retainful**.

If it isn't there:

1. Go to **Plugins → Add New**.
2. Search for **Email Marketing for WordPress and WooCommerce - Retainful**.
3. Click **Install**, then **Activate**.

Make sure you're on the latest version, and that the plugin is **Active** rather than merely installed.

## Step 2: Check for connection blocking

If the plugin is installed and active and Retainful still can't see it, your site is almost certainly blocking our request. Common culprits:

* Firewall rules
* Security plugins such as Wordfence or Sucuri
* Hosting-level protections, including Cloudflare or a server firewall
* Any rule that restricts external API requests

<Note>
  Retainful verifies the plugin by making a request **to** your store. If that request never arrives, the plugin looks missing from our side no matter how correctly it's installed.
</Note>

## Step 3: Allow Retainful through Cloudflare

If your site is behind Cloudflare, allow Retainful's IP address through your security rules.

<Warning>
  **On Cloudflare's Free plan**, Bot Fight Mode can't be scoped to a single IP — the custom rule below won't override it. You'll need to turn Bot Fight Mode off. On paid plans, follow the steps below instead.
</Warning>

<Steps>
  <Step title="Open your security rules">
    In the Cloudflare dashboard, select your domain, then go to **Security → Security rules**.

    <Frame>
      <img src="https://mintcdn.com/retainful/eF8zQlqOV-ijZ_tL/images/1.png?fit=max&auto=format&n=eF8zQlqOV-ijZ_tL&q=85&s=2c25538493f4c1327fdd0d40adb0f931" alt="1" title="1" lightAlt="1" darkAlt="1" className="dark:hidden" width="1600" height="713" data-path="images/1.png" />

      <img src="https://mintcdn.com/retainful/eF8zQlqOV-ijZ_tL/images/1.jpg?fit=max&auto=format&n=eF8zQlqOV-ijZ_tL&q=85&s=e415aecea62fa567f707968156d08042" alt="1" title="1" lightAlt="1" darkAlt="1" className="hidden dark:block" width="768" height="342" data-path="images/1.jpg" />
    </Frame>
  </Step>

  <Step title="Create a custom rule">
    Click **Create rule** and choose **Custom rules**.

    <Frame>
      <img src="https://mintcdn.com/retainful/eF8zQlqOV-ijZ_tL/images/2.png?fit=max&auto=format&n=eF8zQlqOV-ijZ_tL&q=85&s=2c2c3ce79ec53ee2a5083dd56af6f82e" alt="Image" width="1600" height="721" data-path="images/2.png" />
    </Frame>
  </Step>

  <Step title="Match Retainful's IP address">
    Give the rule a name and match on Retainful's address:

    | Setting   | Value                 |
    | --------- | --------------------- |
    | Rule name | `Allow Retainful`     |
    | Field     | **IP Source Address** |
    | Operator  | **equals**            |
    | Value     | `52.15.242.48`        |

    The expression preview should read `(ip.src eq 52.15.242.48)`.

    <Frame>
      <img src="https://mintcdn.com/retainful/eF8zQlqOV-ijZ_tL/images/image.png?fit=max&auto=format&n=eF8zQlqOV-ijZ_tL&q=85&s=17805ae67b691581aa3d0ced896db728" alt="Image" width="1600" height="674" data-path="images/image.png" />
    </Frame>
  </Step>

  <Step title="Set the action to Skip">
    Under **Then take action**, choose **Skip**.
  </Step>

  <Step title="Choose what to skip, then deploy">
    Under **WAF components to skip**, tick all four:

    * All remaining custom rules
    * All rate limiting rules
    * All managed rules
    * All Super Bot Fight Mode rules

    Then click **Deploy**.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/retainful/images/integrations/cloudflare-skip-and-deploy.png" alt="WAF components to skip with all four options checked, and the Deploy button at the bottom of the form" />
    </Frame>
  </Step>
</Steps>

## Step 4: Reconnect your store

Return to Retainful and try connecting your store again. See [Connect WooCommerce](/integrations/woocommerce) for the full connection flow.

## Why this happens

Installing the plugin correctly isn't enough on its own. Retainful confirms the installation by calling your store, so if your server blocks that call, verification fails and we report the plugin as missing — even though it's sitting there, installed and active. Allowing our IP through lets the check complete.

## Still stuck?

If the connection still fails after allowing our IP:

* Temporarily disable security plugins such as Wordfence or Sucuri and retry, to confirm whether they're the cause.
* Check with your host about server-level firewalls that sit in front of WordPress.
* Email [support@retainful.com](mailto:support@retainful.com), or [book an onboarding call](https://zcal.co/retainful/onboarding).
