How much does it cost to run an IoT fleet of 100,000 devices?
A fleet of 100,000 devices reporting telemetry every five minutes costs about 1,886 dollars a month on AWS, or 1.9 cents per device. Here is the breakdown, and why message batching is worth more than every other optimization combined.
Quick answer
A fleet of 100,000 connected devices each publishing a 512-byte telemetry message every five minutes (864 million messages a month) costs roughly 1,886 dollars a month on AWS, or 0.019 dollars per device per month. The largest lines are IoT Core messaging at 864 dollars, connectivity at 350 dollars, the hot time-series store at 216 dollars, and rules engine actions at 130 dollars. Batching five readings into one message cuts messaging and rule action charges by 80 percent, taking the bill to about 1,090 dollars without losing a single data point.
IoT cost is counterintuitive because the data volume is tiny and the message count is enormous. A hundred thousand devices sending half a kilobyte every five minutes produce only 442 GB a month, which costs about ten dollars to store. The same traffic costs over a thousand dollars to ingest, because managed IoT services bill per message and per connection-minute, not per byte.
The workload we are pricing
Assume 100,000 devices in the field in us-east-1, each maintaining a persistent MQTT connection and publishing a 512-byte telemetry payload every five minutes. That is 288 messages per device per day, or 864 million messages a month, totalling about 442 GB. Every message is routed by a rule to a stream, processed, written to a hot store with 30-day retention for dashboards, and archived to object storage for 12 months. Operators run roughly 200 analytical queries a day and view dashboards throughout the day.
The monthly breakdown
| Component | Specification | Monthly cost |
|---|---|---|
| IoT Core messaging | 864M messages at 1.00 per million (5 KB blocks) | $864.00 |
| IoT Core connectivity | 4.38B connection-minutes at 0.08 per million | $350.40 |
| Hot time-series store | DynamoDB provisioned, 350 WCU plus 200 GB | $216.08 |
| Rules engine | 864M rule actions at 0.15 per million | $129.60 |
| Logs and alarms | 200 GB ingest plus retention | $100.00 |
| Dashboard tier | 2 x t3.medium running Grafana | $60.74 |
| Stream buffer | Kinesis 4 shards plus PUT payload units | $55.90 |
| Analytical queries | Athena, about 10 TB scanned at 5.00 per TB | $50.00 |
| Archive storage | 442 GB hot plus 4.8 TB in archive tier | $29.62 |
| Processing | 8.6M batched Lambda invocations, 512 MB, 200 ms | $16.10 |
| Delivery to storage | Firehose 442 GB at 0.029/GB | $12.82 |
| Total | $1,885.26 |
You are paying per message, not per byte
The top four lines, worth 1,560 dollars or 83 percent of the bill, are all counted in messages and connection-minutes. The lines that scale with data volume (storage, Firehose delivery, query scanning) total 92 dollars. That inversion is the single most important thing to understand about IoT economics.
It means the obvious optimizations do not work. Compressing payloads from 512 bytes to 200 saves almost nothing, because IoT Core bills in 5 KB blocks and a 512-byte message and a 200-byte message are both one block. Choosing a cheaper storage class saves a few dollars on a 30 dollar line. The optimization that actually works is sending fewer, larger messages.
Batching, the one lever that matters
| Reporting pattern | Messages/month | Messaging + rules | Total bill |
|---|---|---|---|
| 1 reading per message, every 5 min | 864M | $993.60 | $1,885 |
| 5 readings batched, every 25 min | 173M | $198.95 | $1,090 |
| 12 readings batched, hourly | 72M | $82.80 | $974 |
| 60 readings batched, every 5 hours | 14.4M | $16.56 | $908 |
Batching five readings into a single 2.5 KB message (still inside one 5 KB billing block) cuts the bill by 42 percent and loses nothing: the readings still arrive, just 25 minutes later in the worst case. Going to hourly batches saves 48 percent. Beyond that the curve flattens because connectivity charges, which depend on connection time rather than message count, become the floor.
The trade-off is latency. If a device reports a fault condition, you want that message immediately. The standard pattern is two topics: batched routine telemetry on a slow cadence, and immediate publish for alarms and state changes. Alarms are rare, so they barely register on the bill.
Connectivity is the floor you cannot batch away
Connectivity at 0.08 per million connection-minutes costs 350.40 dollars for 100,000 devices connected continuously. That is 18.6 percent of the bill and it does not respond to batching at all. The only lever is connection duration: devices that connect, publish a batch, and disconnect pay for seconds rather than minutes. A device that connects for 30 seconds once an hour uses 360 connection-minutes a month instead of 43,800, dropping the connectivity line from 350.40 dollars to about 2.88 dollars.
That is a real architectural choice, not a free one. Disconnected devices cannot receive commands, so anything needing remote control or over-the-air updates has to stay connected or implement a wake schedule. For pure telemetry fleets (meters, sensors, environmental monitors) the disconnect pattern is often correct and saves almost 350 dollars a month at this scale.
Hot store choice
Writing 864 million records a month to DynamoDB on-demand would cost 1,080 dollars at 1.25 per million write request units. Provisioned capacity at a steady 333 writes per second needs about 350 WCU, which is 166.08 dollars plus 50 dollars of storage. That 6.5x difference is the clearest case for provisioned capacity anywhere in cloud pricing: IoT telemetry is the most predictable write pattern that exists, and the reasoning is laid out inon-demand versus provisioned cost. Batching writes further, five readings per item, would drop it to about 45 dollars.
Unit economics
At 1,886 dollars for 100,000 devices, telemetry costs 0.019 dollars per device per month, or 0.23 dollars per device per year. With batching and disconnect-after-publish, that falls to about 0.0074 dollars per device per month. For a product charging 2 dollars per device per month for monitoring, the difference between a naive and a batched design is roughly one percent of revenue versus 0.4 percent, which matters a great deal at a million devices. Price the ingestion path from Terraform against theresource catalog before the fleet ships, because reporting cadence is firmware, and firmware is hard to change after deployment.
FAQ
How much does it cost to run an IoT fleet of 100,000 devices?
About 1,886 dollars a month on AWS for devices publishing a 512-byte message every five minutes, which is 864 million messages a month. That covers IoT Core messaging and connectivity, rules engine actions, a stream buffer, batched processing, a hot time-series store with 30-day retention, 12 months of archive, dashboards, and analytical queries. Per device that is 0.019 dollars a month.
Why is IoT ingestion expensive when the data volume is small?
Because managed IoT services bill per message and per connection-minute, not per byte. A hundred thousand devices sending half a kilobyte every five minutes produce only 442 GB a month, which costs about ten dollars to store, but 864 million messages cost 864 dollars to ingest plus 130 dollars in rule actions. The top four lines, all counted in messages and connection time, are 83 percent of the bill.
How do I reduce IoT telemetry costs?
Batch readings into fewer, larger messages. Five readings in one 2.5 KB message still fits inside a single 5 KB billing block, so it costs one message instead of five and cuts the bill by 42 percent, from 1,886 to about 1,090 dollars. Hourly batching saves 48 percent. Compressing payloads saves nothing because billing is per 5 KB block, not per byte.
What do IoT connection-minutes cost?
0.08 dollars per million connection-minutes, which is 350.40 dollars a month for 100,000 devices connected continuously (4.38 billion connection-minutes). Batching does not reduce it. The only lever is connection duration: a device that connects for 30 seconds once an hour uses 360 connection-minutes a month instead of 43,800, cutting the line to under 3 dollars. The trade-off is that disconnected devices cannot receive commands.
Should IoT telemetry use provisioned or on-demand database capacity?
Provisioned, almost always. Writing 864 million telemetry records a month on-demand costs 1,080 dollars at 1.25 per million write units. The same steady 333 writes per second on provisioned capacity needs about 350 WCU at 166 dollars, a 6.5x saving. Telemetry is the most predictable write pattern in cloud computing, which is exactly the shape provisioned capacity is priced for.
How does C3X help with IoT infrastructure cost?
C3X prices your infrastructure from Terraform against a live catalog, so the ingestion path, stream shards, rules, tables, and storage tiers are costed before deployment. That matters most for IoT because reporting cadence lives in firmware: once a fleet ships, changing how often devices publish is expensive, so the cost consequences of the cadence need to be understood at design time.
What to do next
Price your ingestion path before the fleet ships. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.