Configure Trial Signup
This tutorial sets up a public trial request form that lets potential customers request a free trial subscription.
Prerequisites
sadeem_subscription_trialinstalled- One deployment variant installed:
sadeem_subscription_trial_docker— for Docker provisioningsadeem_subscription_trial_dbfilter— for DBFilter provisioning- A Portainer environment (Docker) or DBFilter server group (DBFilter) fully configured
Trial vs Paid Subscriptions
| Trial | Paid | |
|---|---|---|
| Created by | Customer via public form | Operator manually or via website checkout |
| Duration | Fixed — Trial Duration Days field | Until cancelled |
| Auto-build | Optional — Auto create and run setting | Manual Confirm → Build |
| Grace period | After expiry, grace period before termination | Cancellation flow |
| Billing | No invoice generated | Linked to sale order |
How It Works
- You create a Trial Package in Odoo with limits, duration, and deployment defaults
- You publish it — it becomes accessible at
/saas/trial/<url-string> - A visitor fills in the form (name, email, company, preferred subdomain)
- Sadeem creates a trial request record
- If Auto create and run is enabled, Sadeem confirms and builds the subscription automatically — no operator action needed
- If disabled, the operator reviews and manually approves each request
Step 1: Create a Trial Package
- Navigate to SAAS Management → Subscriptions → Trial Packages → New
- Fill in the Package Name — the URL String is auto-generated from the name (lowercase, hyphens only, e.g.
Basic Trial→basic-trial) - Set Trial Duration (Days) (default: 14) and Grace Period (Days) (default: 3)
- Set User Limit and Storage Limit (MB)
- In Subscription Packages, select the subscription package(s) this trial grants access to
- Toggle Published to make the form publicly accessible
- The computed URL field shows the full public form URL:
<base_url>/saas/trial/<url_string> - Save
Tip
The URL String can be edited manually at any time before publishing. It must contain only lowercase letters, numbers, and hyphens. Changing it after publishing will break any existing links.
Basic Settings Reference
| Field | Value |
|---|---|
| Package Name | Displayed on the public form, e.g. 14-Day Free Trial |
| URL String | URL-friendly identifier — auto-generated from the name |
| Description | Short text shown on the form |
| Published | Enable to make the form publicly accessible |
| Auto create and run | Enable to provision automatically on submission |
Duration & Limits
| Field | Value |
|---|---|
| Trial Duration (Days) | How long the trial runs, e.g. 14 |
| Grace Period (Days) | Days after expiry before termination, e.g. 3 |
| User Limit | Max users allowed |
| Storage Limit (MB) | Max storage in megabytes |
| Stage Count | Stages allowed (usually 1 for trials) |
Deployment — Docker
| Field | Value |
|---|---|
| Docker Image | Odoo Docker image to deploy |
| Portainer Environment | Default environment for trial stacks |
Deployment — DBFilter
| Field | Value |
|---|---|
| DBFilter Server | Shared Odoo server group for trial databases |
Step 2: Publish
Enable Published on the trial package.
The form is now live at:
https://your-odoo.com/saas/trial/basic-trial
All published packages are listed at:
https://your-odoo.com/saas/trial
Auto Create and Run
When Auto create and run is enabled (auto_run_subscription = True), a subscription is automatically created and built as soon as the trial form is submitted. The customer receives access with no operator involvement.
When disabled, submitting the form creates a Trial Request record in Draft state. The operator reviews it and manually clicks Confirm to approve and provision, or Reject to decline.
Tip
Disable Auto create and run if you want to screen requests before provisioning — for example, to verify company email domains or apply manual capacity controls.
Step 3: Handle Requests
Go to SAAS Management → Subscriptions → Trial Requests.
- Auto create and run disabled: Click Confirm to approve and provision, or Reject to decline
- Auto create and run enabled: Requests build automatically — monitor for build failures in the chatter
Email Uniqueness
One trial request per email address per package is enforced at the database level by a SQL uniqueness constraint on (email, trial_package_id). If the same email submits the form again for the same package, the request is rejected with a validation error.
To allow a retry (for example, after a failed build), delete or archive the existing request first.
Anti-abuse considerations
The built-in duplicate email check prevents the same email from requesting the same package more than once. For additional protection consider:
- Adding reCAPTCHA to the website trial form
- Email domain verification at the web server level
- Rate limiting at the Nginx level using the
limit_req_zonedirective to prevent brute-force trial creation