Tedious and unsexy, but extremely useful: Getting campaign cost data into your Web Analytics tool allows you to evaluate the performance of your online marketing end-to-end without having to resort to unsexy workarounds. At siroop.ch, we tested funnel.io, a Swedish tool that promises to import all your campaign cost data automatically into Google Analytics.
If you run a lot of ad campaigns, the main question is not the Click or Conversion Rate. Far more relevant are KPIs like CPL (Cost per Lead), CPO (Cost per Order) or ROAS (Return on Advertising Spend) because they effectively show you where you waste more money.
The hub for your online data analysis is often your Web Analytics tool, e.g. Google Analytics (GA), Adobe Analytics, Webtrekk or the like. That’s why you want the campaign cost data in these tools, because then you can analyze campaign cost side-by-side with on-site user behaviour, in short: compare Revenue and Cost across all marketing channels. Depending on your tool, cost analysis can come with additional benefits. In Adobe Analytics for example, Cost data also applies to Marketing Channels (Channels in GA don’t show cost data), and you can include Refunds in the cost analysis so you see the ROAS of a campaign even after people have returned the clothes they ordered.
In Google Analytics, refunds cannot be analyzed in conjunction with campaign data, but the AdWords data you (automatically) get into GA is directly tied into your GA Sessions. So you can go much deeper in terms of cost analysis for AdWords campaigns (not visible in screenshot) and compare ad groups, keywords, positions, and even apply segments.
That is not possible for other campaign sources (because you are just uploading cost totals here, it is impossible to say that Facebook ad click A with cost c lead to session S with revenue R):
Even if you do your final cost analysis somewhere else or if you want to beam some data onto, say, a Klipfolio dashboard, it is much easier to get all the cost data into one central Analytics tool and then export it out of there than to maintain and synchronize API connections to your various Marketing tools.
But you can spend months of tedious and boring developer work to get all the campaign cost data into your Analytics tool. Or do it manually. That was the case at siroop.ch, a new Swiss online market place, where we did it with some self-made Excel Macros for our first couple of months. That was a tedious task, especially for our Display Campaign Manager, too much to do it every day. This in turn lead to the cost data often lagging behind some weeks.
Funnel.io’s Promise: Automate All your Cost Data Imports into GA
So we decided to give funnel.io a try. Their main promise: automated cost imports from a variety of online marketing tools into GA. You pay a monthly fee that depends on your marketing spend and the number of GA views where you want the data imported. You can use as many connectors (e.g. to Facebook, DBM, etc.) without paying more. The fact that it only connects to GA and no other Analytics tools for now is not so terrible, because once the data is all in Google Analytics, all we need is one simple daily export from there to Adobe Analytics or our BI systems, and our major data platforms have all they need to assess our Online Marketing performance.
So after an introductory call, where we were able to set up an automated daily import for our Facebook and Twitter Ad accounts in less than an hour, we decided to sign up even though the price tag seemed a bit hefty.
While those two first imports have run smoothly ever since, the setup of DoubleClick Bid Manager and DoubleClick Campaign Manager imports was much more tedious. For several weeks, the cost data that we got out of DBM and the data funnel.io imported into GA showed big mismatches (up to 150% higher cost totals in GA). We needed a lot of hours and intense support by funnel.io. In the end, funnel.io revamped their importer and then did a reimport for the whole past data, and that finally solved it.
Caveat 1: You cannot control the day when the imports shall start
The bigger mismatches in the beginning probably existed in part because we did some major campaign restructuring in June. Here, one missing feature would have been helpful, and I hope funnel.io will implement it soon to spare future customers similar pain: Allow specifying the date from when the imports shall start instead of going years back into the past.
I wish we simply could have started importing from July and leave the existing historical manual imports as they had been. Instead, we had to delete them all and then manually correct the mismatches after the funnel.io imports turned out to be “wrong”. It is the number one annoying thing in funnel and has cost me days of extra work.
As I wrote earlier, funnel.io did overhaul their DBM/DCM import in the meantime, and now our DBM/DCM cost in GA data nicely matches the data in DBM/DCM. 🙂
Caveat 2: Some connectors import very recent data, others lag behind
Another problem with the DBM/DCM import is that it often lags 1 1/2 to 2, sometimes 3 days behind, and according to support it is not possible to speed this up. So while we now have AdWords data (which GA imports automatically), Facebook and Twitter cost data just a few hours after they occur, we have to wait much longer for the DBM/DCM data and cannot analyze yesterday’s online marketing performance until tomorrow.
The funnel.io support however recently promised to improve their DoubleClick connector so that the lag is reduced and the import frequency will increase. So looking forward to that!
Caveat 3: You’re lost if your campaign tracking does not match funnel.io’s standard
What also needs to be improved is the campaign parameter mapping. Be warned that funnel.io only allows you to use the campaign name (utm_campaign) for mapping! So something that can be exported from your advertising tool must match the utm_campaign parameter’s value. For example, your DBM campaign names and Facebook campaign names have to be equal to the utm_campaign parameter, otherwise there is no chance to get them mapped and import cost data. If that is not possible in your case, you have to change your entire campaign tracking setup (terror!). It is also not possible to go any deeper than to the utm_campaign level, e.g. you cannot import cost data at the utm_content or utm_term level.
In our case, this was not a huge issue, but it did cause some extra work and remains a source of instability. To give you an example, for our DCM campaigns, we use the schema (abbreviated):
- utm_source=[publisher platform where the ads run], e.g. “nytimes”
- utm_campaign=[campaign name]
This allows us to easily compare publishers’ performance through the “Source”. For funnel.io to do the mapping, you have to tell them which campaign name shall be grouped into which Source/Medium combination. If you are lucky enough to have a string in the Campaign Name that allows you to deduct the Source, then you can get it done with a lot of manual rules. In our case, the publisher platform is luckily also part of utm_campaign, so we were able to set up a multitude of rules. E.g. if Campaign Name contains “_ppn_”, then Source is “ppn.ch”:
So whenever a new publisher platform is added, we need to remind ourselves to update these rules.
This would be easier if funnel allowed you to use Regular Expressions to manage more complex mapping logics or to allow for a dynamic extraction of the source and medium similar to the Classification Rule Builder in Adobe Analytics or Advanced Filters in Google Analytics.
To avoid these headaches, funnel.io could also think of offering to upload a CSV mapping table with Campaign Names and their corresponding Source/Medium (like Classification uploads in Adobe Analytics) so clients do not have to set up millions of rules or re-structure their whole campaign tracking.
So at the moment, if your campaign tracking does not correspond to what funnel.io thinks is the standard, you should look for other solutions.
Caveat 4: Currency conversion is a manual task – UPDATE Sep 2016: NO MORE! 🙂
A feature that cries for enhancement as well is the currency conversion. If you buy ads at Facebook, the currency is usually US Dollars, but in GA we work with Swiss Francs. funnel.io allows you to set the currency conversion rate manually and also set different rates for different date ranges, but that is of course tedious – and it is ironic for a tool that automates so much that you still have to do something like currency conversion manually. I would like an option to automate the currency conversion based on the rate of that day.
Update: Since early September, just a month after this post originally came out, funnel.io started supporting automatic currency conversion! So this point is no longer valid. THANKS!
Caveat 5: After signing the contract, you can’t talk to anyone anymore
Finally, one thing I am missing is the possibility to talk to support other than through a chat. The guys in the chat are always polite (even when I was not, thanks and sorry!) and try to help within some hours, but a couple of screensharing sessions may have clarified many questions much faster, especially in the beginning. So funnel could offer some additional support for the first month or two to help clients get over the initial frustrations that happen with any tool.
Summary: Not Superb, but Good Enough
That being said, I am sure funnel.io will continue to improve their functionality. Overall, I think the benefits so far outweigh the pains, so I can recommend the tool as long as your campaign tracking structure is not too different from what funnel expects you to do, and as long as you don’t live in countries with volatile currencies.