Why WooCommerce checkout fields weren’t syncing to HubSpot and how we fixed it

When integrating WooCommerce with HubSpot, it is easy to assume that all checkout fields, especially custom ones, will sync automatically into contact records. In practice, that is not always how the integration works.

In this case, custom WooCommerce checkout fields such as an “I am a” selector and other user-defined inputs were not transferring to HubSpot, even though standard checkout fields like name and email were syncing correctly. After extensive troubleshooting, plugin evaluation, and a custom development solution, the issue was resolved.

Issue Background

A WooCommerce checkout page included several custom fields added through a checkout field editor, including fields such as billing_industry, billing_howd_you_hear, and billing_county.

The site was using a HubSpot integration plugin along with the HubSpot Field to Field Sync add-on to map WooCommerce data to HubSpot contact properties. Even with that setup in place, the custom checkout fields were not appearing in HubSpot contact records.

An early attempt involved embedding a HubSpot form directly onto the checkout page using HubSpot’s embed script. That approach was ultimately removed because it introduced a confusing user experience by placing a second form flow alongside WooCommerce’s native checkout and order submission process.

Diagnosis

The first key discovery was that the sync add-on was designed to work with WordPress user profile fields, not necessarily WooCommerce checkout fields. That distinction mattered.

Although the custom fields were present on the checkout page and the store was capturing their values, those fields were not being included in the data payload sent to HubSpot when an order was submitted.

Additional troubleshooting steps confirmed the issue:

  • Field mappings appeared to be configured correctly inside the plugin.
  • Field names were adjusted to test whether naming mismatches were the cause.
  • Some fields were made required to rule out empty submissions.
  • The main integration plugin and related add-ons were reviewed and updated.

Even after those changes, the custom fields still did not sync as expected.

At that point, the real limitation became clear: the field mapping add-on gave the impression that it supported this use case, but it was not actually targeting WooCommerce checkout field data in the way this workflow required.

Resolution Steps

1. Confirm the checkout fields were saving properly in WooCommerce.

Before changing the integration itself, the first step was verifying that the custom fields were saving correctly in order data. This established that the issue was not with WooCommerce collecting the information, but with HubSpot receiving it.

2. Keep the checkout flow native.

Rather than forcing a separate embedded HubSpot form into the checkout experience, the better path was to preserve the standard WooCommerce checkout flow and make the sync happen behind the scenes.

3. Trace how the HubSpot integration was building its payload.

The existing integration handled default customer fields, but the custom checkout fields were not being passed along with the rest of the contact data.

4. Build a custom PHP solution.

A custom PHP function was added to hook into the checkout process, capture the custom WooCommerce fields, and inject those values into the payload being sent to HubSpot. This allowed the missing checkout values to be handled alongside the default fields during order completion.

5. Configure HubSpot access for the custom sync.

To support the custom implementation, a HubSpot Private App was created with the necessary scopes for contact updates:

  • crm.objects.contacts.read
  • crm.objects.contacts.write

This made it possible to send the missing custom checkout data directly and reliably into the appropriate HubSpot contact properties.

6. Test with live submissions.

After implementation, new checkout submissions were monitored and compared against the resulting HubSpot contact records. The custom fields began syncing properly, confirming that the workaround addressed the real problem.

Final Outcome

Once the custom code was in place, the WooCommerce checkout fields started syncing to HubSpot as intended. The checkout experience remained clean for users, and the site owner was able to capture the segmentation data needed for follow-up marketing inside HubSpot.

The biggest lesson from this project is that plugin support for field syncing can be narrower than it first appears. A field mapping add-on may work well for standard profile data but still fall short for custom WooCommerce checkout fields. When that happens, custom development is often the most reliable path forward.

If your WooCommerce and HubSpot setup is missing custom checkout data, or you are running into plugin limitations with contact property syncing, contact Freshy.