|
Release Notes include our periodic updates that highlight the recent product improvements weāve made, so you can easily stay up-to-date on whatās new. Hereās what we launched between December 2018 and June 2019 (a LOT!).
During the past six months we released LOTs of new exciting features. Here are some of the notable ones:
- Multi-Currency Pricing & Support
- Release Cycle Management – Beta Program
- New EULA (End User License Agreement)
- Login as Customer
- Checkout Optimizations
- Major enhancements around bundles & add-ons
Multi-Currency Transaction Support (A big one!)
We are super excited to share that Freemius now fully supports multi-currency pricing and transactions, recently adding ā¬-Euros and Ā£-Brithish Pounds, in addition to $-U.S Dollars, which we supported from the get go.
You may be wondering, whatās with all the excitement around multi-currency? I mean, both Stripe and PayPal (the gateways we use under the hood) support multi-currency transactions out of the box, so whatās all the fuss about?
Due to various financial regulations and interests from payment gateway companies, as a U.S. company, even if we accept non-USD with our U.S. PayPal/Stripe accounts, thereās no way for us to withdraw the funds in their original currency. The payment gateway companies first convert the money to USD with a healthy 2-4% FX (Foreign Exchange) conversion fee. It was clear to us that deducting an additional % from our sellers community is a big no-no, so we had to figure out a way to solve that without the additional fee. After doing some research and having discussions both with Stripe & PayPal, we ended up opening European accounts, which are now used for transacting EUR (ā¬-Euros) and GBP (Ā£-Brithish Pounds).
An added benefit from that move is that Stripeās fees for European account holders for European cards are 50% cheaper than Stripeās US account fees. So, the gateway fee for a EUR transaction with a European card is now only 1.4% + ā¬0.25, instead of the 2.9% + $0.3 with the U.S account.
Another added benefit is that our platform now supports a rule based gateway selection, allowing us to not only add new gateways into the system relatively easily, but also set up custom rules to determine which gateway will transact a specific payment based on criteria such as: geolocation, currency, credit card type, transaction amount, and more. That capability gives us a LOT of flexibility to help our developersā community minimize transaction costs. For example, if a payment gateway is competitively priced for transacting VISA debit cards in Canada, leaving the legal & logistical aspects aside, we can integrate that gateway and selectively use it only for transactions involving Canadian VISA debit cards. While Stripe is a robust payment gateway and using Stripe for credit card processing was the right decision for us to begin with, our newfound deeper knowledge and understanding about the underlying costs of credit card processing allows us to factually say that other top-tier payment gateways offer much more competitive prices, without lacking on features or support.
Implementing additional gateways in this dynamic way will not happen overnight, as we have many higher priorities at the moment. However, the point is that even though our pricing model doesnāt cover gateway fees and theoretically we could just forward the fees to our sellers without looking into it more deeply, we genuinely care about our selling partners, and we are constantly enhancing our system to help you maximize your bottom line. So, if you are choosing to sell with Freemius, rest assured that for the long-term, the cost of gateway fees will significantly go down and you wonāt have to do anything to make it happen.
You can learn more about Freemius multi-currency, what plugin and theme businesses we recommend it for, and how to activate it here.
Release Cycle Management – Beta Program
The whole release cycle in the world of WordPress plugins and themes is lacking compared to the robust CI/CD workflows in the āreal worldā. If you have a plugin/theme with tens of thousands of active installs, every release becomes risky. At the least, it can negatively affect your business agility and puts your usersā and customersā websites at risk. There are various practices to mitigate that risk, and one of the more popular ones is building a group of beta testers: People that love getting early access to your products – and giving them a spin before anyone else in exchange for feedback.
So⦠we are pleased to announce that you can now systematically onboard beta testers with Freemius and release beta versions only to those users that opted-in to the beta program!
Users can opt-in to the beta program directly from their Account page by simply checking a box and agreeing to the disclaimer prompt:
Alternatively, you can add a user to the beta program directly from the userās profile in the Developer Dashboard (donāt forget to click the UPDATE button to save):
Ready to release a beta version? Not a problem! Just upload it to the DEPLOYMENT section and flag it as a Beta release. When youāre ready to make the beta release public for everyone, simply switch the version to Released – itās that easy!
Beta releases will be flagged in the WP Admin with a Beta label, making it clear to users that they are currently using a beta version of the product:
We hope that by empowering you with the ability to easily start beta programs it will create a safer product environment for the whole WordPress community, and of course, for your customers. Now you can test releases on a small subset of users who willingly opted-in to test your versions before making them public for all.
Notice: The initial version of the Beta Program feature can only be activated for users that are running a paid version of your plugin/theme. Also, it is not yet supported for add-ons.
Freemius Checkout
New Checkout JavaScript API Options
In addition to the new currency
parameter added to control the currency that the checkout will be opened with, you can now pre-populate a license key with the license_key
param:
license_key: ā<key>ā,
And if you are running a periodic promotion and want to automatically apply a coupon but not reveal it to your users, you can now include the following in the checkoutās config:
coupon: ā<COUPON_CODE>ā, hide_coupon: true,
You can check the full list of checkout options here:
https://freemius.com/help/documentation/selling-with-freemius/freemius-checkout-buy-button/
Checkout Session
We introduced a new 60 min session āmemoryā, to increase conversion rates and make it easier to purchase multiple products from the same store. Basically, if a customer purchases a product on your site and then opens the checkout for another product within 60 min of the previous purchase, the buyers name and email will automatically get pre-filled when the checkout is opened. This session is automatically renewed on every purchase, allowing a customer to purchase multiple products without the need to enter their personal contact info over and over again.
Since Freemius doesnāt have a ācartā concept, and we donāt believe we should due to the extremely low number of multi-product purchases in the plugin and theme space, the checkout session memory feature is a good compromise between the ābest of both worldsā.
Renewals Discount
If a product has an annual renewal discount set, the checkout now makes it clearer that the initial payment is higher than the ongoing renewals:
PayPal Checkout
PayPal introduced an option to dynamically include a header image in the checkout page. We decided to integrate that option, so the checkout is branded with your productās icon:
Checkout for Bundles
A lot of work was put into the checkout in relation to selling bundles. The checkout now shows a rich list of bundled products, including the undiscounted standalone price of each product, as well as the discount amount saved by purchasing a bundle:
Thereās a lot of complex calculations happening behind the scenes to properly calculate all the discounts and prices based on your plans configuration. All those discounts are CRO boosters – their purpose is to show the customer how much money they are saving.
Bug Fix
Due to our implementation of Stripe, a customer that subscribed with a credit card for a trial of a product that has a renewal discount was charged the difference between the renewal amount and the initial payment amount upon trial cancellation. That issue is fixed and no more unexpected charges should happen upon cancellation.
User Dashboard
Browser Compatibility
The User Dashboard now works on Internet Explorer 11 and higher.
Websites Section
A new filter was added to the websites section for users to more easily filter the websites where at least one of your storeās products has been activated, installed, or deactivated. The websites section now by default displays websites where the product is installed.
Before that, we were showing users all the websites that ever had a product from your store installed (if they opted-in), which was leading to some confusion when, for example, a customer had previously uninstalled the product from the website or maybe even deleted the website as a whole.
Download Upsell Enhancement
A major enhancement was introduced to the download upsell dialog box. When a user tries to download a product for which the license expired, they can now choose whether to renew the existing license or purchase a new one. Moreover, if the context license was purchased as part of a bundle, another option will show up to renew the bundleās license:
Developer Dashboard
Sticky Headers
All tables now have sticky headers – a small, yet powerful, UI/UX improvement. Please note that while most popular browsers support this CSS rule, IE and Opera Mini do not:
Bundle Products
The PRODUCTS section of the Developer Dashboard now visually displays bundled product types and icons, making it much easier to identify a product within a bundle than before:
Emailing Manually Created Licenses
There are multiple use-cases in which developers may need to manually create licenses; here are a few:
- Paid reviews – reviewers need to test your product
- Giveaways – winners need to access the product
- YouTube promotions – affiliates need to access paid product features
Previously, you could easily create a license for those use-cases, but then you had to manually email the license to that person. That sounds easy, right? But, how do you email the download link securely? What about install instructions? There are many ways to handle it – they all require a bunch of steps – and such a process can take 10-15 min – thatās a lot of wasted time!
Based on your feedback, we introduced a new capability to the manual license creation dialog box allowing you to automatically email the license key, product download link, and installation instructions by simply checking a box:
Login as Customer (aka impersonation)
As part of our efforts to empower you with tools to better serve your customers and reduce your support load, now you can easily log in to any of your customersā User Dashboards to see exactly what they see when they are logged-in. Simply open the relevant user profile in the Developer Dashboard and click *LOGIN AS USER*:
This will open the User Dashboard and will automatically pre-populate all the input fields – all that is left to do is click the sign in button and you are in!
For security reasons, your team members will only be able to login to the userās account when they have access to all the storeās products. I.e., if you are the seller of 3 different plugins and youād like your support rep to have impersonation capabilities, youāll need to add the support rep as a team member to all 3 products.
This awesome feature (and a few others) came from the Tickera migration to Freemius (thank you!).
Contact Us Styling
You can now add a custom CSS stylesheet that will be added to the in-dashboard contact us form:
Coupons New Default Order
The default order of coupons listed in the Developer Dashboard is now showing the āfreshestā coupons first. You can now expect to see the coupons sorted based on these criteria:
- Active coupons – active will appear before inactive
- Promotion end date – a coupon that expires in 7 days will appear before a coupon that expires in 2 days
- Promotion start date – a coupon that its validity started 3 days ago will appear before a coupon that its validity started 7 days ago
For example, if there are 2 active coupons that are valid until Jan 1, 2020, the coupon that expires later will appear before the other one.
Bug Fixes
- Adding a webhook for add-ons is now fixed.
- The DASHBOARDās āUpgradesā counter was showing the number of licenses created during the selected period, and after receiving a report from one of our partners, we realized that the counter was confusing because it also incorporated manually created licenses. Weāve updated the counter to only include upgrades that are associated with actual purchases and subscriptions (trials are counted too).
Team Management & Permissions
Team Membership Bulk Editing
If you are managing multiple products with Freemius and have a team of people working with you, you have probably already noticed that the experience of adding/removing team members is cumbersome. You had to repeat the same process over and over again for every single product. As an example, if you have 20+ add-ons, youāll need to add every new team member 20+ times.
No more!
From now, when you add/edit/remove a team member of a product with add-ons, you can easily apply the exact same permissions for all its add-ons:
The same logic also applies for bundles. You can now manage team permissions for a bundle, which will apply the same team membership permissions across all the bundled products.
Team Permissions Update
We audited the role permissions and made sure that data is properly protected and only accessible to the relevant roles. For example, Support
reps will no longer be able to access the productās stats page nor secret key.
Also, we introduced a new Developer
role that, unlike the Support
role, permits deploying and managing product releases:
New EULA
After months of ongoing work with our legal firm, we released a new EULA (End User License Agreement) that is dynamically adjusted based on your productās configuration. The purpose of the EULA is to protect YOU and us from legal actions that can come from customers.
As a reminder, if youād like to check your EULA, you can access it via the following link:
https://freemius.com/terms/<productID>/<productSlug>/
We also spent some time styling the EULA, giving it a nice legal agreement look, branded with your productās icon, and an easy option to print it:
To make things easier, we have also included a few āshortcutsā, allowing you to link directly to specific sections in the EULA:
- Subscriptions terms summary:
https://freemius.com/terms/<productID>/<productSlug>/#subscriptions_summary
- Refund policy summary:
https://freemius.com/terms/<productID>/<productSlug>/#refund_policy_summary
- Full refund policy:
https://freemius.com/terms/<productID>/<productSlug>/#refund_policy
For example, if a customer contacts you asking to refund a renewal, you can tell them that they agreed to the EULA when purchasing the product and renewal refunds are not covered, while linking directly to the subscriptions terms summary:
https://freemius.com/terms/<productID>/<productSlug>/#subscriptions_summary
Help Scout Integration
A little handy addition to our Help Scout app is that you can now see the site ownerās origin country, and for your added convenience in scheduling with your customers, the country name links directly to the customerās time zone information on timeanddate.com.
Affiliate Platform
Affiliate Coupons
We can now link a coupon to an affiliate to attribute all sales with the coupon to a particular affiliate, regardless if an affiliate link is clicked or not. Affiliates with a linked coupon will be awarded with a referral every time the coupon is redeemed as if the customer had used a valid referral URL.
This is particularly useful if you work with affiliate marketers that mainly focus on video promotions. Since the CTR (click-through-rate) of YouTube footnote links is pretty low, offering an exclusive coupon – even if itās a symbolic 5% discount – is a great way to overcome that barrier and still be able to attribute sales to the affiliate.
Note: This capability is still not available in the Developer Dashboard so youāll need to contact our support if youād like to use it.
Affiliate UTM Tags
While we do offer affiliate link tracking in the dashboard, many people prefer to manage all their tracking with GA (Google Analytics). Due to browser security restrictions and HTML attributes such as rel=ānoreferrerā, there are many cases in which GA wonāt be able to determine the source of the referral, and those clicks will just be counted as direct traffic. Now, all affiliate links automatically include UTM tags to easily identify the source of traffic. For example, letās assume that a user clicks on an affiliate link that links to my-awesome-product.com from awesome-affiliate.com. The affiliate link, which looks like https://r.freemius.com/123/456/, will redirect to:
https://my-awesome-product.com?utm_source=awesome-affiliate.com&utm_medium=website&utm_campaign=fs_aff
Hereās the URL structure:
https://my-awesome-product.com?utm_source={affiliate_main_domain}_{referrer_domain}&utm_medium={ādirectā|āwebsiteā|āsocialā}&utm_campaign=fs_aff
Cart Abandonment Recovery
Since our Cart Abandonment Recovery mechanism works silently in the background, we discovered that some of you were not even aware itās there š To improve communication and make it easier for you to track recovered carts, youāll now get a notification upon successful cart recoveries:
Dispute Handling
Although this was mentioned in previous release notes, we want to remind you that our end goal is to integrate with payment gatewaysā dispute APIs and introduce a whole semi-automated disputes management system for our sellers, giving you the freedom and control to manage disputed payments of your products. Since this is a huge project, we are going to implement it incrementally, starting with PayPal disputes. Starting a few months ago, when a PayPal payment is disputed, we store the full dispute details in a structured table on our backend and notify developers about the disputed payment with guidance on what can be done. If you do not agree with the buyerās claim, we ask you to reply to that email with additional information, which we later use for the evidence submission process:
As you can see above, the email we send to Sellers comes with the full context of the case, including any messages sent by the buyer, whether the paid product was downloaded or not, a summary of the productās refund policy, the reported reason for the dispute, the response due date, and much more. Our goal is to empower you with all the contextual information and links that you need to make a decision without the need to dig and collect all that data yourself.
Keep on the lookout for further updates on dispute handling in the next release notes!
WordPress SDK v.2.3.0
Bundles
If your main business model is offering a free core plugin/theme and then selling bundles, we have some exciting news for you! You can now render the bundleās pricing inside the WP Admin instead of showing the plugin/themeās pricing. To activate that option all you need to do is add a ābundle_idā => ā<YOUR_BUNDLE_ID>ā,
setting to your integration snippet – itās that easy!
Moreover, when activating a paid plugin or add-on, if the opted-in user obtained a bundle license that includes that paid plugin/add-on, the license will now be automatically activated upon the activation of the product. In a multi-site network environment, the license will only get activated if the licenseā activations have enough unallocated licenses to activate the license for all of the subsites in the multi-site network.
Multisite Network
When we originally enhanced the SDK to include a proper multisite network integration, due to the complexity in the storage data model, we decided to ignore the scenario of a plugin activation being switched from the network level to the site-level, and vice versa. I.e., network activation of a plugin, and then later on, deactivation and activation of the same plugin on the site-level.
The new SDK version is backward compatible and now fully supports the handling of those use-cases. It may seem simple, but thereās a lot of thinking that had to go into the logic behind it. For example, if a paid network-integrated plugin is site-level activated on 3 out of 10 subsites in a multi-site network, and the super-admin activated a license on all those 3 sites, if the plugin will be shifted to network activation, the super-admin is automatically redirected to the license activation screen, but only required to activate a license on the 7 out of the 10 sites remaining which never had that plugin activated before.
Just to give you some numbers, there are about 40 different use-cases involved in that transition, and we handled all of them! (hope we didnāt miss any)
In addition, for plugins that have different WP Admin menu settings on the site level vs. the network level, you can now specify the network level menu settings by setting the new āmenu_networkā => array( ⦠),
option in the SDK integration snippet.
Auto-Install – Disabled
Unfortunately, after ongoing discussions with the WordPress.org plugin review team, we had to disable the auto-install capability, which we introduced back in March 2017 after Jetpack started to support installation of non-wp.org themes. Iām not going to start #WPDrama because indeed our implementation was not exactly the same as Jetpackās. Itās just a shame that creativity and UX are being blocked in some cases like these and for no good reason.
Since we are a data-driven company, when we released the auto-install feature, we wanted to validate our assumption that the auto-install experience is actually better for users. So, every user that selected the auto-install option during checkout was sent an email with a simple Google Form survey to rank the install experience from 1 to 5 and provide additional feedback. Out of 686 responses, 83% ranked it as excellent, another 10.5% ranked it as great:
We clearly see the need for simplifying the whole upgrade experience, and weāll get back to tackling this problem from a different angle in the future, while making sure to comply with wp.org guidelines.
Support Forum Link
If you donāt have a free version of your product on WordPress.org (and therefore no free support forum) or just want to link the Support Forum menu item added by the SDK to another support page, we introduced a new filter to override the URL. You can implement it as follows:
<?php function set_my_custom_support_url( $wp_org_support_url ) { return āhttps://my-awesome-product.com/support/forum/ā; } my_fs()->add_filters( 'support_forum_url', āset_my_custom_support_urlā ); ?>
Account Billing & Invoices
As part of our ongoing efforts to make it easier for customers to access their billing information and invoices, we introduced a little link in the upper area of the Account page:
Even though the billing & invoices can be found on the lower part of the same page, some buyers were still missing it, so we added this simple anchor link.
Download/Install Add-Ons from WP Admin
Back in 2017 when I attended PressNomics 5, I had a chat with my friend Matt Cromewall. Among many different things we discussed, Matt mentioned Crate (which was never released btw) as an example of a great UX for managing and installing add-ons from right within the WP Admin, without the need for customers to go through the standard, tedious installation process normally offered by WP plugins and themes:
[Crate early prototype from cratewp.com]
This feature has been on our list for more than 2 years, and weāve finally managed to prioritize it! This is particularly useful if you sell a lot of add-ons. Now your customers can easily download or activate your add-ons directly from the WP Admin.
So how does it work?
If the customer has a valid license for an add-on and they are running the free wp.org version of your core plugin/theme, they will now be able to download the add-on directly from within the WP Admin, in addition to viewing the add-onās details:
Installing the add-on directly within the WP Admin from wp.org compliant products is not allowed, therefore, the install option will only be available when the installed & activated core plugin/theme version is paid or explicitly flagged as non-WP.org compliant. This is how it will look in that case:
Weāve made another UX improvement to the WP Admin add-ons section: Installed add-ons are now shown with an INSTALLED label, making it easier for admins to know if an add-on is already installed on the website or not:
Compatibility with ManageWP, MainWP, InfiniteWP, and Jetpack
The Freemius WordPress SDK incorporates a mechanism that automatically identifies a plugin or themeās main file. That mechanism relies on debug_backtrace()
and assumed that WP core is responsible for originally including that main file. After several related GitHub issues in which the SDK was failing to properly get the productās title and version, we did some troubleshooting of the problem and found that it was related to the use-case of 3rd party plugins being responsible for inclusion/execution and not the WP core. ManageWP, MainWP, InfiniteWP, and Jetpack all have capabilities to remotely install and activate plugins and themes. The inclusion of products via those services is processed differently and the code of the managed products is directly included by the corresponding servicesā āagentā plugins.
Long story short, we addressed that use-case and the logic now properly identifies the productās main file also when the product is managed by one of those 3rd party plugins (and not WP core).
Whatās next?
I like ending the release notes with some insights into our short-term roadmap. While priorities can easily change and an agile startup like Freemius needs to maintain that flexibility, here are some of the upcoming things we plan to develop in the near future.
Multi-Store & Store-level Management
Our Developer Dashboard was initially designed to manage single products. Back in November 2018, we introduced a concept of stores together with the release of the User Dashboard. Each developer was automatically allocated their own store, and every product they created was linked to it.
Since that release, we identified a growing demand from partners selling multiple products to have a store-level dashboard to track the whole storeās sales performance, support store-level affiliate links, manage the team for the whole store, and more.
Additionally, some of our partners have multiple stores & brands, and thereās currently no UI for managing multiple stores under the same account.
Thatās something we would really like to tackle in the near future.
WordPress SDK Sanitization & Escaping
One of the core functions of the WordPress SDK is fs_request_get()
. This helper function is used for accessing GET/POST params received from the client side, with an optional default value when the parameter is missing. The actual sanitization of the input is done in the scope of the function’s usage.
The WordPress.org plugin & theme review teams keep falsely flagging that SDK helper function since it doesn’t incorporate sanitization of the data. Itās a combination of automated testing tools that are limited in āseeingā the full scope of the code, as well as false-positives raised by reviewers that are browsing the code looking for issues. I canāt blame them – reviewing a whole productās code can consume a lot of time – itās just not feasible with a volunteer-powered review process.
In summation, we donāt like the negative impression developers just joining Freemius can have from the rejection experience with wp.org, regardless if itās our fault or not. Therefore, with the current review process structure and human resources available, we are going to address the issue and sanitize that input data inline. While it will increase the code size (weāll have to duplicate some redundant code) and affect the performance a bit, we are confident itās the best decision going forward as we strongly believe in the wp.org ecosystem and want to ensure our SDK meets the repositoryās guidelines properly.
Revamped In-Dashboard Pricing
If you are selling freemium products with Freemius, you should be familiar with the SDKās in-dashboard pricing page. The page was initially developed back in 2015 using old front-end technologies, and is also very structured and relies on several assumptions that helped us expedite development back then. Obviously, the page has undergone extensive development as weāve added many features throughout the years. Due to the outdated technology it uses, the maintenance, bug fixing, and new features development, became slower and slower. Also, after seeing so many pricing structures, we have a much better understanding of the limitations of that page. Lastly, we want to give you complete flexibility to modify the pricing page template, something that is currently impossible since itās running remotely from our end.
The plan is to rebuild the pricing page from scratch using React and ship the code as part of the SDK. In fact, we already started working on it and hope to include it in the next major SDK release.
Checkout Localization
I mentioned this last year, although we still havenāt managed to prioritize this one. Basically, we want to make the checkout accessible for non-English buyers by introducing multilingual capabilities.
See you at WCEU 2019!
Thatās all for this update folks š If you are attending WordCamp Europe this week, donāt be a stranger, come by and say hello! Both Brandon and I (Vova) will be there – feel free to DM us on Twitter and letās catch up.


Thank you for the new features!
Is there any way how to check through the SDK in the plugin if a user is a beta tester so that I can show for example a feedback form?