How to Create a High-Converting Pricing Table in Shopify (2025 Guide)

A well-designed pricing table can significantly boost conversions for your Shopify store, whether you’re selling subscriptions, digital products, or tiered services. In this guide, you’ll learn how to create a professional pricing table with a monthly/yearly toggle, product links, and mobile-friendly styling—without needing expensive apps.

Why You Need a Pricing Table in Shopify

✅ Improves decision-making – Customers compare plans easily
✅ Boosts conversions – Clear pricing = fewer abandoned carts
✅ Enhances UX – Professional look builds trust
✅ Flexible for subscriptions/services – Supports monthly & yearly billing

Custom Liquid Section (No App Needed)

Step 1: Add a New Custom Liquid Section

Paste this SEO-optimized code:

Go to Online Store > Themes > Edit Code

Under Sections, create a new file: pricing-table.liquid

{%- style -%}
  #shopify-section-{{ section.id }} {
    padding-top: {{ section.settings.padding_top }}px;
    padding-bottom: {{ section.settings.padding_bottom }}px;
    background-color: {{ section.settings.background_color }};
  }

  .pricing-table-{{ section.id }} {
    max-width: {% if section.settings.full_width %}100%{% else %}1200px{% endif %};
    margin: 0 auto;
  }

  .section-logo-{{ section.id }} {
    text-align: {{ section.settings.heading_alignment }};
    display: flex;
    justify-content: center;
    margin-bottom: 20px;
  }

  .section-logo-{{ section.id }} img {
    max-width: {{ section.settings.logo_width }}px;
    height: auto;
  }

  .pricing-table-header-{{ section.id }} {
    text-align: {{ section.settings.heading_alignment }};
    margin-bottom: 15px;
  }

  .pricing-table-header-{{ section.id }} .section-heading {
    font-size: {% case section.settings.heading_size %}
      {% when 'small' %}20px
      {% when 'medium' %}28px
      {% when 'large' %}36px
    {% endcase %};
    margin-bottom: 10px;
  }

  .section-subtitle-{{ section.id }} {
    text-align: {{ section.settings.heading_alignment }};
    font-size: {% case section.settings.subtitle_size %}
      {% when 'small' %}14px
      {% when 'medium' %}18px
      {% when 'large' %}22px
    {% endcase %};
    color: {{ section.settings.subtitle_color }};
    margin-bottom: 30px;
  }

  .pricing-plans-{{ section.id }} {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    justify-content: center;
  }
  .monthly-plans,
  .yearly-plans {
    display: flex;
    gap: 15px;
    overflow: auto;
  }

  .pricing-plan-{{ section.id }} {
    flex: 1;
    min-width: 280px;
    padding: 30px;
    border-radius: 8px;
    background: #fff;
    {% if section.settings.enable_shadow %}
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
    {% endif %}
    transition: transform 0.3s ease;
  }

  .pricing-plan-{{ section.id }}:hover {
    transform: translateY(-5px);
  }

  .plan-price-{{ section.id }} {
    font-size: 36px;
    font-weight: 700;
    margin-bottom: 10px;
    color: {{ section.settings.price_color }};
  }

  .plan-subheading-{{ section.id }} {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 15px;
    color: {{ section.settings.subheading_color }};
  }

  .plan-description-{{ section.id }} {
    margin-bottom: 20px;
    color: {{ section.settings.description_color }};
  }

  .plan-button-{{ section.id }} {
    display: inline-block;
    padding: 12px 24px;
    background: {{ section.settings.button_color }};
    color: {{ section.settings.button_text_color }};
    border-radius: 4px;
    text-decoration: none;
    font-weight: 600;
    transition: background 0.3s ease;
  }

  .plan-button-{{ section.id }}:hover {
    background: {{ section.settings.button_hover_color }};
  }

  .plan-toggle-{{ section.id }} {
    display: flex;
    justify-content: center;
    margin-bottom: 30px;
  }

  .toggle-switch-{{ section.id }} {
    position: relative;
    display: inline-block;
    width: 200px;
    height: 44px;
  }

  .toggle-switch-{{ section.id }} input {
    opacity: 0;
    width: 0;
    height: 0;
  }

  .toggle-slider-{{ section.id }} {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #f5f5f5;
    transition: .4s;
    border-radius: 34px;
  }

  .toggle-slider-{{ section.id }}:before {
    position: absolute;
    content: "";
    height: 36px;
    width: 96px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 34px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
  }

  .toggle-switch-{{ section.id }} input:checked + .toggle-slider-{{ section.id }}:before {
    transform: translateX(96px);
  }

  .toggle-labels-{{ section.id }} {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: space-around;
    font-weight: 600;
    pointer-events: none;
  }

  @media (max-width: 767px) {
    .pricing-plan-{{ section.id }} {
      flex: 100%;
    }
    
    #shopify-section-{{ section.id }} {
      padding-top: {{ section.settings.padding_top_mobile }}px;
      padding-bottom: {{ section.settings.padding_bottom_mobile }}px;
    }
    
    .section-logo-{{ section.id }} img {
      max-width: {{ section.settings.logo_width_mobile }}px;
    }
  }
{%- endstyle -%}

