Documentation
Everything you need to install, configure, and get the most out of Zerobillbot.
Documentation
1 Getting Started
Install the GitHub App
Visit the Zerobillbot GitHub App page and click "Install". Choose your organization or personal account, then select which repositories to enable.
Your first cost analysis
Once installed, Zerobillbot automatically monitors pull requests for infrastructure-as-code changes.
Open a PR that adds, modifies, or removes Terraform (.tf), CloudFormation,
ARM templates, or Deployment Manager files.
Zerobillbot will:
- Detect IaC resource changes in the diff
- Look up current cloud pricing for each resource (AWS, Azure, GCP)
- Post a cost impact comment with a detailed breakdown table
- Create a GitHub Check Run (pass/warn/fail based on thresholds)
No config required
Zerobillbot works out of the box with sensible defaults. However, you can customize behavior
by adding a .costbot.yml file to your repository root.
2 Configuration Reference
Create a .costbot.yml file in your repository root to customize Zerobillbot's behavior.
All fields are optional.
# Cost thresholds (in USD per month)
thresholds:
warn: 10 # Post a warning if cost delta exceeds this
fail: 25 # Block the PR if cost delta exceeds this
# Resources to ignore (glob patterns)
ignore:
- "aws_cloudwatch_log_group.*"
- "aws_iam_*"
- "aws_s3_bucket_policy.*"
# Notification settings (Pro plan)
notifications:
slack:
webhook: "https://hooks.slack.com/services/..."
channel: "#infra-costs"
on: ["warn", "fail"]
teams:
webhook: "https://outlook.office.com/webhook/..."
on: ["fail"]
# Regions to use for pricing lookup
regions:
- us-east-1
- ap-southeast-1
# Comment settings
comment:
collapse_unchanged: true # Collapse resources with no cost change
show_total: true # Show total monthly estimate
currency: "USD" # Currency for display Configuration options
| Option | Type | Default | Description |
|---|---|---|---|
thresholds.warn | number | 10 | Monthly cost delta to trigger a warning |
thresholds.fail | number | 50 | Monthly cost delta to block the PR |
ignore | string[] | [] | Glob patterns for resources to ignore |
regions | string[] | ["us-east-1"] | Default regions for pricing lookup |
notifications.slack.webhook | string | — | Slack webhook URL (Pro) |
notifications.slack.on | string[] | ["fail"] | Events to notify on |
notifications.teams.webhook | string | — | Microsoft Teams webhook URL (Pro) |
comment.collapse_unchanged | boolean | true | Collapse zero-delta resources |
comment.show_total | boolean | true | Show total monthly estimate |
comment.currency | string | "USD" | Display currency |
3 Supported Resources
Zerobillbot supports benchmarked pricing analysis across AWS, Azure, and GCP resource families.
AWS
aws_instance— EC2 instances (all instance types)aws_ebs_volume— EBS volumes (gp2, gp3, io1, io2, st1, sc1)aws_nat_gateway— NAT Gatewaysaws_db_instance— RDS instances
Azure
azurerm_linux_virtual_machine/azurerm_windows_virtual_machineazurerm_managed_disk,azurerm_sql_database,azurerm_kubernetes_clusterazurerm_public_ip,azurerm_nat_gateway,azurerm_lb
GCP
google_compute_instance,google_compute_disk,google_compute_addressgoogle_sql_database_instance,google_container_clustergoogle_storage_bucket,google_cloud_run_service
Template support
For CloudFormation templates, Zerobillbot maps AWS::EC2::Instance,
AWS::RDS::DBInstance, AWS::ECS::Service, and other resource types
to equivalent pricing models. ARM and Deployment Manager templates are parsed with the same
benchmark workflow used for Terraform-based changes.
💡 Missing a resource? Open an issue on our GitHub repo and we'll prioritize adding support.
4 Threshold Configuration
Thresholds control how Zerobillbot responds to cost changes in your pull requests.
How thresholds work
Zerobillbot calculates the total estimated monthly cost delta for all infrastructure changes in a PR. This delta is compared against your configured thresholds:
- Below warn threshold: ✅ Check passes. Comment posted with cost breakdown.
- Between warn and fail: ⚠️ Check passes with a warning. Comment highlights the cost increase.
- Above fail threshold: ❌ Check fails. PR is blocked from merging (if branch protection is enabled).
Setting thresholds
Add thresholds to your .costbot.yml:
thresholds:
warn: 10 # Warn if monthly delta > $10
fail: 25 # Fail if monthly delta > $25 Recommended thresholds by team size
| Team size | Warn | Fail | Notes |
|---|---|---|---|
| Startup (1–10) | $5 | $25 | Tight budgets, catch everything early |
| Growth (10–50) | $25 | $100 | Balance speed with cost awareness |
| Enterprise (50+) | $100 | $500 | Focus on large changes, avoid noise |
5 Troubleshooting
Zerobillbot isn't posting comments on my PRs
- Verify the GitHub App is installed on the correct repository
- Check that the PR contains
.tf,.yaml,.yml,.json, or.templatefiles with infrastructure changes - Ensure the Zerobillbot App has "Pull requests: Read & write" and "Checks: Read & write" permissions
- Look at the GitHub App's delivery history for webhook errors: Settings → Developer settings → GitHub Apps → Zerobillbot → Advanced
Cost estimates seem incorrect
- Zerobillbot uses on-demand pricing. Reserved Instance or Savings Plan pricing requires an Enterprise plan.
- Verify the correct region is configured in
.costbot.yml(defaults to us-east-1). - Some resources have usage-based pricing (e.g., data transfer) that can't be estimated from config alone. These are noted as "usage-based" in the comment.
The check is blocking my PR but I want to override it
- Repository admins can bypass branch protection rules and merge anyway
- Adjust the
failthreshold in.costbot.ymlto a higher value - Add specific resources to the
ignorelist if they're expected costs
Configuration file isn't being picked up
- Ensure the file is named exactly
.costbot.yml(not.costbot.yaml) - The file must be in the repository root, not in a subdirectory
- YAML syntax must be valid — use a YAML linter to check
Still having issues? Reach out to us at support@Zerobillbot.dev or open an issue on GitHub.