Tree Service Cost Calculator — Free Estimate | NicheCalc

Select your project — tree removal, trimming/pruning, stump grinding, or emergency storm work — enter tree size and site details, and get an instant 2025–2026 cost estimate with line-item breakdown.

🌳 Tree Removal & Service Cost Calculator

Tree removal costs depend on height, trunk diameter, and site conditions. Small trees under 25 ft: $150–$400. Medium (25–50 ft): $400–$1,200. Large (50–80 ft): $900–$1,800. Very large or hazardous (80+ ft): $1,500–$3,000+. Proximity to power lines or structures, access difficulty, and stump grinding add-ons drive the final price significantly.

<25ft $150–$400 25–50ft $400–$1,200 50–80ft $900–$1,800 Crane 80+ft $1,500–$3,000+ Tree Height Zones & Cut Points
Tree Details
trees
Add-Ons & Modifiers

How Much Does Tree Removal Cost?

Tree removal costs depend on the tree's height, trunk diameter, site access, and proximity to structures or power lines. As a ballpark: small trees (under 25 ft) run $150–$400, medium trees (25–50 ft) cost $400–$1,200, large trees (50–80 ft) run $900–$1,800, and very large or hazardous trees (80+ ft) cost $1,500–$3,000+. A certified arborist will assess the full picture before quoting — complexity always matters more than size alone.

The tree service industry is a $20+ billion market annually in the U.S., driven by storm damage, insurance-related removals, and routine maintenance. Unlike most home services, tree work carries significant liability — a falling limb or dropped section can cause thousands in property damage. Always hire a licensed, insured arborist for any removal near structures, power lines, or fences.

Tree Removal Cost by Size

Tree Size Height Trunk Diameter Typical Cost Examples
Small Under 25 ft Under 12" $150–$400 Young maple, ornamental cherry, shrub tree
Medium 25–50 ft 12–24" $400–$1,200 Mature oak, dogwood, Bradford pear, birch
Large 50–80 ft 24–36" $900–$1,800 Large oak, tulip poplar, silver maple, pine
Very Large / Hazardous 80+ ft 36"+ $1,500–$3,000+ Old-growth oak, cottonwood, sequoia, dead standing

Budget vs. Standard vs. Premium Tree Services

Tier Who Does This Credentials Price vs. Standard Best For
Budget Day laborers, uninsured operators No license, no ISA cert 30–50% less Isolated stumps in open areas — low risk only
Standard Licensed, insured local tree company State license, general liability, worker's comp Base price Most residential removals and trimming
Premium ISA Board Certified Master Arborists ISA certification, crane-equipped, full insurance 30–60% more Hazardous removals, large trees, HOA compliance

What Factors Drive Tree Service Costs?

1. Tree Height and Trunk Diameter

These are the two primary cost drivers. Height determines how much rigging, rope work, and ground-level coordination is required. A 30-foot tree can often be felled in sections from the ground; an 80-foot tree requires a climber, a groundsman, and often a bucket truck. Trunk diameter affects how long each cut takes, the equipment required, and the volume of debris that needs hauling. A 36-inch diameter trunk produces significantly more chip and log volume than a 12-inch trunk, even at the same height.

2. Proximity to Structures and Power Lines

The single biggest cost multiplier in tree work is proximity to hazards. A tree in an open yard can often be felled whole — one cut, tip the trunk, done. A tree between a house and a fence requires piece-by-piece rigging, lowering each section on ropes to prevent damage below. This can triple the labor time. Trees near power lines require coordination with the utility company or a utility-line-qualified arborist, adding both cost and scheduling delays.

3. Access Difficulty

Can a chipper truck get to the tree? If not, every piece of debris must be hand-carried or wheelbarrowed to the street. A tree in a tight backyard with a narrow gate can add $200–$500 to the job, even if the tree itself is small. Steep slopes and soft ground (after rain) make equipment positioning dangerous and slow. Always assess access before accepting quotes — it explains price variation between contractors bidding the same job.

4. Emergency and Storm Work

Emergency call-outs carry premium pricing for good reason: crews are dispatched immediately, outside normal hours, with the full fleet required to handle an active hazard. Expect an emergency call-out fee of $150–$500 on top of the base removal rate, plus after-hours multipliers of 1.5x–2x on weekends and holidays. If insurance is involved, document everything with photos before any work begins — the adjuster will need evidence of the storm event and damage extent.

