TL;DR. AWS Location Service pricing bills every position at least twice: once when a device writes it, and again for every geofence collection the tracker is linked to. For a hypothetical fleet of 500 vehicles reporting every 5 seconds, 10 hours a day, with two linked collections, that is $15,335 a month, and 87% of it is geofence evaluations. A 30-second interval brings it to $3,010; one collection instead of two, to $1,860. The tracker's own position filter does not reduce writes. And the GPS history costs a few dollars a month to store, but hundreds to scan if nobody partitions it.

AWS Location Service pricing has no upfront cost: you pay per request. Two settings decide most of a fleet's bill: how often each vehicle reports, and how many geofence collections the tracker is linked to. Storage is the small line, until someone queries it.

Below, one fleet priced from AWS's list prices for US East (N. Virginia), read from the AWS Price List API and the pricing page on October 28, 2026. It is a worked model, not a measured benchmark: no fleet ran.

Location Service bills positions written and positions evaluated

MeterUS East list price, per 1,000What counts
Positions written$0.05 first 500K, $0.035 to 5M, $0.025 to 50M, $0.0125 aboveEach position in a BatchUpdateDevicePosition request
Positions evaluated$0.16 first 250K, $0.11 to 2M, $0.07 to 25M, $0.06 aboveEach position, against all geofences in one collection
Batch position reads$0.05Requests; one returns up to 100 devices
Geofence-months stored$0.20Only geofences kept longer than a month
Geofences created, deleted or described$0.05Geofences in the request
Map tiles$0.04Tile requests
Places, Core (geocode, reverse geocode, search)$0.50Requests; $4.00 when results are stored
Routes, Core$0.50Routes calculated

The free tier covers 200,000 positions written and 200,000 evaluated a month, included for 3 months, per the pricing page. The model below ignores it.

The rules that matter sit in AWS's developer guide:

  1. Writes count every position you send. For BatchUpdateDevicePosition, "price is based on the number of device positions in your API request," per Trackers pricing.
  2. Evaluations count once per linked collection. "You are billed for every location update and once for evaluating the position update against each linked geofence collection," and "your bill is not affected by the number of geofences in each collection" (Create a tracker).
  3. The default filter evaluates everything. TimeBased is the default. Under it, "every location update is evaluated against linked geofence collections, but not every location update is stored": one position per 30 seconds per device.
  4. Tiers apply to the monthly total. Unit price "is based on the total monthly usage volume" (Geofences pricing).

A 500-vehicle fleet costs $15,335 a month at 5 seconds and $3,010 at 30

Consider a hypothetical regional carrier: 500 trucks and vans, each reporting while on the road 10 hours a day, 30 days a month. The tracker uses the default TimeBased filter and is linked to two geofence collections, one for depots and one for customer sites, a split that grows naturally when two teams own the geofences.

At a 5-second interval, each vehicle sends 720 positions an hour: 500 x 720 x 10 x 30 = 108 million positions a month.

Reporting intervalPositions a monthWritesEvaluations, 2 collectionsPer monthPer vehicle
5 s108 million$2,032.50$13,302.50$15,335.00$30.67
15 s36 million$957.50$4,662.50$5,620.00$11.24
30 s18 million$507.50$2,502.50$3,010.00$6.02
60 s9 million$282.50$1,352.50$1,635.00$3.27

Geofence evaluations are 83% to 87% of the bill at every interval. Writes fall to $0.0125 per 1,000 above 50 million; evaluations stop at $0.06, almost five times more. The geofences themselves barely register: 2,000 stored geofences cost $0.40 a month.

A stacked bar chart of the monthly AWS Location Service bill for a hypothetical fleet of 500 vehicles reporting 10 hours a day for 30 days, with the tracker linked to two geofence collections, US East list prices. Reporting every 5 seconds costs $15,335, of which geofence evaluations are $13,302.50, or 87%. Every 15 seconds costs $5,620, every 30 seconds $3,010 and every 60 seconds $1,635. Merging the geofences into one collection brings the four bars to $8,855, $3,460, $1,860 and $1,005.

The dispatch screen adds little. Polling the latest position of 500 vehicles takes 5 BatchGetDevicePosition requests; refreshed every 5 seconds over the same 300 hours, that is 1.08 million requests, or $54 a month.

Three settings cut the tracking bill, and the tracker's filter is not one of them for writes

Merge the geofence collections. Two collections double the evaluations; one collection holds up to 50,000 geofences, and AWS's guide suggests you "combine your geofences into fewer collections, where possible." At 5 seconds, that takes this fleet from $15,335 to $8,855. Check what a tracker is linked to with:

aws location list-tracker-consumers --tracker-name fleet-tracker

Set the interval per use, on the device. At 80 km/h a truck covers about 111 m between 5-second positions and 667 m between 30-second ones. Yard moves and geofence arrivals may need the short interval; a truck on a motorway for two hours does not. Only the device can lower writes: AWS's own advice is to configure the "ping rate" and "optionally use a local filter to only upload relevant device position updates."

Switch the tracker to distance-based filtering to cut evaluations of vehicles that are not moving:

aws location update-tracker --tracker-name fleet-tracker \
  --position-filtering DistanceBased

With DistanceBased, updates from a device that "has moved less than 30 m" are "neither evaluated against linked geofence collections, nor stored." In an AWS test of one simulated device reporting every 5 seconds for 24 hours, the Front-End Web & Mobile blog reported "17,235 positions written, but only 9,283 positions evaluated against a geofence." Note the first number: the filter cut evaluations, and every position was still billed as a write.

