Snowflake budgets and resource monitors both watch credit spend, but they do different jobs. A resource monitor tracks warehouses only and can suspend them when a credit quota is reached. A budget tracks warehouses and serverless features, forecasts the month, and notifies you, with no built-in suspend. Most accounts need both: monitors as the hard stop on warehouses, budgets as the early warning for everything else. Every fact and figure in this guide was checked against Snowflake’s documentation.
This article is part of our guide to Snowflake cost monitoring.
What is the difference between a Snowflake budget and a resource monitor?
A resource monitor is a warehouse guardrail: it counts credits against a quota and can notify, suspend, or suspend immediately at thresholds you set. A budget is a monthly spending limit that covers warehouses and serverless features, forecasts where the month will land, and alerts you when projected spend will pass the limit.
Snowflake’s own cost management overview puts it in one line: budgets cover “serverless features and warehouses”, while resource monitors “focus solely on warehouses”. The rest of the differences follow from that split.
What can each one track?
Resource monitors track user-managed warehouses only, plus the cloud services that support those warehouses. Budgets track warehouses and a long list of serverless features, either for the whole account or for a custom group of objects you choose by name or by tag.
According to the resource monitors page, “Resource monitors work for warehouses only”, so serverless features and AI services are invisible to them. Custom budgets support these service types: warehouse metering, query acceleration, serverless tasks, serverless alerts, Snowpipe (pipes), Snowpipe Streaming, automatic clustering, search optimization, materialized views, replication, copy files, data quality monitoring, Snowpark Container Services compute pools, AI services and AI inference. The account budget covers all credit usage in the account. If serverless spend is a growing part of your bill, see our breakdown of Snowflake serverless costs.
What happens when a limit is hit?
A resource monitor acts on actual credits used: it can send a notification, suspend its warehouses after running statements finish, or suspend them immediately and cancel running statements. A budget’s limit is used for notifications only. To act on spend, a budget can call a stored procedure you write, which can suspend warehouses.
Each resource monitor can have one SUSPEND action, one SUSPEND_IMMEDIATE action and up to five NOTIFY actions, and thresholds can go above 100%. Snowflake notes that monitors are not built for precise, per-credit control: a warehouse can run briefly after a threshold is reached and use more credits.
Budgets send a daily alert when spending is forecast to exceed the limit, by email, a cloud queue, or a webhook. The notification threshold is a percentage of the limit; the default is 110. For enforcement, custom actions run a stored procedure when projected or actual spend reaches a threshold, up to 10 actions per budget. A projected trigger fires at most once a day, and an actual trigger at most once a month.
Do they work at the account level or the object level?
Both can work at either level. You can set one account-level resource monitor plus warehouse-level monitors, and each warehouse can belong to only one warehouse-level monitor. Budgets come as one account budget, which must be activated, and up to 100 custom budgets per account, each covering the objects or tags you add.
A resource monitor can have up to 500 warehouses assigned. An account-level monitor does not override warehouse-level ones: whichever threshold is reached first triggers its actions. Warehouse-level monitors cannot suspend cloud services usage. A custom budget created mid-month backfills usage only for resources added by tag, not for objects added one by one.
Who can create them, and which privileges do they need?
Only the ACCOUNTADMIN role can create a resource monitor or assign warehouses to one. Budgets are designed for delegation: ACCOUNTADMIN grants a role the SNOWFLAKE.BUDGET_CREATOR database role and the CREATE SNOWFLAKE.CORE.BUDGET privilege on a schema, and that role can then create and manage custom budgets without full admin rights.
For resource monitors, MONITOR and MODIFY privileges let other roles view or change a monitor in SQL, but in Snowsight only account administrators can see them. Notifications go to account administrators who have enabled them, and up to five non-admin users can receive email alerts for warehouse monitors through NOTIFY_USERS.
For budgets, every role needs the SNOWFLAKE.USAGE_VIEWER database role, and adding an object or tag to a custom budget needs APPLYBUDGET on it. The account budget uses the BUDGET_ADMIN and BUDGET_VIEWER application roles. Full details are on the custom budget page.
How fresh is the data, and do budgets cost credits?
Budgets refresh up to every 6.5 hours by default, or every hour on the low latency tier. Budgets run as serverless background tasks, so they do bill compute to your account, and the one-hour tier multiplies that budget’s compute cost by 12. Snowflake does not publish a refresh interval for resource monitors.
You change the tier with SET_REFRESH_TIER, using TIER_1H or TIER_6H (the default). Budget compute appears as serverless tasks, which you can review in the SERVERLESS_TASK_HISTORY view, as described in Snowflake’s page on budget costs. Because a budget can lag spend by hours, it is an early warning, not a circuit breaker.
Snowflake budgets vs resource monitors: side by side
| Resource monitor | Budget | |
|---|---|---|
| Tracks | Warehouses only, plus their cloud services | Warehouses and serverless features |
| Limit | Credit quota per interval | Monthly credit spending limit |
| Interval | Daily, weekly, monthly, yearly or never | Calendar month (UTC) |
| Based on | Actual credits used | Forecast spend for alerts; projected or actual for custom actions |
| Built-in action | Notify, suspend, suspend immediately | Notify only |
| Can stop spend | Yes, warehouses | Only through your own stored procedure |
| Scope | One account monitor, many warehouse monitors | One account budget, up to 100 custom budgets |
| Who creates | ACCOUNTADMIN only | Any role granted BUDGET_CREATOR and CREATE BUDGET |
| Notifications | Email, cloud queue or webhook | |
| Refresh | Not published | Up to 6.5 hours, or 1 hour at 12x budget cost |
| Own cost | Not stated in the docs | Serverless compute |
How do you create a resource monitor?
Create the monitor with a quota and triggers, then assign it to warehouses or the account. This example from the CREATE RESOURCE MONITOR reference notifies at 75%, suspends at 100% and suspends immediately at 110%. For a deeper walkthrough, see our guide to Snowflake resource monitors.
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE RESOURCE MONITOR limiter
WITH CREDIT_QUOTA = 5000
TRIGGERS ON 75 PERCENT DO NOTIFY
ON 100 PERCENT DO SUSPEND
ON 110 PERCENT DO SUSPEND_IMMEDIATE;
-- Assign it to a warehouse
ALTER WAREHOUSE my_wh SET RESOURCE_MONITOR = limiter;
With no FREQUENCY or START_TIMESTAMP, the quota resets at the start of each calendar month. Resets happen at 12:00 AM UTC. At $3.00 per credit (on-demand Enterprise, AWS US East), a 5,000-credit quota is $15,000 a month.
How do you set up a budget?
Grant a role the right to create budgets, create the budget in a schema, set its monthly limit, add objects or tags, and set where notifications go. Each email address must be verified first, or the setup fails.
-- As ACCOUNTADMIN: let a role create budgets in one schema
GRANT USAGE ON DATABASE budgets_db TO ROLE budget_owner;
GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO ROLE budget_owner;
GRANT DATABASE ROLE SNOWFLAKE.BUDGET_CREATOR TO ROLE budget_owner;
GRANT CREATE SNOWFLAKE.CORE.BUDGET ON SCHEMA budgets_db.budgets_schema
TO ROLE budget_owner;
-- As budget_owner: create a 500-credit monthly budget
USE SCHEMA budgets_db.budgets_schema;
CREATE SNOWFLAKE.CORE.BUDGET my_budget();
CALL my_budget!SET_SPENDING_LIMIT(500);
-- Add an object (needs APPLYBUDGET on it)
CALL my_budget!ADD_RESOURCE(
SELECT SYSTEM$REFERENCE('TABLE', 't2', 'SESSION', 'APPLYBUDGET'));
-- Or track everything tagged cost_center = 'finance' (needs APPLYBUDGET on the tag)
CALL my_budget!SET_RESOURCE_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.cost_center', 'SESSION', 'APPLYBUDGET')), 'finance']
],
'UNION');
-- Send alerts to verified addresses
CALL my_budget!SET_EMAIL_NOTIFICATIONS('costadmin@example.com, budgetadmin@example.com');
To turn on the account budget instead, an account administrator runs CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ACTIVATE(); and then sets its limit with the same SET_SPENDING_LIMIT method. The older ADD_RESOURCE_TAG method is marked deprecated in the BUDGET class reference, so use SET_RESOURCE_TAGS, which replaces any tags already on the budget. If you want to automate this beyond alerts, see how to automate Snowflake budget control without adding headcount.
When should you use which, and how do you use both together?
Use resource monitors wherever a runaway warehouse must stop, such as ad hoc and sandbox warehouses. Use budgets to watch the whole account and each team’s spend, including serverless features. Together, budgets give the early forecast warning and monitors give the hard stop.
A practical setup:
- Activate the account budget at your planned monthly credit figure, so forecast overruns reach you within hours. Our guide to planning your 2026 Snowflake budget covers how to set that number.
- Create custom budgets per team or data product using tags, so each owner sees their own forecast.
- Put warehouse-level resource monitors on warehouses where a surprise is worse than a pause, with NOTIFY well before SUSPEND.
- Set an account-level resource monitor above your expected warehouse spend as a final backstop.
When an alert fires, you still need the cause. Start by learning how to check Snowflake costs, break spend down by user, role and warehouse, then trace a cost spike to the query and user behind it.
What are the common mistakes?
- Expecting a resource monitor to cap the whole bill. It ignores serverless features such as tasks, Snowpipe, clustering and search optimization. Cover those with a budget.
- Expecting SUSPEND to stop spend at once. SUSPEND lets running statements finish. Only SUSPEND_IMMEDIATE cancels them, and a warehouse can still run briefly past the threshold.
- Forgetting the cloud services share. Cloud services credits that support a warehouse count toward its monitor’s quota, even the part Snowflake does not bill, so a monitor can trip earlier than your invoice suggests.
- Leaving notifications off. Resource monitor notifications are disabled by default and need each user to opt in with a verified email.
- Treating a budget as a hard limit. Its spending limit only drives alerts, and its data can be up to 6.5 hours old.
- Customizing a monitor’s schedule casually. A custom schedule cannot be reverted to the default; you must drop and recreate the monitor.
How Seemore helps you act on budget and monitor alerts
Budgets and resource monitors tell you that spend crossed a line, not why. Cost Anomaly Detection compares spend across your accounts, warehouses and services against the last 14 days of your own history, catches spikes and drops, and hands you the root cause, replacing days of investigation with a clear answer. Real Time Monitoring shows every connected account live, down to the exact query behind a spike, and the platform attributes cost by job, user, domain and data product.
Frequently asked questions
Can a Snowflake budget suspend a warehouse?
Not by itself. A budget’s limit only drives notifications. You can add a custom action that calls your own stored procedure when projected or actual spend reaches a threshold, and that procedure can suspend warehouses.
Do resource monitors track serverless costs?
No. Resource monitors work for warehouses only, plus the cloud services that support them. Serverless features such as tasks, Snowpipe and automatic clustering need a budget.
How many resource monitors can a warehouse have?
One warehouse-level monitor per warehouse. The account can also have one account-level monitor, and whichever threshold is reached first takes effect.
Do Snowflake budgets cost credits?
Yes. Budgets run serverless background tasks that bill compute to your account, and switching a budget to the one-hour refresh tier multiplies its compute cost by 12.
How often do Snowflake budgets refresh?
Up to every 6.5 hours by default, or every hour if you set the refresh tier to TIER_1H.
Who can create a resource monitor in Snowflake?
Only users with the ACCOUNTADMIN role. Other roles can be granted MONITOR or MODIFY on an existing monitor to view or change it in SQL.