DEV Community

Rahul Sharma
Rahul Sharma

Posted on

CF7 to HubSpot Deal Not Created: Why It Happens and How to Fix It

You have connected Contact Form 7 to HubSpot. Contacts appear in your CRM. Companies are created. But deals? They never show up.

This is one of the most common frustrations with CF7-to-HubSpot integrations. The contact gets created. The deal does not. And the reason is not a bug in your plugin or a missing field mapping. It is a fundamental architectural fact about how HubSpot works.

HubSpot's form submission APIs are contact-centric. They are designed to create or update contacts. They do not create deals. Even if you include deal fields in a form submission, HubSpot's API ignores them.

This guide explains exactly why deals fail to create and walks through the verified solutions.

Why HubSpot Does Not Create Deals from Form Submissions

HubSpot's native form handling and its Forms API are built around contacts. When a form is submitted, HubSpot creates or updates a contact record. It may also create a company if the contact's email domain matches an existing company or if specific settings are enabled. But deals are not part of the default form submission flow.

A HubSpot community moderator confirmed this directly: "Out of the box form submissions do not create deals." Even if you put deal fields on a form definition, the submissions endpoint is designed to create or update the contact record only, then expose those values so you can act on them with workflows or other APIs afterward.

This means that regardless of which WordPress plugin you use "Contact Form to Any API," the official HubSpot plugin, or any other integration a standard form submission will not create a deal automatically.

If no contact appears in HubSpot at all, the problem may be earlier in the pipeline. For a deeper breakdown of that scenario, see this guide on Contact Form 7 data not reaching the API.

Failure #1: You Are Targeting the Contacts Endpoint, Not the Deals Endpoint

What you see: Contacts appear in HubSpot. Deals never appear. The plugin's API logs show a successful 200 or 201 response, because the contact creation succeeded.

Why it happens: The "Contact Form to Any API" plugin requires you to specify the API endpoint manually. If you are using the HubSpot Contacts endpoint (/crm/v3/objects/contacts), the plugin creates a contact and nothing else. There is no deal creation because the endpoint does not handle deals.

The fix:

You have two options. The first is to target the Deals endpoint directly. HubSpot's Deals API accepts a POST request to /crm/v3/objects/deals with a properties object.

Your payload would look like this:

{
  "properties": {
    "dealname": "[your-name] - Website Inquiry",
    "dealstage": "appointmentscheduled",
    "pipeline": "default"
  }
}
Enter fullscreen mode Exit fullscreen mode

Critical detail: You must use the internal ID of a deal stage, not its display label. The internal ID for "Appointment Scheduled" might be appointmentscheduled, but you should verify this in your HubSpot deal pipeline settings.

The second option is to create the contact via the plugin and then use a HubSpot workflow to create the deal. This is the approach HubSpot recommends for most users.

Failure #2: The Deal Stage or Pipeline ID Is Wrong

What you see: HubSpot returns a 400 Bad Request error. The response mentions an invalid dealstage or pipeline.

Why it happens: HubSpot's Deals API requires internal IDs for dealstage and pipeline, not human-readable names. If you use dealstage: "New" but the internal ID is appointmentscheduled, the request fails.

The fix:

Step 1: In HubSpot, navigate to Settings → Objects → Deals → Pipelines.

Step 2: Click on your pipeline and locate the stage you want to use. The internal ID is displayed alongside the stage name.

Step 3: Update your JSON payload to use the internal ID:

{
  "properties": {
    "dealname": "[your-name] - Website Inquiry",
    "dealstage": "appointmentscheduled",
    "pipeline": "default"
  }
}
Enter fullscreen mode Exit fullscreen mode

If you omit pipeline, HubSpot uses the default pipeline. If you omit dealstage, HubSpot may reject the request or use a default stage depending on your account configuration.

For a deeper dive into JSON structure mapping and payload construction, read this guide on Contact Form 7 JSON mapping.

Failure #3: The Workflow That Should Create Deals Is Not Firing

What you see: Contacts are created. The workflow you set up to create deals is either not enrolling contacts or not completing the deal creation action.

Why it happens: HubSpot workflows that create deals from form submissions require specific enrollment triggers and actions. If the enrollment criteria do not match the contact's properties, the workflow never runs. If the "Create record" action is missing or misconfigured, the deal is never created.

The fix:

Step 1: In HubSpot, navigate to Automation → Workflows.

Step 2: Check your deal-creation workflow. The enrollment trigger should be "Contact submitted form X" or "Contact property [specific field] is known."

Step 3: Verify the workflow contains a "Create record" action targeting Deals. The action should map contact properties to deal properties.

Step 4: Check the workflow's action log. If contacts are enrolling but the action fails, the log will show the error. If contacts are not enrolling, the enrollment criteria are too narrow.

A HubSpot community user described this exact problem: contacts were created from form submissions, but deals were not. The moderator confirmed that a workflow was required and asked the user to check the action log for enrollment or execution errors.

Failure #4: The Contact Has No Associated Company

What you see: Deals are created for some contacts (those with business email domains) but not others (those with Gmail, Yahoo, or other free email providers).

Why it happens: If your deal-creation workflow or HubSpot's automatic company association settings depend on the contact having a company, freemail contacts will not trigger deal creation. HubSpot's "Automatically create and associate companies with contacts" setting may block company creation for free email domains.

The fix:

Option A: Create a second workflow that enrolls contacts without an associated company and creates the company first. Then the deal-creation workflow can run.

Option B: Modify your deal-creation workflow to not require a company association. The deal can be created directly from the contact record without a company link.

Option C: Use the "Contact Form to Any API" plugin to call the Deals API directly, bypassing HubSpot's workflow logic entirely. This gives you full control over when a deal is created, regardless of the contact's email domain.

The Debugging Checklist

Step Action What It Reveals
1 Check the plugin's API Logs Was a request sent? To which endpoint?
2 Verify the endpoint URL Does it target /deals or /contacts?
3 Check the dealstage internal ID Is it the ID, not the display name?
4 Check HubSpot workflow enrollment Are contacts enrolling in the deal-creation workflow?
5 Check the workflow action log Did the "Create record" action execute successfully?
6 Test with a business email Does the deal create when the contact has a company domain?

For a comprehensive breakdown of API authentication and error handling across different integrations, see this guide on Contact Form 7 API authentication errors.

Beyond Deals: One Form, Multiple Destinations

Once your deal creation works, you might want to send the same submission to other HubSpot objects or external tools.

A good connector plugin supports multiple API integrations from a single form submission. You can create a HubSpot contact, a deal, and send an SMS via Twilio, all from one CF7 submission. For a cost comparison, see this article on Zapier vs a dedicated API plugin.

Key Takeaways

HubSpot form submissions do not create deals automatically. The Forms API and contact endpoints are contact-centric. Deals require either a direct API call to the Deals endpoint or a HubSpot workflow.

The Deals API requires internal IDs for dealstage and pipeline. Using display names instead of IDs causes 400 errors.

Workflows are the native HubSpot solution. Create a workflow that enrolls contacts from form submissions and uses the "Create record" action to create deals.

Freemail contacts may not trigger company-based workflows. If your workflow requires a company association, Gmail and Yahoo contacts may be skipped.

Direct API calls to the Deals endpoint give you full control. Use the plugin to POST to /crm/v3/objects/deals with the correct properties and IDs, bypassing HubSpot's workflow logic entirely.

With the right endpoint, correct internal IDs, and a properly configured workflow or direct API call, your CF7 submissions will create deals in HubSpot reliably.

Top comments (0)