Storing GPS history costs dollars; scanning it costs hundreds

The tracker is not your archive. GetDevicePositionHistory states that "device positions are deleted after 30 days." To keep history for ETAs, driver hours or route analysis, you turn on position events with --event-bridge-enabled, which sends "all filtered position UPDATE events" to EventBridge, then route them to a Firehose stream and S3.

AWS's sample position event is 605 bytes as compact JSON. If the fleet reports every 30 seconds, it writes 18 million events, about 10.1 GB a month:

Month 1Month 12Month 36
History held, end of month10.1 GB121.7 GB365.1 GB
S3 Standard at $0.023 per GB-month$0.12$2.68$8.28
Athena, 20 full scans a day at $5 per TB$29.71$356.56$1,069.67
Athena, 20 scans of the last 7 days$6.93$6.93$6.93

S3 uses the Price List API rate on the average data held during the month. The Athena rows scan the end-of-month history; Athena bills $5 per TB scanned, per its price list, with a 10 MB minimum per query (Athena pricing). The "20 scans" are a hypothetical dashboard of four tiles refreshed five times a day, over raw JSON.

Storage stays a rounding error; the scan line grows with every month of history. Partitioning by day so queries read only the window they show keeps it flat. Converting to Parquet cuts it further; we did not price that here.

Two traps inflate the pipeline before any query runs:

  • Small records in Firehose. Direct PUT ingestion is "billed per GB ingested in 5KB increments," per Firehose pricing. If every 605-byte event arrives as its own record, 18 million events bill as 85.8 GB instead of 10.1: $2.49 instead of $0.29 at $0.029 per GB. Small money, eight and a half times the data.
  • Reverse geocoding every position. Turning each stored position into an address costs $0.50 per 1,000 Core requests: $9,000 a month for 18 million positions. Keep the addresses and the ReverseGeocode API says "you must set this field to Storage to comply with the terms of service," at $4.00 per 1,000: $72,000. Geocode stops and geofence events, not the trail.

Measure which meter is growing before you change the interval

The bill shows usage types, not vehicles. Group a month of Location Service cost by usage type with Cost Explorer:

aws ce get-cost-and-usage --time-period Start=2026-09-01,End=2026-10-01 \
  --granularity MONTHLY --metrics UnblendedCost UsageQuantity \
  --group-by Type=DIMENSION,Key=USAGE_TYPE

Look for the PositionWrite and PositionEvaluation rows (USE1-Usage-PositionWrite and USE1-Usage-PositionEvaluation in the price list). If evaluations are twice the writes in quantity or more, the tracker is linked to two or more collections. If evaluations equal writes on a fleet that parks for hours, the tracker is on TimeBased and parked vehicles are still being evaluated.

The objection: dispatchers need real-time positions

The strongest case against this: a 5-second trail gives accurate ETAs and quick geofence arrivals, and a missed arrival at a customer dock costs more than a tracking bill.

Part of it holds. Keep the short interval where a decision depends on it: near depots and customer sites, in yards, on short urban drops. The money is in the hours a vehicle reports fast with nobody acting on it, on a motorway or parked overnight with the ignition on. A device that reports every 5 seconds near a geofence and every 60 seconds elsewhere keeps the arrival accuracy and pays the 5-second rate only for the hours near a geofence.

What this model does not tell you

  • List price, read October 28, 2026, US East. Other regions and private pricing change every row.
  • The fleet is hypothetical. Real fleets report on ignition, motion and events, not a fixed clock; driving hours vary by day.
  • Tier totals assume one AWS account carries the whole fleet.
  • Not priced: EventBridge (its price depends on the bus type, and AWS added an enhanced custom event bus in September 2026), Lambda or IoT Core in front of the tracker, map tiles and routing for the dispatch app, the telematics devices and their cellular data, and any warehouse that loads the history.

For a plant's equivalent of this bill, see AWS IoT SiteWise pricing. For what happens once position history leaves S3 for a warehouse, see data pipeline cost, and for the waste nobody owns across a platform, cloud waste in data infrastructure.

Where Datapace fits

A fleet's location data is billed in a tracker, an event bus, a Firehose stream, S3, a query engine and often a warehouse, and none of them says which positions anyone reads. Datapace is building one map of your data estate (databases, warehouses, pipelines and what consumes them) with usage and cost attached, and agents that propose changes as pull requests your team reviews and merges. If the history already feeds a warehouse, start with data warehouse cost.

Sources

  1. AWS, Amazon Location Service pricing and Price List API for Amazon Location Service, Amazon S3, Amazon Athena and Amazon Data Firehose, US East; Athena pricing and Firehose pricing.
  2. Amazon Location Service Developer Guide, Trackers pricing, Geofences pricing, Create a tracker and React to events with EventBridge.
  3. Amazon Location Service API Reference, BatchUpdateDevicePosition, CreateTracker, GetDevicePositionHistory and ReverseGeocode.
  4. Zach Elliott and Andrew Allison, AWS Front-End Web & Mobile blog, Cost optimization using Amazon Location tracker filtering, November 11, 2022.
  5. Amazon EventBridge User Guide, Event bus targets; AWS CLI Reference, update-tracker, list-tracker-consumers and get-cost-and-usage.