Industry
Use Case
Favorite Feature
PrecisionTech Industries manufactures programmable logic controllers (PLCs) and industrial edge computing devices for discrete manufacturing, food processing, and chemical production facilities. Their TQM-4500 and TQM-6000 series controllers process orders, manage production workflows, and execute real-time machine control logic. Previously, advanced capabilities like predictive maintenance analytics, safety interlocks, and high-throughput processing were only available in premium hardware SKUs at significantly higher price points. By integrating NetLicensing with their cloud management platform, PrecisionTech now sells all controllers at a base price and monetizes advanced software modules through post-sale licensing, creating a recurring software revenue stream while reducing manufacturing complexity.
PrecisionTech faced a critical business model problem: their software capabilities were tightly coupled to hardware SKUs, creating inflexibility and inventory risk:
Hardware SKU proliferation: They manufactured separate hardware variants—Base, Professional, Enterprise—each with different software capabilities burned into firmware. This required maintaining three distinct production lines, managing separate inventory buffers, and dealing with excess stock of unpopular SKUs.
No post-sale upsell capability: Once a machine shipped with Base firmware, the customer was locked into that feature set for life. If production demand grew and customers needed higher throughput or new safety features, they had to purchase entirely new hardware—a $50K-$100K capital expense. PrecisionTech got no share of that upgrade revenue.
Competitor pressure: Larger OEM competitors (Siemens, Rockwell Automation) had begun offering software-feature licensing on their industrial controllers. Customers expected the ability to purchase feature upgrades remotely without hardware swaps.
Field service inefficiency: Customers at remote sites (mines, offshore platforms, rural manufacturing facilities) had unreliable network connectivity. Hardware updates required physical site visits from PrecisionTech technicians, adding $10K-$20K in deployment costs and 2-4 weeks of lead time.
Usage tracking gaps: PrecisionTech had no visibility into how customers were utilizing their machines. Introducing usage-based licensing (per runtime hour, per processed units) required instrumenting the machines to report telemetry back to a central management backend.
PrecisionTech selected Node-Locked licensing combined with Quantity-based licensing:
Node-Locked ensures that software licenses are cryptographically bound to specific machine serial numbers. This prevents customers from cloning licenses across unauthorized hardware and protects PrecisionTech’s intellectual property. Each machine’s unique hardware identifier (MAC address, CPU serial, combination of component identifiers) becomes the basis for license validation.
Quantity-based licensing tracks usage: runtime hours, processed production units, or processed tons of material. NetLicensing decrements the licensed quota as the machine operates, enabling PrecisionTech to meter advanced features based on customer utilization rather than flat annual fees.
Model mechanics:
Step 1: Create the Product
Log in to the NetLicensing Management Console and create:
OEM_PRECISIONTECHPLCPrecisionTech TQM Industrial Controller Series4.5.2PREDEFINED (hardware manufacturers provide the node secret at factory)Step 2: Create Product Modules
Create three modules corresponding to feature categories:
Module 1: Advanced Analytics
ANALYTICSPredictive Maintenance & Process AnalyticsNodeLockedPREDEFINEDModule 2: Safety & Compliance
SAFETYSafety Interlocks & Compliance FeaturesNodeLockedPREDEFINEDModule 3: Performance & Throughput
THROUGHPUTHigh-Throughput Processing ModulesNodeLockedPREDEFINEDStep 3: Create License Templates
For the ANALYTICS module with quota-based usage tracking:
| Template Number | Name | License Type | Quantity (Hours/Year) | Price (Annual) | Parameters |
|---|---|---|---|---|---|
ANALYTICS_BASIC | Predictive Maintenance - Basic Tier | QUANTITY | 8760 | $5,000 | Hourly quota; auto-renews annually |
ANALYTICS_PREMIUM | Predictive Maintenance - Premium Tier | QUANTITY | 8760 | $12,000 | Advanced ML models; higher data retention |
ANALYTICS_ENTERPRISE | Predictive Maintenance - Enterprise | QUANTITY | 8760 | $25,000 | Custom algorithms; dedicated support |
For the SAFETY module:
| Template Number | Name | License Type | Parameters | Price (One-Time) |
|---|---|---|---|---|
SAFETY_INTERLOCKS | Enhanced Safety Interlocks Module | FEATURE | Perpetual; prevents concurrent operation of incompatible machine states | $8,000 |
SAFETY_AUDIT_LOG | Compliance Audit Logging & Reporting | FEATURE | Perpetual; generates FDA/OSHA-compliant audit trails | $3,500 |
For the THROUGHPUT module:
| Template Number | Name | License Type | Quantity (Units/Year) | Price (Annual) | Parameters |
|---|---|---|---|---|---|
THROUGHPUT_STD | Standard Throughput - 50K Units/Year | QUANTITY | 50000 | $4,000 | Processes up to 50K items/year; soft-limit (warns at 90%) |
THROUGHPUT_HI | High-Throughput - 250K Units/Year | QUANTITY | 250000 | $15,000 | Processes up to 250K items/year |
THROUGHPUT_UNLIMITED | Unlimited Throughput | FEATURE | Perpetual | $35,000 | No processing limits; highest performance tier |
Step 4: Register Machines as Licensees (During Manufacturing)
When a TQM-6000 is manufactured, the factory system registers it as a Licensee with a predefined node secret:
# Factory system creates licensee for machine serial TQM-6000-20415
curl -X POST "https://go.netlicensing.io/core/v2/rest/licensee" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "product=OEM_PRECISIONTECHPLC&number=NODE_TQM6000_20415&name=TQM-6000 SN:20415 - Acme Manufacturing&licenseeSecret=NODE_SEC_xk9m2p8v&active=true"
Response:
{
"licensee": {
"number": "NODE_TQM6000_20415",
"name": "TQM-6000 SN:20415 - Acme Manufacturing",
"active": true,
"licenseeSecret": "NODE_SEC_xk9m2p8v"
}
}
The machine ships with the licensee number and node secret encoded in firmware (or embedded in a factory certificate).
Machine Cloud Connection & License Validation
When the TQM-6000 powers on and establishes cloud connectivity (via MQTT to PrecisionTech’s management backend):
NODE_TQM6000_20415# Machine calls NetLicensing validation with node secret
LICENSEE_ID="NODE_TQM6000_20415"
NODE_SECRET="NODE_SEC_xk9m2p8v"
curl -X GET "https://go.netlicensing.io/core/v2/rest/licensee/${LICENSEE_ID}/validate" \
-H "Authorization: Basic $(echo -n "${NODE_SECRET}:" | base64)" \
-H "Content-Type: application/json"
Expected Response:
{
"licensee": {
"number": "NODE_TQM6000_20415",
"name": "TQM-6000 SN:20415 - Acme Manufacturing"
},
"productModuleValidation": [
{
"name": "Predictive Maintenance & Process Analytics",
"number": "ANALYTICS",
"licensingModel": "NodeLocked",
"valid": true,
"license": [
{
"number": "L_ANALYTICS_PREMIUM_20415",
"name": "Predictive Maintenance - Premium Tier",
"licenseType": "QUANTITY",
"quantity": "8650",
"valid": true
}
]
},
{
"name": "Safety & Compliance",
"number": "SAFETY",
"valid": true,
"license": [
{
"number": "L_SAFETY_INTERLOCKS_20415",
"licenseType": "FEATURE",
"valid": true
}
]
},
{
"name": "High-Throughput Processing",
"number": "THROUGHPUT",
"valid": true,
"license": [
{
"number": "L_THROUGHPUT_HI_20415",
"licenseType": "QUANTITY",
"quantity": "186420",
"valid": true
}
]
}
]
}
ANALYTICS is valid, load predictive maintenance moduleSAFETY_INTERLOCKS is valid, enable safety logicTHROUGHPUT quantity > 0, run at full speed; otherwise throttleUsage Metering & Quota Depletion
Every 5 minutes, the machine heartbeat sends a usage report to the cloud backend:
# Machine reports operational metrics every 5 minutes
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L_ANALYTICS_PREMIUM_20415" \
-H "Authorization: Basic $(echo -n "${NODE_SECRET}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "action=DEBIT&debit=0.0833" # 0.0833 hours = 5 minutes
# Separately, report units processed
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L_THROUGHPUT_HI_20415" \
-H "Authorization: Basic $(echo -n "${NODE_SECRET}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "action=DEBIT&debit=427" # 427 units processed in last 5 minutes
NetLicensing decrements both quotas. The backend logs responses to a time-series database for dashboard visualization:
{
"license": {
"number": "L_ANALYTICS_PREMIUM_20415",
"quantity": "8649.9167",
"valid": true
}
}
Offline Operation & Grace Period
If cloud connectivity is lost (network outage, satellite link failure), the machine operates using cached entitlements for up to 30 days (configurable grace period):
# After 3 days offline, report all usage at once
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L_ANALYTICS_PREMIUM_20415" \
-H "Authorization: Basic $(echo -n "${NODE_SECRET}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "action=DEBIT&debit=72" # 72 hours (3 days) of operation
Feature Unlock: Upsell Flow
Customer account manager identifies that Acme Manufacturing is processing 180K units/year (exceeding their 50K quota). The manager offers an upgrade to the “High-Throughput 250K Units/Year” plan.
Customer approves. Account manager (or customer self-service portal) activates the upgrade via API:
# Upgrade Acme Manufacturing to High-Throughput Premium tier
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=NODE_TQM6000_20415&licenseTemplate=THROUGHPUT_HI&active=true"
Response creates a new license or updates the existing one:
{
"license": {
"number": "L_THROUGHPUT_HI_20415_UPGRADED",
"name": "High-Throughput - 250K Units/Year",
"quantity": "250000",
"valid": true
}
}
The old license is deactivated, and the machine’s next heartbeat pulls the updated license state. The machine firmware automatically loads the new quota; no reboot or physical intervention required.
Factory Registration
During manufacturing, each TQM-6000 is pre-registered as a licensee with a unique node secret derived from the serial number:
import hashlib
serial_number = "TQM-6000-20415"
base_secret = "factory-seed-key-xyz123"
# Derive node secret from serial and factory seed
node_secret = hashlib.sha256(f"{serial_number}{base_secret}".encode()).hexdigest()[:32]
licensee_number = f"NODE_{serial_number.replace('-', '_')}"
# Write to machine firmware during factory test
firmware_config = {
"licensee_number": licensee_number,
"node_secret": node_secret,
"product": "OEM_PRECISIONTECHPLC"
}
The firmware is locked and cryptographically signed so customers cannot modify it.
Customer Onboarding
When Acme Manufacturing receives the TQM-6000, they:
Remote Feature Activation (No Physical Site Visit)
An offshore oil platform needs to enable predictive maintenance analytics on their TQM-6000. Instead of scheduling a technician site visit (2-week lead time, $25K cost):
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=NODE_TQM6000_20415&licenseTemplate=ANALYTICS_PREMIUM&active=true"
PrecisionTech does not use NetLicensing Shop for this use case. Instead, they use their own customer portal for license purchases and NetLicensing for the backend entitlement authority.
Why not Shop? Industrial customers expect integration with their purchasing workflows (purchase orders, net-30 invoicing, vendor contracts). NetLicensing Shop is optimized for immediate self-service checkout; it doesn’t support B2B workflows like POs or multi-approval purchasing.
Custom Portal Flow:
curl -X POST "https://go.netlicensing.io/core/v2/rest/transaction" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=NODE_TQM6000_20415&name=ANALYTICS_PREMIUM+Annual+Renewal+-+Acme+Manufacturing&status=PENDING&source=ERP"
When payment is received, the transaction status is updated to CLOSED.
Quota Thresholds & Alerts
NetLicensing allows configurable alert thresholds on quantity licenses. PrecisionTech sets:
For Acme’s “High-Throughput 250K Units/Year” license:
Account managers use these alerts to proactively reach out with renewal or upgrade offers.
License Expiration & Auto-Renewal
Annual licenses are set to auto-expire on contract anniversary. NetLicensing sends a 30-day advance notice to the customer. If payment is received before expiration:
# Renew ANALYTICS_PREMIUM for another year
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L_ANALYTICS_PREMIUM_20415" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "expirationTime=2027-04-19T23:59:59Z&quantity=8760"
If payment is NOT received before expiration, the license transitions to valid=false at the expiration timestamp. The machine’s next validation will disable the feature.
Hardware Replacement & License Transfer
If a customer’s TQM-6000 fails and needs replacement, PrecisionTech ships a new unit. The customer transfers licenses from the old unit to the new one:
# Deactivate old machine's license
curl -X POST "https://go.netlicensing.io/core/v2/rest/license/L_ANALYTICS_PREMIUM_20415" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "active=false"
# Activate the same license template on the new machine
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=NODE_TQM6000_20416&licenseTemplate=ANALYTICS_PREMIUM&active=true"
The new machine’s firmware includes its own node secret (derived from its serial number), ensuring licenses remain node-locked.
Bulk License Operations for Fleet Upgrades
When an enterprise customer with 50 TQM-6000 units wants to upgrade all machines to “Unlimited Throughput” tier:
# Bulk activate THROUGHPUT_UNLIMITED for all 50 machines in a customer account
for i in {1..50}; do
LICENSEE="NODE_TQM6000_$(printf '%05d' $i)"
curl -X POST "https://go.netlicensing.io/core/v2/rest/license" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=${LICENSEE}&licenseTemplate=THROUGHPUT_UNLIMITED&active=true"
done
Audit Logging & Compliance
Industrial customers (especially food processing, pharmaceuticals) have regulatory audit requirements. Every license change is logged:
# Log all license changes to audit trail
curl -X POST "https://go.netlicensing.io/core/v2/rest/audit" \
-H "Authorization: Basic $(echo -n "${API_KEY}:" | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "licensee=NODE_TQM6000_20415&action=LICENSE_ACTIVATED&license=L_SAFETY_AUDIT_LOG_20415×tamp=2026-04-19T10:30:00Z"
These logs are retained and exportable for FDA 21 CFR Part 11 and ISO 9001 compliance audits.

Embedded Devices: Feature-on-Demand Licensing
A smart energy and edge device vendor shipped one hardware build and unlocked feature tiers remotely via NetLicensing.

Physical Security: Feature-Based Access Control with Time-Limited Permissions
A building management company implemented feature-based access control with time-limited permissions to manage resource gating and dynamic authorization across facilities.