Estimate

Project estimate for Walsh Residence.

April 29, 2026 Prepared for David Walsh at Walsh Residence
By Walsh Plumbing & Drain · walshplumbing-demo.com
15+
Years Experience
★★★★★
Google Rating
90%
Client Retention

Licensed, insured, and always on time.

Family-owned plumbing company serving the greater metro area for over 20 years. We handle everything from emergency repairs to full bathroom remodels. Licensed, bonded, and insured with a 100% satisfaction guarantee.

Proposed services for Walsh Residence.

Leak Repair

$150/hr x 3hrs
Total: $450
HOURLY

Water Heater

$2,800
ONE-TIME
One-time $2,950
Estimated TotalFinal pricing may vary based on scope
$2,950
To get started, a retainer is required:
$500
Applied toward your project total

This is an estimate. Pricing may be adjusted based on final project scope and requirements.

1-year warranty.

Want a copy for your records? 📄 Download PDF

Accept this proposal.

Signed by waqid janjua

April 14, 2026 at 11:17 PM

Signature
// Interactive pricing recalculation function pkToggleOptional(el) { // checkbox handles the toggle, this just adds visual feedback } function pkRecalcTotal() { var totalMonthly = 0; var totalOnetime = 0; document.querySelectorAll('.pk-line-item').forEach(function(item) { var price = parseFloat(item.dataset.price) || 0; var type = item.dataset.type || 'monthly'; var isOptional = item.classList.contains('pk-optional'); var checkbox = item.querySelector('input[type="checkbox"]'); if (isOptional && checkbox && !checkbox.checked) { item.style.opacity = '0.4'; return; } item.style.opacity = '1'; if (type === 'monthly') totalMonthly += price; else totalOnetime += price; }); var mEl = document.getElementById('pk-total-monthly'); var oEl = document.getElementById('pk-total-onetime'); var tEl = document.getElementById('pk-dynamic-total'); if (mEl) mEl.innerHTML = '$' + totalMonthly.toLocaleString() + '/mo'; if (oEl) oEl.textContent = '$' + totalOnetime.toLocaleString(); if (tEl) tEl.textContent = '$' + (totalMonthly + totalOnetime).toLocaleString(); } // Initial calc pkRecalcTotal();