May 28, 2019 22 minutes to read

Case Study. How to set up end-to-end analytics for software developers

We were approached by Skylum (ex. Macphun) to set up end-to-end analytics. In addition to bringing information from all sources into one database, we analyzed and set up the ROI calculation process.

This allowed the company to reallocate money for higher ROI products, channels and campaigns.

About Skylum

Photo editing application development


  • Founding year2008
  • NicheSaaS
  • GeographyAll over the world

Project

Macphun is a developer of photo editing applications primarily for the Mac OS X operating system. A perennial winner of the Apple Awards.

The largest product during the collaboration is the Creative Kit. Also, together with partners, the company developed Aurora HDR, a program for editing HDR photos.

In 2018, as part of a rebrand, Macphun changed its name to Skylum.

Team

  • Roman Rybalchenko, adviser and growth hacker
  • Ilia Babak, analytics and PPC on the Client’s side
  • Alex Tsepko, Macphun’s COO
  • Marketers, developers, QA on the Client’s side

Tasks

  • Learn how to accurately calculate ROI for advertising and cross promo for different tools: Google Ads (AdWords), Facebook, Bing and affiliate marketing.
  • Calculate how the chain «left an email for a trial and later bought one of the products» increases the profitability of advertising.
  • Attribute purchases from advertising in terms of the source of lead acquisition, and not the source that gave the purchase (reducing the weight of shareware supporting channels — email, remarketing, social networks, organic).
  • Combine actions around the user in analytics to calculate LTV and ROI more accurately
  • Be able to use remarketing and personalization better and to make personal offers on the site (upgrade, cross-sale, personal discounts) more efficiently).
  • Understand whether it is worth giving away lead generation software for free, whether they buy later and whether the advertising that was launched for free distribution (giveaway) pays off.

Purchase scenarios

There were 3 main sources leading to the website:

  • Software (trial, free versions of applications)
  • Advertising: Facebook, Google Ads (AdWords), Bing, etc.
  • Email subscriber base

Once on the site, the user could:

  • go to the Mac App Store (quite limited in terms of performance tracking) and buy a “stripped down” version of the program
  • download trial on the site
  • make a purchase of the Pro-version immediately on the site

Thus, we had 3 scenarios of software purchases:

  1. Going to the site and buying right away.
  2. Going to the site → Trial → Buying after email, remarketing, push.
  3. Going to the site → Trial → Buying other software on another site with email, remarketing, push.

Project Features

We were faced with the task of collecting information, combining it into one database for all sources, analyzing and calculating the return on investment (Real ROI).

Often, to track the effectiveness of application sales, developers prepare separate builds (custom builds) of programs for each partner or advertising campaign, where the name of the partner or campaign is stored inside the installer.

Thus, after installing the trial version of the product, the user is labeled as having downloaded the trial from a certain resource.

For Macphun this was not an option because:

  • It distracted developers from fixing bugs and developing features and new products.
  • The installer weighed ~200 MB, which made generating a custom build and signing it with a developer key (so that the operating system does not swear) a rather resource-intensive task
  • This did not solve the problem when a user downloaded a trial on a site, used one application, and then bought another application on another site (for example, downloaded a Creative Kit trial on macphun.com, and bought from Aurora HDR email newsletters on aurorahdr.com).

Another Client of ours solved the problem with trials and custom build like this:

  • The server hardcodes the userID into the file name
  • After installation and the first launch, the program looks for the installer in the Downloads folder and extracts the userID from the file name.
  • There is a connection between the trial and the launch or purchase if the user or system has not removed the installer.

Solution

SourceBuster

Having analyzed the software purchase scenario, we had to record and track user actions at each stage. To do this, a mechanism was prescribed for recording user data in the process of buying software.

What was used: a script for determining the sources of attracting visitors to the SourceBuster, site, transferring sources of attracting visitors to the MySQL database, then combining data with FastSpring processing and technology for transferring data to GA via the Measurement Protocol and creating reports in the database.

Mac App Store

We used SourceBuster to track purchases when a user left the site on the Mac App Store. In the Apple affiliate link, we “sewn up” the following parameters for each departure to MAS: application | campaign | medium | source.

As a result, we received statistics on sales from ads that led to the site in the Mac App Store partner account:

This helped us understand whether it makes any sense at all to lead the user from advertising to the site, and to take some of these users from the site to the Mac App Store, whether it is profitable or not.

