Posted June 28 by Niranjan Reddy
Jun 28 by Niranjan Reddy

Myth Buster: Creating TypeForm-Like Experiences with HubSpot Custom Forms

Myth Buster: Creating TypeForm-Like Experiences with HubSpot Custom Forms Myth Buster: Creating TypeForm-Like Experiences with HubSpot Custom Forms

Introduction:

This case study explores the successful collaboration between the HC team and the Earth Hour team in revamping the Earth Hour website. The primary objective was to enhance the user experience and incorporate a modular approach using HubSpot. Additionally, the challenge of embedding a TypeForm-like experience within HubSpot was tackled. This case study highlights the steps taken, challenges faced, solutions implemented, and the final delivery.

Solution

1. Understanding the Client's Requirements:

The Earth Hour team approached the HC team to revamp their outdated website, which lacked a modular approach. Leveraging the capabilities of HubSpot, the HC team aimed to enhance the website's design, customization options, and overall functionality.

2. Scoping the Possibilities and Limitations:

Working closely with the Earth Hour team, the HC team was provided with the form flow and a blueprint-like design outlining the desired form's appearance, functionality, and display of calculated data. Detailed screenshots of the form were shared, illustrating the desired user experience.

User Journey
Text Entry
Select from options
Acknowledgement
Giving your hour
EarthHour From subscribe
EarthHour From thankyou
3. Designing the UI for the Form:

Employing skilled designers within the HC team, a user-friendly and visually appealing UI was created based on the provided blueprint. The resulting design incorporated the desired functionalities, such as progress bars, navigation buttons, form steps/pages, and customizable elements.

4. Investing Time in Workarounds for Limitations:

Despite the challenges, the HC team committed to finding solutions that would align with the Earth Hour team's budget. While certain limitations were identified, particularly regarding the ability to add additional form fields, the HC team devised workarounds to ensure feasible solutions were implemented.

5. Building the Exact Form to Fulfill the Requirements:

Agreement on the project scope was reached, enabling the HC team to proceed with constructing the native form within HubSpot. This initial step involved creating a simple yet effective form, which would serve as the foundation for subsequent developments.

Building the Exact Form to Fulfill the Requirements

6. Creating Custom Objects to Hold Data:

To accommodate specific data requirements, custom objects were created within HubSpot. These objects served as repositories for data related to the form submissions, enabling the display of a dynamic leaderboard.

Creating Custom Objects to Hold Data

7. Creating Custom Modules for Functionality and Design:

The HC development team embarked on building custom modules for the form, incorporating features such as progress bars, next/previous navigation, form steps/pages, and customizable options. The goal was to minimize the need for extensive developer involvement while providing an intuitive and interactive user experience.

View code:

HTML:

          
<div class="multistep-wrapper" id="">
 <div class="multistep-main-wrap">
  <div class="content-wrapper">
   <div class="close-form">
    <svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
     <rect y="23.4531" width="33.1684" height="2.18693" transform="rotate(-45 0 23.4531)" fill="#1C1C1C"></rect>
     <rect x="1.54639" width="33.1684" height="2.18693" transform="rotate(45 1.54639 0)" fill="#1C1C1C"></rect>
    </svg>
   </div>
   <div class="multistep-main">
    <!-- progressbar -->
    <ul id="progress_header">
     <li class="full-bar"></li>
     <li class="active-bar" style="width: 16.6666666667%;"></li>
    </ul>
    <form id="multistep_form " class="vertical-slider">
     <!-- Step 01 -->
     <div class="multistep-box step-1">
      <div class="multistep-box-inner">
       <div class="control-form">
        <h3></h3>
        <h4 class=""></h4>
        <div class="name">
         <h4 class="suggation"></h4>
         <input type="text" placeholder="" />
        </div>
        <span id="error-fname"></span>
       </div>
      </div>
      <p class="nxt-prev-button"><button type="button" name="next" class="ss_next_btn button action-button" disabled="disabled">Next</button></p>
     </div>
     <!-- Step 02 -->
     <div class="multistep-box step-2">
      <div class="multistep-box-inner">
       <div class="title-box">
        <h3><span class="autofill-name"></span> ?</h3>
       </div>
       <div class="control-form radio-group"></div>
      </div>
      <p class="nxt-prev-button">
       <input class="previous button action-button secondary" name="previous" type="button" value="Previous" />
       <button type="button" name="next" class="ss_next_btn button action-button" disabled="disabled">Next</button>
      </p>
     </div>
     <!-- Step 03 -->
     <div class="multistep-box mx-680">
      <div class="multistep-box-inner">
       <div class="title-box">
        <h3>, <span class="autofill-name"></span>.</h3>
       </div>
       <div class="acknowledgement"></div>
      </div>
      <p class="nxt-prev-button"><input class="previous button action-button secondary" name="previous" type="button" value="Previous" /> <button type="button" name="next" class="ss_next_btn button action-button">Next</button></p>
     </div>
     <!-- Step 04 -->
     <div class="multistep-box mx-680 step-4">
      <div class="multistep-box-inner">
       <div class="title-box">
        <h3>, <span class="autofill-name"></span>?</h3>
       </div>
       <div class="form-control">
        <h4></h4>
        <select name="country">
         <option value="">Please select country</option>
         <option value="USA">USA</option>
         <option value="UK">UK</option>
         <option value="Afghanistan">Afghanistan</option>
         <option value="Åland Islands">Åland Islands</option>
         <option value="Albania">Albania</option>
         <option value="Algeria">Algeria</option>
         <option value="American Samoa">American Samoa</option>
         <option value="Andorra">Andorra</option>
         <option value="Angola">Angola</option>
         <option value="Anguilla">Anguilla</option>
         <option value="Antarctica">Antarctica</option>
         <option value="Antigua and Barbuda">Antigua and Barbuda</option>
         <option value="Argentina">Argentina</option>
         <option value="Armenia">Armenia</option>
         <option value="Aruba">Aruba</option>
         <option value="Asia/Pacific Region">Asia/Pacific Region</option>
         <option value="Australia">Australia</option>
         <option value="Austria">Austria</option>
         <option value="Azerbaijan">Azerbaijan</option>
         <option value="Bahamas">Bahamas</option>
         <option value="Bahrain">Bahrain</option>
         <option value="Bangladesh">Bangladesh</option>
         <option value="Barbados">Barbados</option>
         <option value="Belarus">Belarus</option>
         <option value="Belgium">Belgium</option>
         <option value="Belize">Belize</option>
         <option value="Benin">Benin</option>
         <option value="Bermuda">Bermuda</option>
         <option value="Bhutan">Bhutan</option>
         <option value="Bolivia">Bolivia</option>
         <option value="Bosnia and Herzegovina">Bosnia and Herzegovina</option>
         <option value="Botswana">Botswana</option>
         <option value="Bouvet Island">Bouvet Island</option>
         <option value="Brazil">Brazil</option>
         <option value="British Indian Ocean Territory">British Indian Ocean Territory</option>
         <option value="British Virgin Islands">British Virgin Islands</option>
         <option value="Brunei">Brunei</option>
         <option value="Bulgaria">Bulgaria</option>
         <option value="Burkina Faso">Burkina Faso</option>
         <option value="Burundi">Burundi</option>
         <option value="Cambodia">Cambodia</option>
         <option value="Cameroon">Cameroon</option>
         <option value="Canada">Canada</option>
         <option value="Cape Verde">Cape Verde</option>
         <option value="Caribbean Netherlands">Caribbean Netherlands</option>
         <option value="Cayman Islands">Cayman Islands</option>
         <option value="Central African Republic">Central African Republic</option>
         <option value="Chad">Chad</option>
         <option value="Chile">Chile</option>
         <option value="China">China</option>
         <option value="Christmas Island">Christmas Island</option>
         <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>
         <option value="Colombia">Colombia</option>
         <option value="Comoros">Comoros</option>
         <option value="Congo">Congo</option>
         <option value="Cook Islands">Cook Islands</option>
         <option value="Costa Rica">Costa Rica</option>
         <option value="Cote d'Ivoire">Cote d'Ivoire</option>
         <option value="Croatia">Croatia</option>
         <option value="Cuba">Cuba</option>
         <option value="Curaçao">Curaçao</option>
         <option value="Cyprus">Cyprus</option>
         <option value="Czech Republic">Czech Republic</option>
         <option value="Democratic Republic of the Congo">Democratic Republic of the Congo</option>
         <option value="Denmark">Denmark</option>
         <option value="Djibouti">Djibouti</option>
         <option value="Dominica">Dominica</option>
         <option value="Dominican Republic">Dominican Republic</option>
         <option value="East Timor">East Timor</option>
         <option value="Ecuador">Ecuador</option>
         <option value="Egypt">Egypt</option>
         <option value="El Salvador">El Salvador</option>
         <option value="Equatorial Guinea">Equatorial Guinea</option>
         <option value="Eritrea">Eritrea</option>
         <option value="Estonia">Estonia</option>
         <option value="Ethiopia">Ethiopia</option>
         <option value="Europe">Europe</option>
         <option value="Falkland Islands">Falkland Islands</option>
         <option value="Faroe Islands">Faroe Islands</option>
         <option value="Fiji">Fiji</option>
         <option value="Finland">Finland</option>
         <option value="France">France</option>
         <option value="French Guiana">French Guiana</option>
         <option value="French Polynesia">French Polynesia</option>
         <option value="French Southern and Antarctic Lands">French Southern and Antarctic Lands</option>
         <option value="Gabon">Gabon</option>
         <option value="Gambia">Gambia</option>
         <option value="Georgia">Georgia</option>
         <option value="Germany">Germany</option>
         <option value="Ghana">Ghana</option>
         <option value="Gibraltar">Gibraltar</option>
         <option value="Greece">Greece</option>
         <option value="Greenland">Greenland</option>
         <option value="Grenada">Grenada</option>
         <option value="Guadeloupe">Guadeloupe</option>
         <option value="Guam">Guam</option>
         <option value="Guatemala">Guatemala</option>
         <option value="Guernsey">Guernsey</option>
         <option value="Guinea">Guinea</option>
         <option value="Guinea-Bissau">Guinea-Bissau</option>
         <option value="Guyana">Guyana</option>
         <option value="Haiti">Haiti</option>
         <option value="Heard Island and McDonald Islands">Heard Island and McDonald Islands</option>
         <option value="Honduras">Honduras</option>
         <option value="Hong Kong">Hong Kong</option>
         <option value="Hungary">Hungary</option>
         <option value="Iceland">Iceland</option>
         <option value="India">India</option>
         <option value="Indonesia">Indonesia</option>
         <option value="Iran">Iran</option>
         <option value="Iraq">Iraq</option>
         <option value="Ireland">Ireland</option>
         <option value="Isle of Man">Isle of Man</option>
         <option value="Israel">Israel</option>
         <option value="Italy">Italy</option>
         <option value="Jamaica">Jamaica</option>
         <option value="Japan">Japan</option>
         <option value="Jersey">Jersey</option>
         <option value="Jordan">Jordan</option>
         <option value="Kazakhstan">Kazakhstan</option>
         <option value="Kenya">Kenya</option>
         <option value="Kiribati">Kiribati</option>
         <option value="Kosovo">Kosovo</option>
         <option value="Kuwait">Kuwait</option>
         <option value="Kyrgyzstan">Kyrgyzstan</option>
         <option value="Laos">Laos</option>
         <option value="Latvia">Latvia</option>
         <option value="Lebanon">Lebanon</option>
         <option value="Lesotho">Lesotho</option>
         <option value="Liberia">Liberia</option>
         <option value="Libya">Libya</option>
         <option value="Liechtenstein">Liechtenstein</option>
         <option value="Lithuania">Lithuania</option>
         <option value="Luxembourg">Luxembourg</option>
         <option value="Macau">Macau</option>
         <option value="Macedonia (FYROM)">Macedonia (FYROM)</option>
         <option value="Madagascar">Madagascar</option>
         <option value="Malawi">Malawi</option>
         <option value="Malaysia">Malaysia</option>
         <option value="Maldives">Maldives</option>
         <option value="Mali">Mali</option>
         <option value="Malta">Malta</option>
         <option value="Marshall Islands">Marshall Islands</option>
         <option value="Martinique">Martinique</option>
         <option value="Mauritania">Mauritania</option>
         <option value="Mauritius">Mauritius</option>
         <option value="Mayotte">Mayotte</option>
         <option value="Mexico">Mexico</option>
         <option value="Micronesia">Micronesia</option>
         <option value="Moldova">Moldova</option>
         <option value="Monaco">Monaco</option>
         <option value="Mongolia">Mongolia</option>
         <option value="Montenegro">Montenegro</option>
         <option value="Montserrat">Montserrat</option>
         <option value="Morocco">Morocco</option>
         <option value="Mozambique">Mozambique</option>
         <option value="Myanmar (Burma)">Myanmar (Burma)</option>
         <option value="Namibia">Namibia</option>
         <option value="Nauru">Nauru</option>
         <option value="Nepal">Nepal</option>
         <option value="Netherlands">Netherlands</option>
         <option value="Netherlands Antilles">Netherlands Antilles</option>
         <option value="New Caledonia">New Caledonia</option>
         <option value="New Zealand">New Zealand</option>
         <option value="Nicaragua">Nicaragua</option>
         <option value="Niger">Niger</option>
         <option value="Nigeria">Nigeria</option>
         <option value="Niue">Niue</option>
         <option value="Norfolk Island">Norfolk Island</option>
         <option value="North Korea">North Korea</option>
         <option value="Northern Mariana Islands">Northern Mariana Islands</option>
         <option value="Norway">Norway</option>
         <option value="Oman">Oman</option>
         <option value="Pakistan">Pakistan</option>
         <option value="Palau">Palau</option>
         <option value="Palestine">Palestine</option>
         <option value="Panama">Panama</option>
         <option value="Papua New Guinea">Papua New Guinea</option>
         <option value="Paraguay">Paraguay</option>
         <option value="Peru">Peru</option>
         <option value="Philippines">Philippines</option>
         <option value="Pitcairn Islands">Pitcairn Islands</option>
         <option value="Poland">Poland</option>
         <option value="Portugal">Portugal</option>
         <option value="Puerto Rico">Puerto Rico</option>
         <option value="Qatar">Qatar</option>
         <option value="Réunion">Réunion</option>
         <option value="Romania">Romania</option>
         <option value="Russia">Russia</option>
         <option value="Rwanda">Rwanda</option>
         <option value="Saint Barthélemy">Saint Barthélemy</option>
         <option value="Saint Helena">Saint Helena</option>
         <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>
         <option value="Saint Lucia">Saint Lucia</option>
         <option value="Saint Martin">Saint Martin</option>
         <option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option>
         <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>
         <option value="Samoa">Samoa</option>
         <option value="San Marino">San Marino</option>
         <option value="Sao Tome and Principe">Sao Tome and Principe</option>
         <option value="Saudi Arabia">Saudi Arabia</option>
         <option value="Senegal">Senegal</option>
         <option value="Serbia">Serbia</option>
         <option value="Seychelles">Seychelles</option>
         <option value="Sierra Leone">Sierra Leone</option>
         <option value="Singapore">Singapore</option>
         <option value="Sint Maarten">Sint Maarten</option>
         <option value="Slovakia">Slovakia</option>
         <option value="Slovenia">Slovenia</option>
         <option value="Solomon Islands">Solomon Islands</option>
         <option value="Somalia">Somalia</option>
         <option value="South Africa">South Africa</option>
         <option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>
         <option value="South Korea">South Korea</option>
         <option value="South Sudan">South Sudan</option>
         <option value="Spain">Spain</option>
         <option value="Sri Lanka">Sri Lanka</option>
         <option value="Sudan">Sudan</option>
         <option value="Suriname">Suriname</option>
         <option value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option>
         <option value="Swaziland">Swaziland</option>
         <option value="Sweden">Sweden</option>
         <option value="Switzerland">Switzerland</option>
         <option value="Syria">Syria</option>
         <option value="Taiwan">Taiwan</option>
         <option value="Tajikistan">Tajikistan</option>
         <option value="Tanzania">Tanzania</option>
         <option value="Thailand">Thailand</option>
         <option value="Togo">Togo</option>
         <option value="Tokelau">Tokelau</option>
         <option value="Tonga">Tonga</option>
         <option value="Trinidad and Tobago">Trinidad and Tobago</option>
         <option value="Tunisia">Tunisia</option>
         <option value="Turkey">Turkey</option>
         <option value="Turkmenistan">Turkmenistan</option>
         <option value="Turks and Caicos Islands">Turks and Caicos Islands</option>
         <option value="Tuvalu">Tuvalu</option>
         <option value="U.S. Virgin Islands">U.S. Virgin Islands</option>
         <option value="Uganda">Uganda</option>
         <option value="Ukraine">Ukraine</option>
         <option value="United Arab Emirates">United Arab Emirates</option>
         <option value="United Kingdom">United Kingdom</option>
         <option value="United States">United States</option>
         <option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>
         <option value="Uruguay">Uruguay</option>
         <option value="Uzbekistan">Uzbekistan</option>
         <option value="Vanuatu">Vanuatu</option>
         <option value="Vatican City">Vatican City</option>
         <option value="Venezuela">Venezuela</option>
         <option value="Vietnam">Vietnam</option>
         <option value="Wallis and Futuna">Wallis and Futuna</option>
         <option value="Western Sahara">Western Sahara</option>
         <option value="Yemen">Yemen</option>
         <option value="Zambia">Zambia</option>
         <option value="Zimbabwe">Zimbabwe</option>
         <option value="Others">Others</option>
        </select>
       </div>
      </div>
      <p class="nxt-prev-button">
       <input class="previous button action-button secondary" name="previous" type="button" value="Previous" />
       <button type="button" name="next" class="button ss_next_btn action-button" disabled="disabled">Next</button>
      </p>
     </div>
     <!-- Step 05 -->
     <div class="multistep-box step-5 prev_thanku">
      <div class="multistep-box-inner">
       <div class="title-box"><div class="subscribe-message"></div></div>
       <div class="form-control">
        <h4></h4>
        <input id="email" name="enail" type="text" placeholder="" />
        <div class="th no-thanks">No thanks!</div>
        <span id="error-email"></span>
        <label class="subscrib-checkbox">
         <label class="subscrib-checkbox"> <input id="subscribe_confirmation" class="subscribe_confirmation" name="subscribe_confirmation" type="checkbox" value="true" /><span></span></label>
        </label>
        <p>
         I would like to receive updates from WWF International in relation to Earth Hour. You can unsubscribe from these emails at any time. For more information, please see our
         <a href="http://wwf.panda.org/privacy/" target="_blank" rel="noopener"><span style="text-decoration: underline;">Privacy Statement</span>.</a>
        </p>
        <label class="subscrib-checkbox">
         <span><span class="hs-form-required">*</span></span>
        </label>
       </div>
      </div>
      <p class="nxt-prev-button">
       <input class="previous button action-button secondary" name="previous" type="button" value="Previous" />
       <input class="button email_form_submit action-button" disabled="disabled" name="button" type="button" value="Submit" />
      </p>
     </div>
     <!-- Step 06 -->
     <div class="multistep-box thanku-mesz">
      <div class="multistep-box-inner">
       <div class="th-mesz">
        <h3>, <span class="autofill-name"></span></h3>
        <h3 style="color: var(--primary); margin-bottom: 48px;"></h3>
       </div>
       <p class="close-button"><input class="close_button button ts_next_btn action-button secondary" name="button" type="button" value="Close" /></p>
      </div>
     </div>
    </form>
   </div>
  </div>
 </div>
