To deliver a different license key to each Shopify buyer, import your codes into KeyHarbor, connect the pool to a product variant, and test a paid order. KeyHarbor checks payment, risk, stock and subscription eligibility before assigning codes and emailing a private collection link. You provide the codes; KeyHarbor manages their delivery.
1. Prepare your product and codes
Start with unique license keys, access codes or redemption codes that you are entitled to sell. Make the product description clear about what the code unlocks, where the buyer redeems it, and any expiry or regional restrictions. KeyHarbor does not generate keys, host downloadable files or verify activation with a software issuer.
Create the product in Shopify. For a code-only product, make sure it does not require shipping. If you track product inventory in Shopify, set an appropriate quantity there as well: available Shopify product inventory and available codes in KeyHarbor are separate checks.
Install KeyHarbor from the Shopify App Store, then open it from Shopify admin โ Apps. In Subscription, use Manage plan in Shopify to select Standard and complete the approval screen. The public plan is USD 10/month or USD 96/year with a 14-day trial. Eligible development stores can use the partner/developer free option. Check the current status in the app before testing delivery.
2. Import inventory and connect a variant
- Open Inventory and create a pool with a descriptive name, such as the product and license edition.
- Open the pool, give the batch a label, and paste the codes into Codes, one per line. Set expiry only when it applies, then choose Import codes.
- Under Connected products, find the product, select its variant and choose Connect variant.
- Confirm the pool has enough available codes for your test order. Set a useful low-stock threshold and review notification preferences in Settings.
Use dummy codes in a development store. Four unique test codes let you test a two-unit purchase and a later replacement without using commercial inventory. Use new unique dummy values for repeat tests.
3. Test payment and buyer collection
On a development store, place a test order for two units using the store's test payment gateway and an email inbox you control. Complete the payment so Shopify marks the order as paid. Open the order in KeyHarbor โ Deliveries.
If the order needs review, inspect the payment and Shopify risk information. For your controlled test order, enter a review reason and use Approve risk review when appropriate. Approval is not a substitute for payment or available inventory. For a real buyer, review the actual order before clearing a hold.
Allow background processing to finish, then refresh the order. Expect two assigned codes, a delivery notification and fulfillment of the mapped digital items. Sync order refreshes Shopify order data. Needs attention shows holds and failed jobs that require follow-up.
Open the delivery email and follow Collect your codes. Reveal and copy the codes, then refresh the collection page. The same assigned codes should remain; refreshing should not consume more stock.
4. Handle delivery aftercare
Resend a missing email
Use Resend notification on the delivery order. This provides access to the same assigned codes, rather than assigning new stock. If a previous send has an unknown result, first follow the guidance in delivery support to avoid an unnecessary duplicate email.
Replace one code
With a spare code available, expand Replace this code, enter the reason and choose Replace and notify customer. The replacement appears on the collection page; the old code is no longer shown there. KeyHarbor cannot deactivate the old code with an external issuer, so handle that separately when necessary.
Check refunds and access
In Shopify admin, refund one unit of your two-unit test order. After KeyHarbor processes the event, only one code should remain available on the collection page. Refunding the second unit should make the collection unavailable. Affected codes are quarantined instead of becoming saleable stock again.
Payment refunds are initiated in Shopify. Removing collection access cannot erase a code that a buyer already copied or redeemed. Collection links expire after 30 days, and collection, resends and replacements currently require the order to be within Shopify's 60-day order access window. A renewed link does not extend that window.
5. Check before opening sales
- Your product variants point to the correct pools, with real stock ready.
- The store has an eligible KeyHarbor subscription and a working buyer checkout.
- You have checked the buyer email, code reveal, resend and refund flows.
- Your store's support contact and redemption instructions are clear.
- You know where to review risk holds, low stock and failed delivery tasks.
A file-download app and a code-delivery app solve different jobs. If you sell files, you will need a file-hosting solution. If you already have unique codes and need to allocate them to paid orders, KeyHarbor provides that inventory-to-delivery workflow.
Ready to deliver your codes?
Review the Standard plan or contact KeyHarbor support for setup help.
View KeyHarbor on Shopify App Store