<div class="pricing-table-{{ section.id }}">
  {%- if section.settings.logo != blank -%}
    <div class="section-logo-{{ section.id }}">
      <img src="{{ section.settings.logo | img_url: '800x' }}" 
           alt="{{ section.settings.logo.alt | escape }}" 
           loading="lazy">
    </div>
  {%- endif -%}

  {%- if section.settings.heading != blank -%}
    <div class="pricing-table-header-{{ section.id }}">
      <h2 class="section-heading">{{ section.settings.heading }}</h2>
    </div>
  {%- endif -%}

  {%- if section.settings.subtitle != blank -%}
    <div class="section-subtitle-{{ section.id }}">
      {{ section.settings.subtitle }}
    </div>
  {%- endif -%}

  <div class="plan-toggle-{{ section.id }}">
    <label class="toggle-switch-{{ section.id }}">
      <input type="checkbox" id="plan-toggle-{{ section.id }}">
      <span class="toggle-slider-{{ section.id }}"></span>
      <div class="toggle-labels-{{ section.id }}">
        <span>Monthly</span>
        <span>Yearly</span>
      </div>
    </label>
  </div>

  <div class="pricing-plans-{{ section.id }}">
    <!-- Monthly Plans -->
    <div class="monthly-plans">
      {%- for block in section.blocks -%}
        {%- if block.type == 'monthly_plan' -%}
          <div class="pricing-plan-{{ section.id }}" data-plan-type="monthly">
            <h3 class="plan-price-{{ section.id }}">{{ block.settings.price }}</h3>
            <h4 class="plan-subheading-{{ section.id }}">{{ block.settings.subheading }}</h4>
            <div class="plan-description-{{ section.id }}">{{ block.settings.description }}</div>
            <a href="{{ block.settings.product.url }}" class="plan-button-{{ section.id }}">{{ block.settings.button_text }}</a>
          </div>
        {%- endif -%}
      {%- endfor -%}
    </div>

    <!-- Yearly Plans -->
    <div class="yearly-plans" style="display: none;">
      {%- for block in section.blocks -%}
        {%- if block.type == 'yearly_plan' -%}
          <div class="pricing-plan-{{ section.id }}" data-plan-type="yearly">
            <h3 class="plan-price-{{ section.id }}">{{ block.settings.price }}</h3>
            <h4 class="plan-subheading-{{ section.id }}">{{ block.settings.subheading }}</h4>
            <div class="plan-description-{{ section.id }}">{{ block.settings.description }}</div>
            <a href="{{ block.settings.product.url }}" class="plan-button-{{ section.id }}">{{ block.settings.button_text }}</a>
          </div>
        {%- endif -%}
      {%- endfor -%}
    </div>
  </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
  const toggle = document.getElementById('plan-toggle-{{ section.id }}');
  const monthlyPlans = document.querySelector('#shopify-section-{{ section.id }} .monthly-plans');
  const yearlyPlans = document.querySelector('#shopify-section-{{ section.id }} .yearly-plans');
  
  toggle.addEventListener('change', function() {
    if (this.checked) {
      monthlyPlans.style.display = 'none';
      yearlyPlans.style.display = 'flex';
    } else {
      monthlyPlans.style.display = 'flex';
      yearlyPlans.style.display = 'none';
    }
  });
});
</script>

