{"id":48395,"date":"2025-06-17T21:25:15","date_gmt":"2025-06-18T01:25:15","guid":{"rendered":"https:\/\/directiveconsulting.com\/uk\/?page_id=48395"},"modified":"2025-07-01T15:25:43","modified_gmt":"2025-07-01T19:25:43","slug":"ltvcac-ratio-calculator","status":"publish","type":"page","link":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/","title":{"rendered":"LTV:CAC Ratio Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"48395\" class=\"elementor elementor-48395\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-dce-background-color=\"#4F2A5D\" class=\"elementor-element elementor-element-956dc7a main-pad pad-120 e-flex e-con-boxed e-con e-parent\" data-id=\"956dc7a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eac1882 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"eac1882\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><span style=\"color:#FFD4FF\"><strong>LTV:CAC Ratio<\/strong><\/span> Calculator<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77389c1 body-large elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"77389c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tCalculate your Customer Lifetime Value to Customer Acquisition Cost ratio and get actionable insights.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0d6033a pad-120 e-flex e-con-boxed e-con e-parent\" data-id=\"0d6033a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1d49e8f elementor-widget elementor-widget-shortcode\" data-id=\"1d49e8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t<div data-elementor-type=\"container\" data-elementor-id=\"48301\" class=\"elementor elementor-48301\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ecab5c0 e-flex e-con-boxed e-con e-parent\" data-id=\"ecab5c0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fd44604 elementor-widget elementor-widget-html\" data-id=\"fd44604\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script src=\"https:\/\/unpkg.com\/react@18\/umd\/react.production.min.js\"><\/script>\n    <script src=\"https:\/\/unpkg.com\/react-dom@18\/umd\/react-dom.production.min.js\"><\/script>\n    <script src=\"https:\/\/unpkg.com\/@babel\/standalone\/babel.min.js\"><\/script>\n    \n    <style>\n        * {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            background-color: #f8f9fa;\n        }\n\n        .calculator-container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n\n        .header {\n            text-align: center;\n            margin-bottom: 30px;\n        }\n\n        .header h1 {\n            font-size: 2.5rem;\n            color: #2563eb;\n            margin-bottom: 10px;\n        }\n\n        .header p {\n            color: #6b7280;\n            font-size: 1.1rem;\n        }\n\n        .timeframe-toggle {\n            display: flex;\n            justify-content: center;\n            margin-bottom: 30px;\n        }\n\n        .toggle-container {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            background: white;\n            padding: 10px 20px;\n            border-radius: 8px;\n            border: 1px solid #e5e7eb;\n        }\n\n        .toggle-switch {\n            position: relative;\n            width: 50px;\n            height: 24px;\n            background: #d1d5db;\n            border-radius: 12px;\n            cursor: pointer;\n            transition: background 0.3s;\n        }\n\n        .toggle-switch.active {\n            background: #2563eb;\n        }\n\n        .toggle-slider {\n            position: absolute;\n            top: 2px;\n            left: 2px;\n            width: 20px;\n            height: 20px;\n            background: white;\n            border-radius: 50%;\n            transition: transform 0.3s;\n        }\n\n        .toggle-switch.active .toggle-slider {\n            transform: translateX(26px);\n        }\n\n        .main-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 30px;\n            margin-bottom: 30px;\n        }\n\n        @media (max-width: 768px) {\n            .main-grid {\n                grid-template-columns: 1fr;\n            }\n        }\n\n        .card {\n            background: white;\n            border-radius: 12px;\n            padding: 24px;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n            border: 1px solid #e5e7eb;\n        }\n\n        .card-header {\n            margin-bottom: 20px;\n        }\n\n        .card-title {\n            font-size: 1.25rem;\n            font-weight: 600;\n            margin-bottom: 8px;\n        }\n\n        .card-description {\n            color: #6b7280;\n            font-size: 0.9rem;\n        }\n\n        .form-group {\n            margin-bottom: 20px;\n        }\n\n        .form-label {\n            display: block;\n            font-weight: 500;\n            margin-bottom: 8px;\n            font-size: 0.9rem;\n        }\n\n        .form-input {\n            width: 100%;\n            padding: 8px 12px;\n            border: 1px solid #d1d5db;\n            border-radius: 6px;\n            font-size: 0.9rem;\n        }\n\n        .form-input:focus {\n            outline: none;\n            border-color: #2563eb;\n            box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n        }\n\n        .slider-container {\n            margin: 10px 0;\n        }\n\n        .slider {\n            width: 100%;\n            height: 6px;\n            border-radius: 3px;\n            background: #e5e7eb;\n            outline: none;\n            -webkit-appearance: none;\n        }\n\n        .slider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            appearance: none;\n            width: 20px;\n            height: 20px;\n            border-radius: 50%;\n            background: #2563eb;\n            cursor: pointer;\n        }\n\n        .slider::-moz-range-thumb {\n            width: 20px;\n            height: 20px;\n            border-radius: 50%;\n            background: #2563eb;\n            cursor: pointer;\n            border: none;\n        }\n\n        .slider-labels {\n            display: flex;\n            justify-content: space-between;\n            font-size: 0.75rem;\n            color: #6b7280;\n            margin-top: 5px;\n        }\n\n        .button {\n            background: #2563eb;\n            color: white;\n            border: none;\n            padding: 8px 16px;\n            border-radius: 6px;\n            cursor: pointer;\n            font-size: 0.9rem;\n            transition: background 0.2s;\n        }\n\n        .button:hover {\n            background: #1d4ed8;\n        }\n\n        .button-outline {\n            background: transparent;\n            color: #2563eb;\n            border: 1px solid #2563eb;\n        }\n\n        .button-outline:hover {\n            background: #2563eb;\n            color: white;\n        }\n\n        .channel-item {\n            border: 1px solid #e5e7eb;\n            border-radius: 8px;\n            padding: 16px;\n            margin-bottom: 16px;\n        }\n\n        .channel-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 12px;\n        }\n\n        .channel-inputs {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 12px;\n        }\n\n        .input-group {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 8px;\n        }\n\n        .small-input {\n            width: 80px;\n            padding: 4px 8px;\n            font-size: 0.8rem;\n        }\n\n        .results-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 16px;\n            margin-bottom: 20px;\n        }\n\n        .result-card {\n            text-align: center;\n            padding: 20px;\n            background: #f3f4f6;\n            border-radius: 8px;\n        }\n\n        .result-value {\n            font-size: 2rem;\n            font-weight: bold;\n            margin-bottom: 4px;\n        }\n\n        .result-label {\n            font-size: 0.9rem;\n            color: #6b7280;\n        }\n\n        .ratio-display {\n            text-align: center;\n            padding: 30px;\n            border: 2px dashed #d1d5db;\n            border-radius: 12px;\n            margin-bottom: 20px;\n        }\n\n        .ratio-value {\n            font-size: 3rem;\n            font-weight: bold;\n            margin-bottom: 8px;\n        }\n\n        .status-badge {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            padding: 4px 12px;\n            border-radius: 20px;\n            font-size: 0.8rem;\n            font-weight: 500;\n            margin-bottom: 8px;\n        }\n\n        .status-healthy { background: #10b981; color: white; }\n        .status-low { background: #ef4444; color: white; }\n        .status-high { background: #f59e0b; color: white; }\n\n        .performance-table {\n            width: 100%;\n            border-collapse: collapse;\n            font-size: 0.9rem;\n        }\n\n        .performance-table th,\n        .performance-table td {\n            padding: 8px;\n            text-align: left;\n            border-bottom: 1px solid #e5e7eb;\n        }\n\n        .performance-table th {\n            font-weight: 600;\n            background: #f9fafb;\n        }\n\n        .performance-table td:not(:first-child) {\n            text-align: right;\n        }\n\n        .text-red { color: #ef4444; }\n        .text-green { color: #10b981; }\n        .text-yellow { color: #f59e0b; }\n\n        .alert {\n            background: #fef3c7;\n            border: 1px solid #f59e0b;\n            border-radius: 8px;\n            padding: 16px;\n            margin-bottom: 20px;\n        }\n\n        .benchmark-item {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n            margin-bottom: 12px;\n        }\n\n        .benchmark-dot {\n            width: 12px;\n            height: 12px;\n            border-radius: 50%;\n        }\n\n        .dot-red { background: #ef4444; }\n        .dot-green { background: #10b981; }\n        .dot-yellow { background: #f59e0b; }\n\n        .hidden { display: none; }\n\n        .footer-summary {\n            background: #f9fafb;\n            border-top: 1px solid #e5e7eb;\n            padding: 16px;\n            margin-top: 20px;\n            border-radius: 0 0 12px 12px;\n            font-size: 0.9rem;\n            color: #6b7280;\n        }\n\n        .summary-row {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 4px;\n        }\n\n        .summary-total {\n            border-top: 1px solid #d1d5db;\n            padding-top: 8px;\n            margin-top: 8px;\n            font-weight: 600;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"calculator-container\">\n        <!-- Header -->\n        <div class=\"header\">\n            <p>Calculate your Customer Lifetime Value to Customer Acquisition Cost ratio and get actionable insights<\/p>\n        <\/div>\n\n        <!-- Timeframe Toggle -->\n        <div class=\"timeframe-toggle\">\n            <div class=\"toggle-container\">\n                <span>Quarterly<\/span>\n                <div class=\"toggle-switch active\" id=\"timeframeToggle\">\n                    <div class=\"toggle-slider\"><\/div>\n                <\/div>\n                <span>Annual<\/span>\n            <\/div>\n        <\/div>\n\n        <!-- Main Grid -->\n        <div class=\"main-grid\">\n            <!-- Input Section -->\n            <div>\n                <!-- CAC Card -->\n                <div class=\"card\">\n                    <div class=\"card-header\">\n                        <h2 class=\"card-title\">Customer Acquisition Cost (CAC) - <span id=\"timeframeLabel\">Annual<\/span> Spend<\/h2>\n                        <p class=\"card-description\">CAC = (Marketing Costs + Sales Costs) \u00f7 # of New Customers (<span id=\"timeframeLabel2\">Annual<\/span>)<\/p>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n                            <h3>Marketing Costs (<span id=\"timeframeLabel3\">Annual<\/span>)<\/h3>\n                            <button class=\"button button-outline\" id=\"channelToggle\">\ud83d\udcca Break Down by Channel<\/button>\n                        <\/div>\n\n                        <!-- Simple View -->\n                        <div id=\"simpleView\">\n                            <div class=\"input-group\">\n                                <label class=\"form-label\">Total Marketing Budget ($)<\/label>\n                                <input type=\"number\" class=\"form-input small-input\" id=\"totalMarketingBudget\" value=\"10000\" min=\"0\">\n                            <\/div>\n                            <div class=\"slider-container\">\n                                <input type=\"range\" class=\"slider\" id=\"totalMarketingSlider\" min=\"0\" max=\"50000\" step=\"1000\" value=\"10000\">\n                                <div class=\"slider-labels\">\n                                    <span>$0<\/span>\n                                    <span>$10K<\/span>\n                                    <span>$20K<\/span>\n                                    <span>$30K<\/span>\n                                    <span>$40K<\/span>\n                                    <span>$50K+<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n\n                        <!-- Channel Breakdown View -->\n                        <div id=\"channelView\" class=\"hidden\">\n                            <div style=\"font-size: 0.9rem; color: #6b7280; margin-bottom: 16px;\">\n                                Total: $<span id=\"channelTotal\">10000<\/span> | Customers: <span id=\"customerTotal\">100<\/span>\n                            <\/div>\n                            <div id=\"channelList\">\n                                <!-- Channels will be populated by JavaScript -->\n                            <\/div>\n                            <div style=\"display: flex; gap: 8px; margin-top: 16px;\">\n                                <input type=\"text\" class=\"form-input\" id=\"newChannelName\" placeholder=\"New channel name\" style=\"flex: 1;\">\n                                <button class=\"button button-outline\" id=\"addChannelBtn\">\u2795 Add<\/button>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"form-group\" style=\"border-top: 1px solid #e5e7eb; padding-top: 20px;\">\n                        <div class=\"input-group\">\n                            <label class=\"form-label\">Sales Costs (<span id=\"timeframeLabel4\">Annual<\/span>) ($)<\/label>\n                            <input type=\"number\" class=\"form-input small-input\" id=\"salesCosts\" value=\"10000\" min=\"0\">\n                        <\/div>\n                        <div class=\"slider-container\">\n                            <input type=\"range\" class=\"slider\" id=\"salesCostsSlider\" min=\"0\" max=\"50000\" step=\"1000\" value=\"10000\">\n                            <div class=\"slider-labels\">\n                                <span>$0<\/span>\n                                <span>$10K<\/span>\n                                <span>$20K<\/span>\n                                <span>$30K<\/span>\n                                <span>$40K<\/span>\n                                <span>$50K+<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"form-group\" id=\"totalCustomersGroup\">\n                        <div class=\"input-group\">\n                            <label class=\"form-label\">Number of New Customers (<span id=\"timeframeLabel5\">Annual<\/span>)<\/label>\n                            <span id=\"newCustomersDisplay\">100<\/span>\n                        <\/div>\n                        <div class=\"slider-container\">\n                            <input type=\"range\" class=\"slider\" id=\"newCustomersSlider\" min=\"1\" max=\"500\" step=\"5\" value=\"100\">\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"footer-summary\">\n                        <div class=\"summary-row\">\n                            <span>Total Marketing Costs:<\/span>\n                            <span id=\"totalMarketingDisplay\">$40,000<\/span>\n                        <\/div>\n                        <div class=\"summary-row\">\n                            <span>Total Sales Costs:<\/span>\n                            <span id=\"totalSalesDisplay\">$40,000<\/span>\n                        <\/div>\n                        <div class=\"summary-row\">\n                            <span>Total New Customers:<\/span>\n                            <span id=\"totalCustomersDisplay\">400<\/span>\n                        <\/div>\n                        <div class=\"summary-row summary-total\">\n                            <span>Total CAC:<\/span>\n                            <span id=\"totalCACDisplay\">$200.00<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- LTV Card -->\n                <div class=\"card\" style=\"margin-top: 24px;\">\n                    <div class=\"card-header\">\n                        <h2 class=\"card-title\">Customer Lifetime Value (LTV)<\/h2>\n                        <p class=\"card-description\">LTV = Monthly Avg. Order Value \u00d7 Customer Lifespan (Months)<\/p>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <div class=\"input-group\">\n                            <label class=\"form-label\">Monthly Average Order Value ($)<\/label>\n                            <input type=\"number\" class=\"form-input small-input\" id=\"monthlyOrderValue\" value=\"500\" min=\"0\">\n                        <\/div>\n                        <div class=\"slider-container\">\n                            <input type=\"range\" class=\"slider\" id=\"monthlyOrderSlider\" min=\"100\" max=\"5000\" step=\"500\" value=\"500\">\n                            <div class=\"slider-labels\">\n                                <span>$100<\/span>\n                                <span>$1K<\/span>\n                                <span>$2K<\/span>\n                                <span>$3K<\/span>\n                                <span>$4K<\/span>\n                                <span>$5K+<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <div class=\"input-group\">\n                            <label class=\"form-label\">Customer Lifespan (Months)<\/label>\n                            <span id=\"customerLifespanDisplay\">12<\/span>\n                        <\/div>\n                        <div class=\"slider-container\">\n                            <input type=\"range\" class=\"slider\" id=\"customerLifespanSlider\" min=\"1\" max=\"60\" step=\"1\" value=\"12\">\n                        <\/div>\n                    <\/div>\n\n                    <div style=\"border-top: 1px solid #e5e7eb; padding-top: 20px;\">\n                        <div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 16px;\">\n                            <input type=\"checkbox\" id=\"useGrossMargin\" checked>\n                            <label for=\"useGrossMargin\" class=\"form-label\" style=\"margin: 0;\">Include Gross Margin (Recommended)<\/label>\n                        <\/div>\n\n                        <div id=\"grossMarginInputs\">\n                            <div class=\"form-group\">\n                                <div class=\"input-group\">\n                                    <label class=\"form-label\">Total Revenue ($)<\/label>\n                                    <input type=\"number\" class=\"form-input small-input\" id=\"revenue\" value=\"100000\" min=\"0\">\n                                <\/div>\n                                <div class=\"slider-container\">\n                                    <input type=\"range\" class=\"slider\" id=\"revenueSlider\" min=\"1000\" max=\"500000\" step=\"1000\" value=\"100000\">\n                                    <div class=\"slider-labels\">\n                                        <span>$1K<\/span>\n                                        <span>$100K<\/span>\n                                        <span>$200K<\/span>\n                                        <span>$300K<\/span>\n                                        <span>$400K<\/span>\n                                        <span>$500K+<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"form-group\">\n                                <div class=\"input-group\">\n                                    <label class=\"form-label\">Cost of Goods Sold ($)<\/label>\n                                    <input type=\"number\" class=\"form-input small-input\" id=\"costOfGoodsSold\" value=\"40000\" min=\"0\">\n                                <\/div>\n                                <div class=\"slider-container\">\n                                    <input type=\"range\" class=\"slider\" id=\"cogsSlider\" min=\"0\" max=\"100000\" step=\"1000\" value=\"40000\">\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Results Section -->\n            <div>\n                <!-- Results Card -->\n                <div class=\"card\">\n                    <div class=\"card-header\">\n                        <h2 class=\"card-title\">Results (<span id=\"timeframeLabel6\">Annual<\/span>)<\/h2>\n                    <\/div>\n\n                    <div class=\"results-grid\">\n                        <div class=\"result-card\">\n                            <div class=\"result-value\" style=\"color: #2563eb;\" id=\"cacResult\">$200.00<\/div>\n                            <div class=\"result-label\">CAC<\/div>\n                        <\/div>\n                        <div class=\"result-card\">\n                            <div class=\"result-value\" style=\"color: #10b981;\" id=\"ltvResult\">$6000.00<\/div>\n                            <div class=\"result-label\">LTV<\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"result-card\" id=\"grossMarginResult\">\n                        <div class=\"result-value\" style=\"color: #7c3aed;\" id=\"grossMarginDisplay\">60.0%<\/div>\n                        <div class=\"result-label\">Gross Margin<\/div>\n                    <\/div>\n\n                    <div class=\"ratio-display\">\n                        <div class=\"ratio-value\" id=\"ratioValue\">30:1<\/div>\n                        <div class=\"status-badge\" id=\"statusBadge\">\n                            <span>\u2705<\/span>\n                            <span id=\"statusText\">Sustainable & Scalable<\/span>\n                        <\/div>\n                        <div style=\"font-size: 0.9rem; color: #6b7280;\">LTV:CAC Ratio<\/div>\n                    <\/div>\n\n                    <!-- Channel Performance Table -->\n                    <div id=\"channelPerformance\" class=\"hidden\">\n                        <div class=\"card\" style=\"background: rgba(243, 244, 246, 0.5); margin-bottom: 20px;\">\n                            <div class=\"card-header\" style=\"padding-bottom: 12px;\">\n                                <h3 style=\"font-size: 0.9rem;\">Marketing Channel Performance<\/h3>\n                            <\/div>\n                            <table class=\"performance-table\">\n                                <thead>\n                                    <tr>\n                                        <th>Channel<\/th>\n                                        <th>Budget<\/th>\n                                        <th>Customers<\/th>\n                                        <th>CAC<\/th>\n                                        <th>LTV:CAC<\/th>\n                                    <\/tr>\n                                <\/thead>\n                                <tbody id=\"performanceTableBody\">\n                                    <!-- Populated by JavaScript -->\n                                <\/tbody>\n                            <\/table>\n                            <div style=\"margin-top: 12px; font-size: 0.75rem; color: #6b7280;\">\n                                Channels sorted by LTV:CAC ratio (highest to lowest)\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- Recommendation Alert -->\n                <div class=\"alert\">\n                    <strong>Recommendation:<\/strong> <span id=\"recommendationText\">Keep optimizing. Use this window to test new audiences, pricing strategies, and improved onboarding.<\/span>\n                <\/div>\n\n                <!-- Benchmarks Card -->\n                <div class=\"card\">\n                    <div class=\"card-header\">\n                        <h2 class=\"card-title\">Ratio Benchmarks<\/h2>\n                    <\/div>\n\n                    <div class=\"benchmark-item\">\n                        <div class=\"benchmark-dot dot-red\"><\/div>\n                        <div>\n                            <div style=\"font-weight: 600;\">1:1 or lower - Break Even Growth<\/div>\n                            <div style=\"font-size: 0.9rem; color: #6b7280;\">Spending too much or poor retention<\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"benchmark-item\">\n                        <div class=\"benchmark-dot dot-green\"><\/div>\n                        <div>\n                            <div style=\"font-weight: 600;\">3:1 - Healthy & Sustainable<\/div>\n                            <div style=\"font-size: 0.9rem; color: #6b7280;\">Ideal benchmark for most businesses<\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"benchmark-item\">\n                        <div class=\"benchmark-dot dot-yellow\"><\/div>\n                        <div>\n                            <div style=\"font-weight: 600;\">5:1+ - Under-Investing<\/div>\n                            <div style=\"font-size: 0.9rem; color: #6b7280;\">Room to scale more aggressively<\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ State management\n        let state = {\n            timeframe: 'annual',\n            showChannelBreakdown: false,\n            totalMarketingBudget: 10000,\n            salesCosts: 10000,\n            newCustomers: 100,\n            monthlyOrderValue: 500,\n            customerLifespan: 12,\n            revenue: 100000,\n            costOfGoodsSold: 40000,\n            useGrossMargin: true,\n            channels: [\n                { id: 1, name: 'Paid Social', budget: 5000, customers: 40 },\n                { id: 2, name: 'SEO', budget: 3000, customers: 30 },\n                { id: 3, name: 'Content Marketing', budget: 2000, customers: 30 }\n            ]\n        };\n\n        \/\/ Utility functions\n        function formatCurrency(amount) {\n            return new Intl.NumberFormat('en-US', {\n                style: 'currency',\n                currency: 'USD',\n                minimumFractionDigits: 0,\n                maximumFractionDigits: 0\n            }).format(amount);\n        }\n\n        function formatNumber(num) {\n            return new Intl.NumberFormat('en-US').format(num);\n        }\n\n        \/\/ Calculation functions\n        function calculateMetrics() {\n            const timeframeMultiplier = state.timeframe === 'quarterly' ? 1 : 4;\n            \n            const totalMarketingCosts = state.showChannelBreakdown \n                ? state.channels.reduce((sum, channel) => sum + channel.budget, 0)\n                : state.totalMarketingBudget;\n            \n            const totalChannelCustomers = state.showChannelBreakdown\n                ? state.channels.reduce((sum, channel) => sum + channel.customers, 0)\n                : state.newCustomers;\n\n            const adjustedMarketingCosts = totalMarketingCosts * timeframeMultiplier;\n            const adjustedSalesCosts = state.salesCosts * timeframeMultiplier;\n            const adjustedNewCustomers = totalChannelCustomers * timeframeMultiplier;\n            const adjustedRevenue = state.revenue * timeframeMultiplier;\n            const adjustedCOGS = state.costOfGoodsSold * timeframeMultiplier;\n\n            \/\/ Calculate CAC\n            const cac = adjustedNewCustomers > 0 ? (adjustedMarketingCosts + adjustedSalesCosts) \/ adjustedNewCustomers : 0;\n\n            \/\/ Calculate LTV\n            const grossMargin = adjustedRevenue > 0 ? ((adjustedRevenue - adjustedCOGS) \/ adjustedRevenue) * 100 : 0;\n            const ltvBasic = state.monthlyOrderValue * state.customerLifespan;\n            const ltvWithMargin = ltvBasic * (grossMargin \/ 100);\n            const ltv = state.useGrossMargin ? ltvWithMargin : ltvBasic;\n\n            const ratio = cac > 0 ? ltv \/ cac : 0;\n\n            \/\/ Determine status\n            let status, statusColor, statusText, recommendation;\n            if (ratio <= 1) {\n                status = 'low';\n                statusColor = 'status-low';\n                statusText = 'Break Even Growth';\n                recommendation = \"You're spending too much or not retaining well. Audit high-cost channels and focus on improving retention.\";\n            } else if (ratio >= 5) {\n                status = 'high';\n                statusColor = 'status-high';\n                statusText = 'Under-Investing';\n                recommendation = \"You're not scaling aggressively enough. Consider increasing budget and expanding channels while maintaining profitability.\";\n            } else if (ratio >= 3) {\n                status = 'healthy';\n                statusColor = 'status-healthy';\n                statusText = 'Sustainable & Scalable';\n                recommendation = \"Keep optimizing. Use this window to test new audiences, pricing strategies, and improved onboarding.\";\n            } else {\n                status = 'low';\n                statusColor = 'status-low';\n                statusText = 'Needs Improvement';\n                recommendation = \"Focus on improving customer retention and lifetime value, or reducing acquisition costs.\";\n            }\n\n            return {\n                cac: cac.toFixed(2),\n                ltv: ltv.toFixed(2),\n                ratio: Math.round(ratio),\n                grossMargin: grossMargin.toFixed(1),\n                status,\n                statusColor,\n                statusText,\n                recommendation,\n                totalMarketingCosts: adjustedMarketingCosts,\n                totalSalesCosts: adjustedSalesCosts,\n                totalNewCustomers: adjustedNewCustomers,\n                rawLtv: ltv\n            };\n        }\n\n        function calculateChannelPerformance() {\n            if (!state.showChannelBreakdown) return [];\n\n            const timeframeMultiplier = state.timeframe === 'quarterly' ? 1 : 4;\n            const metrics = calculateMetrics();\n\n            return state.channels.map(channel => {\n                const adjustedBudget = channel.budget * timeframeMultiplier;\n                const adjustedCustomers = channel.customers * timeframeMultiplier;\n                const channelCac = adjustedCustomers > 0 ? adjustedBudget \/ adjustedCustomers : 0;\n                const channelRatio = channelCac > 0 ? metrics.rawLtv \/ channelCac : 0;\n\n                let status;\n                if (channelRatio <= 1) status = 'low';\n                else if (channelRatio >= 5) status = 'high';\n                else if (channelRatio >= 3) status = 'healthy';\n                else status = 'low';\n\n                return {\n                    ...channel,\n                    cac: channelCac,\n                    ratio: channelRatio,\n                    status\n                };\n            }).sort((a, b) => b.ratio - a.ratio);\n        }\n\n        \/\/ UI Update functions\n        function updateTimeframeLabels() {\n            const label = state.timeframe === 'quarterly' ? 'Quarterly' : 'Annual';\n            document.querySelectorAll('[id^=\"timeframeLabel\"]').forEach(el => {\n                el.textContent = label;\n            });\n        }\n\n        function updateResults() {\n            const metrics = calculateMetrics();\n            \n            document.getElementById('cacResult').textContent = `$${metrics.cac}`;\n            document.getElementById('ltvResult').textContent = `$${metrics.ltv}`;\n            document.getElementById('ratioValue').textContent = `${metrics.ratio}:1`;\n            \n            const statusBadge = document.getElementById('statusBadge');\n            statusBadge.className = `status-badge ${metrics.statusColor}`;\n            document.getElementById('statusText').textContent = metrics.statusText;\n            \n            document.getElementById('recommendationText').textContent = metrics.recommendation;\n            \n            if (state.useGrossMargin) {\n                document.getElementById('grossMarginResult').classList.remove('hidden');\n                document.getElementById('grossMarginDisplay').textContent = `${metrics.grossMargin}%`;\n            } else {\n                document.getElementById('grossMarginResult').classList.add('hidden');\n            }\n\n            \/\/ Update summary\n            document.getElementById('totalMarketingDisplay').textContent = formatCurrency(metrics.totalMarketingCosts);\n            document.getElementById('totalSalesDisplay').textContent = formatCurrency(metrics.totalSalesCosts);\n            document.getElementById('totalCustomersDisplay').textContent = formatNumber(metrics.totalNewCustomers);\n            document.getElementById('totalCACDisplay').textContent = `$${metrics.cac}`;\n\n            \/\/ Update channel performance table\n            if (state.showChannelBreakdown) {\n                updateChannelPerformanceTable();\n            }\n        }\n\n        function updateChannelPerformanceTable() {\n            const channelPerformance = calculateChannelPerformance();\n            const tbody = document.getElementById('performanceTableBody');\n            \n            tbody.innerHTML = channelPerformance.map(channel => {\n                const statusClass = channel.status === 'low' ? 'text-red' : \n                                  channel.status === 'high' ? 'text-yellow' : 'text-green';\n                \n                return `\n                    <tr>\n                        <td>${channel.name}<\/td>\n                        <td>${formatCurrency(channel.budget)}<\/td>\n                        <td>${channel.customers}<\/td>\n                        <td>${formatCurrency(channel.cac)}<\/td>\n                        <td class=\"${statusClass}\">${Math.round(channel.ratio)}:1<\/td>\n                    <\/tr>\n                `;\n            }).join('');\n        }\n\n        function renderChannels() {\n            const channelList = document.getElementById('channelList');\n            const totalBudget = state.channels.reduce((sum, channel) => sum + channel.budget, 0);\n            const totalCustomers = state.channels.reduce((sum, channel) => sum + channel.customers, 0);\n            \n            document.getElementById('channelTotal').textContent = formatNumber(totalBudget);\n            document.getElementById('customerTotal').textContent = formatNumber(totalCustomers);\n            \n            channelList.innerHTML = state.channels.map(channel => `\n                <div class=\"channel-item\">\n                    <div class=\"channel-header\">\n                        <strong>${channel.name}<\/strong>\n                        <button class=\"button\" style=\"background: #ef4444; padding: 4px 8px; font-size: 0.8rem;\" onclick=\"removeChannel(${channel.id})\">\u2715<\/button>\n                    <\/div>\n                    <div class=\"channel-inputs\">\n                        <div>\n                            <div class=\"input-group\">\n                                <label style=\"font-size: 0.8rem;\">Budget ($)<\/label>\n                                <input type=\"number\" class=\"form-input small-input\" value=\"${channel.budget}\" \n                                       onchange=\"updateChannelBudget(${channel.id}, this.value)\" min=\"0\">\n                            <\/div>\n                            <input type=\"range\" class=\"slider\" min=\"0\" max=\"25000\" step=\"1000\" value=\"${Math.min(channel.budget, 25000)}\"\n                                   onchange=\"updateChannelBudget(${channel.id}, this.value)\">\n                        <\/div>\n                        <div>\n                            <div class=\"input-group\">\n                                <label style=\"font-size: 0.8rem;\">Customers<\/label>\n                                <input type=\"number\" class=\"form-input small-input\" value=\"${channel.customers}\" \n                                       onchange=\"updateChannelCustomers(${channel.id}, this.value)\" min=\"0\" style=\"width: 60px;\">\n                            <\/div>\n                            <div style=\"text-align: center; font-size: 0.75rem; color: #6b7280; padding: 8px;\">\n                                ${state.timeframe === 'quarterly' ? 'Quarterly' : 'Annual'}\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            `).join('');\n        }\n\n        function toggleChannelBreakdown() {\n            state.showChannelBreakdown = !state.showChannelBreakdown;\n            \n            const simpleView = document.getElementById('simpleView');\n            const channelView = document.getElementById('channelView');\n            const channelPerformance = document.getElementById('channelPerformance');\n            const totalCustomersGroup = document.getElementById('totalCustomersGroup');\n            const toggleBtn = document.getElementById('channelToggle');\n            \n            if (state.showChannelBreakdown) {\n                simpleView.classList.add('hidden');\n                channelView.classList.remove('hidden');\n                channelPerformance.classList.remove('hidden');\n                totalCustomersGroup.classList.add('hidden');\n                toggleBtn.textContent = '\ud83d\udcca Simple View';\n                renderChannels();\n            } else {\n                simpleView.classList.remove('hidden');\n                channelView.classList.add('hidden');\n                channelPerformance.classList.add('hidden');\n                totalCustomersGroup.classList.remove('hidden');\n                toggleBtn.textContent = '\ud83d\udcca Break Down by Channel';\n            }\n            \n            updateResults();\n        }\n\n        \/\/ Channel management functions\n        function addChannel() {\n            const nameInput = document.getElementById('newChannelName');\n            const name = nameInput.value.trim();\n            \n            if (name) {\n                const newId = Math.max(...state.channels.map(c => c.id)) + 1;\n                state.channels.push({\n                    id: newId,\n                    name: name,\n                    budget: 0,\n                    customers: 0\n                });\n                nameInput.value = '';\n                renderChannels();\n                updateResults();\n            }\n        }\n\n        function removeChannel(id) {\n            state.channels = state.channels.filter(channel => channel.id !== id);\n            renderChannels();\n            updateResults();\n        }\n\n        function updateChannelBudget(id, value) {\n            const channel = state.channels.find(c => c.id === id);\n            if (channel) {\n                channel.budget = Math.max(0, parseInt(value) || 0);\n                renderChannels();\n                updateResults();\n            }\n        }\n\n        function updateChannelCustomers(id, value) {\n            const channel = state.channels.find(c => c.id === id);\n            if (channel) {\n                channel.customers = Math.max(0, parseInt(value) || 0);\n                renderChannels();\n                updateResults();\n            }\n        }\n\n        \/\/ Event listeners\n        function initializeEventListeners() {\n            \/\/ Timeframe toggle\n            document.getElementById('timeframeToggle').addEventListener('click', function() {\n                state.timeframe = state.timeframe === 'quarterly' ? 'annual' : 'quarterly';\n                this.classList.toggle('active');\n                updateTimeframeLabels();\n                updateResults();\n            });\n\n            \/\/ Channel breakdown toggle\n            document.getElementById('channelToggle').addEventListener('click', toggleChannelBreakdown);\n\n            \/\/ Add channel button\n            document.getElementById('addChannelBtn').addEventListener('click', addChannel);\n\n            \/\/ Input synchronization\n            const inputs = [\n                { input: 'totalMarketingBudget', slider: 'totalMarketingSlider', property: 'totalMarketingBudget' },\n                { input: 'salesCosts', slider: 'salesCostsSlider', property: 'salesCosts' },\n                { input: 'monthlyOrderValue', slider: 'monthlyOrderSlider', property: 'monthlyOrderValue' },\n                { input: 'revenue', slider: 'revenueSlider', property: 'revenue' },\n                { input: 'costOfGoodsSold', slider: 'cogsSlider', property: 'costOfGoodsSold' }\n            ];\n\n            inputs.forEach(({ input, slider, property }) => {\n                const inputEl = document.getElementById(input);\n                const sliderEl = document.getElementById(slider);\n\n                inputEl.addEventListener('input', function() {\n                    const value = Math.max(0, parseInt(this.value) || 0);\n                    state[property] = value;\n                    sliderEl.value = Math.min(value, sliderEl.max);\n                    updateResults();\n                });\n\n                sliderEl.addEventListener('input', function() {\n                    const value = parseInt(this.value);\n                    state[property] = value;\n                    inputEl.value = value;\n                    updateResults();\n                });\n            });\n\n            \/\/ Special handling for customer lifespan (display only)\n            document.getElementById('customerLifespanSlider').addEventListener('input', function() {\n                state.customerLifespan = parseInt(this.value);\n                document.getElementById('customerLifespanDisplay').textContent = this.value;\n                updateResults();\n            });\n\n            \/\/ Special handling for new customers (display only)\n            document.getElementById('newCustomersSlider').addEventListener('input', function() {\n                state.newCustomers = parseInt(this.value);\n                document.getElementById('newCustomersDisplay').textContent = this.value;\n                updateResults();\n            });\n\n            \/\/ Gross margin toggle\n            document.getElementById('useGrossMargin').addEventListener('change', function() {\n                state.useGrossMargin = this.checked;\n                document.getElementById('grossMarginInputs').classList.toggle('hidden', !this.checked);\n                updateResults();\n            });\n\n            \/\/ COGS slider max should be based on revenue\n            document.getElementById('revenueSlider').addEventListener('input', function() {\n                const cogsSlider = document.getElementById('cogsSlider');\n                cogsSlider.max = this.value;\n                if (state.costOfGoodsSold > parseInt(this.value)) {\n                    state.costOfGoodsSold = parseInt(this.value);\n                    document.getElementById('costOfGoodsSold').value = this.value;\n                    cogsSlider.value = this.value;\n                }\n            });\n        }\n\n        \/\/ Initialize the calculator\n        function initialize() {\n            updateTimeframeLabels();\n            updateResults();\n            initializeEventListeners();\n        }\n\n        \/\/ Start the application\n        document.addEventListener('DOMContentLoaded', initialize);\n    <\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>LTV:CAC Ratio Calculator Calculate your Customer Lifetime Value to Customer Acquisition Cost ratio and get actionable insights.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-48395","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>LTV:CAC Ratio Calculator - Directive UK<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LTV:CAC Ratio Calculator - Directive UK\" \/>\n<meta property=\"og:description\" content=\"LTV:CAC Ratio Calculator Calculate your Customer Lifetime Value to Customer Acquisition Cost ratio and get actionable insights.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Directive UK\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-01T19:25:43+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/ltvcac-ratio-calculator\\\/\",\"url\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/ltvcac-ratio-calculator\\\/\",\"name\":\"LTV:CAC Ratio Calculator - Directive UK\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/#website\"},\"datePublished\":\"2025-06-18T01:25:15+00:00\",\"dateModified\":\"2025-07-01T19:25:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/ltvcac-ratio-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/ltvcac-ratio-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/ltvcac-ratio-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LTV:CAC Ratio Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/#website\",\"url\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/\",\"name\":\"Directive UK\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/directiveconsulting.com\\\/uk\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LTV:CAC Ratio Calculator - Directive UK","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_US","og_type":"article","og_title":"LTV:CAC Ratio Calculator - Directive UK","og_description":"LTV:CAC Ratio Calculator Calculate your Customer Lifetime Value to Customer Acquisition Cost ratio and get actionable insights.","og_url":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/","og_site_name":"Directive UK","article_modified_time":"2025-07-01T19:25:43+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/","url":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/","name":"LTV:CAC Ratio Calculator - Directive UK","isPartOf":{"@id":"https:\/\/directiveconsulting.com\/uk\/#website"},"datePublished":"2025-06-18T01:25:15+00:00","dateModified":"2025-07-01T19:25:43+00:00","breadcrumb":{"@id":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/directiveconsulting.com\/uk\/ltvcac-ratio-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/directiveconsulting.com\/uk\/"},{"@type":"ListItem","position":2,"name":"LTV:CAC Ratio Calculator"}]},{"@type":"WebSite","@id":"https:\/\/directiveconsulting.com\/uk\/#website","url":"https:\/\/directiveconsulting.com\/uk\/","name":"Directive UK","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/directiveconsulting.com\/uk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/pages\/48395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/comments?post=48395"}],"version-history":[{"count":0,"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/pages\/48395\/revisions"}],"wp:attachment":[{"href":"https:\/\/directiveconsulting.com\/uk\/wp-json\/wp\/v2\/media?parent=48395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}