If you build WordPress plugins or standalone software, you already know the challenge: how do you make sure customers who pay for your product are actually the ones using it – and only on the number of sites they paid for? Easy Digital Downloads combined with the Software Licensing addon gives you a complete answer to that question. You get automated key generation, per-site activation limits, version management, and a customer-facing license portal, all running on your own WordPress store. This guide walks through the full setup, from installing the addon to pushing automatic updates to your customers’ sites.
What Is the EDD Software Licensing Addon
EDD Software Licensing is a first-party addon built by the Easy Digital Downloads team. It extends EDD’s standard download functionality to handle the specific needs of software products – things that a basic digital file sale does not address: license key generation, activation tracking, renewal enforcement, and update delivery.
When a customer buys your plugin or software through your EDD store, Software Licensing automatically generates a unique license key, ties it to that customer’s account, and starts tracking how many sites they activate it on. Your software can then call the EDD API to verify that key before enabling its features. If the key is expired, over the activation limit, or has been revoked, the API tells your software to stop working – or to show an upgrade prompt.
What the Addon Handles vs. What You Build
| EDD Software Licensing Handles | You Build in Your Plugin |
|---|---|
| License key generation at purchase | Settings page to accept the license key |
| Activation limit enforcement | API calls to activate/deactivate |
| Expiry and renewal tracking | Feature gating based on license status |
| Update package delivery | EDD Updater class integration |
| Customer license portal | Nothing – it is built-in |
The split is clean: EDD handles the store side, you handle the client side inside your plugin. The communication happens through a simple REST-like API that EDD exposes on your store URL.
Installing and Activating the Software Licensing Addon
Before anything else, you need a running EDD store. If you do not have one yet, install Easy Digital Downloads from the WordPress plugin directory. EDD itself is free. The Software Licensing addon requires an EDD pass (Individual or Extended) that includes it, or you can purchase it as a standalone addon from the EDD website.
Step-by-Step Installation
- Log into your EDD account at easydigitaldownloads.com and download the Software Licensing addon ZIP.
- In your WordPress dashboard, go to Plugins – Add New – Upload Plugin and upload the ZIP.
- Activate the plugin.
- Go to Downloads – Settings – Licenses and enter your EDD license key for the addon itself. This keeps the addon updated.
- Still in the Licenses settings tab, configure your global defaults: default license length (e.g., 1 Year), default activation limit (e.g., 1 site), and whether to enable automatic renewals.
Once activated, every Download post type in your store gets a new “Licensing” meta box in the edit screen. This is where you control licensing behavior per product.
Creating License-Enabled Products
Open any Download in your EDD store (or create a new one). Scroll down to the Download Details meta box. You will see a new “Software Licensing” section. Here is what each setting does:
License Settings Per Product
- Enable Software Licensing – Check this to turn on licensing for this download. Without it checked, no license key is generated at purchase.
- License Length – How long the license is valid from purchase date. Common choices: 1 Year, 2 Years, Lifetime. Lifetime licenses never expire.
- Activation Limit – How many sites (WordPress installations) can activate this license. Set to 0 for unlimited activations. A limit of 1 is standard for single-site licenses.
- Allow License Upgrades – Lets customers upgrade from a lower tier (e.g., Personal) to a higher tier (e.g., Developer) and carry their remaining license time over.
- Version – The current version of your software. EDD uses this to determine whether a customer’s site needs an update push.
- Changelog – What changed in this version. This shows up in the WordPress update screen on the customer’s site.
Pricing Tiers with Different Activation Limits
EDD’s variable pricing feature lets you create multiple price points for the same download, each with different licensing terms. This is how you sell Personal (1 site), Business (5 sites), and Developer (unlimited) licenses from one product page.
To set this up: in the Download Prices section, enable “Variable Pricing.” Add your price tiers. Then in the Software Licensing section, you will see per-price activation limits. Set each price’s limit independently – Personal gets 1, Business gets 5, Developer gets 0 (unlimited).
License Key Generation and Management
License key generation is fully automatic. When a customer completes checkout, EDD Software Licensing hooks into the payment completion event and generates a cryptographically random key in the format XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX. No setup required on your part.
Keys are stored as a custom post type called edd_license. Each license stores: the customer ID, the download ID, the payment ID, the license key itself, activation count, activation limit, expiry date, and status (active, inactive, expired, revoked, disabled).
Managing Keys from the Admin
Go to Downloads – Licenses to see all issued license keys. You can search by customer email, license key, or product. From this list you can:
- View all active sites a license is activated on
- Manually extend expiry dates
- Revoke a license (marks it as invalid, API calls will return “revoked”)
- Disable a license without revoking it
- Reset activation count if a customer needs to switch sites
- Regenerate the license key if a key was compromised
The Custom Registration Field Approach
If you need to add extra data to the license meta box – say, a custom field showing purchase source or a note field for support staff – you can hook into EDD’s admin meta box action. The snippet below shows how to add an activation limit display field to the download edit screen.
Activation Limits and Per-Site Licensing
Activation limits are the core enforcement mechanism in EDD Software Licensing. When your plugin calls the EDD API to activate a license, EDD checks two things: is the license valid (not expired, not revoked), and has the activation count reached the limit? If both pass, the activation succeeds and EDD records the site URL in the license’s activation list. If the limit is hit, the API returns no_activations_left.
How Activation Tracking Works
Each activation stores the URL of the WordPress site that activated the license. EDD normalises the URL (strips trailing slashes, lowercases the domain) to avoid duplicate activations from the same site. When the customer deactivates from one site, that slot opens up and they can activate on a different site – staying within their limit.
This is why customers with a 3-site license can freely move their plugin between sites as long as they deactivate before activating elsewhere. Your license settings page should include both an Activate and a Deactivate button. Here is the API code for both:
Checking License Status
Beyond activation and deactivation, you will often want to check whether an already-activated license is still valid – for example, on plugin load to decide whether to show premium features. The check_license API call does not count toward the activation limit; it only reads the current status.
A single wp_remote_get call to your EDD store is all it takes to verify whether a customer’s license is valid – no third-party licensing SaaS required.
Building the License Settings Page Inside Your Plugin
Your customers need somewhere to enter their license key and activate it. This is a standard WordPress admin settings page. The pattern is always the same: a text field for the key, an Activate button, and a Deactivate button. Here is a complete implementation:
This settings page hooks into the admin_init action to handle the actual activation/deactivation API calls, and renders a clean form under the Plugins menu. Adapt the constants at the top (MY_PLUGIN_STORE_URL, MY_PLUGIN_ITEM_NAME) to match your actual store URL and product name.
Version Management and Automatic Updates
One of the most valuable features of EDD Software Licensing is the WordPress update API integration. When you release a new version of your plugin, customers with active licenses see an update notification in their WordPress dashboard – exactly like any plugin from WordPress.org, but hosted on your own store.
Setting Up the EDD Updater in Your Plugin
EDD provides an EDD_SL_Plugin_Updater class that you include in your plugin. This class hooks into WordPress’s update check mechanism and queries your store instead of the WordPress.org API. Here is the setup:
- Download the
EDD_SL_Plugin_Updater.phpclass from the EDD Software Licensing repository on GitHub. - Place it in your plugin’s
includes/folder. - In your main plugin file, require the class and initialise it on the
admin_inithook.
Initialising the Updater (Paste in Your Main Plugin File)
The code goes inside your plugin’s main file, typically in the admin_init action. You pass your store URL, plugin file path, an array with your license key and item name, and an optional array of beta/author info. The class handles the rest – it intercepts WordPress’s update checks and redirects them to your EDD store’s API.
Uploading New Versions to EDD
When you are ready to release an update, open the Download post in your WordPress admin. Update the Version field to the new version number. Update the Changelog field with what changed. Then upload the new ZIP file as the download file. EDD Software Licensing compares the version number you set here against the version in your plugin’s main file header on each customer’s site, and triggers an update notification when they differ.
Customers with expired licenses still see the update notification, but when they try to update, EDD returns an error telling them their license has expired and they need to renew. This creates a natural renewal touchpoint.
License Renewal and Expiration Handling
EDD Software Licensing has a full renewal system built in. Here is how it works across the license lifecycle:
Expiration Emails
EDD sends automatic renewal reminder emails as licenses approach expiration. By default, it sends reminders at 30 days, 14 days, and 1 day before expiry. You can configure these intervals and customise the email content under Downloads – Settings – Emails – License Emails. For advanced branding and dynamic content in these emails, see the guide on how to customize EDD email templates – the same techniques apply to license renewal emails.
Renewal Discounts
You can offer renewal discounts to encourage customers to renew before expiry. EDD includes a renewal discount system: set a renewal discount code (e.g., 20% off) and configure whether it applies automatically when a customer clicks the renewal link in their email, or whether they need to enter it manually at checkout. Most successful plugin businesses offer a 20-30% renewal discount as standard practice.
Grace Periods
If a license expires, the API immediately starts returning expired on check_license calls. Whether your plugin immediately stops working or just stops receiving updates depends entirely on how you implement the client side. Many plugin developers choose to allow the plugin to keep running after expiry but block updates – this is a less aggressive approach that reduces customer frustration while still creating a reason to renew.
The Customer License Management Portal
EDD Software Licensing adds a Licenses tab to the customer’s account area on your store (the standard EDD purchase history page). Customers can see all their purchased licenses, including:
- The license key for each product (partially masked for security, with a copy button)
- Current status (active, expired, expiring soon)
- Expiry date and renewal link
- Number of activations used vs. allowed (e.g., “2 of 5 sites”)
- List of activated site URLs with individual deactivation buttons
This portal reduces support tickets significantly. Customers can deactivate old sites and activate new ones without contacting you. They can find their license key without hunting through old emails. They can renew directly from the portal. All of this is handled by EDD and requires zero custom development on your part.
Pricing Strategies for Software Licenses
Getting the pricing structure right for software licenses takes some thought. Here are the models that work well with EDD Software Licensing:
Tiered Activation Limit Pricing
This is the most common model for WordPress plugins. You create 3-4 price tiers differentiated by activation limits:
| Tier | Price | Activation Limit | Who Buys It |
|---|---|---|---|
| Personal | $49/yr | 1 site | Bloggers, solo site owners |
| Business | $99/yr | 5 sites | Small agencies, freelancers |
| Developer | $199/yr | Unlimited | Large agencies, power users |
| Lifetime | $399 once | Unlimited | Customers who hate subscriptions |
Annual vs. Lifetime Licensing
Annual licenses create recurring revenue, which is better for the long-term health of your business. Lifetime licenses give you cash up front but can hurt cash flow in year 3 and beyond when renewals would have been coming in. Most plugin businesses that started with lifetime-only have moved to annual-first models, often grandfathering existing lifetime customers. If you want true subscription billing on top of licensing, you can pair Software Licensing with EDD recurring payments to automate annual renewals via stored payment methods.
A common approach: offer annual as the default, with lifetime available but priced at 4-5x the annual price. At that ratio, you break even on lifetime licenses in about 4 years.
Bundle Licensing
If you sell multiple plugins, EDD’s bundled downloads feature lets you group them into a single purchase. Software Licensing handles bundles correctly: each included plugin gets its own license key, but all tied to the same payment. Customers manage them individually from the license portal. If you are just getting started building a plugin business, the complete guide to selling WordPress plugins with Easy Digital Downloads covers the store setup and product configuration in detail.
Integration with the WordPress Update API
The WordPress update API integration deserves its own section because it is what separates self-hosted plugin sales from the fragmented experience of emailing ZIP files to customers every time you release an update.
EDD exposes an update API endpoint at your-store.com/?edd_action=get_version. The EDD_SL_Plugin_Updater class in your plugin queries this endpoint every time WordPress runs its update check (typically twice daily). It passes the license key and item name, and the API returns the latest version number, download URL, changelog, and author info in a format that WordPress can use directly.
What the Update Flow Looks Like for Customers
- Customer buys your plugin, activates their license on their site.
- You release version 2.0, update the version number in EDD, upload the new ZIP.
- Within 12-48 hours (depending on WordPress’s update check schedule), the customer sees a standard “Update Available” notification in their Plugins screen.
- They click Update, WordPress downloads the new ZIP from your store (authenticated with their license key), and installs it automatically.
- If their license has expired, EDD returns an error and they see a “please renew your license” message instead of the update.
The entire update experience is identical to WordPress.org plugins from the customer’s perspective. The difference is that it only works for customers with valid licenses – a clean built-in enforcement mechanism.
Troubleshooting Common License Issues
Here are the issues that come up most often when setting up EDD Software Licensing:
License API Returns Incorrect item_name Error
The item_name parameter in your API call must match the Download title exactly, including capitalisation and special characters. If your plugin is called “My Plugin – Pro Edition” in EDD but you pass “My Plugin Pro Edition” in the API call, EDD returns item_name_mismatch. Always use urlencode() on the item name in the API call.
Activation Limit Not Enforcing Correctly
Check whether “Enable Software Licensing” is checked on that specific Download. If it is not checked, no activation limit is enforced – EDD generates the key but does not track activations. Also verify that your variable pricing tiers each have their own activation limit set in the Software Licensing section.
Updates Not Appearing on Customer Sites
The most common cause is a version mismatch: the version in your plugin’s main file header (the Version: 2.0.0 line in the plugin header comment) does not match the version you set in EDD. WordPress compares these two numbers; if they are the same, no update is triggered. Also verify that EDD_SL_Plugin_Updater is being initialised correctly – it needs to run on admin_init, not on a later hook.
Sell Software Licenses with EDD – The Complete Picture
EDD Software Licensing gives you a production-ready licensing system without third-party SaaS fees or vendor lock-in. Your store, your data, your customers. The setup takes a few hours for a single plugin: install the addon, configure the download, build the license settings page in your plugin using the API snippets above, include the updater class, and you are live.
For developers selling multiple plugins, the pattern scales cleanly. Each plugin gets its own Download in EDD, its own set of pricing tiers, and its own license keys. The customer license portal handles everything on the buyer side without any custom work. And the automatic update delivery means your customers always know when a new version is available – as long as their license is active.
The pricing model you choose matters more than the technical setup. Annual licensing with tiered activation limits is the most sustainable path. Start there, validate with your first 50-100 customers, then adjust tier pricing and discount strategy based on where customers cluster.
Ready to Sell Software Licenses with Easy Digital Downloads?
The EDD Software Licensing addon handles key generation, activation tracking, renewal emails, and update delivery – all from your own WordPress store. If you are building a plugin business and want a licensing setup that scales, this is the right tool for the job.
