Pricing Methodology
How the prices on this site are sourced, verified, and what they don't cover.
cloud_download1. Where the prices come from
Every night at 02:00 UTC I run a fetch against the Microsoft Azure Retail Prices API. The exact query is:
https://prices.azure.com/api/retail/prices
?api-version=2023-01-01-preview
&$filter=armRegionName eq 'uksouth'
and currencyCode eq 'GBP'The response is stored in a Cloudflare D1 database (SQLite). The calculators query this local cache — not the Azure API in real time — so every estimate reflects the prices from the last nightly refresh.
Current cache status
currency_pound2. How GBP pricing actually works
The Azure Retail Prices API returns GBP natively — it is not a USD figure converted by this site. Microsoft determines the GBP price directly.
Specifically: Microsoft locks the GBP/USD exchange rate monthly, using London closing spot rates from the final business days of the prior month. This means your January invoice is priced using the rate Microsoft locked in December. The GBP rate can shift meaningfully between months if sterling moves — and it has.
This is why the prices shown here can differ slightly from what you see if you manually use the official Azure Pricing Calculator in USD and apply a current spot rate. The official GBP price is the authoritative figure; the USD equivalent is the approximation.
verified3. How prices are verified
The nightly refresh compares incoming prices against what was cached from the previous run. Any changed prices are logged with a timestamp. You can see recent movements on the price history page.
I also spot-check prices against the official Azure pricing pages for the services I use most (Log Analytics, Blob Storage, Virtual Machines) whenever Microsoft announces a pricing update.
If you find a discrepancy, email gravitycontextdev@gmail.com — I aim to investigate and correct within 24 hours.
warning4. What these estimates don't include
These are retail / pay-as-you-go prices. The following are not reflected unless explicitly noted:
- Enterprise Agreement discounts — EA customers typically get 15–30% off list
- Reserved Instance pricing — 1-year saves ~40%, 3-year saves ~60% vs PAYG for VMs
- Azure Hybrid Benefit — if you have on-prem Windows Server / SQL licences
- Savings Plans — compute savings plans applied at subscription scope
- Custom / CSP negotiated pricing
- Dev/Test pricing — Visual Studio subscribers get discounted rates on some services
Always verify through the official Azure Pricing Calculator ↗ before committing to a spending plan.
schedule5. Data freshness
The price cache refreshes every night at 02:00 UTC. If the nightly job fails (Azure API timeout, etc.), the previous night's prices remain live and a stale warning appears on the calculators. Failures are rare — the Azure Retail Prices API has been reliable in my experience — but they happen.
If prices look wrong or outdated, check the price history page for the last successful refresh timestamp, or email me directly.
calculate6. Rounding, precision, and display conventions
Azure prices are stored in the API to many decimal places (e.g., £0.000004567/GB). For readability, the calculators round results to two decimal places in the totals view, and show full precision in formula breakdowns where relevant. This means a calculated total might be off by a penny, but the driving logic is transparent.
When you save or share an estimate via URL, the inputs are encoded but precision may vary depending on the browser and network. For critical cost decisions, regenerate the estimate on a fresh load to confirm.
All monthly estimates assume 730 hours in a month (365 days ÷ 12). Actual months are 28–31 days, so actual costs may vary slightly. For precision, default to calendar-month actuals from your Azure invoice.
public7. Region scope: UK South only
AzureCalc.uk is scoped to UK South exclusively. Prices for other regions (North Europe, West Europe, etc.) are not included. UK South is used as the example region, but pricing for other regions can be looked up via the official Azure Pricing Calculator.
Why UK South specifically? It's where most UK enterprise workloads land, and it's a good baseline for European pricing. If your workload runs across multiple regions, multi-region costs (peering, replication, egress between regions) are shown in the Bandwidth and Networking calculators.
Services may not be available in UK South; if a service is unavailable, the calculator will display a note. Check the official Azure Products by Region to find an alternative.
flag8. Known limitations and edge cases
- Spot instances and variable capacity: Spot VM pricing fluctuates based on capacity and demand. The calculator shows current list price; actual costs may be lower or higher on any given day. Budget using sustained list price, not spot.
- Throttling and burst pricing: Some services (e.g., Cosmos DB, Storage) have burst capacity and throttling penalties that charge extra. The calculator shows base rate only, not penalty surges.
- Bandwidth minimum billing: Some services (e.g., Archive storage) bill a minimum quantity if you retrieve less than that minimum. These are baked into the calculator. Check the service-specific guide for details.
- Free tier and free allowances: Many services have free monthly grants (e.g., Functions: 1M executions free). These are factored into the calculators. Verify the grant still applies to your subscription tier.
- Multi-tenant and dedicated capacity: Some services offer both shared (multi-tenant) and dedicated (single-tenant) options with different pricing. The calculator shows shared pricing by default; dedicated pricing is not included.
arrow_forward9. How to use these estimates
The estimates on AzureCalc.uk are a starting point for team discussions and capacity planning, not procurement quotes. Use them to:
- Compare architectures (e.g., does VMs or Functions make more sense for this workload?)
- Brief non-technical stakeholders on order-of-magnitude costs in GBP
- Spot-check whether your invoice seems reasonable (£10/month Function app, or £100/month?)
- Alert to pricing movements before you commit to a service
For formal quotes or enterprise agreements, always use the official Azure Pricing Calculator or contact sales.
table_chart10. Price sources by calculator
Each calculator reads prices from D1 using the service name stored by the nightly price refresh. The table below is the authoritative reference for independent audits — it documents the exact service name queried, region filter applied, and which prices are auto-refreshed vs hardcoded.
| Calculator | D1 service_name(s) | Region | Refreshed | Hardcoded |
|---|---|---|---|---|
| Blob Storage | Storage | uksouth | ✅ Nightly | None |
| Logic Apps | Logic Apps | uksouth | ✅ Nightly | None |
| Azure Functions | Functions | uksouth | ✅ Nightly | None |
| App Service | Azure App Service | uksouth | ✅ Nightly | None |
| Bandwidth | Bandwidth | uksouth | ✅ Nightly | None |
| Log Analytics | Log Analytics, Azure Monitor | uksouth | ✅ Nightly | None |
| Sentinel | Sentinel | uksouth | ✅ Nightly | None |
| Virtual Machines | Virtual Machines | uksouth | ✅ Filtered (5 SKUs) | None |
| Networking | Virtual Network, Azure DDOS Protection | uksouth | ✅ Nightly | NAT Gateway £0.0449/hr |
| Data Factory | Azure Data Factory | uksouth | ✅ Nightly | Data Flow GP/MO/CO rates |
| Virtual Desktop | Azure Files, Virtual Machines | uksouth | ✅ Nightly | External user access fees (USD) |
| Front Door | Azure Front Door, Azure Front Door Service | Zone 1 | ✅ Nightly | None |
| SQL Database | SQL Database | uksouth | ✅ Nightly | None |
| Azure Firewall | Azure Firewall | uksouth | ✅ Nightly (fallback active) | Fallback rates if D1 empty |
| Azure OpenAI | Foundry Models | uksouth | ✅ Nightly (Sprint 10) | Model rates (API returns £0 for uksouth) |
| Managed Disks | Azure Managed Disks (via productName) | uksouth | ✅ Nightly (Sprint 11) | Pv2/Ultra IOPS+throughput (API returns £0) |
edit_note11. Hardcoded prices — manual verification required
These prices are not returned by the Azure Retail Prices API and are hardcoded in the worker. They must be manually verified before each sprint release.
NAT Gateway hourly £0.0449/hr Verified Apr 2026 Source: azure.microsoft.com/en-gb/pricing/details/azure-nat-gateway/ ADF Data Flow GP £0.216/vCore-hr Verified Apr 2026 ADF Data Flow MO £0.270/vCore-hr Verified Apr 2026 ADF Data Flow CO £0.172/vCore-hr Verified Apr 2026 Source: azure.microsoft.com/en-gb/pricing/details/data-factory/ AVD external (apps) $5.50/user/month Verified Apr 2026 AVD external (full) $10.00/user/month Verified Apr 2026 Source: azure.microsoft.com/en-gb/pricing/details/virtual-desktop/ Note: USD-denominated, converted at approximate rate for GBP display OpenAI gpt-4o input £0.0019/1K tokens Verified Apr 2026 OpenAI gpt-4o output £0.0075/1K tokens Verified Apr 2026 OpenAI gpt-4o-mini in £0.0001/1K tokens Verified Apr 2026 OpenAI gpt-4o-mini out £0.0005/1K tokens Verified Apr 2026 OpenAI o3-mini input £0.0008/1K tokens Verified Apr 2026 OpenAI o3-mini output £0.0033/1K tokens Verified Apr 2026 OpenAI gpt-4 input £0.0226/1K tokens Verified Apr 2026 OpenAI gpt-4 output £0.0451/1K tokens Verified Apr 2026 Source: Azure Retail Prices API direct (Foundry Models service, GBP endpoint) Note: Changes frequently — verify every sprint Premium SSD v2 IOPS £0.00657/IOPS/month Verified Apr 2026 Premium SSD v2 throughput £0.2197/MBps/month Verified Apr 2026 Ultra Disk IOPS £0.0550/IOPS/month Verified Apr 2026 Source: Microsoft Azure documentation (API returns £0 for these meters) Note: Re-verify each sprint — API may start returning these
code12. D1 verification queries
Run these queries against the D1 database to verify stored prices match the live API. Services marked ⚠️ require an additional source check beyond the D1 query alone.
-- Blob Storage: Hot LRS per GB/month (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Storage' AND sku_name = 'Hot LRS Data Stored' AND arm_region_name = 'uksouth'; -- Log Analytics: PAYG ingestion per GB (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Log Analytics' AND sku_name = 'Analytics Logs' AND unit_of_measure = '1 GB' AND arm_region_name = 'uksouth'; -- Sentinel: PAYG per GB (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Sentinel' AND sku_name = 'Security Insights' AND unit_of_measure = '1 GB' AND arm_region_name = 'uksouth'; -- Virtual Machines: D2s v3 Linux (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Virtual Machines' AND sku_name = 'D2s v3' AND arm_region_name = 'uksouth'; -- Networking: VNet peering per GB (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Virtual Network' AND arm_region_name = 'uksouth' ORDER BY sku_name; -- ⚠️ Networking: NAT Gateway — NOT IN D1 -- Hardcoded at £0.0449/hr. Verify manually: -- https://azure.microsoft.com/en-gb/pricing/details/azure-nat-gateway/ -- Networking: Public IP (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Virtual Network' AND sku_name LIKE '%Public IP%' AND arm_region_name = 'uksouth'; -- Data Factory: Copy Activity DIU-hour (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Azure Data Factory' AND sku_name LIKE '%Data Movement%' AND arm_region_name = 'uksouth'; -- ⚠️ Data Factory: Data Flow rates — NOT IN D1 -- GP £0.216, MO £0.270, CO £0.172/vCore-hr -- Verify: https://azure.microsoft.com/en-gb/pricing/details/data-factory/ -- Azure Files: Premium provisioned storage (Virtual Desktop FSLogix) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Storage' AND sku_name LIKE '%Premium Files%' AND arm_region_name = 'uksouth' ORDER BY sku_name; -- ⚠️ Front Door: Zone 1 (NOT uksouth — zone-based pricing) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Azure Front Door' AND arm_region_name = 'Zone 1' ORDER BY sku_name; -- SQL Database: General Purpose vCore (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'SQL Database' AND sku_name LIKE '%General Purpose%' AND arm_region_name = 'uksouth' ORDER BY sku_name LIMIT 10; -- Azure Firewall: Standard deployment (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Azure Firewall' AND arm_region_name = 'uksouth' ORDER BY sku_name; -- ⚠️ Azure OpenAI: GPT-4o (Foundry Models — changes frequently) -- If 0 rows returned, hardcoded values are in use — verify via API directly. SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Foundry Models' AND sku_name LIKE '%gpt-4o%' ORDER BY sku_name; -- Managed Disks: Standard HDD S10 (UK South) SELECT sku_name, retail_price, unit_of_measure FROM azure_prices WHERE service_name = 'Azure Managed Disks' AND sku_name LIKE '%S10%' AND arm_region_name = 'uksouth';
science13. Formula-level test cases
For calculators where rate verification alone is insufficient, these expected outputs verify the calculation logic. These are the test cases for the independent accuracy audit after Sprint 14.
Log Analytics
Test 1 — PAYG, no Sentinel, 30-day retention
Input: 15 GB/day, PAYG tier, 30-day retention, no Sentinel
Expected: 15 × 30 × £2.167 = £975.15/month ingestion
Retention: £0 (≤31 days free)
Total: ~£975/month
Test 2 — Commitment tier break-even
Input: 95 GB/day, 100 GB/day commitment tier
Expected: 100 × 30 × £1.937 = £5,811/month commitment
vs PAYG: 95 × 30 × £2.167 = £6,175.65/month
Saving: ~£365/month — commitment tier recommended
Test 3 — Sentinel overlay
Input: 10 GB/day, PAYG, Sentinel enabled
Expected: 10 × 30 × (£2.167 + £2.297) = £1,339.20/monthSQL Database
Test 1 — DTU Standard S3
Input: Standard S3 (100 DTUs), single database
Expected: flat monthly rate from D1 for S3 uksouth
No transaction charges (DTU bundles IO)
Test 2 — vCore GP with AHB + 1-year RI
Input: GP, 4 vCores, provisioned, AHB enabled, 1-year RI
Expected: base compute × (1 - AHB discount) × (1 - RI 1yr ~33%)
Storage charged separately per GB
AHB removes Windows licence component (~30% of compute)
Test 3 — Savings Plan (March 2026)
Input: GP, 4 vCores, provisioned, Savings Plan 1-year
Expected: up to 35% saving vs PAYG compute
Note: Savings Plan and RI are mutually exclusiveAzure OpenAI
Test 1 — Standard mode, moderate usage Input: GPT-4o, 1M input tokens/day, 200K output tokens/day Expected daily: (1000 × £0.0019) + (200 × £0.0075) = £1.90 + £1.50 = £3.40 Expected monthly: £3.40 × 30 = £102/month Test 2 — PTU break-even Input: 100 PTUs, 1-month commitment, 22 active days/month PTU monthly = 100 × £0.7524 × 730 × (1 - 0.05) = £521.79/month Break-even = £521.79 ÷ £3.40 = ~153 days (recommendation: Standard) Test 3 — Image requests in break-even Input: GPT-4o, 500K tokens/day, 1,000 image requests/day Standard daily = (500 × £0.0019) + 0 + (1000 × £0.0577) = £0.95 + £57.70 = £58.65 Verify: break-even denominator includes image cost
Virtual Desktop
Test 1 — 50 internal users, eligible M365
Input: 50 internal users, M365 eligible, 5× D2s v3 session hosts,
FSLogix Premium 500GB
Expected: VM cost = 5 × D2s_v3_rate × 730
Storage: Premium Files rate × 500GB
Licensing: £0 (M365 eligible)
Per-user = total ÷ 50
Test 2 — FSLogix Standard vs Premium comparison
Input: 500 GB provisioned, 1M transactions/month
Expected: Standard = base_fee + (1000 × transaction_rate)
Premium = base_fee_premium (no transactions)
Calculator flags if Standard total > Premium total