Orange is my favorite color

I’m automating online marketing for event organizers at MotorsportReg.com by synchronizing event listings with third party calendars. I’m working with a typical API which is modeled such that you create a venue, they return an ID and then you use that ID in your event creation call. Pretty standard stuff.

The challenge is when I want to update or synchronize the listings later. The search makes it difficult to identify an event or venue that I’ve created in the system vs. one that someone else has created (which may have different attributes) or determine if I’m selecting the matching item at all (do we trust a string comparison on the name?) The venues in this API do support an arbitrary properties collection where I could stash an ID from our system but you can’t search based on those properties which results in searching, then looping to see if a property matches our original request and, if not, creating a new venue.

It doesn’t have to be that tedious. As a rule of thumb, any API which allows the creation of a logical object (people, events, places, etc) where the record of authority may originate from another system should accommodate a foreign identifier as a standard property and allow searching against the identifier.

I’m sure there are APIs which follow this practice but it should be a standard. Simplify my integration efforts so that I can easily send and synchronize data with you. Keep us loosely coupled. It’s one more field on your end or it’s a ton of code on my end that results in a more fragile relationship. Don’t make me maintain my own database table of ID mappings.

Fantastic race weekend coming from 7th to best a field of the 45 best racers on the west coast:

Spec Miata came in its traditional form, with six cars up front in the lead back through the early stages. Kyle Kaiser’s metallic blue No. 88 Miata was the first of the lead group to fall back when he spun, and with two to go it was down to Charlie Hayes, Tyler Vance, Brian Ghidinelli and Joey Jordan.

Hayes, in the 22 TFB/AIM Tires/RM Autosports Miata, and Vance, in the No. 85 TMG/RM Autosports/Sparco Miata, were racing hard to hold the top spot when they went side by side, and then off the track, in turn nine on the way to the one to go board. Both Ghidinelli and Jordan took advantage of the off to move into the lead and begin the final lap.

Ghidinelli kept Jordan behind him for the final circuit, and entered the last turn conscientiously reminding himself not to overcook the corner. With that in mind, Ghidinelli’s No. 12 RaceHero.io/MotorsportReg.com Mazda Miata probably slowed too much, and Jordan got a run up the front straight to the finish. It was too little, too late for Jordan’s No. 47 Minxnails.com/Protomotive Miata, and Ghidinelli crossed the stripe in front by less than a car length.

Next up, Laguna Seca… and then onwards to the SCCA Runoffs in October.

I had the awesome chance to race at Road Atlanta a few weeks ago driving a brand new, zero-mile Spec Miata built by Atlanta Motorsports Group. The car is a bit nuts… from the powdercoated chassis to the Ti-Speed motor to the safety equipment from MiataCage, it is way over the top. Many thanks to Jason Hoover, Mike Phillips and Micah Nolan for their hard work.

But, the point about driving a brand new car is, occasionally you expect things to break. That’s the point of a shake down. However, there’s one piece you really don’t want to come off as you’re about to drop under the bridge in to a high-speed 4th gear sweeper that leads onto the front straight which is surrounded by walls on both sides: your steering wheel. Here’s the video:

Lucky it wasn’t the first lap surrounded by 55 other cars! As it turns out, we were accidentally shipped a pre-production unit of what is, hands-down, the nicest quick disconnect steering wheel adapter I have ever used from MiataCage. The tolerances in the prototype weren’t quite right which allowed the unit to come apart under heavy vibration over the exit curbing. MiataCage overnighted us a production piece which we replaced and now you could sick a 500# ape on that wheel and it won’t come off unless it’s properly disengaged by the driver. If you’re interested in a high-quality QD that has no slop, can’t be misaligned and looks like it came out of an F-16 fighter jet, you can see more details at http://miatacage.com/products/281-quick-disconnect.aspx.

My company uses Hubspot to help support our marketing efforts. One thing Hubspot provides is great tracking that shows all of the touch points you have with a potential customer as they read your blog, download your content and fill out your forms. This helps form a cohesive picture of where someone is in the sales funnel and their interests and needs.

As a Software-as-a-Service for online event registration, however, we face the dilemma of separating out potential customers of our SaaS app and their customers who come to our site to also participate in the marketplace. For every event organizer who visits our site and might be interested in using our system, hundreds of event attendees come to get registered. Including the Hubspot tracking code on our home page makes our traffic numbers look great but has the negative side effect of dropping our lead and conversion ratios well under 1%. Ignore for a moment that this is demoralizing, it also makes reports difficult to use. Picture comparing the success of a landing page with 0.05% conversions and another with 0.07%. They both look effectively equivalent because of the scale but if those numbers instead read 50% and 70%, you would not only be impressed but recognize the latter is performing 40% better!

One option here would be to simply remove the tracking code from the home page and that would fix the statistic and volume issues. But we would lose important referring data. While Google is no longer giving us much in the way of search keywords, we still can see referring URLs when people surf to MotorsportReg.com. If we removed the tracking code from the home page and cookie’d them when they hit the About Us page, we would lose that original traffic source.

So, the challenge began to find a way to cookie the people who were potential leads and do it on the home page so we could capture referrer data. I asked our sales guy, our onboarding rep and customer support. Nobody had any idea how to segment the traffic to weed out the event attendees from skewing our data.

But I had an idea, and it turns out it works pretty well.

What I want to know, specifically, is when someone views our “How it works” or another marketing/sales page as that indicates interest in our SaaS product. I started by tagging all links in the top and bottom navigation that link to our marketing and sales pages with a CSS class like:

< a href="/about" class="hs">How it Works< /a>

On those marketing pages, we include the Hubspot tracking code on every view. But for the home page, I wrapped it inside of a jQuery click handler:

$(document).ready(function()
{
// dynamically load hubspot code only if someone clicks a marketing-related link on the home page
$('.hs').click(function(e)
{
var anchor = $(this), h;
h = anchor.attr('href');
if (typeof _hsq === "undefined")
{
e.preventDefault();
$.getScript('//js.hubspot.com/analytics/'+(Math.ceil(new Date()/300000)*300000)+'/{your-hubspot-id}.js', function(){
setTimeout(function(){window.location = h},1000);
});
}
});
});

The code basically says: if someone clicks a link with the class “hs”, grab the link they clicked, load the Javascript file from Hubspot’s servers, wait 1 second, and then continue to the original link. In the 1 second while we sleep, the code should load from Hubspot’s servers which results in the user getting cookie’d appropriately and Hubspot can still access the referring URLs, search keywords, etc.

This approach is not only limited to Hubspot. It would work equally well with any Javascript-based tracking code like Google Analytics or others if you had some reason to exclude certain users from participating under certain circumstances.

It’s not perfect – the one second pause is too long in some cases, not long enough in others, and adds a delay in all cases which can increase page abandonment. However, we’ve been using this in production now for about 3 months and it’s been working well. Lead volume is slightly up despite the brief delay and we see the full browsing history for contacts in Hubspot. Our lead and traffic numbers are now properly scaled so we can make sense of the data we’re seeing.

If you have multiple audiences viewing your site and only want to apply tracking to some of them, this technique is worth taking a look at.