Hotel price per night calculator
A five-night stay totaling 847.35 comes to 169.47 per night once every tax and fee is in, the figure that really compares with other listings rather than the headline rate. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total price
- 847.35
- Nights
- 5
- Price per night
- 169.47
- Precision
- 2
Hotel search results often emphasize a nightly rate while the checkout screen reveals a different total after taxes, resort charges, cleaning costs, or service fees. This calculator starts with the complete stay price and divides it by the number of nights, producing one effective per-night figure that can be compared across listings. Enter the same kind of all-in total for every property, choose the relevant stay length, and use the result to identify the genuinely less expensive option rather than the one with the lowest advertised headline rate.
Start with the complete price for the stay
For a meaningful comparison, enter the amount you would actually pay for the entire reservation. That generally means the room charge plus mandatory taxes, destination fees, resort fees, service charges, and any other unavoidable amount shown before payment. Do not use the prominently advertised base rate if the booking page later adds required costs, because dividing an incomplete total only reproduces the misleading comparison you are trying to avoid.
Apply the same rule to every hotel: either use fully inclusive totals for all listings or wait until each checkout page reveals them. Optional extras such as parking, breakfast, pet charges, or a refundable upgrade should be included only when you know you will buy them, and then they should be included consistently for every suitable property. The calculator accepts a non-negative total, so a genuinely free or fully redeemed stay can be represented as zero.
It does not fetch prices or decide which fees apply; the quality of the comparison depends on entering comparable totals from the booking offers you are evaluating.
Divide the total by the exact number of nights
The calculation is deliberately simple and transparent: effective price per night equals the total stay price divided by the number of nights. A five-night reservation totaling 847.35 therefore has a different comparable nightly cost from a three-night reservation with the same total. Nights must be a positive whole number because hotel stays are normally quoted by overnight occupancy, and division by zero or a negative stay length has no useful meaning.
The optional precision setting controls only how many decimal places appear in the returned figures; it does not change the underlying division. Two decimal places are the default because most currency amounts are displayed that way, while additional precision can help with auditing, allocation, or comparisons where rounded values are extremely close. The result also repeats the normalized total, night count, precision, and formula so an automated workflow can preserve the assumptions alongside the answer.
Currency conversion is intentionally outside the calculation: totals should already use the same currency before their nightly results are compared.
Use the effective rate to compare like with like
Once each listing has an all-in nightly result, compare those figures rather than the initial room-rate labels. This is especially helpful when one property charges a large fixed resort or cleaning fee, because that fee affects a short visit more heavily than a long one. Keep the stay dates, occupancy, room type, cancellation terms, meal plan, and included amenities aligned; a lower calculated nightly price is not automatically better value when the offers provide materially different benefits or flexibility.
If dates or the number of travelers change, obtain fresh totals and calculate again, since taxes and fees may change with the booking. For business travel, the output can support a documented approval by showing exactly how an inclusive total became a comparable nightly amount. For personal trips, it provides a quick shortlist before considering location and quality.
Treat the result as a normalization tool, not as a guarantee that a quoted price remains available.
What you can do with it
Compare fee-heavy listings
Normalize checkout totals when hotels distribute mandatory resort, destination, or service fees differently.
Check a travel-policy limit
Convert an inclusive reservation total into a nightly figure that can be checked against an employer's lodging allowance.
Audit booking options
Record the total, night count, formula, and rounded nightly cost beside each shortlisted property.
FAQ
Which price should I enter?
Enter the full price for the stay, including every known mandatory tax and fee, so each listing is evaluated on the same basis.
Can I compare hotels quoted in different currencies?
Convert the totals to one currency first. This calculator divides amounts but does not perform currency conversion.
Does rounding change which hotel is cheaper?
The displayed result is rounded to the selected precision. Increase precision when two calculated nightly prices are close.
Should optional extras be included?
Include an optional extra only if you expect to purchase it, and apply the same inclusion rule to all listings being compared.
Why can a lower advertised rate end up costing more?
Because the advertised rate often leaves out taxes, resort charges, cleaning or service fees that only appear at checkout. Dividing the full total by the nights shows the real per-night cost, which can reverse the order of two listings.
Related tools
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/travel2/hotel-price-per-night-compare \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_price":847.35,"nights":5}'const res = await fetch("https://api.kit.forhosting.com/travel2/hotel-price-per-night-compare", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_price": 847.35,
"nights": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel2/hotel-price-per-night-compare",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_price": 847.35,
"nights": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel2/hotel-price-per-night-compare", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_price":847.35,"nights":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_price":847.35,"nights":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel2/hotel-price-per-night-compare", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total_price": 847.35,
"nights": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel2.hotel_price_per_night_compare",
"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. |
Technical notes
Use the effective rate to compare like with like
API access costs $0.002 per request, while the deterministic arithmetic makes repeated comparisons easy to reproduce.
Technical questions
What happens if nights is zero or negative?
The request returns an invalid_input error because a per-night price requires a positive whole number of nights.
What does an API calculation cost?
Each API request costs $0.002. The browser calculation can use the same deterministic logic without network access.