Cons of selling software through the Mac App Store:

  • Apple takes a percentage of the commission.
  • The Mac App Store sells basic and cheaper versions of products, unlike the website.
  • The Mac App Store versions were quite limited in terms of analytics and user data collection (campaigns were sometimes long, and Mac App Store partner statistics did not support a long identifier, unlike SourceBuster)

Functions used in the software. Their influence on the purchase.

We took the solution from MacPaw. They wrote an SDK for Google Analytics and implemented events inside the application.

Features used in the software

Using the SDK, we tracked which types of files are most often used for photo editing. We moved them to the top in the app description so that users could quickly find popular formats.

Popular file formats

Does it all add up?

As mentioned earlier, we had several conversion options: conversion to trial, conversion to instant purchase, conversion from trial to purchase; and variables: average check, traffic price, trial cost, etc.

To understand what products and indicators you need to work with, we built a unit economy.

An example unit economy table

Thus, we were able to see the relationship between the metrics and clearly understand how, by changing one of the metrics, we affect the final result:

  • We saw the profitability of promoting certain products.
  • We calculated the average check, CPC and conversions which will make the campaigns profitable, based on the fact that some of them buy instantly, some buy from the trial.
  • We understood which indicators need to be dealt with in the first place.

Methods we used to improve the effectiveness of advertising campaigns

Per Session Value (PSV) Metrics

When we started working with the project, it turned out that the geotargeting of campaigns was quite wide, because software was sold all over the world.

  • We analyzed Per Session Value (an indicator that includes the average check, number of visits and conversions). In this way, we also calculated the profitability of targeting. As a result, a “white list” of locations was compiled, which consisted of 10-15 countries, the so-called Tier 1, which the main budget was allocated for.
  • We calculated Per session value in the context of the version of the operating system and in the context of novelty, cost and device functions. We “outplayed” the retargeting strategy (the newer and more expensive the user’s device, the fresher the operating system, the more likely it is to make a purchase).

The “Ideal Buyer” Portrait

Having compiled a portrait of the “Ideal Buyer”, we found patterns (using data from buyers and advertising systems) that boosted the increase in PSV.

Addition and refinement of the User Database

1. When performing an action (download trial, subscribe to a newsletter, purchase), the user provides contact information (email)  

2. Using the Sourcebuster a record is created in the database with the following fields:

  • email
  • userid
  • source, medium, campaign, content, term (data on where the user came from)
  • clientID

Users used different browsers for the trial and for the purchase. Thus, from the point of view of Google Analytics 1, a user could have multiple clientID.

After receiving the data, we faced the task of merging users.

The data that we used to merge users:

  • the presence of our cookies
  • search in the database by clientID and the received email
  • personal links in email

If the user already had our cookie, we did not update the data by source and date, but supplemented, if necessary, data by clientID and email.

If the user did not have our cookie, but we found the userID by email or clientID, we hung up the found cookie and updated the data in the database by email/_ga if necessary.

Thus, we could supplement user data and recognize the same user who may have come from multiple campaigns. For example, they first downloaded the program on their computer and then opened the link in an email from a mobile device.

Trial: adding user data via email

While using the trial version of the product, the user received various follow-ups to the specified mail. The user could open the link on another device or in another browser, and we would get different clientIDs, and one user could be duplicated in the database.

We recognized the user from the email through the get-parameter mark in the letters. To guarantee “recognition” of the visitor, a personal parameter was added to each link in the letter, which helped us to “recognize” the user.

If, when following the link, we did NOT see our cookie on the user, we restored it using the mail address passed in the URL and wrote a new clientID to the database.

This logic allowed us to recognize on the site the user who downloaded the program on a computer and then opened a link in an email from a mobile device, for example

Further on, we merged transactions from processing.

Merging transactions from processing:

1. The moment when the sale took place, the processing sent a “web hook” to our servers, which transmitted transaction, number, amount, goods, coupons, net profit and email.

2. We placed GTM in a stripped down form on the processing pages, which called:

  • remarketing codes
  • GA & EEC codes
  • iframe from the server with the transaction number and clientID to the “thank you for the order” pages

Purchase

After the purchase, user data was recorded in the database, which was also tied to a specific userID.

We had one feature: instead of the “Thank you for your purchase” page (which was not there), we used the processing page.

Very often, users left different postal addresses when ordering a trial/purchase, and in order for the user not to be duplicated in the database, it was necessary to constantly read our clientID, check for the presence of userID, plus read the data from the current source (for further analysis).

