> For the complete documentation index, see [llms.txt](https://docs.moleculedata.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.moleculedata.com/running-your-ads/budget-management.md).

# Budget management

Budget proposals judged on your revenue and your targets. Molecule proposes, you press Apply — except the stop-loss, which can pause and resume ads on its own.

**Budget management** turns your numbers into concrete budget changes: raise this campaign by 20%, cut that one, move money from one to the other, pause a creative that is burning spend. Every proposal is judged against **your** targets, on **both** Molecule's attributed revenue and the ad platform's own numbers, and shows the evidence behind it.

{% hint style="info" %}
**Nothing changes until you apply it — with one exception you choose.** Molecule proposes; you press **Apply**, and only then is the change written to Meta or Google Ads. The one exception is the [stop-loss](#stop-loss) with **automatic pause** turned on: it pauses and resumes single ads by itself. Ad sets, campaigns, keywords and ad groups always wait for your Apply.
{% endhint %}

It lives in **Control Room → Budget**. Budget proposals are part of the **Pro** and **Enterprise** plans, and need at least one ad channel connected.

## Turning it on

Open **Control Room → Budget** and click **Turn on budget proposals**. Then set up your **Policy** — proposals start once your targets are in (in **Stop-loss only**, once a stop-loss amount is set).

You can turn it off again from the Policy page. Open proposals are withdrawn; your policy is kept for next time.

## Your policy

The **Policy** page is where you tell Molecule how to judge your campaigns. Press **Preview** to see what a draft policy would propose on today's data before you **Save** it.

**How bold** — the **Soft**, **Balanced** and **Aggressive** cards set every boldness setting below in one click: the window, how sure Molecule must be, how far it moves. Adjust anything afterwards. **Re-plan every** sets how often the plan runs on its own, from every 2 hours to once a day.

**Targets (required, except in Stop-loss only)**

* **Campaign targets** — a target **ROAS** or **Cost per order**, set on both bases: **Molecule** (your attributed Shopify revenue) and **Platform** (what the ad platform reports). Add overrides for a campaign role or a channel; the most specific one wins.
* **Blended targets** — for the whole store: monthly spend **min / expected / max**, a **Blended ROAS min** (all net sales over all paid spend) and a **First-time ROAS min**.

**How campaigns are judged**

* **Window** — the last 7, 14 or 28 days (14 by default), plus a check on the most recent days so a fresh drop is not hidden inside a good fortnight.
* **Attribution** — one model for every campaign, or (the default) a model per **campaign role**: last touch for brand, retargeting and shopping; first touch for top-of-funnel and PMax. Roles are recognised from campaign names, and you can add your own rules. See [How attribution works](https://docs.moleculedata.com/understanding-your-data/how-attribution-works).
* **Growth** — how boldly budget is added: **Off** (never add budget; cuts and moves still happen), **Soft**, **Balanced** or **Aggressive**.
* **Cutting** — how quickly losers are trimmed: **Soft**, **Balanced** or **Aggressive** (Aggressive also needs less spend before it judges).
* **Pacing** — spend **evenly through the month** or **front-loaded**.
* **Exploration** — optionally set aside a share of spend for small test raises on campaigns the evidence cannot call yet.
* **Minimum campaign age** — new campaigns are left alone until they have had time to learn (7 days by default).
* **Exclusions** — campaigns whose names contain words you list (by default "brand") are never touched.

**Creatives**

* **Pause creatives judged on** — for a creative that is below target after enough spend: both bases agreeing (default), Molecule only, or Platform only.
* The **stop-loss** has its own block — see [Stop-loss](#stop-loss) below.

**Guards**

* A **minimum spend** and a minimum number of **orders** before a larger step is proposed.
* **Days after any change** — a cooldown so a campaign is not changed again before the last change has had time to work (3 days by default).
* A **maximum step** per channel (20% by default; 30% on TikTok).
* Always: at most a 50% change, at most 500 raised per campaign per day, and at most 10 campaigns in one change.

**Written rules** — write any extra rules in plain language ("never cut the Black Friday campaigns"). The AI turns them into policy settings for you to review, with **Put it in the form**.

## Stop-loss

The stop-loss is a hard rule, not a forecast: once an ad has spent your **stop-loss amount** in the lookback and still fails your rule, Molecule pauses it. It works on:

* **Meta** ads.
* **Google** ads in Search, Demand Gen, Display and YouTube campaigns — and on Google also keywords, ad groups and PMax asset groups.

Google is always judged on Google's own conversions.

**Settings** (Policy → Stop-loss)

* **Creative stop-loss** — how much an ad must spend before the stop-loss can act (0 = off).
* **Lookback** — the budget window, or 3, 7, 14 or 28 days.
* **Judge on** — **Molecule and platform** (an order on either spares the ad), **Molecule only** or **Platform only**.
* **Pause when** — **No orders**, **Cost per order above** a number, **ROAS below** a number, or **Cost per order and ROAS** together. With both, choose **Both are breached** (the default — an ad that is fine on one measure keeps running) or **Either is breached**.
* **Re-check paused for** — 7, 14, 30 or 45 days.

**Coming back**

* Orders are often attributed days later. A paused ad is re-checked on the same days it was paused for; when late orders lift it out of the stop-loss, you get a **Resume** card.
* If you switch a paused ad back on yourself, only its spend **after** the pause counts — it is not paused again for the spend it was already paused for.
* A change to the campaign's budget or status does not hold the stop-loss.

**Automatic pause**

Press **Turn on automatic pause** and tick the channels: **Meta** (the default) and/or **Google**. On every plan run, Molecule then:

* pauses up to 10 ads that hit the stop-loss, biggest spenders first, through the same checks as **Apply** — never the last active ad of an ad set or ad group;
* switches ads back on when late orders lift the stop-loss.

These cards say **Paused automatically** or **Resumed automatically**, and each change also shows in the [Control Room](https://docs.moleculedata.com/dashboards/insights) feed. Ad sets, campaigns, Google keywords, ad groups and asset groups are never changed automatically — they stay under **Apply**.

**Stop-loss only**

Tick **Stop-loss only** to make the stop-loss the only thing Molecule does: budget changes, below-target pauses, exploration and the AI's own cards are switched off, and campaign targets are not needed — only a stop-loss amount. The Budget tab then shows a one-line summary of your stop-loss instead of the account plan.

## The Budget tab

At the top, the **Account plan** says what the month needs overall: **add budget**, **move budget with the total flat**, or **reduce budget**. Below it are three kinds of card:

* **Proposals** — **Scale**, **Cut**, **Reallocate**, **Pause** or **Resume**, with the budget before and after, a plain-language reason, and an **evidence table**: orders and ROAS on the Molecule and the Platform basis, the likely range, and the chance the campaign is really above target. A move between two campaigns is a linked pair: the cut is applied first, and the raise only if the cut went through.
* **Attribution gaps** — campaigns where Molecule and the platform disagree too much to act on. Choose **Trust platform** or **Trust Molecule**.
* **Watching** — campaigns that are close but not ready, and why.

On a proposal:

* **Apply** — makes the change in Meta or Google Ads. The live state is checked again first; if it or your policy has changed since the proposal was made, nothing is written.
* **Reject** — tell Molecule why (wrong direction, too aggressive, too soon, bad timing, not enough data). The same change is not proposed again for 7 days.
* **Snooze 7d** — hide it for a week.

Proposals are refreshed on your **Re-plan every** schedule (once a day from 04:00 UTC by default), when you open the tab if the last run is more than 6 hours old, and whenever you press **Refresh**. A proposal is valid for 24 hours; after that a newer plan replaces it.

## Asking the AI

Press **Ask AI for its take**, or ask the [AI Agent](https://docs.moleculedata.com/ai-agent) directly:

* "What would you change if I judged on 28 days instead of 14?" — what-ifs are answered on the spot and never saved.
* "Cut the retargeting campaign by 20%." / "Move budget from X to Y." — the AI drafts the change through the same checks as any proposal.
* "Should my targets be different?" — it suggests policy changes for you to review and save.

With **Let the AI create its own cards** switched on in the policy, the AI also adds proposals of its own, labelled **AI suggestion**. Choose how much the engine holds it back: **Guarded**, **Balanced** or **Pure AI**. In **Stop-loss only**, the AI does not add cards of its own. In every case the change is only made when you press **Apply** (or confirm it in the chat).

## What it can and cannot change

|                                              | Meta               | Google Ads         | TikTok, Snapchat, Pinterest             |
| -------------------------------------------- | ------------------ | ------------------ | --------------------------------------- |
| Campaign and ad set budgets                  | Apply              | Apply              | Proposal only — make the change by hand |
| Pausing and resuming ads (stop-loss)         | Apply or automatic | Apply or automatic | —                                       |
| Keywords, ad groups, asset groups, negatives | —                  | Apply              | —                                       |

* **Lifetime** and **shared** budgets cannot be changed from Molecule.
* A campaign whose budget is in a different currency from your dashboard is shown under **Watching** instead of being raised, and Meta accounts in currencies without decimals (such as JPY or HUF) are proposal only.
* Budgets are only raised on campaigns that are actually spending at least 90% of their current budget.
* Molecule never pauses the last active creative in an ad set, or the last enabled ad or keyword in a Google ad group. If every creative in an ad set is failing, it proposes pausing the ad set instead — that card always waits for your Apply.
