Selling digital downloads with WooCommerce is one of the most profitable store configurations you can build, zero inventory, instant delivery, and near-100% margin on every sale. But setting it up correctly requires more than just installing a plugin. From license key management and download expiry rules to PDF stamping and per-product access control, there is a long list of decisions that shape whether your store runs smoothly or causes customer support headaches. This guide covers every step of the process, with expert recommendations at each stage. If you are still deciding between platforms, our WooCommerce vs Shopify comparison can help clarify why WooCommerce is the better choice for digital sellers.
WooCommerce treats any product with the “Virtual” and “Downloadable” checkboxes enabled as a digital product. This covers a wide range of product types:
- eBooks and PDFs, reports, guides, whitepapers
- Software and plugins, WordPress plugins, themes, scripts
- Audio files, music tracks, sound effects, podcasts
- Video files, courses, tutorials, stock footage
- Graphic assets, fonts, icons, templates, mockups
- Spreadsheets and documents, Excel templates, Notion templates
- License keys, software activation codes
Each of these categories has slightly different requirements. A font pack needs license clarity. A WordPress plugin needs a license key delivery system. A video course needs access control that goes beyond a simple download link. Understanding your product type upfront shapes every configuration decision that follows.
Before anything else, you need a working WooCommerce installation. If you are starting fresh, install WooCommerce from the WordPress plugin directory and run through the setup wizard. For a digital-only store, make specific choices during setup:
Setup Wizard Choices for Digital Stores
- Industry, Select “Education and learning” or “Other” depending on your product category
- Product types, Check “Downloads” specifically (this enables download-specific features)
- Business details, Fill in your country and currency, these affect tax rules
- Theme, Any theme works; Storefront is WooCommerce’s own and the safest starting point
Key WooCommerce Settings for Digital Products
After the wizard, go to WooCommerce → Settings → Products → Downloadable Products. This section controls how all downloadable files are delivered.
| Setting | Recommended Value | Reason |
|---|---|---|
| File Download Method | Force Downloads | Protects files from direct URL access; routes all downloads through PHP |
| Access Restriction | Purchases only | Ensures only paying customers can access download links |
| Grant Access After Payment | Enabled (checked) | Unlocks downloads immediately upon payment, before order status is “complete” |
The File Download Method is the most consequential setting here. WooCommerce offers three options: redirect, X-Accel-Redirect, and Force Downloads. Force Downloads is the most secure for most stores because it prevents customers from sharing the direct file URL. X-Accel-Redirect is faster on Nginx servers but requires server-level configuration. Redirect (the default) is the least secure, avoid it for anything that must stay protected.
With WooCommerce configured, you can create your first digital product. Go to Products → Add New. Fill in the title, description, and short description as you would for any product. The key difference is in the Product Data panel below the editor.
Product Data Configuration
- Select “Simple product” from the Product Data dropdown
- Check “Virtual”, this removes shipping fields since nothing is shipped
- Check “Downloadable”, this reveals the Downloadable Files section and download settings
Downloadable Files Section
Click “Add File” in the Downloadable Files section. You will see two fields: a file name and a file URL. You can either enter a URL to a file hosted elsewhere or use “Choose File” to upload directly to your WordPress media library. For most stores, uploading to your server (outside the web root where possible) is the most reliable approach.
Never store downloadable files inside the /uploads folder if you can avoid it. Files in /uploads are publicly accessible by URL, WordPress’s Force Downloads setting adds a layer of protection, but a misconfigured server or plugin conflict can expose them. For critical products like paid software, store files one level above the web root or use a private S3 bucket.
WooCustomDev Technical Team
Download Limits and Expiry
WooCommerce gives you two per-product access controls under the Downloadable Files section:
- Download Limit, How many times a customer can download the file (leave blank for unlimited)
- Download Expiry, How many days after purchase the link stays active (leave blank for no expiry)
For software products, a download limit of 3-5 is reasonable, it prevents link sharing while allowing customers to re-download on a new device. For ebooks, unlimited downloads with no expiry is the norm. For time-sensitive assets like event materials, a 30-day expiry may make sense.
Tax on digital products is the most legally complex part of any digital store. In the EU, digital services sold to consumers are subject to VAT in the buyer’s country, not the seller’s. In the US, digital products are taxable in many states but not all. In Canada, they are subject to GST/HST depending on the province.
WooCommerce Tax Setup
- Go to WooCommerce → Settings → Tax
- Enable taxes
- Set “Tax based on” to “Customer billing address” (correct for digital goods)
- Create a tax class called “Digital Products” or use the “Standard” rate
- Add tax rates for each applicable jurisdiction
For EU VAT compliance at scale, WooCommerce’s built-in tax tables quickly become unmanageable. The standard recommendation is to use a dedicated tax plugin or service:
- Quaderno, automatic EU VAT, tax receipts, compliance reports
- TaxJar, US sales tax automation with real-time calculations
- Avalara AvaTax, enterprise-grade tax for large-volume stores
- WooCommerce EU VAT Assistant, free option for smaller EU-only stores
If you expect significant volume from the EU from day one, budget for a proper tax automation service. The cost is far lower than a tax audit.
Digital product stores need payment gateways that work well with instant delivery. The key requirements are: immediate payment confirmation, low dispute rates, and support for your target markets.
Recommended Payment Gateways
| Gateway | Best For | Key Feature |
|---|---|---|
| Stripe | Most stores | Instant webhook confirmation, strong fraud tools, wide currency support |
| PayPal | B2C with broad audience | Familiar to buyers; use PayPal Payments Pro for fewer redirects |
| WooPayments | Stores already in WooCommerce ecosystem | Native integration, built-in dispute management |
| Paddle | SaaS and software stores | Acts as Merchant of Record, handles VAT globally so you don’t have to |
| Lemon Squeezy | Independent developers | Full MoR setup, handles taxes, payouts in major currencies |
Merchant of Record (MoR) services like Paddle and Lemon Squeezy deserve special mention for digital software stores. When you use a MoR, the payment processor is legally the seller, they handle EU VAT, US sales tax, refunds, and chargebacks on your behalf. For a solo developer selling a WordPress plugin globally, a MoR service can eliminate months of tax compliance work.
Default WooCommerce download delivery works for small stores but breaks down under scale or with high-value files. Here are the main options for secure, reliable digital delivery.
Option 1: Server-Side File Delivery (Default)
WooCommerce serves files through PHP when “Force Downloads” is set. This works well for files under 50MB on a properly configured server. Beyond that, you risk PHP memory limits and execution timeouts killing large downloads mid-transfer.
Option 2: Amazon S3 with Presigned URLs
For stores with large files or significant traffic, storing files on Amazon S3 and generating time-limited presigned URLs is the professional approach. The workflow:
- Upload files to a private S3 bucket (bucket policy: no public access)
- Store the S3 object key in the WooCommerce product’s file URL field
- Use a plugin or custom code to generate a presigned URL at download time (typically 15-60 minute expiry)
- Redirect the customer to the presigned URL, S3 handles the actual delivery
Plugins that support S3 delivery include WooCommerce’s own Digital Downloads extension and third-party options like WP Offload Media combined with a custom delivery layer. For high-volume software stores, a custom implementation gives the most control over expiry logic and download tracking.
Option 3: CDN Delivery
For audio or video files that customers play rather than download, a CDN like Cloudflare, BunnyCDN, or AWS CloudFront reduces latency and hosting costs. Protected CDN links require either token authentication (supported by BunnyCDN and CloudFront) or a signed URL system similar to S3.
If you are selling WordPress plugins, desktop software, or SaaS tools, license key management is a critical requirement. WooCommerce does not handle this natively, you need additional tooling.
License Key Delivery Options
- WooCommerce License Manager, free plugin, stores keys in a database, delivers on order completion
- Software License Manager, supports activation tracking, deactivation, license verification API
- Easy Digital Downloads (EDD) Software Licensing, if you switch from WooCommerce to EDD, this is the gold standard for WordPress plugin licensing
- Custom API integration, build your own licensing server (common for SaaS) and trigger key generation via WooCommerce webhooks
What a Proper Licensing System Must Do
- Generate unique keys per order (not per product)
- Track activations, how many sites or devices have activated the key
- Enforce activation limits, single-site vs. multi-site vs. developer licenses
- Allow deactivation, customers must be able to move a license from one site to another
- Support renewals, annual license renewal requires the old key to remain active during grace period
- Expose a validation API, your plugin/software checks the license server on load
Getting licensing right the first time is worth the investment. A poorly designed system leads to: customers locked out after server migration, duplicate activations that are hard to audit, and support tickets that take 20 minutes each to resolve. At WooCustomDev, we have built custom licensing servers for plugin businesses that support tens of thousands of active licenses, the architecture decisions made at launch determine whether that scales painlessly or becomes a maintenance burden.
WooCommerce sends transactional emails automatically, but the defaults are not optimal for digital stores. Customers need clear, immediate access to their download links, the default email template buries this information.
Email Configuration Checklist
- Go to WooCommerce → Settings → Emails
- Enable “Customer Invoice / Order Details” email for immediate order confirmation
- Ensure “Customer Processing Order” email includes the download links block
- Customize the email template to put download links prominently at the top
- Set the “From” name and address to your brand, not the default WordPress name
- Test every email with a real order before going live
Consider using a transactional email service (Postmark, SendGrid, Mailgun) rather than your server’s PHP mail function. Native PHP mail has deliverability issues, your order confirmation landing in spam means a customer support ticket within the hour. A plugin like WP Mail SMTP connects WooCommerce’s emails to a proper SMTP provider.
After purchase, customers can access their downloads from their account page at /my-account/downloads/. This is the standard WooCommerce download management interface. For most stores, it works out of the box, but there are several improvements worth making.
My Account Improvements for Digital Stores
- Show version history, if you sell software with updates, customers need access to previous versions in some cases
- Download count display, show how many downloads remain out of their limit
- Expiry date display, if links expire, show the expiry date clearly
- License key display, if products have license keys, surface them in the account area
- Changelog or release notes link, link to what changed in the latest version
None of these are available in WooCommerce by default. They require either a dedicated plugin or custom development. For stores selling a single product, this may be overkill. For stores with multiple products and recurring customers, a polished account area significantly reduces support volume.
Digital products have high chargeback rates compared to physical goods. Once a file has been downloaded, there is no way to “return” it, which creates a legal grey area and opens the door to fraud. Your refund policy and technical controls need to work together.
Recommended Approach
- Publish a clear no-refund policy for downloads, or a conditional policy (refund within 30 days if the product does not work as described)
- Require account creation before purchase, this creates an audit trail and makes dispute resolution easier
- Log all downloads, WooCommerce logs downloads by default (WooCommerce → Reports → Downloads)
- Use fraud detection, WooCommerce Payments and Stripe both offer built-in fraud tools; configure them (see our guide on stopping bot attacks and fake orders)
- Revoke access on refund, write a custom hook (or use a plugin) to disable download links when a refund is issued
Digital products have ideal economics for bundling, combining three products costs the seller nothing extra but increases the perceived value and average order value significantly. WooCommerce supports several bundling and upsell patterns.
Bundle Plugins
- WooCommerce Product Bundles (official), fixed bundles with individual product tracking
- WPC Product Bundles, more flexible pricing and display options
- Frequently Bought Together, Amazon-style cross-sell recommendations
Subscriptions for Recurring Revenue
For products like software with ongoing updates, a subscription model converts one-time buyers into recurring revenue. WooCommerce Subscriptions is the standard extension, it adds subscription billing, dunning emails for failed payments, and subscription management from the account area. The extension costs $279/year but pays for itself quickly if you have any recurring product.
A common pattern for plugin businesses is: sell a lifetime license at a premium price AND an annual subscription at a lower entry point. This gives buyers a choice while maximizing revenue across customer types.
Digital product checkout has different friction points than physical goods checkout. There is no shipping address needed, which simplifies the form, but customers may abandon if the checkout feels unfamiliar or untrustworthy.
Checkout Optimizations
- Remove shipping fields, products marked as Virtual automatically hide shipping at checkout
- Enable guest checkout, WooCommerce → Settings → Accounts and Privacy
- Add trust signals, security badges, money-back guarantee text, number of customers served
- Reduce form fields, for digital-only stores, you may only need email, name, and payment details
- Enable WooCommerce Blocks checkout, the block-based checkout (available since WooCommerce 8.x) is faster and more conversion-friendly than the legacy shortcode checkout
Post-Purchase Redirect
After payment, redirect customers to a custom thank-you page rather than the default WooCommerce “Order Received” page. A well-designed thank-you page includes the download button prominently, a next-step CTA (join the community, read the documentation), and an upsell offer for a related product. This is often the highest-converting page on a digital store.
Even with a properly configured store, digital download issues arise. Here are the most common problems and their solutions.
| Problem | Likely Cause | Fix |
|---|---|---|
| Download link not working | Download limit reached or link expired | Admin → Orders → Resend download link, or increase the limit on the product |
| File downloads as HTML or blank | Server misconfiguration with Force Downloads | Switch to X-Accel-Redirect or use MIME type headers in a custom handler |
| Large files timeout mid-download | PHP max_execution_time too low | Increase execution time or switch to S3/CDN delivery |
| Customers not receiving download email | Email deliverability issue | Install WP Mail SMTP and connect to Postmark or SendGrid |
| Order stuck at “Processing” | Payment webhook not received | Check payment gateway webhook logs; manually complete the order |
| Duplicate download links in email | Multiple order status triggers | Audit WooCommerce email hooks; disable duplicate triggers |
WooCommerce’s built-in digital download features are solid for a basic store. But as soon as you add complexity, multiple product tiers, per-seat licensing, custom checkout flows, S3 file delivery, or integration with a SaaS backend, you hit the edges of what plugins can configure without code.
The most common points where stores need custom WooCommerce development:
- Custom licensing servers, building an API that your software queries to validate licenses
- Tiered access control, different download permissions based on license type (standard vs. developer vs. agency)
- S3 presigned URL generation, generating time-limited, customer-specific download URLs from private cloud storage
- Custom order flows, quote-before-purchase, bulk licensing, team accounts
- Third-party integrations, connecting WooCommerce orders to helpdesk software, CRMs, or community platforms
- PDF stamping and watermarking, adding buyer details to ebooks before delivery to deter sharing
These are not things you configure with a settings panel, they require writing PHP, working with WooCommerce hooks and filters, and knowing where the extension points are in the plugin’s architecture. Getting this wrong creates security holes (exposed files), billing errors (licenses not deactivating on refund), or broken customer experiences (downloads that do not deliver).
- WooCommerce installed, Setup Wizard run with “Downloads” product type selected
- Download method set to “Force Downloads” under Products settings
- Products created with Virtual + Downloadable checked
- Download limits and expiry set per product
- Tax rules configured for customer billing address (or MoR service in use)
- Payment gateway tested with a live transaction
- Order emails customized with clear download link placement
- My Account downloads area tested from a customer account
- Refund policy published and access revocation tested
- File storage reviewed (local, S3, or CDN depending on file size and volume)
- License key delivery system in place (if selling software)
- SMTP email service configured for reliable delivery
Getting a basic WooCommerce digital store live is something you can do in an afternoon. Getting it to handle real volume, proper tax compliance, secure file delivery, and a customer experience that builds trust, that takes experience with WooCommerce’s architecture and the plugin ecosystem around it.
At WooCustomDev, we build and optimize WooCommerce stores for digital product businesses. Whether you need a custom licensing system, a private S3 delivery setup, or a complete checkout overhaul, our team has built it before. Tell us about your project and we will help you architect a solution that works at scale.