In order to get all the data, we opened an iframe on the “Thank you for your purchase” page with a link to our server. Then, we passed the transaction number and clientID in the get-parameters (just in case), thus gaining access to “our” cookies, and took from the server cookies the source / medium /campaign from SourceBuster.

Additional difficulties that we encountered:

  • “Stripped down” GTM on processing pages without debugging
  • Forms of payment: one-time, installment, subscription. (We tagged purchases to the initial source of attracting a lead. Since the user entered their payment card details at the first purchase and continued to bring profit monthly)
  • Cross-domain tracking, undertracking and other joys of complex integrations :)

At the time of purchase, we did a check by clientID (if our userID cookie was not there) and recorded a transaction in a separate table with data on sources, time / date and binding to clientID.

After receiving the webhook, an additional check was carried out against the userID database by email. If we found a user, we connected the purchase with an existing userID, if not, we created a new one and, if possible, immediately “hung” our cookie on the buyer (or did it on their next visit).

For repeated payments (purchases by installments or by subscription), the income amounts were tied to the userID by searching using the ID of the original (first) transaction. In addition, information about the payment was sent via the measurement protocol to GA (using the clientID and the sources of the first transaction).

Combining data from different sources

On the “thank you” page, the processing has clientID and transaction ID — these are the keys.

On the iframe page from our server, in addition to the clientID, there is a source, medium, campaign …, by which the user cameь.

The webhook has a transaction ID and the composition of the transaction, the amount of earnings and the user’s email.

Combining data from different sources

Using all these keys, we supplemented the data and glued them together in the database. In total, the database contained clientID, transactionID, Sourcebuster data, what the user bought, how much we earned, email and userID. In this way, we could build links between the site, the processing page and the final sale in the database.

Report building and analysis

To calculate the real ROI, we used the Power Query MS Excel add-in.

The data was pulled from two sources:

  1. GA — traffic sources, costs and direct sales, dates
  2. Database — resulting table “date of entry into the database” — “first source” — “date of purchase” — “amount of income”

Income and expenses

Expenses were imported into GA using OWOX BI Pipeline

Income was imported into GA using the Measurement Protocol (Revenue & Refunds), and into the database using a webhook from processing.

After processing, we received the following summary table:

“acquisition month” – “acquisition source” – “costs” – “number of new users” – “number of purchases by these users” – “revenue” – “profit” – “ROI”

Further on, we expanded and supplemented the table to a cohort by the date of attraction or to analyze the effectiveness of “converting” sources.

Data aggregation

We had several data sources to be merged:

  • GA costs: data, cost, source, medium, campaign
  • GA revenue: data, transaction ID, revenue, source, medium, campaign
  • Database: data, transaction ID, revenue, source, medium, campaign

To combine data, we used Microsoft Power Query в Excel:

Merging tables

1. We create the key date, source, medium, campaign, for example: 01609_google_cpc_sale-30

2.We connect the tables and take into account 4 scenarios:

  • the sale is in GA, but not in the database
  • it is both in the database and GA
  • is in the database, but not in GA (for the main site)
  • is in the database, but not in GA (sales of another program on another site)

Here is what the data looked like

“raw” data
“merged tables”

As a result, we managed to build a summary

Summary

Results

We set up the Real ROI calculation process.

It turned out that ROI with PPC advertising is positive, but not as high as we would like it to be. This allowed the company to reallocate money into higher ROI products, channels and campaigns.

A quote from Forbes

«Our special likes go to the data analytics which allows every member of the team, including designers, to measure success down to the smallest detail. We want to know why something worked or didn’t work, and data analysis is the key!»

Paul Muzok

Co-founder, CEO

It’s always a pleasure to collaborate with Roman.

Alex Tsepko

COO

Roman has an eye for detail and is very result-oriented.

Need a web analytics setup?

We know how to calculate marketing ROI

We don't work with:

  • russia
  • CBD
  • Tobacco
  • Politics
  • Gambling
  • YMYL
  • Crypto
  • Pornography

Certificates
and Awards

Google Analytics Individual Qualified since 2009

Meta Business Partner. Only ~16 in Ukraine

eSputnik Partner since 2019

MailChimp Experts since 2010

UpWork Top Rated

#364 in the TOP-1000 companies worldwide, 2025 by Clutch

TOP Pay Per Click Company in Ukraine, 2025 by Techbehemoths

Clients

We have worked with 281 Clients and helped them enhance online marketing and earn more.

Clients
ABOUT US

Why did we choose Roman.ua?
Because they are geeks.