5. Stump Grinding Add-On

Tree removal quotes typically exclude stump grinding unless specifically requested. Stump grinding is almost always worth adding: a ground-level stump left in place will sprout for years, attract wood-boring insects, and create a tripping hazard. Grinding costs $100–$400 per stump depending on diameter. Full stump removal (excavating the root ball) costs $200–$600+ but is necessary if you plan to replant in the same location or install hardscaping over the root zone.

6. Debris Disposal and Hauling

Most licensed arborists include debris hauling in their quote — the truck, chipper, and log trailer are already on site. Some customers request logs be left as firewood lengths, which can reduce the quote by $50–$150 since the contractor skips hauling. Chips can be left on site as mulch at no extra charge from many companies. If you want the chips hauled away and have no mulch need, confirm this is included — some budget operators charge extra for full debris removal.

Tree Trimming and Pruning Costs

Trimming differs from removal: you're maintaining a living tree, not extracting it. Proper pruning requires ISA training because improper cuts (flush cuts, stub cuts, lion's tails) create entry points for decay, weaken branch structure, and can kill sections of the tree. Hiring an ISA-certified arborist for trimming costs more upfront and saves significantly on future hazard removal when the tree develops problems from bad cuts.

Deadwood removal typically costs $75–$300 per tree and is the most common reason homeowners call. Crown thinning for large trees runs $200–$600 per tree. Vista pruning — selectively opening sight lines through a mature canopy — is labor-intensive and can run $300–$1,500 per tree depending on size and complexity.

When Does Tree Removal Require a Permit?

