Standard Letter (No. 10 or smaller)
Large Envelope (Flat)
Postcard
Note: Letters over 3.5 oz are charged as Large Envelopes.
Estimated Postage Cost
$0.00
How to Calculate USPS Envelope Rates
Understanding postage rates for First-Class Mail is essential for budgeting your mailing needs. The United States Postal Service (USPS) determines pricing based on shape, weight, and machinability. This calculator uses standard 2024 pricing tiers to help you estimate the cost of sending letters and large envelopes.
1. Standard Letters vs. Large Envelopes (Flats)
The most common confusion in postage arises between standard letters and large envelopes (often called "Flats").
Standard Letter: Must be rectangular and weigh 3.5 ounces or less. Dimensions must be between 3.5″ x 5″ and 6.125″ x 11.5″.
Large Envelope (Flat): Exceeds the dimensions of a standard letter or weighs more than 3.5 ounces (up to 13 ounces). These must be flexible and uniformly thick.
Note: If you send a standard letter that weighs more than 3.5 ounces, it is automatically classified and priced as a Large Envelope.
2. Weight-Based Pricing Logic
Postage is calculated using a "Base Rate" plus an "Additional Ounce Rate".
Base Rate: Covers the first ounce of weight.
Additional Ounce: Any fraction of an ounce above the first is rounded up to the next whole number. For example, a 1.2 oz letter is charged at the 2 oz rate.
3. Non-Machinable Surcharge
If your envelope is difficult for automated sorting machines to process, the USPS applies a "Non-Machinable Surcharge." This applies if your mail piece is:
Square (height equals width).
Rigid (contains a gift card, thick cardstock, or does not bend easily).
Has clasps, strings, or buttons.
Is too thick or uneven (lumpy).
4. Metered Mail vs. Retail Stamps
Businesses that use a postage meter save money on the base rate for standard letters. While retail stamps (purchased at the Post Office) have a higher base price, metered mail offers a discount on the first ounce. The cost for additional ounces remains the same regardless of payment method.
// Update UI based on Mail Type selection
function toggleOptions() {
var type = document.getElementById("mailType").value;
var nonMachinableContainer = document.getElementById("nonMachinableContainer");
var meteredContainer = document.getElementById("meteredContainer");
var weightContainer = document.getElementById("weightContainer");
if (type === "postcard") {
nonMachinableContainer.style.display = "none";
meteredContainer.style.display = "none";
// Postcards are technically weight limited (usually single piece),
// but we keep weight hidden or optional for simple UX,
// though strictly postcards max out at 4.25×6 inches.
// For this calculator, we hide weight to avoid confusion.
weightContainer.style.display = "none";
} else if (type === "flat") {
nonMachinableContainer.style.display = "none"; // Non-machinable usually applies to letters
meteredContainer.style.display = "flex";
weightContainer.style.display = "block";
} else {
// Letter
nonMachinableContainer.style.display = "flex";
meteredContainer.style.display = "flex";
weightContainer.style.display = "block";
}
}
function calculatePostage() {
// Get Inputs
var mailType = document.getElementById("mailType").value;
var weight = parseFloat(document.getElementById("weightAmount").value);
var isMetered = document.getElementById("isMetered").checked;
var isNonMachinable = document.getElementById("isNonMachinable").checked;
// USPS Rates (2024 Estimates used for logic)
// Retail Letter: $0.73 base
// Metered Letter: $0.69 base
// Large Envelope (Flat): $1.50 base
// Postcard: $0.56 flat
// Extra Ounce: $0.24
// Non-machinable Surcharge: $0.46
var rateRetailLetter = 0.73;
var rateMeteredLetter = 0.69;
var rateFlat = 1.50;
var ratePostcard = 0.56;
var rateExtraOz = 0.24;
var rateSurcharge = 0.46;
var totalCost = 0;
var breakdownHtml = "";
var classification = "";
// Reset Errors
document.getElementById("weightAlert").style.display = "none";
document.getElementById("resultBox").style.display = "none";
// Logic
if (mailType === "postcard") {
totalCost = ratePostcard;
classification = "Postcard Rate";
breakdownHtml = "Fixed rate for standard postcards.";
} else {
if (isNaN(weight) || weight 3.5) {
// Upgrade to Flat automatically
document.getElementById("weightAlert").style.display = "block";
classification = "Large Envelope (Overweight Letter)";
// Flat Math
totalCost = rateFlat;
var chargeableOunces = Math.ceil(weight);
var extraOunces = chargeableOunces – 1;
if (extraOunces > 0) {
totalCost += (extraOunces * rateExtraOz);
}
breakdownHtml += "Base Rate (Flat): $" + rateFlat.toFixed(2) + "";
if (extraOunces > 0) {
breakdownHtml += "+ " + extraOunces + " additional oz @ $" + rateExtraOz.toFixed(2) + " each";
}
} else {
// Standard Letter Math
classification = isMetered ? "Metered Letter" : "Retail Letter";
var base = isMetered ? rateMeteredLetter : rateRetailLetter;
totalCost = base;
var chargeableOunces = Math.ceil(weight);
var extraOunces = chargeableOunces – 1;
breakdownHtml += "Base Rate (1 oz): $" + base.toFixed(2) + "";
if (extraOunces > 0) {
totalCost += (extraOunces * rateExtraOz);
breakdownHtml += "+ " + extraOunces + " additional oz @ $" + rateExtraOz.toFixed(2) + " each";
}
if (isNonMachinable) {
totalCost += rateSurcharge;
breakdownHtml += "+ Non-Machinable Surcharge: $" + rateSurcharge.toFixed(2);
}
}
} else if (mailType === "flat") {
// Large Envelope Math
if (weight > 13) {
alert("Weight exceeds 13 oz limit for First-Class Mail Flats. This item must be sent via Priority Mail.");
return;
}
classification = "Large Envelope";
totalCost = rateFlat;
var chargeableOunces = Math.ceil(weight);
var extraOunces = chargeableOunces – 1;
breakdownHtml += "Base Rate (1 oz): $" + rateFlat.toFixed(2) + "";
if (extraOunces > 0) {
totalCost += (extraOunces * rateExtraOz);
breakdownHtml += "+ " + extraOunces + " additional oz @ $" + rateExtraOz.toFixed(2) + " each";
}
}
}
// Render Result
document.getElementById("resultBox").style.display = "block";
document.getElementById("finalPrice").innerText = "$" + totalCost.toFixed(2);
document.getElementById("priceBreakdown").innerHTML = "Type: " + classification + "" + breakdownHtml;
}