{% schema %}
{
  "name": "Pricing Table",
  "tag": "section",
  "class": "section",
  "settings": [
    {
      "type": "image_picker",
      "id": "logo",
      "label": "Section logo",
      "info": "Recommended size: 200x100px"
    },
    {
      "type": "range",
      "id": "logo_width",
      "min": 50,
      "max": 300,
      "step": 10,
      "unit": "px",
      "label": "Logo width (desktop)",
      "default": 200
    },
    {
      "type": "range",
      "id": "logo_width_mobile",
      "min": 50,
      "max": 200,
      "step": 10,
      "unit": "px",
      "label": "Logo width (mobile)",
      "default": 150
    },
    {
      "type": "richtext",
      "id": "heading",
      "label": "Section heading",
      "default": "<p>Choose Your Plan</p>"
    },
    {
      "type": "select",
      "id": "heading_size",
      "label": "Heading size",
      "options": [
        {
          "value": "small",
          "label": "Small"
        },
        {
          "value": "medium",
          "label": "Medium"
        },
        {
          "value": "large",
          "label": "Large"
        }
      ],
      "default": "medium"
    },
    {
      "type": "richtext",
      "id": "subtitle",
      "label": "Subtitle",
      "default": "<p>Select the plan that works best for you</p>"
    },
    {
      "type": "select",
      "id": "subtitle_size",
      "label": "Subtitle size",
      "options": [
        {
          "value": "small",
          "label": "Small"
        },
        {
          "value": "medium",
          "label": "Medium"
        },
        {
          "value": "large",
          "label": "Large"
        }
      ],
      "default": "medium"
    },
    {
      "type": "color",
      "id": "subtitle_color",
      "label": "Subtitle color",
      "default": "#666666"
    },
    {
      "type": "select",
      "id": "heading_alignment",
      "label": "Heading alignment",
      "options": [
        {
          "value": "left",
          "label": "Left"
        },
        {
          "value": "center",
          "label": "Center"
        },
        {
          "value": "right",
          "label": "Right"
        }
      ],
      "default": "center"
    },
    {
      "type": "checkbox",
      "id": "full_width",
      "label": "Full width",
      "default": false
    },
    {
      "type": "checkbox",
      "id": "enable_shadow",
      "label": "Enable card shadow",
      "default": true
    },
    {
      "type": "color",
      "id": "background_color",
      "label": "Background color",
      "default": "#f9f9f9"
    },
    {
      "type": "color",
      "id": "price_color",
      "label": "Price color",
      "default": "#000000"
    },
    {
      "type": "color",
      "id": "subheading_color",
      "label": "Subheading color",
      "default": "#333333"
    },
    {
      "type": "color",
      "id": "description_color",
      "label": "Description color",
      "default": "#666666"
    },
    {
      "type": "color",
      "id": "button_color",
      "label": "Button color",
      "default": "#2563eb"
    },
    {
      "type": "color",
      "id": "button_text_color",
      "label": "Button text color",
      "default": "#ffffff"
    },
    {
      "type": "color",
      "id": "button_hover_color",
      "label": "Button hover color",
      "default": "#1d4ed8"
    },
    {
      "type": "range",
      "id": "padding_top",
      "min": 0,
      "max": 100,
      "step": 4,
      "unit": "px",
      "label": "Padding top",
      "default": 36
    },
    {
      "type": "range",
      "id": "padding_bottom",
      "min": 0,
      "max": 100,
      "step": 4,
      "unit": "px",
      "label": "Padding bottom",
      "default": 36
    },
    {
      "type": "range",
      "id": "padding_top_mobile",
      "min": 0,
      "max": 100,
      "step": 2,
      "unit": "px",
      "label": "Padding top (mobile)",
      "default": 24
    },
    {
      "type": "range",
      "id": "padding_bottom_mobile",
      "min": 0,
      "max": 100,
      "step": 2,
      "unit": "px",
      "label": "Padding bottom (mobile)",
      "default": 24
    }
  ],
  "blocks": [
    {
      "type": "monthly_plan",
      "name": "Monthly plan",
      "limit": 3,
      "settings": [
        {
          "type": "text",
          "id": "price",
          "label": "Price",
          "default": "$19/month"
        },
        {
          "type": "text",
          "id": "subheading",
          "label": "Subheading",
          "default": "Basic Plan"
        },
        {
          "type": "richtext",
          "id": "description",
          "label": "Description",
          "default": "<p>Perfect for individuals getting started</p><ul><li>Feature 1</li><li>Feature 2</li><li>Feature 3</li></ul>"
        },
        {
          "type": "text",
          "id": "button_text",
          "label": "Button text",
          "default": "Get Started"
        },
        {
          "type": "product",
          "id": "product",
          "label": "Linked product"
        }
      ]
    },
    {
      "type": "yearly_plan",
      "name": "Yearly plan",
      "limit": 3,
      "settings": [
        {
          "type": "text",
          "id": "price",
          "label": "Price",
          "default": "$179/year"
        },
        {
          "type": "text",
          "id": "subheading",
          "label": "Subheading",
          "default": "Pro Plan"
        },
        {
          "type": "richtext",
          "id": "description",
          "label": "Description",
          "default": "<p>Best value for long-term commitment</p><ul><li>All Basic features</li><li>Priority support</li><li>Exclusive content</li></ul>"
        },
        {
          "type": "text",
          "id": "button_text",
          "label": "Button text",
          "default": "Get Started"
        },
        {
          "type": "product",
          "id": "product",
          "label": "Linked product"
        }
      ]
    }
  ],
  "presets": [
    {
      "name": "Pricing Table",
      "blocks": [
        {
          "type": "monthly_plan"
        },
        {
          "type": "monthly_plan"
        },
        {
          "type": "monthly_plan"
        },
        {
          "type": "yearly_plan"
        },
        {
          "type": "yearly_plan"
        },
        {
          "type": "yearly_plan"
        }
      ]
    }
  ]
}
{% endschema %}