Import Tax and VAT Estimate Calculator
This import tax and VAT estimate calculator helps you preview the extra charges on a cross-border parcel before it arrives.
Run — free
Enter the declared value, shipping charge, estimated duty rate, and import VAT rate in a consistent currency. The calculator builds the customs value, calculates duty, adds that duty to the VAT base, and returns both charges separately. It also shows the combined import charges and estimated landed total, making supplier comparisons and checkout decisions easier to understand.
Enter a consistent parcel value and realistic rates
Start with the value declared for the goods and the shipping charge shown by the seller or carrier. Both amounts must use the same currency because the calculator performs arithmetic rather than currency conversion. Then enter the duty and VAT percentages that you expect the destination authority to apply. The duty rate often depends on the product classification and origin, while VAT usually depends on the destination jurisdiction and the kind of goods. This tool does not look those rates up, so use figures from an official customs source, a carrier quotation, or a qualified adviser when accuracy matters. A zero rate is valid when an exemption or tariff treatment genuinely applies. Do not enter a percentage as a decimal fraction: enter 5 for five percent, not 0.05. The result is most useful as a planning estimate before ordering, because customs officers can revise a declaration, classification, origin decision, or taxable base after inspecting the shipment.
Understand how duty and import VAT are calculated
The calculator first adds declared value and shipping to produce the customs value. It multiplies that customs value by the duty rate to estimate the duty amount. Next, it adds duty to the customs value to form the VAT taxable amount, then applies the VAT rate to that larger base. This sequence matters: simply calculating VAT on the declared value alone can understate the charge because shipping and duty may both be part of the import VAT base. The total import charges field combines duty and VAT, while the landed total adds those charges to the declared value and shipping. Every returned amount remains in the currency unit used for the inputs. Results retain useful decimal precision rather than forcing the rounding rules of a particular currency or customs authority. Actual assessments may round each line differently, include insurance or excise taxes, or use an official exchange rate, so treat small differences as expected.
Use the estimate for purchasing and fulfillment decisions
Use the landed total to compare a foreign supplier with a domestic offer on a more equal basis. A lower product price can become less attractive after international shipping, duty, and VAT are included. Ecommerce teams can also place the calculation beside a checkout estimate, purchasing worksheet, or customer-service response so buyers understand which assumptions produced the number. Keep the declared value, shipping amount, rates, and output together in your records; that makes it easier to update the estimate if a carrier provides a new rate or the product classification changes. The API costs $0.002 per request and uses the same deterministic formula each time, which is helpful for repeatable quoting. It does not include courier brokerage, customs clearance fees, storage, excise duty, anti-dumping measures, penalties, or destination-specific thresholds. Add those separately when relevant, and never present this estimate as a guaranteed amount due or as a substitute for an official customs assessment.
What you can do with it
Compare domestic and overseas suppliers
Add estimated border charges to an overseas quote before comparing its landed cost with a local supplier.
Preview customer import charges
Give a shopper a transparent estimate based on the parcel value, shipping fee, and destination rates.
Plan procurement budgets
Estimate duty and VAT separately so purchasing records show how the expected landed total was built.
FAQ
What does the calculator cost?
Each API request costs $0.002. The calculation is deterministic and does not perform external rate lookups.
Does shipping count toward the customs value?
This estimate includes shipping in the customs value. Actual valuation rules can vary by destination and shipment terms.
Why is VAT calculated after duty?
The estimator applies VAT to customs value plus duty, a common import calculation sequence. Your authority may define additional components.
Does it look up duty or VAT rates?
No. You supply both percentage rates, ideally using an official customs source or carrier quotation.
Are brokerage and carrier fees included?
No. Total import charges here include only estimated duty and VAT. Add brokerage, handling, storage, excise, or other fees separately.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/ecom/import-tax-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"declared_value":200,"shipping":30,"duty_rate":5,"vat_rate":20}'const res = await fetch("https://api.kit.forhosting.com/ecom/import-tax-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"declared_value": 200,
"shipping": 30,
"duty_rate": 5,
"vat_rate": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ecom/import-tax-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"declared_value": 200,
"shipping": 30,
"duty_rate": 5,
"vat_rate": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ecom/import-tax-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"declared_value":200,"shipping":30,"duty_rate":5,"vat_rate":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"declared_value":200,"shipping":30,"duty_rate":5,"vat_rate":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ecom/import-tax-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"declared_value": 200,
"shipping": 30,
"duty_rate": 5,
"vat_rate": 20
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ecom.import_tax_estimate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |