## TL;DR
Stop calling GetProducts per instance; download the bulk price list once a day, cache it locally, and do lookups in memory. The Pricing API is throttled hard by design, and a per-instance loop blows through the quota in seconds. One bulk download replaces thousands of API calls.

## The error
```text
LimitExceededException: Too many requests
```

## Fix it
1. Confirm the call pattern: check your agent's code for a Pricing API call inside a per-instance or per-resource loop.
   Expected: you find GetProducts being called once per instance.
2. Switch to the bulk price list: fetch the offer file for the service and region once, store it locally.
   Expected: a local price file on disk, refreshed on a schedule (daily is plenty).
3. Rewrite the lookup to read prices from the cached file in memory.
   Expected: zero Pricing API calls during the sizing run.
4. Re-run the agent's pricing pass.
   Expected: no LimitExceededException; the run completes on cached data.

## Use this when
- A rightsizing agent throttles on the Pricing API during a fleet scan
- GetProducts is called in a loop over instances, volumes, or SKUs
- The same prices are fetched repeatedly across runs

## Not for this skill when
- The throttle is on Cost Explorer's GetCostAndUsage (different API; add pagination and backoff instead)
- You need real-time price accuracy to the minute (bulk files update daily; accept the lag or throttle your live calls)
- The error comes from EC2 DescribeInstances throttling (that is an EC2 API quota, different fix)

## Variant phrasings
- AWS Price List API too many requests
- GetProducts throttling
- pricing API rate limit exceeded
- cache AWS pricing data locally

## Why it happens
The Price List API serves bulk data and is throttled aggressively per account; it was built for occasional downloads, not per-instance live lookups. Agent loops that treat it like a normal low-latency API exhaust the quota almost immediately, and every retry without backoff keeps the throttle engaged.

## Edge cases
- Bulk offer files are large; download only the service and region files you need
- Prices change daily at most, so a 24-hour cache is fresh enough for rightsizing math
- If you must call GetProducts live, add jittered exponential backoff and keep the rate to a handful per second
- Spot and Savings Plan effective rates are not in the list price; compute the blended rate separately

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_XJbd0OKO3Kr23BNGNRn5MQ