</div>
<script type="text/javascript" src="//js.hsforms.net/forms/embed/v2.js" charset="utf-8"></script>

Javascript:


        

 
/** Validation **/

8. Adding Customizations (Possible in Phase 1):

Phase 1 aimed to deliver a highly customizable form experience. The HC team successfully implemented several customizations, including the ability to customize radio box options, form steps, and the thank-you message, etc.

Adding Customizations

9. Manipulating Data in Custom Objects to Show Submissions' Sum:

Leveraging HubSpot's calculated property, the HC team designed a calculation to determine the sum of submitted values for specific countries. This functionality enabled the generation of meaningful insights and the display of relevant data on the website.

10. Testing the Solution:

Rigorous testing was conducted by the HC team to identify and rectify any issues or bugs. Despite encountering some challenges, the team remained dedicated, even working during weekends, and received continuous support from the Earth Hour team. Thorough testing ensured a high-quality end product.

11. Delivery:

Following extensive efforts and collaboration, the HC team successfully delivered the revamped Earth Hour website, surpassing the client's expectations. The implementation of the modular approach and the embedding of a TypeForm-like experience within HubSpot resulted in an improved user experience, increased engagement, and enhanced data collection capabilities.

Conclusion:
The successful collaboration between the HC team and the Earth Hour team led to the achievement of project goals. By leveraging the capabilities of HubSpot and implementing workarounds for limitations, the HC team delivered a highly customized and user-friendly form experience. The revamped Earth Hour website showcases the seamless integration of design, functionality, and data manipulation. This case study highlights the importance of effective collaboration, problem-solving, and dedicated testing in achieving project success.

Niranjan Reddy
Niranjan Reddy leads Hermitcrabs, Inc, an B2B Tech Inbound Marketing agency and eCommerce Agency, Google Certified & HubSpot partner. Who specialize in helping some of the world's largest B2B enterprise tech, tech Start-ups, professional service, and pharmaceutical companies increase and nurture their sales and marketing pipelines. Hermitcrabs, core services include inbound marketing, sales enablement, account-based marketing, modern lead generation digital strategies and web development in HubSpot COS, Wordpress, Magento, and Shopify.