Calculate the exact amount of shingles, squares, and bundles needed for your roofing project.
Flat (0/12)
2/12 Low Slope
4/12 Standard
6/12 Standard
8/12 Steep
10/12 Steep
12/12 Very Steep
Actual Roof Area:0 sq. ft.
Total Area (incl. Waste):0 sq. ft.
Roofing Squares Needed:0
Bundles Recommended:0
How to Use the Roofing Material Calculator
Planning a roof replacement requires precision to avoid overspending on materials or running out of shingles mid-job. This calculator helps you determine the total square footage, the number of "squares" (a roofing term for 100 square feet), and the required number of shingle bundles.
Understanding the Core Metrics
Roof Pitch: This is the steepness of your roof. It is expressed as "rise over run." A 4/12 pitch means the roof rises 4 inches for every 12 inches of horizontal distance. Steeper roofs require more material than flat ones for the same footprint.
The "Square": In the roofing industry, one "square" equals 100 square feet of roof surface.
Waste Factor: Most professionals recommend adding 10% to 15% for waste. This accounts for shingles that are cut for valleys, ridges, and starter strips, as well as potential breakage.
Bundles: Standard asphalt shingles usually come in 3 bundles per square. Each bundle covers roughly 33.3 square feet.
Example Calculation
Imagine you have a simple gable roof with a base footprint of 40 feet by 30 feet (1,200 sq. ft.) and a standard 6/12 pitch.
Base Area: 40 × 30 = 1,200 sq. ft.
Pitch Multiplier: A 6/12 pitch has a multiplier of approximately 1.118.
Actual Surface Area: 1,200 × 1.118 = 1,341.6 sq. ft.
Waste (10%): 1,341.6 × 1.10 = 1,475.76 sq. ft.
Squares: 1,475.76 / 100 = 14.76 squares.
Bundles: 14.76 × 3 = 45 bundles (rounded up).
Pro Tip for Installation
When purchasing your shingles, always check the coverage listed on the packaging. While 33.3 sq. ft. is the industry standard for architectural shingles, some premium or designer shingles may have different coverage rates per bundle. Always round up to the nearest full bundle to ensure you have enough material to finish the job without returning to the supplier.
function calculateRoofing() {
// Get input values
var length = parseFloat(document.getElementById('roofLength').value);
var width = parseFloat(document.getElementById('roofWidth').value);
var pitch = parseFloat(document.getElementById('roofPitch').value);
var waste = parseFloat(document.getElementById('wasteFactor').value);
// Validation
if (isNaN(length) || isNaN(width) || isNaN(waste) || length <= 0 || width <= 0) {
alert("Please enter valid positive numbers for length and width.");
return;
}
// Calculate slope multiplier based on pitch (Rise/Run)
// Multiplier = sqrt(1 + (rise/run)^2)
var slopeMultiplier = Math.sqrt(1 + Math.pow((pitch / 12), 2));
// Base footprint area
var baseArea = length * width;
// Actual surface area adjusted for slope
var actualArea = baseArea * slopeMultiplier;
// Total area including waste factor
var wasteMultiplier = 1 + (waste / 100);
var totalAreaWithWaste = actualArea * wasteMultiplier;
// Calculate Squares (1 square = 100 sq ft)
var squares = totalAreaWithWaste / 100;
// Calculate Bundles (Assuming 3 bundles per square / 33.33 sq ft per bundle)
var bundleCoverage = 33.3333;
var totalBundles = totalAreaWithWaste / bundleCoverage;
// Display results
document.getElementById('resArea').innerText = actualArea.toFixed(2) + " sq. ft.";
document.getElementById('resTotal').innerText = totalAreaWithWaste.toFixed(2) + " sq. ft.";
document.getElementById('resSquares').innerText = squares.toFixed(2) + " Squares";
document.getElementById('resBundles').innerText = Math.ceil(totalBundles) + " Bundles";
// Show the results div
document.getElementById('calcResults').style.display = 'block';
}