#db-pac{--blue:#1769e0;--navy:#102a56;--ink:#202b3c;--muted:#667085;--line:#e3e9f2;--soft:#f5f8fd;font-family:Inter,Arial,sans-serif;color:var(--ink);max-width:1050px;margin:auto;font-size:15px}
#db-pac *{box-sizing:border-box}
#db-pac .pac-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:24px;margin-bottom:18px;box-shadow:0 5px 24px rgba(16,42,86,.045)}
#db-pac h2,#db-pac h3{color:var(--navy);margin:0 0 8px;line-height:1.35}
#db-pac h2{font-size:28px}#db-pac h3{font-size:19px}
#db-pac p{color:var(--muted);line-height:1.65;margin:0}
#db-pac .pac-eyebrow{font-size:12px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--blue);margin-bottom:8px}
#db-pac .pac-intro{margin-bottom:22px}
#db-pac .pac-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
#db-pac .pac-field{margin-bottom:17px;min-width:0}
#db-pac label{display:block;font-size:13px;font-weight:700;color:#344054;margin-bottom:8px}
#db-pac input[type=number]{display:block;width:100%;min-width:0;border:1px solid #d5dce7;border-radius:9px;padding:12px;font:inherit;color:var(--ink);background:#fff}
#db-pac input:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
#db-pac .pac-hint{font-size:12px;margin-top:7px}
#db-pac .pac-total{display:flex;justify-content:space-between;gap:14px;align-items:center;background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:16px;margin-top:2px}
#db-pac .pac-total span{color:var(--muted);font-size:13px}
#db-pac .pac-total strong{color:var(--navy);font-size:23px;text-align:right}
#db-pac .pac-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
#db-pac button,#db-pac .pac-cta{border:1px solid transparent;border-radius:9px;padding:12px 17px;font:inherit;font-size:14px;font-weight:750;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
#db-pac .pac-primary{background:var(--blue);color:white}
#db-pac .pac-primary:hover{background:#1056bd}
#db-pac .pac-secondary{background:white;color:var(--navy);border-color:#d5dce7}
#db-pac .pac-secondary:hover{background:var(--soft)}
#db-pac button:focus-visible,#db-pac a:focus-visible{outline:3px solid #8ab8ff;outline-offset:2px}
#db-pac .pac-results-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin-top:20px}
#db-pac .pac-stat{border:1px solid var(--line);background:var(--soft);border-radius:12px;padding:17px;min-width:0}
#db-pac .pac-stat span{display:block;color:var(--muted);font-size:12px;margin-bottom:8px}
#db-pac .pac-stat strong{display:block;color:var(--navy);font-size:27px;overflow-wrap:anywhere}
#db-pac .pac-stat small{display:block;color:var(--muted);font-size:12px;margin-top:7px;line-height:1.5}
#db-pac .pac-metric-title{margin-top:20px}
#db-pac .pac-bar-row{margin-top:17px}
#db-pac .pac-bar-head{display:flex;justify-content:space-between;gap:12px;margin-bottom:7px;font-size:13px}
#db-pac .pac-track{height:9px;border-radius:20px;background:#e9eef6;overflow:hidden}
#db-pac .pac-fill{height:100%;width:0;background:var(--blue);border-radius:20px;transition:width .25s}
#db-pac .pac-scenario{background:#f5f8fd;border:1px solid var(--line);border-radius:12px;padding:20px;margin-top:18px}
#db-pac .pac-scenario input[type=range]{width:100%;accent-color:var(--blue);margin:10px 0}
#db-pac .pac-scenario strong{color:var(--navy)}
#db-pac .pac-callout{padding:14px;border:1px solid var(--line);border-radius:10px;margin-top:14px;font-size:13px;color:var(--muted);line-height:1.65}
#db-pac .pac-cta-wrap{background:var(--soft);border-radius:12px;padding:20px;margin-top:20px}
#db-pac [hidden]{display:none!important}
@media(max-width:650px){#db-pac .pac-card{padding:17px}#db-pac h2{font-size:23px}#db-pac .pac-grid{grid-template-columns:1fr;gap:0}#db-pac .pac-results-grid{grid-template-columns:1fr 1fr}#db-pac .pac-stat{padding:13px}#db-pac .pac-stat strong{font-size:22px}#db-pac .pac-actions button,#db-pac .pac-actions .pac-cta{flex:1 1 100%}#db-pac .pac-total strong{font-size:20px}}
Free Healthcare Business Tool
Patient Acquisition Cost Calculator Calculate what your clinic spends to generate enquiries and acquire new patients. Explore how better enquiry conversion could affect your acquisition costs.
1. Monthly marketing costs Enter your average monthly costs. Include only costs relevant to the period you're measuring.
Advertising spend (₹) Google Ads, Meta Ads, or other paid campaigns.
Agency and marketing service costs (₹) SEO, social media, content, or agency fees.
Marketing staff and other costs (₹) Relevant salaries, tools, or outsourced support.
Measurement period (months) Use the same period for costs, enquiries, and acquired patients.
Total marketing cost for the period
₹40,000
2. Enquiries and new patients Use actual counts for the same period, if available. Count new patients attributable to the marketing activity being measured.
Enquiries generated Relevant calls, forms, messages, or other enquiries.
New patients acquired New patients actually acquired, not just appointments requested.
Calculate Acquisition Cost
Load Example
Reset
Your Results
Clinic Acquisition Cost Report Based on your figures.
Total marketing cost
₹0
For the selected measurement period.
Cost per enquiry
N/A
Total marketing cost ÷ enquiries.
Cost per acquired patient
N/A
Total marketing cost ÷ new patients.
Enquiry-to-patient conversion
N/A
New patients ÷ enquiries.
Enquiry conversion overview Enquiries converted to patients 0%
What-if Planner
What if your clinic converted more enquiries? Adjust the conversion rate to model a scenario with the same enquiry volume and marketing cost. This is an estimate, not a guaranteed outcome.
Hypothetical enquiry-to-patient conversion rate
0% 35% 100%
Estimated new patients
0
Enquiries × selected conversion rate.
Estimated cost per patient
N/A
Marketing cost ÷ estimated new patients.
Change in cost per patient
N/A
Compared with your current calculated cost.
Estimated patient difference
0
Compared with the current acquired patient count.
Next steps for your clinic Use your results to review enquiry quality, response processes, appointment booking, and marketing channel performance. A lower cost is not automatically better if patient suitability or care quality suffers.
Want to improve your clinic's digital growth? Design Blast supports clinics with websites, local SEO, social media, and digital marketing strategy.
This calculator provides estimates based on user-entered figures. It does not measure clinical outcomes or guarantee marketing performance.
(function(){
const root=document.getElementById('db-pac');
if(!root || root.dataset.ready==='1') return;
root.dataset.ready='1';
const $=id=>root.querySelector('#pac-'+id);
const costFields=['ads','agency','staff'];
let latest=null;function num(id){
const el=$(id);
const v=Number(el.value);
return el.value.trim()==='' || !Number.isFinite(v) ? 0 : Math.max(0,v);
}
function money(v){
if(!Number.isFinite(v)) return 'N/A';
return '₹'+v.toLocaleString('en-IN',{maximumFractionDigits:2});
}
function pct(v){
return Number.isFinite(v) ? v.toFixed(1)+'%' : 'N/A';
}
function inputs(){
const period=Math.max(1,Math.min(60,Math.floor(num('period')||1)));
const ads=num('ads'),agency=num('agency'),staff=num('staff');
const leads=Math.floor(num('leads')),patients=Math.floor(num('patients'));
return {period,ads,agency,staff,cost:(ads+agency+staff),leads,patients};
}
function updateTotal(){
$('total').textContent=money(inputs().cost);
}
function scenario(){
if(!latest) return;
const r=latest;
const rate=num('target');
const estimated=r.leads*rate/100;
const estimatedCPA=estimated>0?r.cost/estimated:null;
const currentCPA=r.patients>0?r.cost/r.patients:null;
$('target-label').textContent=rate+'%';
$('s-patients').textContent=estimated.toLocaleString('en-IN',{maximumFractionDigits:1});
$('s-cpa').textContent=estimatedCPA===null?'N/A':money(estimatedCPA);
const change=(currentCPA!==null && estimatedCPA!==null && currentCPA>0)
? (estimatedCPA-currentCPA)/currentCPA*100 : null;
$('s-change').textContent=change===null?'N/A':(change>0?'+':'')+change.toFixed(1)+'%';
$('s-difference').textContent=(estimated-r.patients>0?'+':'')+(estimated-r.patients).toLocaleString('en-IN',{maximumFractionDigits:1});
$('s-note').textContent=rate===0
? 'At a 0% conversion assumption, the model estimates no new patients from these enquiries; cost per patient cannot be calculated.'
: 'This scenario assumes the same '+r.leads+' enquiries and ₹'+r.cost.toLocaleString('en-IN',{maximumFractionDigits:2})+' marketing cost. Actual outcomes may differ.';
}
function calculate(){
const r=inputs();
if(r.cost===0){
$('status').textContent='Enter at least one non-zero marketing cost to calculate acquisition costs.';
$('results').hidden=true;return;
}
if(r.leads===0 && r.patients>0){
$('status').textContent='New patients cannot exceed zero enquiries. Check the figures.';
$('results').hidden=true;return;
}
if(r.patients>r.leads){
$('status').textContent='New patients cannot exceed enquiries in this calculator. Check that both counts use the same period and attribution method.';
$('results').hidden=true;return;
}
latest=r;
const conversion=r.leads>0?r.patients/r.leads*100:null;
const cpl=r.leads>0?r.cost/r.leads:null;
const cpa=r.patients>0?r.cost/r.patients:null;
$('results').hidden=false;
$('subtitle').textContent='Measurement period: '+r.period+' month'+(r.period===1?'':'s')+'. All figures use the totals entered for that period.';
$('r-cost').textContent=money(r.cost);
$('r-cpl').textContent=cpl===null?'N/A':money(cpl);
$('r-cpa').textContent=cpa===null?'N/A':money(cpa);
$('r-conversion').textContent=conversion===null?'N/A':pct(conversion);
$('bar-label').textContent=conversion===null?'N/A':pct(conversion);
$('bar-fill').style.width=(conversion===null?0:Math.min(100,conversion))+'%';
const notes=[];
if(r.leads===0) notes.push('No enquiries were entered, so cost per enquiry and conversion rate cannot be calculated.');
if(r.patients===0) notes.push('No acquired patients were entered, so cost per acquired patient cannot be calculated.');
if(r.leads>0 && r.patients>0) notes.push('Your figures imply '+r.patients+' acquired patients from '+r.leads+' enquiries.');
notes.push('For reliable comparisons, use the same attribution window and include relevant marketing costs consistently.');
$('validation').textContent=notes.join(' ');
const target=$('target');
target.value=String(Math.max(0,Math.min(100,Math.round(conversion===null?35:conversion))));
const params=new URLSearchParams();
params.set('tool','patient-acquisition-cost');
params.set('monthly_cost',String(Math.round(r.cost/r.period)));
params.set('period_months',String(r.period));
$('contact').href='https://designblast.org/contact/?'+params.toString();
scenario();
$('status').textContent='Calculation complete. Your report is ready below.';
$('results').scrollIntoView({behavior:'smooth',block:'start'});
}
function summary(){
if(!latest)return '';
const r=latest;
const rate=r.leads>0?r.patients/r.leads*100:null;
const cpl=r.leads>0?r.cost/r.leads:null;
const cpa=r.patients>0?r.cost/r.patients:null;
const targetRate=num('target');
const targetPatients=r.leads*targetRate/100;
const targetCPA=targetPatients>0?r.cost/targetPatients:null;
return [
'PATIENT ACQUISITION COST REPORT',
'Measurement period: '+r.period+' month(s)',
'Advertising spend: '+money(r.ads),
'Agency/service costs: '+money(r.agency),
'Staff/other costs: '+money(r.staff),
'Total cost: '+money(r.cost),
'Enquiries: '+r.leads,
'New patients: '+r.patients,
'Cost per enquiry: '+(cpl===null?'N/A':money(cpl)),
'Cost per acquired patient: '+(cpa===null?'N/A':money(cpa)),
'Enquiry-to-patient conversion: '+(rate===null?'N/A':pct(rate)),
'',
'SCENARIO',
'Assumed conversion: '+targetRate+'%',
'Estimated patients: '+targetPatients.toLocaleString('en-IN',{maximumFractionDigits:1}),
'Estimated cost per patient: '+(targetCPA===null?'N/A':money(targetCPA)),
'',
'Note: Estimates use user-entered figures and are not guarantees of marketing results.'
].join('\n');
}
function download(){
if(!latest)return;
const blob=new Blob(['\uFEFF'+summary()],{type:'text/plain;charset=utf-8'});
const url=URL.createObjectURL(blob);
const a=document.createElement('a');
a.href=url;a.download='patient-acquisition-cost-report.txt';
document.body.appendChild(a);a.click();a.remove();
setTimeout(()=>URL.revokeObjectURL(url),1000);
}
async function copy(){
if(!latest)return;
try{
if(navigator.clipboard&&navigator.clipboard.writeText){
await navigator.clipboard.writeText(summary());
}else{
const t=document.createElement('textarea');
t.value=summary();t.style.position='fixed';t.style.opacity='0';
root.appendChild(t);t.select();
const ok=document.execCommand('copy');t.remove();
if(!ok)throw new Error('copy failed');
}
$('status').textContent='Summary copied.';
}catch(e){
$('status').textContent='Copy was blocked by your browser. Use Download Report instead.';
}
}
[...costFields,'period'].forEach(id=>$(id).addEventListener('input',updateTotal));
$('calculate').addEventListener('click',calculate);
$('target').addEventListener('input',scenario);
$('download').addEventListener('click',download);
$('copy').addEventListener('click',copy);
$('example').addEventListener('click',function(){
$('ads').value=20000;$('agency').value=15000;$('staff').value=5000;
$('period').value=1;$('leads').value=100;$('patients').value=25;
updateTotal();calculate();
});
$('reset').addEventListener('click',function(){
$('ads').value=0;$('agency').value=0;$('staff').value=0;
$('period').value=1;$('leads').value=0;$('patients').value=0;
$('target').value=35;latest=null;
updateTotal();$('results').hidden=true;
$('status').textContent='Calculator reset.';
});
updateTotal();
})();