What Shopify Actually Does
Shopify is a platform that lets merchants create online stores without building them from scratch. It handles product management, inventory, shopping cart functionality, checkout and payments, order management, shipping calculations, and storefront design. The key insight is that Shopify is not a single store. It is a platform that powers hundreds of thousands of stores, each with their own products, branding, and customer base.
When you say "Shopify clone," you need to decide whether you are building a single e-commerce store (simpler) or a multi-tenant platform where multiple merchants can create their own stores (much harder). This guide covers both approaches, but your MVP should probably start as a single-store build and evolve into a platform if the concept proves out.
Core Features Worth Cloning
For a functional e-commerce platform, you need product catalogue management with variants (size, colour, etc.), a shopping cart that persists across sessions, a checkout flow with shipping address collection, payment processing via Stripe, order management and status tracking, basic inventory tracking, and a customer account system with order history. Skip the app store and plugin ecosystem, advanced analytics dashboards, multi-language and multi-currency support, abandoned cart email sequences, complex tax calculation engines, and the theme marketplace. Those are ecosystem features, not core commerce.
Data Architecture in Bubble
E-commerce data modelling has well-established patterns. Here is how they translate to Bubble.
The Store data type (needed only for multi-tenant) holds store_name (text), owner (User), subdomain (text), logo (image), description (text), stripe_connect_id (text), and is_active (yes/no). If you are building a single store, skip this type and hardcode store details.
The Product data type needs title (text), description (text), images (list of images), base_price (number), store (Store, if multi-tenant), category (option set or separate data type), is_published (yes/no), slug (text), and created_date (date). Keep the product record clean and push variant-specific data into a separate type.
The Product Variant data type links to Product and adds variant_name (text, like "Large / Blue"), sku (text), price (number, if different from base), inventory_count (number), weight (number), and is_available (yes/no). A t-shirt might have six variants: Small/Red, Small/Blue, Medium/Red, Medium/Blue, Large/Red, Large/Blue. Each is its own variant record. This is how Shopify handles it and it works well in Bubble too.
The Cart data type stores user (User, optional for guest checkout), session_id (text, for guest carts), created_date (date), and is_active (yes/no). Create one active cart per user or session.
The Cart Item data type links to Cart and adds product_variant (Product Variant), quantity (number), and line_total (number). Keep cart items as separate records rather than a list on the Cart. This makes quantity updates and removals much cleaner in Bubble workflows.
The Order data type records customer (User), order_number (text, auto-generated), status (option set: pending, paid, processing, shipped, delivered, cancelled), subtotal (number), shipping_cost (number), total (number), shipping_address (text or a separate Address type), stripe_payment_id (text), tracking_number (text), and ordered_at (date).
The Order Item data type mirrors Cart Item but is linked to Order instead of Cart. It stores the product name, variant, price, and quantity at the time of purchase. This is critical because product details can change after an order is placed but the order record should reflect what was actually purchased.
Workflows for E-Commerce
The add to cart workflow triggers when a user clicks "Add to Cart." First, check if the user has an active cart. If not, create one. Then check if a Cart Item already exists for that variant in this cart. If yes, increment the quantity. If no, create a new Cart Item. Update the line_total (quantity times price). This conditional logic is important to prevent duplicate cart items.
The checkout workflow is multi-step. Collect or confirm the shipping address. Display the order summary with all cart items and totals. Process payment via Stripe. On successful payment, create an Order record, create Order Items from the Cart Items, decrement inventory on each Product Variant, deactivate the cart, and send an order confirmation email. Use Bubble's Stripe plugin for payment. Create a PaymentIntent, confirm it, and check for success before creating the order.
The inventory management workflow runs on order creation. For each Order Item, reduce the Product Variant's inventory_count by the ordered quantity. If inventory_count reaches zero, set is_available to no. Run this as a backend workflow to ensure it completes even if the user navigates away. Add a check during the add-to-cart and checkout steps that verifies inventory is still available to prevent overselling.
The order status workflow lets store owners update order status from their dashboard. When status changes to "shipped," prompt for a tracking number and send the customer a shipping notification email with tracking details. Schedule a backend workflow to auto-update status to "delivered" 7 days after shipping if no manual update occurs.
For product management workflows, the store owner dashboard needs forms to create and edit products, add variants, upload images, set pricing, and manage inventory. Use a repeating group for variant management so the owner can add, edit, and remove variants inline. Include an image uploader that supports multiple files and drag-to-reorder for product photo galleries.
UI Patterns and Storefront Design
The storefront needs a product listing page with grid layout, filtering by category, and sorting by price or date. Use a repeating group with a fixed number of columns (3 or 4) for the product grid. Each cell shows the product image, title, price, and a quick-add button. The product detail page shows the full image gallery, description, variant selectors (dropdowns or button groups for size/colour), quantity input, and the add-to-cart button. Update the displayed price dynamically when the user selects a variant with a different price.
The cart page uses a repeating group of Cart Items with quantity adjustment controls and a remove button. Show line totals for each item and a cart summary with subtotal and estimated shipping. The checkout page should be a clean, distraction-free layout focused on converting the sale. Minimise navigation options and keep the form fields focused.
The admin dashboard for store owners needs product management (CRUD operations on products and variants), order management (list of orders with status filters, detail view with status update controls), and basic analytics (total orders, revenue, top products calculated using Bubble's aggregation functions on the Order data type).
Privacy Rules for E-Commerce
Products marked as published should be visible to everyone. Unpublished products should only be visible to the store owner. Cart data should only be accessible to the cart's user or matching session ID. Orders should only be visible to the customer who placed them and the store owner. Payment and Stripe data should never be exposed to the frontend. Customer personal data (addresses, phone numbers) should be restricted to the customer and the store owner processing their order. In a multi-tenant setup, store owners should only see their own store's data, never another merchant's products, orders, or customers.
Guest Checkout and Session Management
Not every buyer wants to create an account. Implement guest checkout by generating a unique session_id stored in a cookie or Bubble's built-in session tracking. Attach the cart to this session_id instead of a User. During checkout, collect their email for order confirmation. If they later create an account, merge their guest orders by searching for Orders with their email and linking them to the new User record.
Cost and Timeline
A single-store e-commerce app on Bubble takes 4 to 8 weeks for an experienced developer. A multi-tenant platform where merchants can create their own stores takes 10 to 16 weeks. Bubble's Growth plan at $119 per month handles most store volumes. Stripe fees are 2.9% plus 30 cents per transaction. If you are building multi-tenant, add Stripe Connect for merchant payouts. Total annual platform cost runs $1,500 to $3,000 for a single store and $3,000 to $6,000 for a multi-tenant platform.
Build or Hire
A single-store e-commerce build is a great intermediate Bubble project. The data modelling is clear, the workflows are logical, and there are plenty of tutorials covering the basics. A multi-tenant platform is significantly more complex due to data isolation, Stripe Connect integration, and the admin tooling each merchant needs.
Related guides:
Bubble paypal integration guide
If you are building a niche e-commerce platform or marketplace, talk to the Goodspeed Studio team about building it on Bubble the right way from day one.
Launch a Store, Not a Platform
Start with a single store that sells real products to real customers. Validate your niche, your product catalogue, and your customer acquisition strategy. If the model works, then invest in building the multi-tenant platform features. Bubble's flexibility means you can evolve a single store into a platform incrementally without starting over. Talk to our Bubble developers.

Harish Malhi
Founder of Goodspeed
Harish Malhi is the founder of Goodspeed, one of the top-rated Bubble agencies globally and winner of Bubble’s Agency of the Year award in 2024. He left Google to launch his first app, Diaspo, built entirely on Bubble, which gained press coverage from the BBC, ITV and more. Since then, he has helped ship over 200 products using Bubble, Framer, n8n and more - from internal tools to full-scale SaaS platforms. Harish now leads a team that helps founders and operators replace clunky workflows with fast, flexible software without writing a line of code.
Frequently Asked Questions (FAQs)
Can Bubble handle product variants like sizes and colours?
Yes. Use a separate Product Variant data type linked to the parent Product. Each combination of size and colour is its own variant record with independent pricing, inventory, and SKU. This mirrors how Shopify handles variants.
How does guest checkout work on Bubble?
Generate a unique session ID for unregistered users and attach their cart to that session. Collect their email during checkout for order confirmation. If they later create an account, merge their guest orders by matching the email address.
Can I build a multi-vendor marketplace like Shopify on Bubble?
Yes, but it is significantly more complex than a single store. You need multi-tenant data isolation, Stripe Connect for vendor payouts, and separate dashboards for each merchant. Budget 10 to 16 weeks with an experienced developer.
How do I prevent overselling products on Bubble?
Check inventory at two points: when adding to cart and during checkout before processing payment. Use backend workflows to decrement inventory immediately on successful payment. Set products to unavailable when inventory reaches zero.
What payment options can I integrate with a Bubble store?
Stripe is the primary payment plugin for Bubble and handles credit cards, Apple Pay, and Google Pay. You can also integrate PayPal via the API Connector. For multi-vendor setups, Stripe Connect handles automatic payout splitting.
How much does it cost to run an e-commerce app on Bubble?
A single store costs $1,500 to $3,000 annually for Bubble hosting and Stripe fees. A multi-vendor platform runs $3,000 to $6,000 annually. These costs are a fraction of custom development but scale with transaction volume.
