CF7 to Keap (Infusionsoft) Not Adding Contacts: A Complete Troubleshooting Guide
You have built a Contact Form 7 form. You have connected it to Keap (formerly Infusionsoft) through the "Contact Form to Any API" plugin. You have entered your API credentials and mapped the fields. And yet, when a user submits the form, no contact appears in your Keap CRM. This is a frustratingly common problem. The good news? The issue is almost always one of four things, and each has a clear…
This article provides a comprehensive troubleshooting guide for when Contact Form 7 (CF7) to Keap (formerly Infusionsoft) fails to add contacts to the CRM. The issue typically arises from one of four common problems, each with a clear solution.
The first step in diagnosing the problem is to check the plugin's API Logs page. This will show whether a request was sent from the plugin, the exact JSON payload, and the response received from Keap. If no request appears, the issue lies on the WordPress side, and you should refer to the guide on Contact Form 7 data not reaching the API.
The first failure mode is that the Infusionsoft field prefix is missing. Older integrations required a specific field naming convention where every field sent to Infusionsoft must be prefixed with "infusionsoft-". If a field name does not follow this convention, the data will not reach the API. To fix this, rename the CF7 fields in the form editor to include the "infusionsoft-" prefix.
Then, update the field mappings in the plugin to match the prefixed CF7 field names with the Keap API parameters. Test with a minimal form to ensure the issue is resolved.
The second failure mode is that the OAuth authentication is not configured correctly. Keap uses OAuth 2.0 for API authentication, requiring a valid access token and proper management of a refresh token. Common issues include token expiration and inability to refresh it automatically. To address this, verify your OAuth credentials in Keap's API Settings and generate a fresh API token through the developer portal.
Configure the plugin to use the Bearer token in the Authorization header and ensure it handles token refresh correctly when the access token expires.
The third failure mode is that the API payload structure is incorrect. Keap's API is strict about the JSON format for contact creation, expecting specific nested objects for email addresses and phone numbers. A common error message is "Field is invalid" or "Bad Request". To resolve this, start with a minimal payload that includes the given_name, family_name, and email_addresses fields with the correct structure.
Use the appropriate field names for each property, such as given_name for the first name and email_addresses as an array with email and field properties. Include the Content-Type header as application/json and make sure to use the correct endpoint: https://api.infusionsoft.com/crm/rest/v1/contacts. Note that if you include an address in the payload, the region field must use ISO region codes (e.g., US-CO for Colorado).
The fourth failure mode is that duplicate contact detection may be blocking the creation of new contacts. Keap's API may return the existing contact instead of creating a new one if a contact with the same email address already exists. This is by design, but it can cause issues if you expect new contacts to be created. To address this, check the response from Keap and verify that a new contact was indeed created.
If not, investigate further to ensure your form and plugin configuration are set up correctly to handle duplicate contacts appropriately.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.