Ever since building my first WordPress plugin I have been interested in the different business models around monetizing plugins. A while back I heard of Freemius, a monetization service for WordPress plugins and themes, that aims to do all the heavy lifting when it comes to selling your products, allowing you to concentrate on developing them.
Essentially, Freemius Monetization can take a premium plugin or theme and strip out features to create a free version to be distributed on the WordPress.org plugin directory. It also provides a quick and simple way for users to pay for upgrades to the plugin. This sounds too good to be true, so I thought I’d take it for a spin and share my experience.
Setup
I’m going to use one of my free plugins as a test here – WP Trello. The plugin allows you to display data from your Trello account on your site with shortcodes or widgets. You can display the names of Trello boards, lists, and cards on your site. For example, I maintain a list of personal goals for the year in the form of Trello cards and display on my personal site.
The plugin currently doesn’t handle displaying checklists within cards, so that seems like a good feature to add as a paid upgrade to the plugin. Ok let’s get started! I will be working on the ‘freemius’ branch on the GitHub repo of the plugin, so hopefully the commit history will help you follow along.
Premium Feature
First I need to actually build the premium feature into the plugin before I can start partitioning which parts are free and which are premium. The code itself is old and not written particularly well, so for brevity I will fit the new code into the existing codebase without too much refactoring. Luckily the plugin already has the Trello heirachy supported, so it’s not a great deal of work to add checklist integration.
Integrating the Freemius SDK
You need to register to get access before starting out. Once logged in to the dashboard I can start by creating my plugin, using the plugin slug and title. The next step is to configure some options about the plugin. This informs the Freemius SDK how the plugin works. Then you get to download a customized SDK bootstrap file as well as the SDK itself.
I added the SDK and bootstrap code slightly differently so as not to clutter my main plugin file and directory. If everything has been added correctly, when you refresh the plugin page you should see a Freemius opt-in screen, which lets you know everything is working:
Configuration
Freemius gives you the choice of two business models to upsell your free plugin: freemium and free with addons. For this example I want to go the freemium route, so I need to add a new premium plan in the dashboard. This is where you set the name of the plan, the price (which supports recurring charges), the features, and more advanced options.
Freemius Code
For the freemium model Freemius will eventually create two versions of the plugin. One that is completely free and devoid of any premium features, and the other which has all the premium functionality. Freemius uses a custom PHP preprocessor to take your whole plugin and spit out the two versions, but for it to do that there is a certain amount of code ‘annotation’ that needs to happen.
When I initially watched the demo showing how to contain premium code within Freemius’ special IF statements, I was dubious that it would work for plugins that encapsulated premium code inside other files and using class inheritance. But from looking at the SDK integration page, it covers all those things.
The next step is to go through my newly added premium functionality code and surround it with the Freemius code, which may result in some refactoring. It didn’t take long to go through all the premium code I had written earlier and wrap the Freemius if ( wt_freemius()->is_plan('pro') ) {
around it all. This did involve some refactoring so I could cleanly partition the code, as well as creating a new class to extend from the Trello API class in the free plugin and get Freemius to exclude the file from the build process for the free edition.
This process was surprisingly easy, and as it meant I needed to refactor and organize the code better, I could see it actually helping to structure the whole plugin code in the long run. Take a look at the changes I had to make, along with a JavaScript tweak to make sure no errors were thrown when running the code in free mode. With regards to JavaScript, if your plugin relies heavily on it then I could see the need for separating out premium functionality to a different JS file and then only enqueuing it for premium plans.
Deployment
So with all the code ready to go, it’s time to test out Freemius’ deployment process and upload my zip file. The preprocessor will generate two versions of my plugin which the dashboard describes as follows:
- Premium version: Identical to your uploaded version, including all code (except your secret_key). Will be enabled for download ONLY for your paying customers.
- Free version: The code stripped from all your paid features (based on the logic added with { method }__premium_only()). That’s what you give your users to download first. Btw. If your original plugin was compatible with WordPress.org guidelines, also the new free version will be compatible since all the premium code was stripped.
The preprocessor itself took seconds (although the progress bar keeps moving even with a success message) and I’m then presented with the two versions of my plugin:
When I first downloaded and inspected both versions, I found that my pro-only file had been excluded in the free version, however, my if ( wt_freemius()->is_plan('pro') ) {
wrapped code still existed. After consulting the SDK Integration page in the dashboard a little closer, I realized I hadn’t taken note of this section and missed out the important parent conditional:
<?php
// This "if" block will be auto removed from the Free version.
if ( wt_freemius()->is__premium_only() ) {
// ... premium only logic ...
}
?>
After a few tweaks and a reupload of the zip file, the free version was clean from premium code. I did find that if you were conditionally wrapping HTML output in the Freemius code, the preprocessor doesn’t detect it, so you need to refactor how your output is injected. I had to do a much needed refactor of how the <select>
options were output for the widget here.
Once deployed, the zips can be marked ready for release, and you can distribute the free version and start selling your code. Pretty awesome stuff!
Creator Q&A
I thought it would be interesting to hear from the people behind Freemius before I sum up my experience with the product, so I caught up with co-founder Vova Feldman to dig a little deeper:
Iain: What is the difference between the dashboard and SDK for Freemius Monetization and Freemius Insights, are they one and the same?
Vova: Freemius is an “all in one” monetization solution for plugin and theme developers. Analytics is one of the components we offer helping to build data-driven businesses. Since a lack of data and analytics is a huge problem in the WordPress ecosystem, we decided to offer the analytics and usage tracking as a standalone solution and named it ‘Freemius Insights’. The SDK and dashboard are the same, we’re just not exposing some of the functionality and UI when developers only use Freemius Insights and are not monetizing with Freemius.
Iain: Can a user opt out of insights but still upgrade the plugin for a wp.org hosted plugin?
Vova: The upgrade process works whether the user opts-in to usage tracking or does not. If the user chooses to upgrade, the developer will get access to the customer’s email in the upgrade process. Since Freemius comes with Software Licensing and Software Updates, WordPress will be periodically pinging the Freemius backend to check for updates of the premium version. So instead of just pinging the API with only the license key, we realized that the diff between that to also sending valuable data points is minor in terms of privacy, but huge in terms of the value for the developers. Therefore, when a user purchases a plugin or a theme via Freemius, they also opt-in to insights upon upgrade completion. It’s part of the upgrade terms.
Iain: Can a seller style and modify the pricing and upgrade pages?
Vova: The pricing page is automatically generated and styled by Freemius, following WordPress admin dashboard design practices. We make sure it looks natural and optimize for best conversation results.
We have years of experience in conversion optimization, and we use data to continuously improve the pricing page.
Having said that, we are a feedback-driven company. If we realize that a significant part of our developers ask for customization, we will add it. So far we didn’t see such a demand.
Iain: Any idea on pricing, I couldn’t find information on your site about pricing structure?
Vova: When developers monetize with Freemius, they get our full toolkit for free. A combination of capabilities that will cost around $500 in competing solutions like EDD or WooCommerce.
Unlike other solutions, we treat and see our customers as partners. Hence, our pricing is based on a revenue share model. A model that pushes us to work harder and to continuously improve our offering to get more dollars to our partners. The success of our business is directly related to the success of our developers’ businesses. This is the pricing structure:
- 30% on first $1k
- 20% on $1k-$5k
- 10% after crossing the $5k
Since we cover the gateway fees (~3%), it practically means that the rev-share is 7% after $5k in aggregated revenues with Freemius. In addition, based on data we have tracked, our in-dashboard checkout increases the conversion by an average of 12%. So after doing the math, for freemium plugins, there’s an expected bump of at least 5% in revenues, after the rev-share split.
Obviously, when an established business migrates over to Freemius, we offer volume discounts, provide migration assistance and dedicated support.
We haven’t made the pricing public as yet. Getting to this pricing structure was a learning experience for us and took a while. We intentionally didn’t have numbers on the site so we can test different models when starting. But now we are confident with our pricing and working on a new landing page that will contain all this data.
Iain: What provision is there for users to export their data if they wanted to leave the platform?
Vova: Many marketplaces choose to hide their customers’ data from developers and lock them inside the platform. We believe that the data belongs to the developers. If a developer decides to leave the platform for any reason whatsoever, he/she can easily download their user-list from our dashboard with one click, and they can access all of their data by leveraging our RESTful API for migration purposes.
My Conclusions
Overall I was very impressed with the Freemius experience and how powerful it is. Thinking about what I would need to do if I was starting out to sell plugins is quite scary, and Freemius just covers so many bases:
- You don’t need an ecommerce site to sell your product
- It handles license keys and site-based activation limits for pricing tiers
- You don’t have to manage two editions of the plugin, or one with a custom build script
- You get inline upgrade purchases, which can surely help conversion rates
- It handles things like taxes and EU VAT, which has been a recent pain for EU based developers
- Its dashboard is polished and easy to use
- It has good integration with Help Scout for support
- It creates a deployable version for WordPress.org which is compliant with the terms of the directory
- The SDK is open source and they have a dedicated Slack channel for developers
There were a few things that I hope the Freemius team will take note of: The ability to style the pricing and account pages would be a great feature to allow product brand continuity. The PHP preprocessor, although extremely powerful in what it does, did strip out some line breaks in my code that triggered my code-style OCD, and left me wondering about the possibility of further code mangling and corruption. I also noted that when deploying a plugin in the dashboard, there is an option to “Add Freemius as plugin contributor” in the plugin readme.txt, which is turned on by default. This feels like a nasty marketing ploy and should be opt-in only.
One of the biggest drawbacks is how users actually have to get the premium edition of your code into their WordPress site after paying for the upgrade. I was under the assumption that as the purchase was inside the WordPress dashboard, the upgrade would be handled automatically. This is not the case for free plugins that are WordPress.org compliant and live on the directory, the upgrade process is pretty manual:
- Download the plugin’s Pro version
- Deactivate the free version on your site
- Upload and activate the downloaded version
Admittedly this isn’t an issue with Freemius itself, but a limitation imposed by the WordPress.org directory terms, which don’t allow installation of plugins not in the WordPress.org repo via a plugin. The Freemius team confirmed with me this had been clarified with WordPress.org. It’s just a shame that this, for me, blights an otherwise streamlined and effective solution, and essentially makes the upgrade path no different to other ecommerce solutions.
As someone who has been around WordPress and selling code for a few years now, I am cynical when it comes to these types of platforms that come and go. If I were to invest a large part of the logistics of my plugin business in a service, I would want to make sure it has longevity, but at least there are ways of getting your data out.
Freemius in the Wild
As Freemius Monetization is a relatively new service, I am curious to know just how many developers are using it and finding it useful. I thought I’d chat to a couple of plugin developers, Shramee Srivastav of Pootle Page Builder and Bruno Carreço of Go Fetch Jobs, who are using Freemius, to see how they are getting on:
Iain: Have you used Freemius on your first plugin? If not, how would you compare the plugins in terms of upgrade conversion?
Shramee: Used for first time 😉
Bruno: No. My older plugins were targeted at specific themes which already had their own marketplace. Being a focused marketplace, and although there were no Free or Trial version, sales were good.
My plugins, running with Freemius are all sold in the WordPress plugin directory which make them much harder to find specially with all the competition. Despite this, I was able to get a 18% conversion rate.
I can easily relate the good conversion rates in Freemius with the fact that it removes almost all barriers that can sometimes frustrate an interested user like needing to go to a different site to purchase the premium version or to make a simple payment. The option to upgrade directly without moving away from the plugin is brilliant and it helps with the conversion.
Iain: How did you find the Freemius experience of integrating with your plugin/theme?
Shramee: Well, we had been using it since the beta days, so it was kind of a mixed experience, but one thing nice about Freemius is that it was well documented right from the beginning making the life of us developers much easier. Moreover Vova and Kobe (the guys at Freemius) have been very helpful and we managed to solve every issue that came in our way.
Bruno: The process is extremely simple. They provide a well documented SDK with plenty of options to conditionally load/bundle premium/free code.
Iain: Anything you would like to change?
Shramee: We talk about it all the time and have seen our suggestions and feature requests being fulfilled, developers behind Freemius are very active and Freemius keeps on improving over time. The thing on the top of our wishlist at the moment is a central place ( perhaps on freemius.com ) for users to manage their licenses, it will be particularly helpful for agencies who manage lots of sites. We have already discussed this with Vova and hope it will soon be implemented.
Bruno: As it like now, Freemius is already very complete and it works great. Still, I would change some things like the visual UI for the upgrade process. I think it could be a little prettier. I know it’s hard to please all the people but maybe providing some more control over the visual styles to the developers would be great.
I would also like to see a more responsive dashboard on mobile devices. I’ve recently had to use the dashboard on my iPad and the experience was very frustrating. Strangely, I had a better experience using a mobile phone, with a smaller screen.
Iain: Would you use Freemius again?
Shramee: Yeah, we have had a lovely experience with Freemius, though not a bug free one since every new piece of software comes with it’s own bugs and only gets better with time, but Vova always provides with hot fixes and fixes in the next release. So yes we will definitely use Freemius again 🙂
Bruno: Yes, definitely. I intend to use it on all my new plugins.
Wrapping Up
Freemius is certainly a powerful solution and will help many developers who want a simple approach to selling their code. With Monetization, Insights, and recently the beta of Checkouts, Freemius as suite of products seems to be going from strength to strength and I am interested to see them grow.
Have you used Freemius Monetization yourself to sell plugins or themes? What were your experiences?