Industry
Use Case
Favorite Feature
DocConvert Pro is a cloud-based SaaS platform offering document conversion (PDF to Word, Excel to PDF, etc.) and electronic signature (eSignature) capabilities to SMBs and enterprises. The platform serves teams of document processors, HR departments, legal firms, and finance teams who need reliable, scalable document workflows. Before NetLicensing, the platform relied on a credit pack monetization model: users purchased prepaid blocks of credits (e.g., 100 conversions for $25), each document action consumed a fixed number of credits, and when credits depleted, users either stopped using the platform or repurchased. This model generated inconsistent revenue, provided no visibility into customer usage trends, and created user friction at the critical moment of document submission—a user who ran out of credits would receive a “purchase credits” prompt mid-workflow, leading to abandonment and high customer frustration.
DocConvert Pro’s leadership recognized that predictable SaaS subscription revenue, combined with flexible overage pricing for power users, would improve customer lifetime value, reduce churn, and simplify financial planning. The transition required a new licensing architecture that NetLicensing’s Subscription, Try & Buy, and quantity-based models were built to support. The goal was to migrate the existing credit pack customer base to subscriptions while introducing tiered feature sets and usage limits that matched market expectations.
DocConvert Pro’s original credit pack model created four interconnected problems:
Unpredictable Revenue and Poor LTV Forecasting: Credit sales were transactional and bursty. A single power user might purchase 500 credits once, then disappear for six months; another might buy 50 credits monthly for five months, then churn. The company had no way to forecast monthly recurring revenue or predict which customers were at risk of churn. Customer acquisition cost was difficult to justify when payback could occur across a variable number of sporadic transactions.
Customer Anxiety and Friction at Usage Time: When a user initiated a document conversion and discovered insufficient credits, the experience was jarring. The user had to abandon their workflow, navigate to a billing page, select a credit pack, and complete a purchase before returning to retry. This friction drove significant abandonment; internal analysis showed 34% of users who encountered a credit-insufficient error never returned.
Inability to Monetize High-Volume Users: Some teams with high document volumes (legal firms processing contracts daily, finance departments with weekly batch conversions) found the per-credit model wasteful and switched to competitors with flat-rate subscriptions. DocConvert Pro had no mechanism to capture these high-value customers without building custom licensing logic.
Trial-to-Paid Conversion Was Vague: The free trial offered unlimited access for 14 days with no limits. This gave prospects an unrealistic experience and made conversion ratios unpredictable. Many prospects used the trial to accomplish a one-off task (converting a handful of documents) and never upgraded, treating the platform as a free tool rather than a paid service.
DocConvert Pro implemented a hybrid subscription + overage model using NetLicensing’s Subscription, Quantity, and Try & Buy licensing models:
1. Subscription Model (Primary Pricing): Three tier levels—Starter, Professional, Business—each with a fixed monthly included volume of conversions and signatures. At the beginning of each billing period, NetLicensing’s Subscription model automatically renews the license and resets usage counters. This creates predictable monthly revenue and aligns pricing with customer workflow size.
2. Overage Licensing (Quantity Model): Customers who exceed their monthly included volumes can purchase overage blocks in real-time through the NetLicensing Pricing Table. Each overage block (e.g., 100 additional conversions) is a separate QUANTITY license that depletes as usage occurs.
3. Try & Buy Model (Trial): Prospects receive a 14-day trial with a TIMEVOLUME license and a fixed included quantity (50 conversions, 10 signatures). This gives a realistic product experience while preventing unlimited free usage. At trial expiry, the user is prompted to upgrade without hard service interruption.
The logic: Subscriptions provide predictable base revenue from committed customers; overage allows high-volume users to pay proportionally to usage without hitting hard limits; Try & Buy converts high-intent prospects with a low-friction trial.
The following describes the Management Console configuration:
Step 1: Create the Product
https://admin.netlicensing.ioDOCCONVERT-P001DocConvert Pro3.1Step 2: Create Product Modules
Create three modules: one for subscriptions, one for overage, and one for trial.
Module 1: Subscriptions
DOCCONVERT-M-SUBSCRIPTIONSubscription PlansModule 2: Overage
DOCCONVERT-M-OVERAGEOverage & Top-UpModule 3: Trial
DOCCONVERT-M-TRIALFree Trial AccessStep 3: Create License Templates
Subscription Templates:
DOCCONVERT-M-SUBSCRIPTION, click Create License TemplateDOCCONVERT-LT-SUB-STARTERStarter Planincluded_conversions: 200included_signatures: 50tier_name: StarterDOCCONVERT-LT-SUB-PROFESSIONALProfessional Planincluded_conversions: 1000included_signatures: 250tier_name: ProfessionalDOCCONVERT-LT-SUB-BUSINESSBusiness Planincluded_conversions: 5000included_signatures: 1000tier_name: BusinessOverage Templates:
DOCCONVERT-M-OVERAGE, click Create License TemplateDOCCONVERT-LT-OVERAGE-100C100 Conversion Creditsoverage_type: conversionsoverage_quantity: 100DOCCONVERT-LT-OVERAGE-50S50 Signature Creditsoverage_type: signaturesoverage_quantity: 50Trial Template:
DOCCONVERT-M-TRIAL, click Create License TemplateDOCCONVERT-LT-TRIAL-14D14-Day Free Trialtrial_conversions: 50trial_signatures: 10Step 4: Configure Custom Properties Tracking
Add custom properties at the license level to track consumption:
conversions_used — incremented each conversionsignatures_used — incremented each signaturelast_reset_date — timestamp of last usage reset (set at renewal)DocConvert Pro’s backend integrates NetLicensing at the critical document processing step and customer management lifecycle.
User Registration and Trial Assignment
When a new user registers, the backend creates a NetLicensing Licensee and automatically assigns a trial license:
curl -X POST "https://go.netlicensing.io/core/v2/rest/licensee" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "productNumber=DOCCONVERT-P001&licenseeNumber=USR-$(uuidgen)&name=$(urlencode $userEmail)"
Response (201 Created):
{
"licensee": {
"number": "USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a",
"active": true,
"name": "user@company.com",
"productNumber": "DOCCONVERT-P001",
"created": "2024-06-19T10:15:30Z"
}
}
Next, the backend assigns a trial license:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseeNumber=USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a" \
-d "licenseTemplateNumber=DOCCONVERT-LT-TRIAL-14D" \
-d "startDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
Response (201 Created):
{
"license": {
"number": "LIC-TRIAL-20240619-001",
"active": true,
"licenseeNumber": "USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a",
"licenseTemplateNumber": "DOCCONVERT-LT-TRIAL-14D",
"startDate": "2024-06-19T10:15:30Z",
"expiryDate": "2024-07-03T10:15:30Z",
"validity": 14,
"validityPeriod": "DAY"
}
}
License Validation Before Processing
When the user initiates a document conversion, the backend validates their license and usage against NetLicensing:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a/validate" \
-H "Authorization: Basic <base64_encoded_api_token>"
Response (200 OK):
{
"ttl": "3600",
"productModuleValidation": [
{
"moduleNumber": "DOCCONVERT-M-SUBSCRIPTION",
"moduleName": "Subscription Plans",
"valid": false
},
{
"moduleNumber": "DOCCONVERT-M-OVERAGE",
"moduleName": "Overage & Top-Up",
"valid": false
},
{
"moduleNumber": "DOCCONVERT-M-TRIAL",
"moduleName": "Free Trial Access",
"valid": true,
"license": {
"number": "LIC-TRIAL-20240619-001",
"active": true,
"expiryDate": "2024-07-03T10:15:30Z"
}
}
]
}
Application Logic for Document Processing:
def validate_document_conversion(user_id, document_type="conversion"):
licensee_id = get_licensee_id(user_id)
validation = call_netlicensing_validate(licensee_id)
# Check if any license is valid
has_valid_license = any(
mv["valid"] for mv in validation["productModuleValidation"]
)
if not has_valid_license:
# Show upgrade prompt
return {"status": "upgrade_required", "redirect": "/pricing"}
# Determine included volume based on active license
active_tier = find_active_tier(validation)
included_volume = get_included_volume(active_tier, document_type)
current_usage = get_usage_from_db(licensee_id, document_type)
if current_usage >= included_volume:
# User has exceeded included volume; check overage
overage_available = check_overage_balance(licensee_id, document_type)
if not overage_available:
return {"status": "overage_required", "redirect": "/add-credits"}
return {"status": "allowed"}
Subscription Upgrade Flow
When a trial user selects a paid subscription, the backend creates a new subscription license and deactivates the trial:
# Create new subscription license
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseeNumber=USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a" \
-d "licenseTemplateNumber=DOCCONVERT-LT-SUB-PROFESSIONAL" \
-d "startDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
Response (201 Created):
{
"license": {
"number": "LIC-SUB-20240619-002",
"active": true,
"licenseeNumber": "USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a",
"licenseTemplateNumber": "DOCCONVERT-LT-SUB-PROFESSIONAL",
"startDate": "2024-06-19T14:30:00Z",
"expiryDate": "2024-07-19T14:30:00Z",
"validity": 1,
"validityPeriod": "MONTH"
}
}
Overage Purchase (Self-Service)
When a user exceeds their included volume, they can self-service purchase overage credits through the NetLicensing Pricing Table. The backend generates a shop token scoped to overage templates:
curl -X POST "https://go.netlicensing.io/core/v2/rest/token" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseeNumber=USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a" \
-d "action=SHOP" \
-d "successUrl=https://docconvert.app/dashboard" \
-d "successUrlTitle=Back to Dashboard"
Response (201 Created):
{
"token": {
"number": "TOKEN-SHOP-20240619-OVERAGE",
"active": true,
"expiryDate": "2024-06-19T14:45:00Z"
}
}
Shop URL:
https://shop.netlicensing.io/?token=TOKEN-SHOP-20240619-OVERAGE
The user is presented with overage options (100 conversions for $10, 50 signatures for $8, etc.). After purchase, the new QUANTITY license is automatically assigned and the user can immediately continue processing.
DocConvert Pro uses automatic provisioning with manual override options:
User Registration to Licensee Mapping
When a user registers on DocConvert Pro, the backend:
users table with email, password hash, created_atlicenseeNumber in users.netlicensing_idThis mapping persists for the lifetime of the account and is used for all subsequent license operations.
Manual Subscription Creation (Admin/Sales)
For enterprise customers or special offers, sales staff can manually create subscription licenses:
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseeNumber=USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a" \
-d "licenseTemplateNumber=DOCCONVERT-LT-SUB-BUSINESS" \
-d "startDate=2024-06-20T00:00:00Z" \
-d "customProperty.discount=25%" \
-d "customProperty.salesPerson=john@docconvert.io"
Tier Downgrade or Upgrade
If a customer changes their subscription tier, the backend:
Subscription Renewal
NetLicensing’s Subscription model handles renewal automatically. Seven days before expiry, the backend receives a webhook notification (or polls the validation endpoint) and:
DocConvert Pro uses NetLicensing Shop as the primary purchase interface for subscriptions and overage credits. Stripe is configured as the payment gateway.
Shop Token Generation for Tier Selection
When a trial user navigates to the pricing page, the backend generates a shop token without specifying a template (allowing the customer to choose):
curl -X POST "https://go.netlicensing.io/core/v2/rest/token" \
-H "Authorization: Basic <base64_encoded_api_token>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licenseeNumber=USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a" \
-d "action=SHOP" \
-d "successUrl=https://docconvert.app/welcome" \
-d "successUrlTitle=Go to Dashboard" \
-d "cancelUrl=https://docconvert.app/pricing" \
-d "cancelUrlTitle=Back to Pricing"
The shop displays all subscription tiers (Starter, Professional, Business) and overage options. Customers can toggle between plans or purchase overage as a one-time addition.
Payment Method Setup
In the NetLicensing Management Console:
All credit card processing is handled by Stripe (PCI-DSS compliant); DocConvert Pro never touches card data.
Post-Purchase License Activation and Webhook Handling
When a customer completes a purchase in the NetLicensing Shop, they are redirected to successUrl. The backend verifies the license was created:
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a/validate" \
-H "Authorization: Basic <base64_encoded_api_token>"
If the response includes a valid subscription or overage license, the user’s account is immediately upgraded. The DocConvert Pro dashboard displays the new subscription tier and available monthly volumes.
Grace Period Handling
NetLicensing’s Subscription model includes a configurable grace period (3 days, set in the module configuration). If a subscription renewal fails due to payment issues, the user’s license remains valid for 3 additional days. During this window, DocConvert Pro’s backend sends escalating payment retry emails and may block overage purchases to encourage immediate payment. After the grace period expires, the license becomes invalid and the user is redirected to re-subscribe.
Trial Expiration and Upgrade Prompts
Seven days before trial expiry, the validation endpoint includes a warning in the response:
{
"license": {
"number": "LIC-TRIAL-20240619-001",
"expiryDate": "2024-07-03T10:15:30Z",
"daysUntilExpiry": 7
}
}
The frontend detects this and displays a banner encouraging upgrade to a paid plan. At trial expiry (when expiryDate passes), the license becomes invalid but the user is not immediately hard-blocked; instead, they see a full-screen upgrade modal offering a 20% first-month discount.
Usage Tracking and Reset
Usage counters for conversions and signatures are stored in the local user_monthly_usage table, keyed by licensee_number, document_type, and billing_period. At subscription renewal, a background job resets these counters to zero. For overage licenses (QUANTITY type), NetLicensing itself tracks the remaining quantity; each overage usage call decrements it automatically.
Subscription Cancellation and Refunds
When a customer cancels their subscription, the backend:
If a refund is warranted, the support team manually creates a credit in the accounting system (NetLicensing does not handle refunds directly).
Rate Limiting and Caching
To avoid hitting NetLicensing’s API rate limits (typically 10,000 requests/minute per API token), DocConvert Pro:
Audit Logging
Every subscription change is logged to an internal audit table:
{
"timestamp": "2024-06-19T14:30:00Z",
"licensee_number": "USR-a1b2c3d4-e5f6-4a9b-8c7d-6e5f4d3c2b1a",
"action": "subscribe",
"old_tier": "trial",
"new_tier": "professional",
"license_number": "LIC-SUB-20240619-002",
"source": "shop_ui"
}
This enables customer service to troubleshoot billing issues and identify patterns in subscription changes.
Following NetLicensing migration, DocConvert Pro achieved significant improvements in revenue predictability and customer retention:

B2B SaaS: From Stripe-Only to Licensing-as-a-Service
A compliance SaaS eliminated entitlement drift and improved trial conversion by making NetLicensing the entitlement authority alongside Stripe.

Wordpress Plugin: DigiPass
DigiPass helps publishers and bloggers monetize digital content with subscription-based access.