CF7 → HubSpot Connector (Free) self-updates
Free WordPress plugin connecting Contact Form 7 to HubSpot — live custom property and custom object mapping, upserts, conditional sending, and object associations, with no paid tier required.
by Keith Quinones · github.com/webkeith/cf7-hubspot-connector
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/webkeith/cf7-hubspot-connector/archive/refs/heads/main.zipShips its own WordPress updater (built-in updater), so new versions show up under Dashboard → Updates.
Readme
CF7 → HubSpot Connector (Free)
Author: Keith Quinones Company: Locus Digital
A self-contained Contact Form 7 ↔ HubSpot bridge built to match the core feature set of the CRM Perks "Contact Form HubSpot" plugin (https://www.crmperks.com/plugins/contact-form-plugins/contact-form-hubspot-plugin/) — but without the paywall on custom fields and custom objects. Since it talks to HubSpot's API directly, every property dropdown is populated live from your account, custom properties and custom objects included.
Features
- Private App connection — authenticate with a HubSpot Private App token; no OAuth app review or redirect setup needed.
- Unlimited feeds — create one or more feeds per Contact Form 7 form, each targeting any HubSpot object: Contacts, Companies, Deals, Tickets, or a custom object.
- Live property mapping — the HubSpot Property dropdown is fetched from your account every time you open a feed, so newly created custom properties show up immediately. This is the exact thing the free CRM Perks plugin gates behind its paid tier.
- Custom objects supported — the Object Type dropdown includes any custom objects defined in your portal, not just the four standard ones.
- Create or update (upsert) — pick a match property (e.g.
emailfor Contacts) so a repeat submission updates the existing record instead of creating a duplicate; leave it blank to always create new. - Static or dynamic field values — map a HubSpot property to a CF7 field, or to a fixed value you type in (handy for a lead-source property, or a pipeline/stage on a Deal).
- Automatic checkbox handling — multiple-checkbox HubSpot properties are detected from HubSpot's own field-type metadata and their values joined with
;automatically — no manual configuration. - Conditional sending — only run a feed when a CF7 field matches a rule (equals / doesn't equal / contains / is empty / is not empty); every condition on a feed must pass.
- Object associations — optionally create or update a second object (e.g. a Company or Deal) from the same submission and link it to the first, covering the "assign Contact to Company/Deal/Ticket" premium feature.
- Submission log — every attempt is recorded with the exact request sent and HubSpot's response, viewable under CF7 → HubSpot → Logs, with a one-click Resend for failed entries.
- Error email alerts — optionally get notified by email when a specific feed fails.
- CF7 field autocomplete — once a form is selected on a feed, its field tag names are offered as autocomplete suggestions wherever a CF7 field is expected.
- Current WordPress compatibility — declares
Requires at least,Requires PHP, andRequires Pluginsheaders so WordPress itself enforces the Contact Form 7 dependency and PHP floor, rather than relying only on a runtime check. - Self-updating from GitHub — point CF7 → HubSpot → Settings at your GitHub repo and tag releases with a version number; WordPress then shows the normal "Update available" notice and one-click "Update Now" on the Plugins page, exactly like a WordPress.org-hosted plugin. Works with private repos too via a personal access token. See "Publishing updates via GitHub Releases" below.
Not included
To keep this a single free plugin rather than a rebuild of their entire product: no OAuth login flow (a Private App token does the same job with less setup), no file-attachment uploads, no CSV export of logs, and no HubSpot Notes/engagement creation. These are the more niche items from CRM Perks' premium tier; everything driving your actual issue — custom fields and custom objects — is fully supported.
Install
- Plugins → Add New → Upload Plugin, upload this zip, then Activate. (Contact Form 7 must already be installed and active — you'll get an admin notice if it isn't.)
- In HubSpot: Settings → Integrations → Private Apps → Create a private app.
- Name it something like "CF7 Connector".
- Scopes tab — enable read/write for whichever objects you'll use:
crm.objects.contacts,crm.objects.companies,crm.objects.deals,crm.objects.tickets, andcrm.objects.custom+crm.schemas.custom.readif you're mapping to a custom object. - Create app, copy the access token (
pat-...).
- In WordPress: CF7 → HubSpot → Settings, paste the token, Save, then click Test Connection to confirm it works.
Set up a feed
- CF7 → HubSpot → Feeds → Add New. Give it a name (internal only, e.g. "Contact form → HubSpot Contact").
- Choose the Contact Form 7 Form.
- Choose the HubSpot Object — the dropdown loads live from your account.
- Optionally choose a Match/Upsert Property (e.g.
email) and set where its value comes from below it — usually your form's email field. - Under Field Mapping, click + Add field mapping for each field: choose "CF7 Field" (type the field's tag name — an autocomplete list appears once you've picked a form) or "Static value", then pick the HubSpot property to send it to. This list includes every custom property on that object.
- Optionally add Conditions or an Association to a second object.
- Publish the feed.
Submit a real test entry through the form, then check CF7 → HubSpot → Logs — you'll see the exact payload sent and HubSpot's response, and the contact/record should be populated in HubSpot.
Finding a CF7 field's tag name
Edit the form under Contact → Contact Forms, Form tab. The tag name is the identifier inside the brackets, e.g. [text your-oem-field] → tag name is your-oem-field. Once you've selected a form on the feed screen, these are also offered as autocomplete suggestions in the mapping fields.
Troubleshooting
- Object type dropdown says "Error loading" — check the Private App token under Settings and re-run Test Connection.
- A property is missing from the list — confirm it isn't marked "Hidden" or "Calculated" in HubSpot (Settings → Properties); those are filtered out since they can't be written to.
- Nothing happens on submit — check Logs first; a "skipped" entry means a condition didn't match, an "error" entry shows HubSpot's exact rejection reason (bad scope, invalid value, etc.).
Uploading this plugin to GitHub
The plugin folder is already laid out as its own project, so this is a plain repo push — no build step involved.
Notes
- The version comparison is plain semver (
1.0.10is newer than1.0.9) — keep the tag's numeric part and the plugin header in sync, and always increase it; a same-or-lower version tag won't trigger an update. - Draft releases and pre-releases are ignored — only a normal Published release is picked up.
-
If "Check for Plugin Updates Now" fails, double check the repo field has no typos and, for a private repo, that the token has Contents read access to that specific repo.
CF7-Hubspot-Connector
Free WordPress plugin connecting Contact Form 7 to HubSpot — live custom property and custom object mapping, upserts, conditional sending, and object associations, with no paid tier required.