Many municipalities require permits for removing trees over a certain size (often 6–12" trunk diameter measured at chest height). Heritage trees, trees in environmentally sensitive areas, or trees in HOA-regulated communities almost always require approval before removal. Permits typically cost $50–$150 and involve a site inspection. Failure to permit can result in fines of $500–$5,000+ in strict jurisdictions. Your arborist should be familiar with local requirements — ask before signing any contract.

DIY Tree Removal: Risks and Limitations

Homeowner-grade chainsaws can handle trees under 15 feet in open areas with a clear fall zone. Anything larger, near structures, or with a compromised root system is professional territory. Falling tree fatalities and injuries happen overwhelmingly to untrained operators attempting removals they've watched on YouTube. Liability for property damage is on you if you self-perform removal that damages your neighbor's fence, vehicle, or home. For stumps, homeowner-grade stump grinders can be rented for $150–$300/day — reasonable if you have multiple stumps and the physical stamina for the work.

Related Calculators

Tree service often connects to larger landscaping and yard improvement projects. Use these calculators to estimate your complete yard budget:

Frequently Asked Questions

How much does it cost to remove a large oak tree?

A large oak tree (50–80 ft, 24–36" trunk diameter) typically costs $900–$1,800 for removal in an open yard. Near a house or with limited access, expect $1,500–$2,500+. Oak is dense hardwood — cutting and chipping takes longer, and log weight increases haul time. Old-growth oaks over 80 ft with massive canopies can run $2,500–$4,000+ for a hazardous removal requiring crane work.

Is stump grinding included in tree removal quotes?

Usually not. Most quotes cover cutting the tree and removing the debris. Stump grinding is a separate line item — typically $100–$400 per stump depending on diameter. Always ask explicitly whether stump grinding is included, and if not, get a separate quote. Many companies offer a bundled discount when grinding is done the same day as removal.

Do I need a permit to remove a tree in my yard?

It depends on your municipality. Many cities require permits for trees over 6–12" in trunk diameter, heritage-designated trees, or trees in protected zones. Some HOAs have their own approval process independent of city permits. Your arborist should know local rules — ask before any work begins. Unpermitted removal of protected trees can result in fines of $500–$10,000+.

How much does emergency tree removal cost after a storm?

Emergency storm removal runs $300–$5,000+ depending on size, site complexity, and timing. Expect a call-out fee of $150–$500 on top of the base removal cost, plus after-hours multipliers (1.5x evenings, 1.75x weekends, 2x immediate 24/7 response). If a tree lands on your home, your homeowner's insurance typically covers removal costs — document the damage thoroughly before cleanup begins.

How long does tree removal take?

A small-to-medium tree in an open yard takes 1–3 hours for a professional crew. A large tree near a structure requiring rigged removal can take a full day (6–8 hours) for two to three workers. Very large trees with crane work are typically quoted as full-day jobs with equipment mobilization factored in. Stump grinding adds 30–90 minutes per stump.

What's the difference between ISA-certified and licensed arborists?

A state license is a legal requirement to operate a tree service business in most states — it covers basic business and safety requirements. ISA (International Society of Arboriculture) certification is a voluntary professional credential requiring written testing, documented experience, and ongoing continuing education. ISA Board Certified Master Arborists are the highest designation — fewer than 500 exist in the U.S. For routine trimming, a licensed arborist is fine; for complex hazard removals, heritage trees, or disease diagnosis, an ISA cert adds meaningful expertise.

What does stump grinding leave behind?

Stump grinding leaves a hole (6–12 inches deep, roughly the diameter of the stump) filled with wood chips — a mix of shredded wood and soil. The chips decompose over 2–5 years and can be used as mulch in the immediate area or hauled away. Full root removal isn't part of standard grinding; lateral roots remain underground and gradually decompose. If you plan to replant or install concrete in the same area, ask for full stump removal rather than grinding.

Can I cut down a tree that's leaning toward my house?

A leaning tree is a high-risk removal and should not be DIY'd. The direction of lean determines where it will fall — if that's toward your house, a neighbor's property, or power lines, a professional crew with rigging equipment is the only safe option. Professionals can attach ropes to redirect a fall, cut sections from the top down, or use a crane to lift sections away from the structure. Attempting to fell a leaning tree yourself is one of the most common causes of residential tree removal fatalities.

Related Calculators

Related Calculators

Related Calculators

Frequently Asked Questions

Tree removal costs scale with size: small trees (under 25 ft): $150–$400; medium trees (25–50 ft): $400–$1,200; large trees (50–80 ft): $900–$1,800; very large or hazardous trees (80+ ft): $1,500–$3,000+. The primary cost drivers are height, trunk diameter, and site conditions. Proximity to structures multiplies cost by 1.3–1.7x due to rigging requirements. Dense species like oak cost more than pine at the same height due to cutting time and debris volume. Old-growth trees with massive canopies in tight spaces can run $2,500–$4,000+ for a hazardous removal requiring crane work.

Usually not. Most removal quotes cover cutting the tree and removing the debris — stump grinding is a separate line item at $100–$400 per stump depending on diameter. Always ask explicitly whether stump grinding is included, and if not, get a separate quote. Many companies offer a bundled discount (10–20%) when grinding is done the same day as removal — the crew and equipment are already on site. Stump grinding leaves the top 6–12 inches of the stump gone with wood chip mulch filling the hole; full root removal is a separate service requiring excavation.

It depends on your municipality and tree size. Many cities require permits for trees over 6–12 inches trunk diameter, heritage-designated trees, or trees in protected zones (near waterways, in front setback areas). Some HOAs have their own approval process that's independent of city permits. Your arborist should know local rules — ask before any work begins. Unpermitted removal of protected trees can result in fines of $500–$10,000+ in many jurisdictions, and some municipalities require replacement plantings as part of the penalty. When in doubt, call the planning department — the cost is a 10-minute phone call.

Emergency storm removal runs $300–$5,000+ depending on size, site complexity, and timing. Expect a call-out fee of $150–$500 on top of the base removal cost, plus after-hours multipliers (1.5x evenings, 1.75x weekends, 2x immediate 24/7 response). If a tree has fallen on your home, your homeowner's insurance typically covers removal costs — document the damage thoroughly before any cleanup begins. Crane rental for large canopy removals adds $300–$600/day. After storm damage, get multiple quotes — there's often significant price variation depending on how busy the tree companies are in your area.

A small-to-medium tree in an open yard takes 1–3 hours for a professional crew. A large tree near a structure requiring rigging can take a full day (6–8 hours) for two to three workers. Very large trees with crane work are typically quoted as full-day jobs with equipment mobilization factored in. Stump grinding adds 30–90 minutes per stump. Weather can extend timelines — rain softens ground and makes access difficult; high wind makes rigging dangerous. Ask for a timeline estimate when you get the quote and understand the factors that could extend it.

Tree trimming (pruning) costs $75–$1,500 per tree depending on size and work type. Crown thinning improves light and air circulation; deadwood removal eliminates hazards; crown raising lifts the canopy for clearance; vista pruning opens sight lines. Removal costs $150–$4,000+ per tree depending on size, as described above. The choice depends on the tree's condition: a healthy tree that's outgrowing its space gets trimmed; a dead, diseased, or dangerous tree gets removed. A good arborist will tell you which is appropriate and why — if they're recommending removal of a healthy tree, get a second opinion.

Not as a DIY project. A leaning tree is a high-risk removal and requires professional rigging equipment and training. The direction of lean determines where it will fall — if that's toward your house, a neighbor's property, or power lines, a professional crew uses ropes to redirect the fall, cuts sections from the top down, or uses a crane to lift sections away from the structure. Attempting to fell a leaning tree yourself is one of the most common causes of residential tree removal fatalities. Call a licensed, insured arborist and have them assess it. If it's an emergency (leaning tree touching a power line or threatening immediate damage), call your utility company first.

Verify three things before signing: licensing and insurance (ask for a certificate of insurance — any reputable company will provide one immediately), ISA certification (voluntary but indicates professional training), and local references (not just photos of completed jobs — call 2–3 recent customers). Red flags: requires full payment upfront, no written quote, pressuring you to sign same day, won't provide proof of insurance. For jobs over $500, get at least 2–3 written quotes that specify the scope, debris disposal method, stump handling, site cleanup, and timeline. The cheapest quote isn't always the best — tree work is heavily weighted toward safety and quality.

'; el.innerHTML = html; el.style.display = 'block'; el.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } // ───────────────────────────────────────────── // TAB SWITCHING // ───────────────────────────────────────────── var tabs = document.querySelectorAll('.shape-tab'); tabs.forEach(function(btn) { btn.addEventListener('click', function() { var target = btn.getAttribute('data-tab'); tabs.forEach(function(b) { b.classList.remove('active'); b.setAttribute('aria-selected', 'false'); }); btn.classList.add('active'); btn.setAttribute('aria-selected', 'true'); // Show/hide tab panels var panels = document.querySelectorAll('.tab-panel'); panels.forEach(function(p) { p.style.display = 'none'; }); var activePanel = document.getElementById('tab-' + target); if (activePanel) activePanel.style.display = ''; // Show/hide descriptions var descs = document.querySelectorAll('.hvac-sys-desc'); descs.forEach(function(d) { d.style.display = 'none'; }); var activeDesc = document.getElementById('tab-desc-' + target); if (activeDesc) activeDesc.style.display = ''; // Show/hide SVGs var svgs = document.querySelectorAll('.shape-diagram'); svgs.forEach(function(s) { s.style.display = 'none'; }); var activeSvg = document.getElementById('svg-' + target); if (activeSvg) activeSvg.style.display = ''; }); }); // ───────────────────────────────────────────── // TAB 1: TREE REMOVAL // ───────────────────────────────────────────── document.getElementById('btn-tree-removal').addEventListener('click', function() { var height = document.getElementById('tr-height').value; var diameter = document.getElementById('tr-diameter').value; var count = parseFloat(document.getElementById('tr-count').value) || 1; var prox = document.getElementById('tr-proximity').value; var access = document.getElementById('tr-access').value; var debris = document.getElementById('tr-debris').value; var stump = document.getElementById('tr-stump').value; var permit = document.getElementById('tr-permit').value; var quality = document.getElementById('tr-quality').value; // Base cost by height var baseCosts = { small: [150, 400], medium: [400, 1200], large: [900, 1800], xlarge: [1500, 3000] }; var base = baseCosts[height] || baseCosts.medium; var lo = base[0]; var hi = base[1]; // Diameter adjustment var diamMult = { small: 0.85, medium: 1.0, large: 1.20, xlarge: 1.40 }; var dm = diamMult[diameter] || 1.0; lo *= dm; hi *= dm; // Proximity multiplier var proxMult = { open: 1.0, 'near-house': 1.35, 'power-lines': 1.50, between: 1.65 }; var pm = proxMult[prox] || 1.0; lo *= pm; hi *= pm; // Access multiplier var accessMult = { easy: 1.0, gate: 1.15, 'no-vehicle': 1.30, slope: 1.25 }; var am = accessMult[access] || 1.0; lo *= am; hi *= am; // Debris disposal var debrisAdj = { 'haul-away': 0, chip: -50, firewood: -75, customer: -100 }; var da = debrisAdj[debris] || 0; lo += da; hi += da; // Quality tier var qualMult = { budget: 0.65, standard: 1.0, premium: 1.45 }; var qm = qualMult[quality] || 1.0; lo *= qm; hi *= qm; // Multi-tree discount (5% per additional tree, max 25%) var multiDisc = count > 1 ? Math.min(0.25, (count - 1) * 0.05) : 0; var costPerTree_lo = Math.round(lo); var costPerTree_hi = Math.round(hi); var totalLo = Math.round(lo * count * (1 - multiDisc)); var totalHi = Math.round(hi * count * (1 - multiDisc)); // Stump add-on var stumpCostLo = 0, stumpCostHi = 0; if (stump === 'grinding') { var stumpGrind = { small: [100, 150], medium: [150, 280], large: [250, 400], xlarge: [350, 500] }; var sg = stumpGrind[diameter] || stumpGrind.medium; stumpCostLo = sg[0] * count; stumpCostHi = sg[1] * count; } else if (stump === 'full-removal') { var stumpFull = { small: [200, 300], medium: [300, 500], large: [450, 700], xlarge: [600, 900] }; var sf = stumpFull[diameter] || stumpFull.medium; stumpCostLo = sf[0] * count; stumpCostHi = sf[1] * count; } // Permit var permitLo = permit === 'yes' ? 50 : 0; var permitHi = permit === 'yes' ? 150 : 0; var grandLo = totalLo + stumpCostLo + permitLo; var grandHi = totalHi + stumpCostHi + permitHi; var lines = [ { label: 'Tree removal (' + count + (count > 1 ? ' trees' : ' tree') + ' × ' + fmtRange(costPerTree_lo, costPerTree_hi) + ')', value: fmtRange(totalLo, totalHi) }, ]; if (prox !== 'open') lines.push({ label: 'Structure / hazard proximity surcharge', value: '+' + Math.round((pm - 1) * 100) + '%' }); if (access !== 'easy') lines.push({ label: 'Access difficulty surcharge', value: '+' + Math.round((am - 1) * 100) + '%' }); if (count > 1 && multiDisc > 0) lines.push({ label: 'Multi-tree volume discount', value: '-' + Math.round(multiDisc * 100) + '%' }); if (stump !== 'no') lines.push({ label: stump === 'grinding' ? 'Stump grinding' : 'Full stump removal', value: fmtRange(stumpCostLo, stumpCostHi) }); if (permit === 'yes') lines.push({ label: 'Tree removal permit', value: fmtRange(50, 150) }); var note = prox === 'power-lines' ? 'Trees near power lines require a utility-line-qualified (ULQ) arborist. Notify your utility company before scheduling — they may trim for free if lines are at risk.' : quality === 'budget' ? 'Budget operators often carry no insurance. If a falling section damages your property or neighbor\'s fence, you bear the cost. License and insurance verification is non-negotiable.' : 'Get at least 2 written quotes for any removal over $500. Quotes should specify: tree disposal method, stump inclusion/exclusion, site cleanup, and insurance certificate on file.'; renderResult('tree-removal-result', lines, grandLo, grandHi, note); }); // ───────────────────────────────────────────── // TAB 2: TRIMMING / PRUNING // ───────────────────────────────────────────── document.getElementById('btn-tree-trimming').addEventListener('click', function() { var height = document.getElementById('tt-height').value; var canopy = document.getElementById('tt-canopy').value; var count = parseFloat(document.getElementById('tt-count').value) || 1; var type = document.getElementById('tt-type').value; var access = document.getElementById('tt-access').value; var debris = document.getElementById('tt-debris').value; var quality = document.getElementById('tt-quality').value; // Base cost per tree by height var baseCosts = { small: [75, 200], medium: [200, 600], large: [500, 1100], xlarge: [900, 1500] }; var base = baseCosts[height] || baseCosts.medium; var lo = base[0]; var hi = base[1]; // Canopy adjustment var canopyMult = { small: 0.80, medium: 1.0, large: 1.25, xlarge: 1.50 }; var cm = canopyMult[canopy] || 1.0; lo *= cm; hi *= cm; // Pruning type adjustment var typeMult = { deadwood: 0.75, thinning: 1.0, raising: 0.90, reduction: 1.20, vista: 1.35 }; var tm = typeMult[type] || 1.0; lo *= tm; hi *= tm; // Access adjustment var accessMult = { easy: 1.0, moderate: 1.15, difficult: 1.40 }; var am = accessMult[access] || 1.0; lo *= am; hi *= am; // Quality tier var qualMult = { budget: 0.65, standard: 1.0, premium: 1.40 }; var qm = qualMult[quality] || 1.0; lo *= qm; hi *= qm; // Debris disposal var debrisAdj = { 'haul-away': 0, chip: 0, customer: -40 }; var da = debrisAdj[debris] || 0; var costPerTree_lo = Math.round(lo); var costPerTree_hi = Math.round(hi); // Multi-tree discount var multiDisc = count > 1 ? Math.min(0.20, (count - 1) * 0.05) : 0; var totalLo = Math.round(lo * count * (1 - multiDisc)) + da * count; var totalHi = Math.round(hi * count * (1 - multiDisc)) + da * count; var lines = [ { label: 'Pruning (' + count + (count > 1 ? ' trees' : ' tree') + ' × ' + fmtRange(costPerTree_lo, costPerTree_hi) + ')', value: fmtRange(Math.round(lo * count), Math.round(hi * count)) }, ]; if (count > 1 && multiDisc > 0) lines.push({ label: 'Multi-tree volume discount', value: '-' + Math.round(multiDisc * 100) + '%' }); if (access !== 'easy') lines.push({ label: 'Access difficulty surcharge', value: '+' + Math.round((am - 1) * 100) + '%' }); if (da !== 0) lines.push({ label: 'Customer handles debris (credit)', value: fmtRange(da * count, da * count) }); var typeNotes = { deadwood: 'Deadwood removal is the highest-value pruning investment — it eliminates active hazards and reduces liability before storm season.', thinning: 'Crown thinning reduces wind resistance and improves light penetration. ISA standards specify removing no more than 25% of live crown in a single pruning.', raising: 'Crown raising improves visibility, vehicle clearance, and pedestrian access beneath the canopy. Minimum clearance is typically 8 ft for pedestrians, 14 ft for vehicles.', reduction: 'Crown reduction is more complex than topping — proper cuts are made at lateral branches to maintain the tree\'s natural form and prevent decay entry.', vista: 'Vista pruning requires the most skill: selective removal to open specific sight lines while preserving canopy health. ISA-certified arborists are worth the premium here.' }; renderResult('tree-trimming-result', lines, Math.max(totalLo, 75), Math.max(totalHi, 150), typeNotes[type] || ''); }); // ───────────────────────────────────────────── // TAB 3: STUMP GRINDING // ───────────────────────────────────────────── document.getElementById('btn-stump-grinding').addEventListener('click', function() { var diameter = document.getElementById('sg-diameter').value; var count = parseFloat(document.getElementById('sg-count').value) || 1; var type = document.getElementById('sg-type').value; var access = document.getElementById('sg-access').value; var roots = document.getElementById('sg-roots').value; var backfill = document.getElementById('sg-backfill').value; // Base cost by diameter var grindCosts = { small: [100, 175], medium: [150, 280], large: [250, 400], xlarge: [350, 500] }; var fullCosts = { small: [200, 325], medium: [300, 500], large: [450, 700], xlarge: [600, 900] }; var costs = type === 'grinding' ? grindCosts : fullCosts; var base = costs[diameter] || costs.medium; var lo = base[0]; var hi = base[1]; // Access multiplier var accessMult = { easy: 1.0, gate: 1.20, 'no-vehicle': 1.50 }; var am = accessMult[access] || 1.0; lo *= am; hi *= am; // Root complexity var rootMult = { contained: 1.0, extensive: 1.25, hardscape: 1.55 }; var rm = rootMult[roots] || 1.0; lo *= rm; hi *= rm; // Multi-stump discount var multiDisc = count > 1 ? Math.min(0.30, (count - 1) * 0.07) : 0; var costPerStump_lo = Math.round(lo); var costPerStump_hi = Math.round(hi); var totalLo = Math.round(lo * count * (1 - multiDisc)); var totalHi = Math.round(hi * count * (1 - multiDisc)); // Backfill add-on var backfillCost = { no: [0, 0], topsoil: [50 * count, 150 * count], sod: [100 * count, 300 * count] }; var bf = backfillCost[backfill] || [0, 0]; var grandLo = totalLo + bf[0]; var grandHi = totalHi + bf[1]; var lines = [ { label: (type === 'grinding' ? 'Stump grinding' : 'Full stump removal') + ' (' + count + (count > 1 ? ' stumps' : ' stump') + ' × ' + fmtRange(costPerStump_lo, costPerStump_hi) + ')', value: fmtRange(totalLo, totalHi) }, ]; if (roots !== 'contained') lines.push({ label: 'Root complexity surcharge', value: '+' + Math.round((rm - 1) * 100) + '%' }); if (access !== 'easy') lines.push({ label: 'Access difficulty surcharge', value: '+' + Math.round((am - 1) * 100) + '%' }); if (count > 1 && multiDisc > 0) lines.push({ label: 'Multi-stump volume discount', value: '-' + Math.round(multiDisc * 100) + '%' }); if (backfill !== 'no') lines.push({ label: backfill === 'topsoil' ? 'Topsoil backfill' : 'Topsoil + sod patch', value: fmtRange(bf[0], bf[1]) }); var note = type === 'full-removal' ? 'Full root removal is necessary if you plan to replant in the same spot or install a patio/concrete over the root zone. Grinding leaves roots to decay naturally over 3\u20135 years.' : 'Stump grinding leaves a chips-filled hole that settles as it decomposes. Add topsoil and sod for a clean finish if the area is in a lawn. Stumps left unground will sprout suckers for years.'; renderResult('stump-grinding-result', lines, grandLo, grandHi, note); }); // ───────────────────────────────────────────── // TAB 4: EMERGENCY / STORM // ───────────────────────────────────────────── document.getElementById('btn-emergency-storm').addEventListener('click', function() { var height = document.getElementById('es-height').value; var situation = document.getElementById('es-situation').value; var crane = document.getElementById('es-crane').value; var timing = document.getElementById('es-timing').value; var quality = document.getElementById('es-quality').value; // Call-out fee var callOut = { budget: [100, 200], standard: [150, 350], premium: [250, 500] }; var co = callOut[quality] || callOut.standard; // Base removal cost by height var baseCosts = { small: [200, 500], medium: [500, 1200], large: [1000, 2200], xlarge: [1800, 4000] }; var base = baseCosts[height] || baseCosts.medium; var lo = base[0]; var hi = base[1]; // Situation multiplier var sitMult = { 'fallen-tree': 1.0, 'on-structure': 1.50, 'hanging-limb': 1.20, leaning: 1.10 }; var sm = sitMult[situation] || 1.0; lo *= sm; hi *= sm; // Quality tier var qualMult = { budget: 0.65, standard: 1.0, premium: 1.40 }; var qm = qualMult[quality] || 1.0; lo *= qm; hi *= qm; // Timing multiplier var timingMult = { 'business-hours': 1.0, 'after-hours': 1.50, weekend: 1.75, immediate: 2.0 }; var tm = timingMult[timing] || 1.0; lo *= tm; hi *= tm; // Crane var craneLo = crane === 'yes' ? 300 : 0; var craneHi = crane === 'yes' ? 600 : 0; var removalLo = Math.round(lo); var removalHi = Math.round(hi); var totalLo = removalLo + co[0] + craneLo; var totalHi = removalHi + co[1] + craneHi; var lines = [ { label: 'Emergency call-out fee', value: fmtRange(co[0], co[1]) }, { label: 'Tree / limb removal', value: fmtRange(removalLo, removalHi) }, ]; if (situation !== 'fallen-tree') lines.push({ label: 'Hazard situation surcharge', value: '+' + Math.round((sm - 1) * 100) + '%' }); if (timing !== 'business-hours') lines.push({ label: 'After-hours / emergency multiplier', value: tm.toFixed(2) + 'x' }); if (crane === 'yes') lines.push({ label: 'Crane rental', value: fmtRange(300, 600) }); var note = situation === 'on-structure' ? 'When a tree is on your home, call your insurance company before any work begins. Document damage with photos. Your homeowner\'s policy typically covers emergency removal costs after your deductible.' : timing !== 'business-hours' ? 'After-hours rates are standard for emergency tree work. If the hazard can wait until business hours without risk, the savings are significant \u2014 call to schedule as early as possible.' : 'Get a hazard assessment report in writing from your arborist \u2014 it documents the emergency condition for insurance claims and protects you from liability if adjacent property is at risk.'; renderResult('emergency-storm-result', lines, totalLo, totalHi, note); }); })();