← Back to Neon Bill Estimator

How to reduce your Neon Postgres bill: levers ranked by dollar impact

A Neon invoice on a usage-based plan is a monthly minimum plus separately metered usage: compute in CU-hours, storage in GB-months, restore history, extra branches and data transfer out. The useful question is not "how do I spend less" but "which line, changed by how much, saves the most". That is arithmetic you can do before the invoice, from the numbers on your console's Billing and Usage pages.

1. Scale to zero on every branch that is not production

Compute bills for the hours an endpoint is active. A dev, staging or preview branch that stays awake overnight and at weekends pays for hours nobody uses. Enable autosuspend and a short idle timeout: removing 35% of 1,000 CU-hours at $0.106 saves about $37 a month, and it is a settings change.

2. Rightsize the autoscaling range

A minimum compute size set above what the load needs keeps paying for idle capacity, and a maximum set too high lets one bad query run up hours. Look at the actual CPU and memory graphs and lower both ends. Removing 20% of 1,000 CU-hours is about $21.

3. Delete stale branches

Branch-per-pull-request workflows are one of Neon's best features and a quiet cost: branches beyond the plan allowance bill per branch-month, and each holds its own changes. Expire preview branches when the pull request closes. Twenty extra branches at $1.50 is $30 a month; half of them gone saves $15.

4. Shorten the restore window

Restore history is storage that keeps every change inside the window. A 30-day window on a write-heavy database can cost more than the data itself. Keep what your recovery plan actually needs and no more.

5. Prune storage

Table and index bloat, unused indexes, old logs and audit tables all bill per GB-month. Drop unused indexes, vacuum or repack bloated tables, and move cold rows to cheaper object storage. Fifty GB at $0.35 is $17.50 a month, and 20% off is $3.50 on a small database and far more on a large one.

6. Cut data transfer

Data transfer out beyond the allowance is billed per GB. Cache read-heavy queries, return only the columns you need, and run your application compute in the same region as the database so traffic stays on the cheap side of the bill.

Run it on your numbers

Enter your usage in the estimator or from the CLI, and gate a budget in CI:

node cli.mjs estimate usage.csv --budget 200

What this cannot see

Plans, regions, projects, contracts and price changes are outside it. Prices here are approximate list prices and editable. The estimate is arithmetic on your inputs, never a bill reader.

Common questions

Which Neon costs usually dominate?

For most teams it is compute (CU-hours), because a branch that never scales to zero bills around the clock, followed by storage. Branches, restore history and data transfer matter once you create a branch per pull request or move a lot of data out. Estimate your own mix with the estimator rather than assuming.

Is there a minimum on a paid Neon plan?

Paid usage-based plans carry a monthly minimum, so the bill never falls below it however little you use. The estimator shows the minimum as a floor and lets you edit it.

Do the savings add up?

No. Scale-to-zero and rightsizing act on the same compute hours, so each lever is calculated alone and the list is a ranking, not a plan total.