Version: 1.0 Last updated: March 2026 Support contact: rentbasesupport@gmail.com
RentBase is a Shopify app designed to transform any online store into a rental platform. It allows merchants to rent products by the day or by hourly time slots, manage inventory availability, apply automatic discounts, and monitor bookings from a dedicated dashboard.
RentBase is made up of three parts:
| Component | Where it lives | What it does |
|---|---|---|
| Admin App | Shopify admin panel (embedded) | Configuration, booking management, settings |
| Storefront Widget | Store theme (Theme App Extension) | Date calendar, time selection, customer-side booking |
The app is fully embedded in Shopify: it does not open external windows and integrates natively into the admin panel.
The first time you open RentBase, you'll see an automatic checklist with 3 steps. The app automatically detects the status of each step.
Note: Enabling a product does not change it visually in the store until the Calendar Widget is active in the theme.
Open the Shopify Theme Editor and add the RentBase Calendar block to the product page. This is the widget your customers will use to select rental dates.
Go back to Quick Start: all checkmarks should be green. Visit your store and open an enabled product to verify that the calendar is visible.
| Feature | Free | Pro ($49/month) |
|---|---|---|
| Unlimited Products | ✅ | ✅ |
| Calendar Widget | ✅ | ✅ |
| Draft Order checkout flow | ✅ | ✅ |
| Duration Discounts | ✅ | ✅ |
| Seasonal Discounts | ✅ | ✅ |
| Global Blocked Dates | ✅ | ✅ |
| Inventory/Fleet Management | ✅ | ✅ |
| Smart Asset Manager (License Plates & Serials) | ✅ | ✅ |
| Per-Product/Variant Configuration | ✅ | ✅ |
| Manual Booking (Admin) | ✅ | ✅ |
| Booking Dashboard (Agenda, Timeline, Registry) | ✅ | ✅ |
| Confirmed Bookings / Month | 10 | Unlimited |
| Email Notifications (confirmation, reminder, feedback) | ❌ | ✅ |
| Calendar Sync (iCal/Google/Apple/Outlook) | ❌ | ✅ |
| Customizable Digital Contract (document + signature + custom fields) | ❌ | ✅ |
| Custom Fields (pre-checkout customer form) | ❌ | ✅ |
The Free plan allows 10 confirmed bookings per month. The count includes:
PENDING bookings (not yet paid) do not count towards the limit.
If you cancel the Pro plan:
Global settings are the default values for all products. They can be overridden at the individual product or variant level (see Section 5).
The Settings page is organized in sections:
| Field | Description | Default |
|---|---|---|
| Shop Timezone | Store timezone. Used for all date calculations. | UTC |
| Pending Duration | Minutes a pending booking stays valid before its checkout expires. | 15 min |
| Default Inventory | Number of available units per variant (for fleet management). | 1 |
Timezone: Select the actual timezone of your store. If you're in Italy, use
Europe/Rome. This ensures that dates in the calendar match your local time.
| Field | Description | Default |
|---|---|---|
| Enable Time Selection | If active, customers also select pickup/return time (not just the day). | Disabled |
| Time Format | Time format: 24h (14:00) or 12h (2:00 PM). | 24h |
| Buffer Hours | Preparation hours required between the end of one rental and the start of the next (0-168). | 0 |
| Include Return Day | If active, the return day is counted as a rental day for pricing purposes. | Disabled |
Buffer Hours example: If you set 4 buffer hours and a customer returns at 6:00 PM, the next customer can pick up from 10:00 PM onwards. With daily rentals (no times), the buffer blocks the entire next day if necessary.
| Field | Description | Default |
|---|---|---|
| Minimum Rental Days | Minimum rental duration in days. | 1 |
| Maximum Rental Days | Maximum rental duration in days. | 30 |
| Advance Booking Days | Minimum days in advance to book (0 = same day). | 0 |
| Field | Description | Default |
|---|---|---|
| Available Days | Days of the week when rental is active. Deselect closure days. | All days |
| Pickup Times | Available pickup times (only if Time Selection is active). | 09:00 – 18:00 |
| Return Times | Available return times (only if Time Selection is active). | 09:00 – 18:00 |
Times can be added individually (slot list) or as a range with 30-minute steps.
| Field | Description | Default |
|---|---|---|
| Minimum Age | Minimum age required for rental. Shows confirmation checkbox in the widget. | None |
| Requires License | If active, the customer must confirm they have a valid license. | Disabled |
| Requires Deposit | If active, shows deposit information. | Disabled |
| Deposit Amount | Security deposit amount. | 0 |
| Deposit Type | Info Only (informational only) or Add to Cart (adds the deposit as a separate line in the Draft Order). | Info Only |
| Deposit Product | Shopify product used as deposit. The app can create one automatically. | — |
"Add to Cart" Deposit: When the type is "Add to Cart", the app creates a special Shopify product (tagged
rentbase-deposit). When the customer books, the deposit is included as a separate line inside the Shopify Draft Order together with the rental.
When the deposit type is "Add to Cart", the widget displays a mandatory consent checkbox that the customer must accept before proceeding. This ensures compliance with Shopify policy 5.6.5 regarding transparency of additional charges.
When the deposit type is "Add to Cart" (line item), the merchant can refund the deposit directly from the Bookings dashboard:
suggestedRefund + refundCreate). The customer automatically receives a refund notification email.Note: Refunds are irreversible. Once confirmed, the deposit amount is returned to the customer's original payment method.
| Field | Description | Default |
|---|---|---|
| Pickup Location | Address/directions for the pickup point. | Empty |
| Return Location | Address/directions for the return point. Leave empty if same as pickup. | Empty |
Dedicated section for blocking dates globally across all products. Ideal for:
Each blocked date has:
Global blocked dates are combined (union) with any blocked dates configured at the product/variant level. It is possible to exclude specific global blocked dates at the product/variant level.
See Section 8 — Discount System for detailed configuration.
See Section 8 — Discount System for detailed configuration.
Generates an iCal subscription link to sync all confirmed bookings with:
The link is in webcal:// format and updates automatically. It is a read-only feed.
To generate the link:
To revoke access:
Enabled products show:
Click on a product to open its configuration. You can customize all values from the Global Settings section:
Any field not set at the product level inherits the global value.
If a product has multiple variants (e.g., size S, M, L), each variant can have independent configuration:
RentBase uses a three-level system. For each setting, the value is resolved as follows:
┌──────────────────────────────────┐
│ VARIANT (highest priority) │ ← If set, wins
├──────────────────────────────────┤
│ PRODUCT │ ← If the variant has no value
├──────────────────────────────────┤
│ GLOBAL (lowest priority) │ ← If the product has no value either
└──────────────────────────────────┘
Practical example:
bufferHours = 4bufferHours = 2 (overrides)bufferHours = 6 → uses its own valueBlocked dates work cumulatively (union):
This means that a date blocked at the global level blocks all products. As an exception:
Example:
Product/variant configurations are saved in Shopify metafields:
Namespace: rentbase
Key: config
Type: JSON
This means that:
product.metafields.rentbase.config)RentBase allows you to track individual physical assets for each product variant. Assets are useful when you need to know exactly which unit was rented to which customer.
A Rental Asset represents a single, identifiable physical item. For example, if you have 5 electric bicycles, each one can be an asset with its own name and serial number:
| Asset Name | Serial Number | Status |
|---|---|---|
| E-Bike #1 | SN-001 | Available |
| E-Bike #2 | SN-002 | Rented |
| E-Bike #3 | SN-003 | Maintenance |
From the Products page, go to the Assets tab:
| Status | Meaning |
|---|---|
available | Ready to be rented |
rented | Currently assigned to a booking |
maintenance | Under maintenance, not available for rental |
When viewing a booking in the Bookings page:
The Assets tab shows warnings when the inventory quantity doesn't match the number of assets:
Assets are stored as Shopify Metaobjects (
rentbase_asset) and are linked to variants via the variant ID.
When a customer visits the page of a rental-enabled product:
maxRentalDays or advanceBookingDaysavailableDaysThe calendar checks availability in real time by querying the API on each selection change.
When the customer clicks "Book Now", RentBase:
The main rental line inside the Draft Order includes metadata such as:
| Property | Description |
|---|---|
_bookingId | Unique booking identifier |
_rental_days / _rental_hours | Rental duration |
Pickup Time / Return Time | Pickup and return times, if enabled |
_rental_discount_percent | Applied discount percentage |
_rental_discount_amount | Total discount amount |
_rental_original_total | Original total before discounts |
Total | Final rental total |
_variantId / _productId | Internal variant/product references |
If the deposit is configured as Add to Cart, a separate deposit line is also included in the Draft Order and linked back to the booking.
These attributes become
line_item.propertieson the final Shopify order and are used by RentBase for tracking, diagnostics, and checkout reconciliation.
In the Shopify Theme Editor you can customize the calendar block:
If a product does not have rental active:
If the product has multiple variants:
RentBase no longer relies on Cart Guardian as the main checkout protection layer. Instead, the booking flow uses server-generated Shopify Draft Orders, so pricing, duration, deposit, and discounts are assembled in a controlled way before payment.
A Draft Order can include:
This approach avoids depending on a standard storefront cart to compose the booking.
Depending on the checkout/documents configuration:
checkoutContext and creates the Draft Order after those steps are completedEach booking can store:
draftOrderIdcheckoutContext with the checkout linesorderId after paymentThis makes support, audits, and reconciliation between RentBase bookings, Draft Orders, and final Shopify orders much easier.
Applies progressive discounts based on rental duration.
Configuration:
- Minimum days: from how many days the discount applies - Discount percentage: the percentage discount applied
Example:
| Minimum Days | Discount |
|---|---|
| 7 | 10% |
| 14 | 20% |
| 30 | 30% |
If the customer rents for 10 days → 10% discount. If they rent for 21 days → 20% discount (the highest applicable tier).
The discount from the highest reached tier is always applied (not cumulative between tiers).
Applies discounts tied to specific periods of the year.
Configuration:
In case of overlap: If two seasonal promotions overlap, the one with the highest priority is applied.
When both discount types apply, the formula is composite (not additive):
Final Price = Base Price × (1 - duration_discount%) × (1 - seasonal_discount%)
Example:
CUSTOMER SELECTS DATES
│
▼
┌─────────┐
│ PENDING │ ← Booking created, item in cart
└────┬────┘ (expires after "Pending Duration" minutes)
│
[Customer completes order]
│
▼
┌───────────┐
│ CONFIRMED │ ← Order paid, booking confirmed
└─────┬─────┘ (confirmation email sent if Pro)
│
[Rental period ended]
│
▼
┌───────────┐
│ COMPLETED │ ← Merchant marks as completed
└───────────┘
or at any time:
┌───────────┐
│ CANCELLED │ ← Cancelled by merchant (soft delete)
└───────────┘
┌───────────┐
│ EXPIRED │ ← Pending expired (auto-cleanup)
└───────────┘
The Bookings page offers a complete panel with:
- Search by customer (name or email) - Filter by status (Confirmed, Completed, Cancelled, Expired) - Filter by date (custom range) - Show expired/cancelled (toggle)
The merchant can create bookings manually from the dashboard:
Useful for phone bookings, walk-ins, or special reservations.
RentBase sends automatic emails to customers at key moments of the rental. Notifications are available only with the Pro plan.
| Type | When it is sent | Purpose |
|---|---|---|
| Booking Confirmation | Immediately after order payment | Booking confirmation with details |
| Pickup Reminder | ~24 hours before pickup | Reminds the customer of the pickup date |
| Return Reminder | ~24 hours before return | Reminds the customer of the return date |
| Post-Rental Feedback | ~24 hours after rental ends | Feedback/review request |
From the sidebar navigation Notifications:
In templates you can use these variables with the {{ variable }} syntax:
| Variable | Value |
|---|---|
{{ booking.id }} | Unique booking ID |
{{ booking.customer }} | Customer name |
{{ booking.productName }} | Rented product name |
{{ booking.startDate }} | Rental start date |
{{ booking.endDate }} | Rental end date |
{{ booking.duration }} | Duration in days |
{{ shop.name }} | Store name |
Reminders (Pickup, Return, Feedback) are processed by an automatic cron job that:
This section covers the complete contracts and documents workflow — available only on the Pro plan. It includes customizable rental agreements, digital signatures, ID document uploads, custom requirement fields, and a pre-checkout customer information form.
| Feature | Description |
|---|---|
| Rental Agreement Template | Multi-language contract template with placeholders for customer data, product, dates, prices, deposit, and custom fields. |
| Digital Signature | Customers draw their signature directly on the signing page. |
| ID Document Upload | Require customers to upload a photo of their passport, driver's license, or ID card. Supports JPG, PNG, WebP, and PDF (max 10 MB). |
| Custom Requirement Fields | Add unlimited custom fields (text, textarea, checkbox, select, file upload) to the contract/signing step. |
| Pre-Checkout Customer Form | Collect customer information (name, email, phone, address) and custom fields before checkout. All data is written to the Shopify Order as metafields. |
| Data Retention | Configurable retention period for uploaded documents. Files are automatically purged after the set number of days (default: 90 days). Contract data and signatures are retained. |
The app supports two collection modes, configurable in Settings → Checkout & Documents:
| Mode | How It Works |
|---|---|
| Post-Payment (email) | After payment, the customer receives an email with a secure signing link. They complete contract review, signature, document upload, and custom fields on a standalone page. |
| Pre-Checkout | Before reaching checkout, the customer is guided through a two-step App Proxy flow: (1) Customer information form, (2) Requirements/contract page with signature, documents, and custom fields. The Draft Order is created only after completion. |
The contract template supports placeholders that auto-fill with booking and customer data:
{{name}}, {{surname}}, {{email}}, {{phone}}, {{address}} — Customer data{{product}}, {{variant}} — Product name and variant{{start}}, {{end}} — Rental dates{{start_time}}, {{end_time}} — Pickup/return times{{pickup_location}}, {{return_location}} — Location details{{priceNoDeposit}}, {{depositPrice}}, {{totalPrice}} — Pricing{{shop}} — Shop name{{date}} — Signing date{{custom_field_key}} — Any custom field defined in Requirements FieldsTemplates are stored as multilingual JSON objects. The contract is displayed to the customer in their language (based on the store locale), with fallback to the default language or English.
Custom requirement fields are defined in Settings → Checkout & Documents. Each field has:
license_number, birth_date)File-type fields accept images and PDFs (max 10 MB each). All uploaded data is encrypted at rest (AES-256-GCM).
RentBase supports two availability modes:
Daily Mode (enableTime = false):
active_bookings ≥ inventoryHourly Mode (enableTime = true):
Each variant has an inventory_quantity value (default: 1):
Note: Inventory can be set to 0 at the product or variant level. The global default inventory has a minimum of 1.
Fleet example:
inventory_quantity = 5Buffer hours create a preparation window between consecutive rentals:
Rental A ends: March 15, 4:00 PM
Buffer Hours: 4
Next available pickup: March 15, 8:00 PM
With daily rentals (no times):
Rental A ends: March 15
Buffer Hours: 24
Next available day: March 17
The buffer applies only to availability calculations — the actual booking dates don't change.
All dates are:
This ensures that "March 15" in the calendar always corresponds to March 15 in the store's timezone, regardless of the server or customer location.
The system combines blocked dates from three sources:
The final result is the union of all these sources, minus the exclusions.
The Support page is no longer just an FAQ area: it now includes an internal ticketing flow designed to send support requests with useful technical context already attached.
From Support, merchants can create a ticket by filling in:
If a Booking ID is provided, RentBase tries to resolve the matching booking for that shop before saving the ticket.
When a ticket is linked to a booking, RentBase also stores a compact diagnostic payload with:
This lets support start from verifiable data instead of manually reconstructing the issue from screenshots or email threads.
The same page also shows the store's recent support tickets, including:
This gives merchants a lightweight history view without relying on external email searches.
Merchants should not include sensitive customer data in the ticket body, such as documents, signatures, payment details, or private attachments. Use Booking IDs or Request IDs instead so RentBase can safely recover the relevant diagnostics.
RentBase supports 7 languages with automatic detection:
| Language | Code | Admin | Storefront Widget |
|---|---|---|---|
| English | en | ✅ | ✅ |
| Italiano | it | ✅ | ✅ |
| Deutsch | de | ✅ | ✅ |
| Español | es | ✅ | ✅ |
| Français | fr | ✅ | ✅ |
| Português | pt | ✅ | ✅ |
| 中文 | zh | ✅ | ✅ |
How it works:
Q: I installed the app but the calendar doesn't appear on the store. A: You need to activate the RentBase Calendar block in the Theme Editor (Online Store → Customize). Go to a product, add the block from the "Apps" area, and save. Also verify that the product has been enabled for rental from the Products page.
Q: The Quick Start shows the calendar as "not active" even though I added it. A: Make sure you saved the theme after adding the block. If the block is disabled (crossed eye in the Theme Editor), the Quick Start detects it as not active.
Q: Can customers modify quantity or total and pay for fewer days? A: No. RentBase prepares the rental server-side and generates a Draft Order with duration, pricing, discounts, and deposit already defined. The rental is not recalculated from a standard Shopify cart.
Q: If I change global settings, do already-configured products get updated? A: Global settings are the defaults. Products with specific configuration keep their own values. Only products without specific configuration use global values.
Q: Do I need to configure each product individually? A: No. Configure global settings once. Only products that need different values (different inventory, different times, etc.) require specific configuration.
Q: How do I block the store for Christmas holidays? A: Go to Settings → Global Blocked Dates. Add the period (e.g., December 24-31) and all products will be blocked for that period. If a specific product needs to remain available, add it to the exclusions in the product configuration.
Q: Do duration and seasonal discounts stack? A: No, they compose (multiplicative formula). Duration discount 10% + seasonal discount 15% = 23.5% total (not 25%). This is fairer and industry standard.
Q: A customer booked but didn't pay. Does the booking disappear? A: Yes. PENDING bookings expire after the duration configured in "Pending Duration" (default: 15 minutes). After expiry, the dates become available again.
Q: Can I create bookings manually for customers who call? A: Yes. From the Bookings page, click "Create Booking". You can also enable "Bypass Availability Check" to book dates that appear occupied.
Q: How do I see bookings for the month? A: Use the Timeline view on the Bookings page for a monthly calendar view, or the Registry view with date filters.
Q: How many bookings can I manage with the Free plan? A: 10 confirmed bookings per month. Pending bookings (unpaid) don't count.
Q: If I cancel the Pro plan, do I lose bookings? A: No. All existing bookings, product configurations, and other settings remain intact. You lose access to email notifications and iCal calendar.
Q: Is there a free trial? A: The Free plan is unlimited in time. You can use it as long as you want with the 10 bookings/month limit. The Pro plan includes a 14-day free trial. Upgrade is immediate and you can cancel at any time.
Q: Do metafields remain if I uninstall the app? A: Yes. Shopify metafields (rentbase.config) on products survive uninstallation. If you reinstall the app, product configurations will be found again. Data in the app's database (bookings, global settings) is removed upon uninstallation.
Q: Does the app work with custom themes? A: Yes. RentBase uses Theme App Extensions and App Proxy pages, so it works with Online Store 2.0 themes without depending on a standard storefront cart to build checkout.
Q: What's the difference between the calendar and the Draft Order flow? A: The Calendar is the storefront block that collects dates, times, and quantity. The Draft Order flow is the server-side step that turns that selection into a pending booking and a Shopify checkout ready for payment.
Q: How does calendar sync with Google/Apple/Outlook work? A: RentBase generates a webcal:// URL that you can paste in your calendar app. The feed is read-only and updates automatically. It is not a two-way sync: changes made in the external calendar are not reflected in RentBase.
Q: What's the difference between inventory quantity and assets? A: The inventory_quantity determines how many units can be booked simultaneously (availability). Assets are the individual physical items you track by name and serial number. Ideally, the number of assets should match the inventory quantity.
Q: How do I temporarily disable a product without removing it? A: Set the inventory_quantity to 0 in the product or variant configuration. The calendar widget will show a "temporarily unavailable" message and no bookings can be made. When the product is available again, set the inventory back to the desired value.
Q: What happens if I set inventory to 0? A: The calendar widget displays a "temporarily unavailable" message. The date selector is hidden and customers cannot book the product. Existing bookings are not affected.
Q: How are uploaded documents and signatures stored? A: All files (ID documents, signatures, requirement attachments) are stored securely in your own database — never on public CDNs. Images are automatically compressed client-side before upload (max 1200px, JPEG 85% quality). All sensitive data is encrypted at rest using AES-256-GCM.
Q: Is there automatic data retention and deletion? A: Yes. You can configure a data retention period (in days) in the Checkout & Documents settings. After a rental ends and the retention period expires, documents, signatures, and uploaded files are automatically purged. The default is 90 days. Set to 0 to keep data indefinitely (not recommended for GDPR compliance).
Q: What is the maximum file upload size? A: The maximum upload size is 10MB per file. However, images are automatically compressed before upload to around 100-200KB, so in practice the limit is rarely reached. Only JPEG, PNG, WebP, and PDF files are accepted.
Q: Are uploaded files GDPR compliant? A: RentBase implements several compliance measures: AES-256-GCM encryption at rest, automatic compression to minimize stored data, automatic deletion after the configurable retention period, and storage in your private database (never on public CDNs). We recommend setting a retention period appropriate to your country's regulations.
| Term | Meaning |
|---|---|
| App Block | Visual app component positionable in the Shopify theme |
| App Embed | Global app component injected into the <body> of all pages |
| Buffer Hours | Preparation hours between the end of one rental and the start of the next |
| Draft Order | Shopify order draft generated by RentBase before payment |
| Floating Time | Date/time format without timezone indicator in the iCal feed |
| Inventory | Number of available units for a variant (1 = single, >1 = fleet) |
| Line Item Properties | Additional metadata attached to the final Shopify order lines |
| Metafield | Custom data field on a Shopify product/variant |
| Pending Duration | Maximum time a pending booking remains valid before checkout expiry |
| Rental Asset | Individual trackable physical item linked to a variant (stored as Shopify Metaobject) |
| Soft Delete | Logical deletion (the record stays in the DB with deletedAt set) |
| Theme App Extension | Shopify system for injecting app components into themes |
Documentation generated for RentBase v1.0 — March 2026