EYMINT

Software licensing API for keys, activations, floating seats, and signed offline files.

support@keymint.dev

Product

  • Features
  • Pricing
  • Compare platforms
  • Customer login
  • Offline license tester

Company

  • About
  • Blog
  • Contact

Developers

  • Documentation
  • Changelog
  • GitHub
  • Status

Trust

  • Security
  • GDPR
  • Privacy
  • Terms
  • SLA

© 2026 Keymint. All rights reserved.

Skip to content
EYMINT
FeaturesPricingCompareChangelogDocs
Back to all posts

Designing Trial License Systems That Convert Users

Clifford•3 min read
trial licensesconversionmonetizationindie developerskeymint

A well-designed trial is the highest-leverage growth tool for a desktop app. Yet most developers either give away the full product with no time limit (and wonder why nobody buys) or make the trial so restrictive that users uninstall before they can evaluate.

The goal is simple: let the user experience the value of your software, then create a natural moment to pay.

Trial Strategies That Work

Time-Limited Full Access

The most effective model. Give users the full product for 14 or 30 days. When the trial ends, the app locks until they enter a paid key. Create a key with expiryDate and let the API handle enforcement — no custom expiration logic needed.

bash
curl -X POST "https://api.keymint.dev/key" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "YOUR_PRODUCT_ID",
    "maxActivations": "3",
    "expiryDate": "2026-07-04T00:00:00Z",
    "metadata": { "type": "trial", "email": "user@example.com" }
  }'

On every launch, call activate_key. If the key is expired or fully consumed, the call fails with HTTP 401 or 403 (the SDKs raise an error), so show the upgrade prompt.

If you issue anonymous trials first, collect the user's name and email during activation and pass them as licensee. Keymint can attach the currently activated license to that customer without exposing broader customer-management APIs to the client key.

Feature-Gated Trials

Keep the trial running indefinitely but restrict premium features. One binary, multiple tiers. Create a key with metadata flags your app reads at startup:

TierFeaturesPrice
FreeBasic export, single deviceFree
ProBulk export, unlimited devices$29/mo
EnterpriseSSO, audit logs, floating seatsCustom

Your backend can fetch key metadata via the get_key endpoint using a read-only or admin key, then return only the feature flags your app needs. Client-side client keys should use activation/check-in flows instead of detailed key lookup.

Usage-Limited Trials

Cap usage instead of time. Track consumption in your backend and update the key's metadata with PATCH /key using an admin API key.

Converting Trial Users

The conversion funnel has three stages:

  1. Day 1 — Welcome email with setup guide. Show them a win in the first session.
  2. Day 7 — In-app nudge: "7 days left. Upgrade to keep full access."
  3. Day 13 — Final reminder with an optional discount.

Anti-Abuse Protections

Trials get abused. Protect yourself:

  • Require email verification before issuing the key. Pass the email in metadata so you can audit duplicates.
  • Set maxActivations low (1-3) to prevent sharing.
  • Use expiryDate so keys auto-expire even if the user never activates.
  • Check for existing trials server-side by fetching key info with a read-only or admin key and inspecting the metadata.
python
from datetime import datetime, timezone
from keymint import KeyMint

# Server-side only: requires a read-only or admin API key.
admin = KeyMint(api_key="YOUR_ADMIN_API_KEY")
info = admin.get_key({
    "productId": "YOUR_PRODUCT_ID",
    "licenseKey": "T8XTR-AI21B-2990H-85SB5",
})
if info["data"]["license"].get("expirationDate"):
    expires = datetime.fromisoformat(
        info["data"]["license"]["expirationDate"].replace("Z", "+00:00")
    )
    if datetime.now(timezone.utc) > expires:
        print("Trial expired")

Summary

The right trial strategy depends on your product. Keymint's expiryDate, maxActivations, and metadata fields give you everything you need to build trials without writing custom validation logic.

Start issuing trials from your dashboard or via the API docs. Compare pricing when you're ready to pick a plan.

Related Posts

  • Create Customer Records Automatically on Purchase
  • Discord Notifications for License Activations
  • Protecting Electron Apps from Piracy with Keymint
  • Revoking Software Licenses on Stripe Cancellation
  • Send Slack Notifications on License Revocations

Try Keymint

Simple software licensing API built for indie developers.

Get started free