Azure Blob Storage pricing charges for GB stored per month by access tier and redundancy, for operations per 10,000, for GB retrieved from the cooler tiers, for early deletion before a tier's minimum retention, and for traffic that leaves the region. In most accounts the GB stored in the hot tier dominate; in pipelines with many small objects the operations do, and in archives that someone decides to read, the retrieval does.
Pricing dimensions
| Dimension | Unit | What drives it | Optional |
|---|---|---|---|
| Data stored | GB per month, as the month's daily average, billed in binary GiB | volume per access tier (hot, cool, cold, archive) and redundancy (LRS, ZRS, GRS, RA-GRS, GZRS, RA-GZRS); hot is banded by volume | none |
| Operations | per 10,000, by type: write, read, list and create container, all other | every REST request; the cooler the tier, the dearer the operation; deletes are free | none |
| Data retrieval | GB read | cool, cold and archive only; archive also as priority retrieval for fast rehydration | none in hot |
| Early deletion | GB times the remaining days of the minimum, at the tier's storage price | deleting, overwriting or changing tier before 30 days (cool), 90 days (cold) or 180 days (archive) in general-purpose v2 accounts | none in hot |
| Index | GB per month | accounts with a hierarchical namespace (Data Lake Storage) only, always at the hot price | hierarchical namespace only |
| Geo-replication | GB transferred to the paired region | write volume on GRS, RA-GRS, GZRS, RA-GZRS | geo-redundant accounts only |
| Bandwidth | GB leaving the region | downloads to clients outside Azure, copies to other regions; on the Bandwidth meters | none |
| Feature meters | per tag and month (index tags), per change (change feed), per hour (SFTP endpoint), per million objects (inventory), per month (encryption scopes), per GB scanned (query acceleration), per MB (point-in-time restore) | only once enabled; versioning and soft delete cost through the extra versions and snapshots they store | all optional |
| Purchase option | reserved capacity for one or three years | a steady volume of block blobs and Data Lake Storage in standard accounts | see reserved capacity for managed services |
The tiers differ in availability (99.9% hot, 99% cool, cold and archive) and in latency: hot, cool and cold return the first byte in milliseconds, archive is offline and rehydrates in up to 15 hours at standard priority or under an hour at high priority for objects below 10 GB, with at most 10 GiB per hour and storage account in priority mode. Archive exists only with LRS, GRS or RA-GRS, not with ZRS, GZRS or RA-GZRS. The smart tier moves data between hot, cool and cold on its own, charges a monitoring fee for it and, according to Microsoft, drops the charges for tier changes, early deletion and rehydration. What the three providers' tier models share is covered under storage tiers and lifecycle; the comparison with block and file storage under block, object and file storage.
How it appears in your billing data
In the cost export every blob line carries MeterCategory Storage and the storage account as its ResourceId; one account produces one line per day for each combination of tier, redundancy and meter type. MeterSubCategory names the product, General Block Blob v2 for block blobs in general-purpose v2 accounts, and MeterName combines tier, redundancy and meter type: Hot LRS Data Stored, Cool GRS Data Stored, Cold ZRS Data Stored and Archive LRS Data Stored for capacity; Hot LRS Write Operations, Hot Read Operations, LRS List and Create Container Operations, All Other Operations, Cool LRS Write Operations, Cool Read Operations, Cold LRS Read Operations, Archive Read Operations and Archive Priority Read Operations for operations; Cool Data Retrieval, Cold LRS Data Retrieval, Archive Data Retrieval and Archive Priority Data Retrieval for retrieval; Cool LRS Early Delete, Cold LRS Early Delete and Archive LRS Early Delete for early deletion; and Index Tags for blob index tags. UnitOfMeasure tells the meter type apart: 1 GB/Month for capacity, 10K for operations, 1 GB for retrieval, early deletion and replication.
A day's operations appear as fractions of 10,000, not as counts; to count requests, multiply Quantity by 10,000. Accounts with a hierarchical namespace, legacy Blob Storage accounts and premium block blob accounts each carry a product of their own in MeterSubCategory, the hierarchical namespace also the Index meter. Outbound traffic to the internet is not under Storage but under Bandwidth (Azure bandwidth and networking pricing); geo-replication stays under Storage as the account's data transfer meter. An export that writes into a storage account generates write operations and capacity in that account in turn.
In the FOCUS export the same values sit in x_SkuMeterCategory (Storage), x_SkuMeterSubcategory (General Block Blob v2) and SkuMeter (the meter name); ServiceName names the service, ChargeCategory is Usage for consumption and Purchase for buying reserved capacity, whose consumption hours carry a CommitmentDiscountId. On operation meters x_PricingBlockSize carries the block size from the unit, 10,000 for 10K, so PricingQuantity counts billed blocks and ConsumedQuantity counts requests. Which account carries the cost shows in cost analysis with the Service name filter set to Storage and grouping by resource; Microsoft names the export as the recommended path for any further analysis.
Levers
Configuration. The access tier per blob is the biggest lever: the capacity price falls from hot through cool and cold to archive while operations and retrieval rise. The arithmetic only works when the minimum retention is kept, because a change before 30, 90 or 180 days charges the remaining days at the tier price. The account's default tier decides where new blobs without an explicit tier land; changing it bills write operations, or read operations plus retrieval, for every blob whose tier is inferred. Redundancy costs capacity: GRS roughly doubles the LRS price and adds replication transfer, ZRS sits between; whether data needs a second region is a decision per account, because the redundancy applies to every service in the account. The levers across providers are covered under storage optimisation.
Purchase option. Reserved capacity for one or three years lowers the capacity price for block blobs and Data Lake Storage in standard accounts, but covers neither operations nor retrieval nor bandwidth; it pays off on a stable volume that lifecycle rules are not about to shrink (reserved capacity for managed services).
Architecture. Lifecycle rules move blobs by creation, modification or last access date and delete expired versions and snapshots; the policy is free, the Set Blob Tier operations are billed, and last access tracking bills at most one operation per object in 24 hours. Large objects instead of many small ones cut operations and speed up rehydration. Versioning and soft delete are protection that costs capacity: every overwrite creates a version or snapshot that stays stored. Downloads through a CDN or processing in the same region keep traffic off the bandwidth meters (data transfer optimisation); forgotten accounts, containers and diagnostic logs without a retention period belong to the idle and orphaned resources. What Azure Files costs instead of blobs is under Azure Files and NetApp Files pricing, what backups put into blobs under Azure Backup and Site Recovery pricing.
Where it goes wrong
- Early delete lines after a clean-up. A lifecycle rule or a script deleted or moved blobs out of cool, cold or archive before 30, 90 or 180 days had passed; an overwrite through Put Blob or Copy Blob counts too. Check
MeterNameforEarly Deleteand align the rule thresholds with the minimum retention. - One archive retrieval costs more than a year of storage. A restore ran at high priority, or many small blobs were rehydrated so that the read operations per 10,000 outweighed the retrieval per GB. Read
Archive Priority Read OperationsandArchive Read Operationsseparately; use standard priority, and Copy Blob instead of Set Blob Tier while the 180 days are not over. - The account's tier change produced a one-day spike. The default tier was switched from hot to cool or back, and every blob with an inferred tier was billed as a write, or as a read plus retrieval. Set tiers per blob or per lifecycle rule in future.
- Operations exceed capacity. An application writes streams in small blocks, lists containers in loops or queries metadata per file; in cold or archive each operation weighs a multiple of hot. Compare the operation meters per account with the access pattern and consolidate objects before moving them.
- Versions and snapshots grow faster than the data. Versioning or soft delete is on and a workload keeps overwriting the same blobs; every overwrite stores another version. Shorten retention or put frequently overwritten data into an account without versioning.
- The archived blob goes back to archive. After rehydration through Set Blob Tier the last modified time stayed old and the lifecycle rule archived the blob again. Add the
daysAfterLastTierChangeGreaterThancondition to the rule, or rehydrate with Copy Blob. - A log container fills the account. Classic storage analytics logs or diagnostic exports keep running without a retention period. Set retention and add the container to a lifecycle rule.
Example
List prices from the Azure Retail Prices API in EUR for Germany West Central, product General Block Blob v2 (flat namespace), read on 2026-10-21: data stored costs per GB and month with LRS EUR 0.0172 in hot for the first 51,200 GB (EUR 0.0165 up to 512,000 GB, EUR 0.0158 beyond), EUR 0.0088 in cool, EUR 0.004 in cold and EUR 0.0016 in archive; with ZRS EUR 0.0198 in hot, EUR 0.0115 in cool and EUR 0.0044 in cold; with GRS EUR 0.0345 in hot, EUR 0.0176 in cool, EUR 0.0071 in cold and EUR 0.0025 in archive; with RA-GRS EUR 0.0431 in hot and EUR 0.022 in cool (the hot prices each for the first 51,200 GB). Per 10,000 operations with LRS, writes cost EUR 0.0475 in hot, EUR 0.088 in cool, EUR 0.1584 in cold and EUR 0.1056 in archive; reads EUR 0.0038 in hot, EUR 0.0088 in cool, EUR 0.088 in cold and EUR 4.7298 in archive, or EUR 57.1982 as priority retrieval; list and create container EUR 0.0475 and all other operations EUR 0.0038 in hot. Data retrieval costs per GB EUR 0.0088 from cool, EUR 0.0264 from cold, EUR 0.0211 from archive and EUR 0.1144 as priority retrieval; early deletion per GB and remaining month EUR 0.0088 in cool, EUR 0.004 in cold and EUR 0.0016 in archive. One GB sits in archive for a year at EUR 0.0192, a single standard retrieval of that GB costs EUR 0.0211 and a priority retrieval EUR 0.1144: archive pays off for data that is almost never read, and the read operations per 10,000 make many small objects dearer there than a few large ones.
Sources
Read on 2026-10-21. Microsoft Learn: Access tiers for blob data, Blob rehydration from the archive tier, Lifecycle management overview, Azure Storage redundancy, Plan and manage costs for Azure Blob Storage, Cost details fields, FOCUS cost and usage details schema. Prices: Azure Retail Prices API in EUR, General Block Blob v2 in Germany West Central.