Show or Hide Marketo Form Fields Based on a User’s Country

Our team has received many requests recently to create preference centers to help clients comply with privacy-related legislation — CASL and GDPR chief among them. Some countries’ legal requirements are quite stringent, while others are more relaxed. Requirements differ from client to client, but a similar request seems to come up in the conversation because of the difference between countries: can we show certain fields to people in certain countries, but not show those fields to people in other countries?

The challenge

Of course, Marketo’s form editor does give its marketing automation practitioners a powerful tool to conditionally show or hide elements based on field values. Conceivably, one could accomplish the requested functionality using Marketo’s built-in Visibility Rules to show a field only when the Country value is set to certain countries — say, those in the EU.

However, this only works if there is data in the Country field. If someone is filling out a form for the first time, Marketo won’t have the Country information to know whether to show or hide the conditional fields.

You could enable Marketo’s Prefill functionality, but that only works (natively) on Marketo landing pages and not on Marketo forms embedded on your main website. Again, the Country data is not available.

The approach

As it turns out, we have an important piece of information that, if used correctly, can yield the user’s country: the user’s IP address. Using the IP address, we can look up which country the web request originated in, much like a web analytics tool like Google Analytics.

Moreover, there are a slew of free services out there that provide geographical lookup APIs based on IP address. One such service is geoiplookup.io.  All you have to do is send a user request to their server, and you get back the user’s country code, among other useful information.

If you have a defined set of country codes to compare against your newly retrieved country code, you can show or hide fields based on whether or not the detected country is in the list.

This approach works:

  • on Marketo landing pages
  • on embedded Marketo forms (on your main website)
  • for anonymous visitors

The solution

Below is a simple JavaScript file that you can use as a starting point to show or hide fields on your Marketo forms based on which country the user is in.
To use the script, you will need to customize which fields to show or hide. You may need to have a web developer help you with this; the form fields to show or hide are specified in the code itself:

Prerequisites:

  • fields must be present on the form
  • script is configured using the SOAP API names of the fields

Post below in the comments if this helped you or if you have questions or other comments.

Require Business Emails on Your Marketo Forms

A work email address gives you the internet domain name of the person’s employer, which, besides allowing you to reach them with work-related offerings at their work email address, can be a key to unlocking other important data that can be appended to the Person record, including number of employees, revenue, SIC or NAICS codes, and DUNS number. So, if your organization prefers a work or business email address over personal a email address, then you can use this simple solution to add that functionality to forms.

The challenge

To get this rich demographic and firmographic data though, you need to make sure that people are not submitting their personal email addresses on your Marketo forms. We see this request often, both on the Marketo Community and from our own clients. But Marketo does not not natively support this functionality.

The approach

Luckily, Marketo’s Forms 2.0 made available a JavaScript API that we can use to extend the native form functionality — in this case, to add a filter for email addresses entered into Marketo forms.

Using JavaScript, we first define a list of common domain names that are known to provide free email addresses — gmail.com, hotmail.com, live.com, outlook.com, yahoo.com, aol.com. (Of course, there are thousands of other domains like these, but these few are likely the most common that most marketers encounter.)

Next, we need an error message to alert the user that they need to enter their business email address, something like: “Please enter your business email address.”

Finally, we need to create logic that determines whether the submitted email address is in the list of disallowed domains that we created, and, if so, to prevent the Marketo form submission from happening and instead alert the user to enter their business email address.

The solution

The following script does exactly that:

  • define blocked email domains
  • define error message to user
  • determine whether email address contains blocked domain
  • alert user to try again

To use the script, you will first need to download it to your computer.

[edgtf_button size=”small” type=”” text=”Download Script” custom_class=”” icon_pack=”font_awesome” fa_icon=”fa-download” link=”https://digitalpi.com/wp-content/uploads/2018/04/digitalpi-marketo-form-require-business-email.js” target=”_self” color=”#fff” hover_color=”#ccc” background_color=”#1595a3″ hover_background_color=”#35b5c3″ border_color=”#058593″ hover_border_color=”#058593″ font_size=”24″ font_weight=”” margin=”20px”]

Then, edit the list of domains you want to block if you want something different and update the error message to match your brand voice. Be sure to wrap each domain in quotes and separate them with commas. Do not include a comma after the last domain. (This will break the script.)

var domains = ['gmail.com','hotmail.com','live.com','outlook.com','yahoo.com','aol.com']

var error = 'Please enter your business email address.'

Last, simply upload it to your Design Studio and include in your Marketo landing page template(s) and in your website footer. Your <script> tag should look something like this:

<script src="https://info.example.com/rs/123-ABC-456/images/digitalpi-require-business-email.js"></script>

Alternatively, instead of uploading to Marketo’s Design Studio, you or your web team can add it to your tag manager tool (like Google Tag Manager or Adobe Tag Management).

If added to your pages correctly, the script will fire when needed, automatically detecting Marketo forms on any page where it is included and extending their functionality to require a business email address.