**TL;DR:** Command counts higher than expected almost always trace to polling loops, await-per-line code, or an expensive rate-limit algorithm. Diagnosing a higher-than-expected Upstash command bill Symptom The console shows far more commands than your traffic should produce. Batch with Promise.all (auto-pipelining merges them) or one MGET.

## The fix

1. Await in a loop. Fetching N keys one await at a time is N HTTP requests. Batch with Promise.all (auto-pipelining merges them) or one MGET.

2. Polling. A 100ms poll loop is 864K commands a day per consumer. Lengthen the interval or switch queue consumers to the native protocol with blocking commands.

3. Rate limiting with sliding window plus analytics: 5-6 commands per request. Fixed window drops it to 3-4. At 1M requests a day that difference is millions of commands a month.

4. Deny lists add 2 commands per limit call. Auto IP deny-list refresh costs 9 commands once a day.

5. MONITOR or DEBUG sessions left running: MONITOR streams every command and each observed command still counts.

6. Health checks hitting Redis every few seconds from every instance.

## When to use this

- This covers exactly what the title says: Upstash command bill too high.
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.

## When not to use this

- You are doing a different workflow with Upstash; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.

## Compatibility

- Not pinned to a specific version; follows current Upstash behavior.