A site owner posted on the WordPress forums with a problem that had been going on for months. Their CF7 form was connected to Sendinblue (now called Brevo) using CF7's built-in integration. Every time someone submitted the form, a new contact appeared in Sendinblue. But it always landed in the general "All Contacts" pool, never in the specific list they had selected in the plugin settings. The welcome email also never fired.
The CF7 plugin author said: "Necessary fields are missing in your form."
The site owner did not understand what that meant. Neither did a second person who replied months later with the exact same problem. The thread was closed with the issue unresolved for both of them.
This post explains what "necessary fields are missing" actually means, why the built-in integration behaves this way, and how to get contacts reliably into the right Sendinblue list every time.
What "Necessary Fields Are Missing" Actually Means
CF7's built-in Sendinblue integration has a step called Contact Attribute to Form-Field Mapping. This is where you tell CF7 which form field corresponds to which Sendinblue contact attribute.
The critical field is the email address. Even if your CF7 form has an email field, CF7's built-in Sendinblue integration does not automatically know that your email field should map to Sendinblue's EMAIL attribute. You have to map it explicitly in the integration settings.
Here is what happens when the email field is not mapped:
- Sendinblue receives a contact creation request
- Because no email attribute is explicitly provided in the mapped fields, Sendinblue creates a generic "identified contact" without a proper email
- Without a valid email, Sendinblue cannot add the contact to a specific list — lists require identifiable contacts
- The contact lands in the general pool instead of your desired list
- The welcome email never fires because there is no valid email to send to
The fix for CF7's built-in integration is to go to CF7 Settings, open the Sendinblue tab, find the Contact Attribute to Form-Field Mapping section, and add a row that maps EMAIL to your form's email field name (e.g. your-email). Save the settings and test again.
Why This Keeps Tripping People Up
The CF7 Sendinblue integration UI has a separate section for selecting which list contacts should be added to. It is reasonable to assume that selecting a list there is all you need to do. The mapping step feels like optional customisation, not a required prerequisite for the list assignment to work.
But the list assignment depends on the contact having a valid, recognisable email. If the mapping is not set, the email is not in the payload in the way Sendinblue expects it, the contact is created without it, and the list assignment silently fails.
This is a documentation gap, not a bug. But the effect is the same: contacts go to the wrong place and the site owner has no visible error to diagnose.
The More Reliable Fix: Connect Directly to Brevo's API
CF7's built-in Sendinblue integration has multiple settings that have to be configured in exactly the right way before contacts land in the right list. If any one piece is missing, the whole thing silently fails.
A more direct approach is to call Brevo's API yourself with Contact Form to API. You send a POST request to Brevo's contacts endpoint and include the listIds array directly in the request body. There is no hidden mapping requirement. The list ID goes in the payload you control, so you always know exactly which list the contact will land in.
The Brevo API endpoint for this is:
POST https://api.brevo.com/v3/contacts
With a body like this:
{
"email": "person@example.com",
"attributes": {
"FIRSTNAME": "Jane",
"LASTNAME": "Smith"
},
"listIds": [5],
"updateEnabled": true
}
The listIds array is where you put your Brevo list ID. The updateEnabled: true flag means existing contacts get updated rather than rejected, which avoids errors for repeat form submitters.
You find your list ID in Brevo under Contacts, Lists, and then opening the specific list. The ID appears in the URL.
What to Do If the Built-In Integration Fix Does Not Work
If you have added the email mapping and contacts are still landing in the wrong list, check these things.
Confirm your list ID in CF7's settings matches the actual list ID in Sendinblue. It is easy to copy the wrong number if you have multiple lists.
Check whether the Sendinblue list you selected requires double opt-in confirmation. If double opt-in is enabled on the list, contacts are placed in a pending state until they confirm their email. They will not appear in the list until they click the confirmation link in the email Sendinblue sends them.
Check whether the welcome email setting in CF7 is actually tied to a Sendinblue automation or transactional template. As covered in a related post, the welcome email checkbox in CF7's Sendinblue settings has unreliable behaviour and may not trigger a transactional template send.
Summary
Contacts landing in Sendinblue's general pool instead of your specific list almost always means the email field is not mapped in CF7's contact attribute mapping settings. The fix is to explicitly map EMAIL to your form's email field in the integration settings.
For a more reliable setup that gives you full control over which list receives the contact and exactly what data is sent, calling Brevo's contacts API directly through Contact Form to API removes the silent failure risk entirely.
Top comments (0)