Form Hidden Fields

Questions, feedback, suggestions? Check out the comments

I’m putting this post together partly because I think it could be a useful reference to others and partly to maintain as a reference for myself. This is the master list of hidden fields that I like to apply to site forms, regardless of the Marketing Automation Platform I’m using. I’ll continue to build on this list over time. I’ll be explaining what each field does, why it’s included, and some of the corresponding automation that usually accompanies these fields on the back-end. Lastly, I’ll discuss some of the ways in which these fields can power interesting or unusual kinds of functionality within your systems.1

Field List

Form Fields

  • Engagement Type
  • Campaign Engagement
  • Google Client ID
  • New Activity
  • UTM Campaign
  • UTM Medium
  • UTM Source
  • UTM Content
  • UTM Type

Stamping Fields

  • First Engagement Type
  • First Campaign Engagement
  • First UTM Campaign
  • First UTM Medium
  • First UTM Source
  • First UTM Content
  • First UTM Type

UTM Tracking

There’s nothing terribly complex going on here — these fields should pretty much always be present, either pulling their values directly from query parameters in the URL or from a cookie. Marketo offers more in-UI configuration options than HubSpot here, but it’s entirely possible to achieve the same kind of pull-from-a-cookie functionality in that tool using some on-page JavaScript.

What’s more interesting is what you do with these values once you have them. Baseline, it’s good to stamp them to a corresponding set of First UTM fields so that you have basic first-touch / last-touch data.

But there’s also the question of how you deal with partials AKA cases where only a few UTM values are filled. This can easily result in mismatches where the old UTM Content values stick around even after UTM Campaign gets updated. Andy Caron has an excellent guide on how to manage around this kind of challenge in Marketo, but if you’re in HubSpot you’ll want to substitute something like the literal text none’ everywhere she mentions using NULL. NULLing out values in HubSpot just isn’t possible at this point (February 2024).2

Andy also includes some guidance on another attribution win if you’re working with Salesforce: stamping UTM values to the Campaign Member object. This lets you see not just what channel created a given lead, but what channel drove engagement with a particular program. This can be accomplished through a flow like the one Todd Sprinkel outlines in this post.3

If you’re working with HubSpot, there’s no real out-of-the-box equivalent to the Campaign Member object… so none of that really works and you’re pretty much limited to the First/Most Recent level of tracking and a bunch of Static Lists. My hunch is you can accomplish much the same thing with a Custom Object, but I haven’t tested it myself out in the wild.4

Engagement Type & Campaign Engagement

Here’s where things get a little weirder. Engagement Type and Campaign Engagement are both fields designed with admins in mind; they’re included on forms with a preset default value. At a basic level, Engagement Type tracks the most recent category of engagement (‘Demo Request’, Content Download’, Event Attendee’) while Campaign Engagement tracks the internal name of the associated campaign. What this allows you to do is trigger automation based off of categories of engagement rather than specific engagements.

This is a whole lot more exciting in HubSpot than it is in Marketo, since there’s no way in that platform today to write a trigger like:

Any time a form is submitted whose name contains 'Demo'

Using Engagement Type, you’re able to trigger HubSpot Workflows like so:

When Engagement Type changes and new value = 'Demo Request'

This accomplishes much the same result and makes a lot of global automation in that platform a heck of a lot easier to set up, maintain, and change.

Once this field is in place, you can also start using it all kinds of other places. Notifications to the sales team (“This person MQLed based on a recent ”) are nice, but my personal favorite is that pre-filling this field with a default value lets you access these form categories on your website’s front-end. This, in turn, lets you create conversions in GA4/GTM using these values, making form submission tracking a lot simpler. Taking that one step further, you can also leverage these values in your ad conversion tracking, setting up different events for each type of form submission instead of thank-you page views.5

Campaign Engagement is a newer one for me, but the initial idea is to flag which campaign led to the creation of a given record — a further layer on top of UTM data and Lead Source information.6

New Activity

If you thought Engagement Type was weird then I’ve got something real fun to show you here. New Activity was my solution to one of HubSpot’s missing features. At the time, you couldn’t trigger a workflow off of a Form Submission event, only off of past form submission activity. The distinction mattered, because we were using global Content forms at the time. So if someone went through our resource library and downloaded two resources, they’d technically only qualify for the workflow a single time — once they were in the workflow, they couldn’t re-enroll.

New Activity was the solve.

Set to Yes’ for every new form of engagement (Form Submission, List Uploads, Lead Gen Form Submissions), New Activity is the primary trigger to enroll Contacts into MQL criteria workflows. Once they hit the end of the flow, New Activity is set to No’… which is also the Goal Criteria for the workflow. This allows for cyclical workflow enrollments; ideal for MQL checks. The other benefit of this approach is that it’s all-encompassing: every type of engagement activity is laundered’ through this field. This gives you more infrastructure to build on when it comes to tracking point-in-time engagements.7

This isn’t as necessary today (February 2024) as it used to be, since HubSpot has expanded their event-based triggers considerably in recent months. But I’m still getting value out of this property so I figured I’d document it here. I’m also not sure how much utility it has outside of a HubSpot context and you can accomplish similar kinds of operations in both HubSpot and Marketo using temporary Static List membership as trigger criteria for this kind of cycling operation.

Google Client ID

I include Client ID largely to power the functionality outlined in this post about integrating Marketo with Google Ads AKA enabling us to leverage Measurement Protocol to send information back to GA4/Google Ads from our MAP/CRM. However, intaking this value on your site forms also gives you another Join Key to leverage if you end up piping all of your site and platform data into a data warehouse down the line.


  1. Full credit to Alison Clarke for introducing me to hidden fields pre-filled with default values. It’s an amazing trick that unlocks a lot of interesting functionality!↩︎

  2. Leaving this date here in case this changes in a future update 🤞↩︎

  3. Todd’s post also contains a Salesforce Unmanaged package you can use to straight-up install this functionality with almost no additional work required.↩︎

  4. Note to self: update this if/when you do ship this in the wild.↩︎

  5. I’ll do a full write-up on this approach and link it here at some point in the future↩︎

  6. More to come here as I develop this idea more fully↩︎

  7. I wonder if you could build Custom Object-Create New Record steps onto the New Activity workflow as a way to build touchpoint tracking in HubSpot↩︎


Written by Jack Segal. Shoot me an email with questions or comments, and if you'd like to support my writing, you can send me a tip using Stripe!



Date
2024-02-06



Subscribe

Fill out the form to get notified whenever a new post goes live!

Powered by Buttondown.



Comments