Estimate your mailing costs for local Singapore delivery and international airmail zones. Simply enter the weight of your item and select the destination to get an instant postage estimate.
Local (Singapore)
Zone 1 (Malaysia & Brunei)
Zone 2 (Asia Pacific – except AU/JP/NZ)
Zone 3 (Australia, Japan, NZ, Rest of World)
Please enter a valid weight.
Standard Regular (Local)
Standard Large (Local)
Non-Standard (Local)
Tracked Mail (Local)
Estimated Postage:
SGD $0.00
Note: Rates are estimates based on standard public rate cards. Registered mail adds additional fees. Dimensions must fit within SingPost standard specifications.
Understanding Singapore Post Mailing Rates
Sending mail locally or internationally from Singapore requires understanding the tier-based pricing system used by SingPost. The cost is primarily determined by the destination zone, the weight of the item, and the dimensions of the envelope or package.
Local Mail Categories
For mail delivered within Singapore, items are categorized by size:
Standard Regular: Small envelopes (up to C5 size) weighing up to 40g. This is the cheapest option for letters.
Standard Large: Larger envelopes (up to C4 size) weighing up to 500g.
Non-Standard: Items that do not fit the standard dimension criteria or are oddly shaped/bulky.
Tracked Mail: A service that offers tracking directly to the letterbox, suitable for small parcels.
International Zones
When sending overseas via Airmail, countries are grouped into zones:
Zone 1: Malaysia and Brunei.
Zone 2: Countries in Asia and the Pacific (excluding Australia, Japan, and New Zealand).
Zone 3: Australia, Japan, New Zealand, and the Rest of the World (Europe, Americas, Africa, etc.).
Weight Limits
It is crucial to weigh your mail accurately. A "step-up" pricing model applies. For example, local standard mail has a tier for up to 20g and another for up to 40g. International mail generally jumps in price every 10g or 20g depending on the service type. Always round up to the nearest gram to ensure sufficient postage.
Dimensions Matter
Even if an item is light, if it is thick or bulky, it may be classified as "Non-Standard" or a "Packet," which attracts a higher rate. Ensure your letters are flat and within the standardized aspect ratios to enjoy the lowest rates.
// Initial setup on load
window.onload = function() {
updateOptions();
};
function updateOptions() {
var dest = document.getElementById("destination").value;
var typeSelect = document.getElementById("mailType");
// Clear existing options
typeSelect.innerHTML = "";
if (dest === "local") {
var opt1 = new Option("Standard Regular (Paper/Card)", "standard");
var opt2 = new Option("Standard Large (Paper/Card)", "standard_large");
var opt3 = new Option("Non-Standard (Bulky/Odd)", "non_standard");
var opt4 = new Option("Tracked Mail (Letterbox)", "tracked");
typeSelect.add(opt1);
typeSelect.add(opt2);
typeSelect.add(opt3);
typeSelect.add(opt4);
} else {
// International
var opt1 = new Option("Letter / Printed Paper", "int_letter");
var opt2 = new Option("Registered Article (Airmail)", "int_registered");
typeSelect.add(opt1);
typeSelect.add(opt2);
}
}
function calculatePostage() {
var weightInput = document.getElementById("weight");
var weight = parseFloat(weightInput.value);
var dest = document.getElementById("destination").value;
var type = document.getElementById("mailType").value;
var resultDiv = document.getElementById("result");
var costDiv = document.getElementById("postageCost");
var detailsDiv = document.getElementById("postageDetails");
var errorDiv = document.getElementById("weightError");
// Validation
if (isNaN(weight) || weight <= 0) {
errorDiv.style.display = "block";
resultDiv.style.display = "none";
return;
} else {
errorDiv.style.display = "none";
}
var cost = 0;
var message = "";
// LOCAL CALCULATIONS
if (dest === "local") {
if (type === "standard") {
if (weight <= 20) {
cost = 0.31;
message = "Standard Regular (Up to 20g)";
} else if (weight 500) {
message = "Exceeds max weight for Standard Mail (500g). Use Non-Standard/Parcel.";
cost = 0; // Indicating error or custom quote needed
}
}
} else if (type === "standard_large") {
if (weight <= 500) {
cost = 0.60;
message = "Standard Large (Up to 500g)";
} else {
message = "Exceeds max weight for Standard Mail (500g). Use Non-Standard.";
cost = 1.55; // Jump to basic non-standard
}
} else if (type === "non_standard") {
if (weight <= 40) {
cost = 0.60;
} else if (weight <= 100) {
cost = 0.90;
} else if (weight <= 250) {
cost = 1.15;
} else if (weight <= 500) {
cost = 1.70;
} else if (weight <= 1000) { // 1kg
cost = 2.55;
} else if (weight 0 && message === "") message = "Non-Standard Mail Rate";
} else if (type === "tracked") {
if (weight <= 20) {
cost = 2.55;
} else if (weight <= 40) {
cost = 2.55;
} else if (weight <= 100) {
cost = 2.55; // Recent tracked rates are often flat or simplified
} else if (weight <= 250) {
cost = 2.90; // Estimate
} else if (weight 0) message = "Tracked Mail (Letterbox)";
}
}
// INTERNATIONAL CALCULATIONS
else {
// Base rates estimates (Airmail)
// Zone 1: MY/BN, Zone 2: Asia, Zone 3: ROW
var baseRate = 0;
var stepRate = 0;
var regFee = (type === "int_registered") ? 3.60 : 0; // Registration fee add-on
if (dest === "zone1") {
if (weight <= 20) cost = 0.80;
else if (weight <= 50) cost = 1.00;
else if (weight <= 100) cost = 1.50; // estimate
else {
// heavy items logic simplified
var steps = Math.ceil((weight – 100) / 100);
cost = 1.50 + (steps * 1.10);
}
message = "Zone 1 (Malaysia & Brunei)";
}
else if (dest === "zone2") {
if (weight <= 20) cost = 0.90;
else if (weight <= 50) cost = 1.30;
else if (weight <= 100) cost = 2.20;
else {
var steps = Math.ceil((weight – 100) / 100);
cost = 2.20 + (steps * 2.00);
}
message = "Zone 2 (Asia Pacific)";
}
else if (dest === "zone3") {
if (weight <= 20) cost = 1.50;
else if (weight <= 50) cost = 2.20;
else if (weight 2000) {
cost = 0;
message = "Items over 2kg must be sent via Speedpost.";
} else {
cost = cost + regFee;
if (regFee > 0) message += " + Registered Service";
}
}
// Display Result
if (cost > 0) {
costDiv.innerHTML = "SGD $" + cost.toFixed(2);
detailsDiv.innerHTML = message + " (" + weight + "g)";
} else {
costDiv.innerHTML = "Quote N/A";
detailsDiv.innerHTML = message || "Please check weight limits for this service.";
}
resultDiv.style.display = "block";
}