Building a high-converting landing page in Bubble involves structuring a hero section with a clear CTA, a features grid using Repeating Groups, social proof elements, a pricing table, and an email capture form. This tutorial walks through each section using Bubble's visual editor with responsive design best practices.
Overview: Designing a Landing Page in Bubble
This tutorial guides you through building a professional, high-converting landing page entirely in Bubble's visual editor. You will create a hero section, features grid, social proof area, pricing table, and email capture form. Every step uses Bubble's drag-and-drop design tools with responsive layout techniques so your page looks great on desktop, tablet, and mobile. Perfect for non-technical founders launching a product or service.
Prerequisites
- A Bubble account with a new or existing app
- Your product copy and value proposition ready
- Images or logos for your hero section and social proof
- Basic familiarity with Bubble's Design tab
Step-by-step guide
Set up the page structure with a Column layout
Set up the page structure with a Column layout
Open your Bubble editor and go to the Design tab. Click on the index page (or create a new page called 'landing'). Select the page itself and in the Layout section of the Property Editor, set the container layout to Column. Set the page width to Max width 1200px with center alignment. This creates a vertically stacked layout where each section sits below the previous one. Remove any default elements on the page.
Pro tip: Set the page background to a light color like #FAFAFA to give a clean, modern look without being pure white.
Expected result: A blank page with Column layout and 1200px max width, centered on screen.
Build the hero section with a CTA button
Build the hero section with a CTA button
Click the + icon in the Element Palette and drag a Group element onto the page. Set its layout to Column, width to 100%, and add 80px top and bottom padding. Inside the group, add a Text element for your headline (set font size to 48px, bold, centered). Below that add another Text for your subheadline (20px, regular weight, centered, max width 600px). Add a Button element below with your CTA text like 'Get Started Free'. Style the button with a bold background color, 16px font, 16px vertical padding, and rounded corners (border radius 8px).
Expected result: A hero section with large headline, subheadline, and a prominent CTA button, all centered on the page.
Create a features grid using a Repeating Group
Create a features grid using a Repeating Group
Below the hero group, add a new Group with Column layout and 60px vertical padding. Add a Text heading like 'Features' (32px, bold, centered). Below the heading, add a Repeating Group. Set its type of content to empty (we will use static content). Set layout to Row with 3 columns (fixed number of columns: 3), min height of 200px. In each cell, add an Icon element, a bold Text for the feature title, and a regular Text for the description. Use the Repeating Group's data source as a static list or create a Feature Data Type with title, description, and icon fields.
Pro tip: Use an Option Set called Features instead of a Data Type — it loads instantly with zero workload units since it is cached client-side.
Expected result: A 3-column features grid displaying your product's key features with icons, titles, and descriptions.
Add a social proof section with testimonials
Add a social proof section with testimonials
Add another Group below the features section with a subtle background color (like #F3F4F6) and 60px vertical padding. Add a centered heading 'What Our Customers Say'. Below it, add a Repeating Group set to Row layout with 3 columns. Create a Testimonial Data Type with fields: quote (text), author_name (text), author_title (text), and avatar (image). Populate sample data in the Data tab under App data. In each Repeating Group cell, add an Image element for the avatar (64x64px, rounded to a circle), a Text for the quote in italics, and Text elements for name and title.
Expected result: A testimonials section with 3 customer quotes displayed in a clean card layout with avatars.
Design a pricing table with monthly and annual toggle
Design a pricing table with monthly and annual toggle
Add a new Group with Column layout and 60px padding. Add a heading 'Pricing'. Below the heading, add a Group with Row layout containing two Text elements styled as toggle tabs: 'Monthly' and 'Annual'. Create a custom state on the pricing group called billing_period (type text, default 'monthly'). Add workflows to each tab text: when clicked, set the custom state to the appropriate value, and use conditional formatting to highlight the active tab. Below the toggle, add a Repeating Group in Row layout with your pricing tiers, showing the plan name, price (conditional on billing_period state), feature list, and a CTA button.
Expected result: A pricing table with a working monthly/annual toggle that updates displayed prices without a page reload.
Build an email capture form for lead generation
Build an email capture form for lead generation
Add a final Group with a contrasting background color and 60px vertical padding. Add a centered headline like 'Stay in the Loop'. Add a Group with Row layout containing an Input element (placeholder: 'Enter your email') and a Button element ('Subscribe'). Create a Data Type called Lead with an email field. Add a workflow: when the Subscribe button is clicked, create a new Lead with email set to the Input's value. Add an Only when condition to check that the Input is not empty and contains '@'. After creating the lead, reset the input and show a success message using an Alert element or a hidden Text element that becomes visible.
Pro tip: Add a Privacy Rule to the Lead Data Type so that only admin users can view all leads — this protects your subscriber list.
Expected result: A working email capture form that saves subscriber emails to your database and shows a confirmation message.
Make the page responsive for mobile devices
Make the page responsive for mobile devices
Click the Responsive tab in the top toolbar to enter responsive preview mode. Test your page at mobile (320px), tablet (768px), and laptop (1024px) widths. For the features and pricing Repeating Groups, set them to wrap rows so that 3-column layouts collapse to 1 column on mobile. Reduce hero headline font size on mobile using conditional formatting: when Current Page Width is less than 768, set font size to 32px. Check that all Groups have Min width set to 0 and Max width set to 100% so they scale properly. Adjust padding values at smaller breakpoints.
Expected result: Your landing page renders cleanly on all screen sizes with appropriately scaled text, single-column layouts on mobile, and no horizontal scrolling.
Complete working example
1LANDING PAGE WORKFLOW SUMMARY2=============================34PAGE STRUCTURE (Column layout, 1200px max width):5 Section 1: Hero6 - Group (Column, 80px padding)7 - Headline Text (48px bold)8 - Subheadline Text (20px, 600px max width)9 - CTA Button (bold color, 8px border radius)1011 Section 2: Features12 - Group (Column, 60px padding)13 - Heading Text (32px bold)14 - Repeating Group (Row, 3 columns)15 → Data source: Option Set 'Features'16 → Cell: Icon + Title Text + Description Text1718 Section 3: Social Proof19 - Group (Column, 60px padding, #F3F4F6 bg)20 - Heading Text (32px bold)21 - Repeating Group (Row, 3 columns)22 → Type: Testimonial23 → Cell: Avatar Image (64x64 circle) + Quote + Name + Title2425 Section 4: Pricing26 - Group (Column, 60px padding)27 - Heading Text (32px bold)28 - Toggle Group (Row): Monthly tab | Annual tab29 → Custom state: billing_period (text, default 'monthly')30 - Repeating Group (Row, 3 columns)31 → Cell: Plan name + Price (conditional on state) + Features list + CTA3233 Section 5: Email Capture34 - Group (Column, 60px padding, contrasting bg)35 - Heading Text36 - Form Group (Row): Email Input + Subscribe Button3738DATA TYPES:39 Testimonial: quote, author_name, author_title, avatar40 Lead: email4142OPTION SETS:43 Features: title, description, icon_name44 Pricing Plans: name, monthly_price, annual_price, features_list4546WORKFLOWS:47 Monthly tab clicked → Set state billing_period = 'monthly'48 Annual tab clicked → Set state billing_period = 'annual'49 Subscribe clicked → Create new Lead (email = Input's value)50 Only when: Input's value is not empty AND contains '@'51 Then: Reset Input, Show success alert5253RESPONSIVE RULES:54 < 768px: Headline 32px, RGs wrap to 1 column55 < 1024px: RGs wrap to 2 columns56 All groups: Min width 0, Max width 100%Common mistakes when designing a landing page in Bubble.io: Step-by-Step Guide
Why it's a problem: Using Fixed layout instead of Column for page sections
How to avoid: Always use Column layout for the page and each major section so elements stack properly at all screen sizes
Why it's a problem: Creating a Data Type for static features instead of an Option Set
How to avoid: Use Option Sets for any content that does not change per user, like feature lists and pricing tiers
Why it's a problem: Not testing responsive layouts before publishing
How to avoid: Always test at 320px, 768px, and 1024px widths in the Responsive tab before deploying to live
Why it's a problem: Making the email input accept any text without validation
How to avoid: Add an Only when condition to the subscribe workflow checking that the input is not empty and contains the '@' character
Best practices
- Use Column layout for all major sections to ensure clean vertical stacking and responsiveness
- Keep the hero section headline under 10 words for maximum impact
- Use Option Sets instead of Data Types for static content like features and pricing tiers
- Add Privacy Rules to the Lead Data Type to restrict access to admin users only
- Test at three breakpoints minimum: 320px mobile, 768px tablet, and 1024px laptop
- Use consistent spacing — pick one padding value (like 60px) and apply it to all major sections
- Place the primary CTA above the fold so users see it without scrolling
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I am building a landing page in Bubble for my SaaS product. I need a hero section, features grid, testimonials, pricing table with monthly/annual toggle, and an email capture form. Can you help me plan the data structure and layout?
Help me design a landing page with a hero section, 3-column features grid using an Option Set, testimonials from a Testimonial Data Type, a pricing table with monthly/annual toggle using custom states, and an email capture form that saves to a Lead Data Type.
Frequently asked questions
Can I build a landing page on Bubble's free plan?
Yes. You can build and preview a landing page on the free plan. However, to use a custom domain and remove Bubble branding, you need a paid plan (Starter or higher).
How do I add animations to my landing page in Bubble?
Use Bubble's built-in transition animations on elements (found in the Appearance tab under Transitions). For more advanced animations, install a plugin like Animate.css or use the HTML element to add custom CSS animations.
Will my Bubble landing page load fast enough for good SEO?
Bubble apps generally score lower on PageSpeed Insights than custom-coded pages. Optimize by minimizing the number of dynamic elements, using compressed images, and keeping the page simple. For critical landing pages, consider using a dedicated static page builder and linking to your Bubble app.
How do I connect my CTA button to Stripe for payments?
Install the Stripe plugin, configure your API keys, and add a workflow to the CTA button that creates a Stripe Checkout session. The user is redirected to Stripe's hosted payment page and returned to a success page afterward.
Can I A/B test different landing page versions in Bubble?
Yes. Create two versions of your page content using conditional formatting based on a random number or URL parameter. Track which version converts better by logging events to your database or Google Analytics.
How do I add a navigation bar to my landing page?
Create a Floating Group pinned to the top of the page with Row layout. Add your logo, navigation links (using Link elements or Text elements with scroll-to-element workflows), and a CTA button. Make it a reusable element for use across multiple pages.
Can RapidDev help build a custom landing page in Bubble?
Yes. RapidDev specializes in building high-converting landing pages and full applications in Bubble, including custom design implementation, performance optimization, and integration with payment and marketing tools.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation