> 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/mcp/approvals-and-limits.md).

# Approvals and limits

How AI apps' changes are confirmed, how the 8 hours work, approving in Molecule, turning many things on or off at once, and the daily limits.

An AI app changes things on your ad platforms only with your yes, inside limits Molecule sets. This page covers how that works.

## Which changes need what

| Change                                                                                                                                              | How you say yes                                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| **Changes to ad spend:** turning things on or off, budget changes, adding keywords, budget cards, publishing LaunchPad drafts and Autopilot uploads | Two steps. Within the 8 hours, your yes in your app; after them, in Molecule. |
| **Other changes on Google Ads:** negative keywords and UTM tracking                                                                                 | Two steps, always your yes in your app.                                       |
| **New campaigns, ad sets, ad groups and copies of ads**                                                                                             | They wait in a LaunchPad draft. Launching the draft is your yes.              |

Changes that stay inside Molecule, such as drafts, dashboard charts, tracked competitors and insight cards, take one step.

## Two steps

1. **Your app asks.** Molecule checks the change against the live ad account and answers with a summary of exactly what would change. Nothing changes yet. Your app shows you the summary.
2. **You say yes.** Your app sends the same change again with Molecule's confirmation, and Molecule makes it.

A confirmation works once, for that exact change, for 10 minutes. A different change needs a new one. If what the change would change moved since the summary, Molecule changes nothing and your app asks again.

Your app names each object it changes. Molecule checks that name against the platform and refuses a name that isn't the object's, so the name you see is the real one.

## Turning many things on or off

To turn more than one thing on or off, your app uses `set_ad_statuses`: up to 500 campaigns, ad sets, ads, Google keywords or asset groups on Google Ads, Meta and TikTok, in up to 20 ad accounts, with one summary and one yes for them all.

* Each object is checked as a single change would be.
* If any object can't be changed as asked, nothing is prepared, and your app says which ones and why.
* Objects that are already on or off as asked are left alone.
* Turning off every enabled keyword, ad or ad group of one Google ad group or campaign together, or every delivering ad of a Meta ad set, is refused. Pause the ad group, campaign or ad set instead.
* Afterwards your app says which objects are done, which failed (not changed, with the platform's reason) and which are unknown (check them in the ad platform before trying again).

## Adding keywords

`add_keywords` adds 1 to 49 keywords to one existing Google Search ad group, on or off. Keywords the ad group already has are skipped. The summary says what the new keywords may start: nothing while the ad group or its campaign is paused, and no new budget when the ad group already serves. If keywords added on could start a campaign budget that Molecule can't count, the change is refused: your app can add them off instead. A keyword's own max CPC bid is at most 500 in the account's currency.

## The 8 hours

The 8 hours apply to changes to ad spend. When you approve a connection that can change ad spend, 8 hours start. Within them, your yes in your AI app is enough: you don't need to open Molecule for each change. Molecule's daily limits still apply.

After the 8 hours, Molecule asks you again before the next change. Your app asks you to sign in to Molecule again, or gives you a link to approve the change in Molecule. Either one starts a new 8 hours.

To see where you stand, ask your app *"How long does my Molecule access last?"* It reads both times from `get_connection_status`:

* `spend_live_until`: when the 8 hours end;
* `verified_until`: until when you can approve in Molecule without signing in again.

Negative keywords and UTM tracking always take your yes in your app, whatever the time.

## Approving a change in Molecule

When a change to ad spend needs your approval in Molecule, your app gives you a link. Changes waiting for you are also listed under **Waiting for your approval** on the MCP page.

The approval page shows only facts from Molecule, never your app's own description:

* the company, the app that asked, and the change;
* **New daily spend** per ad account, or *"None: this change only lowers spend"*;
* how many ads, ad sets or campaigns it **turns on**, and new ads that start spending;
* **What changes**: each object, with its value before and after;
* when the request **expires**.

Click **Approve** or **Decline**. Approving needs a sign-in to Molecule with your email and password in the last 8 hours, or a code Molecule emails you. If you sign in with Google, Facebook or Shopify, use the code.

After you approve, go back to your app: it can make the change now. Declined or expired changes change nothing.

{% hint style="warning" %}
Never give the emailed code to an AI app. Type it into Molecule yourself.
{% endhint %}

## Daily limits

These count over a rolling 24 hours, per company. They count every AI agent's changes together: AI apps over MCP and Fritz in Molecule's chat.

| Limit                                                             |                               |
| ----------------------------------------------------------------- | ----------------------------- |
| Changes to ad spend                                               | 200 a day                     |
| Ads, ad sets, campaigns, keywords or asset groups turned on       | 100 a day                     |
| Ads, ad sets, campaigns, keywords or asset groups turned off      | 1,000 a day                   |
| New daily spend per ad account (raises plus everything turned on) | 1,000 a day                   |
| Raising one campaign, ad set or ad group                          | at most +50% and +500 a day   |
| Ads in one LaunchPad draft or launch, copies included             | 20                            |
| Ads launched from AI apps, copies included                        | 50 a day                      |
| Daily budget of the new campaigns and ad sets one call plans      | up to 500 in all, made paused |
| Max CPC bid of a new keyword or ad group                          | up to 500                     |
| Autopilot images                                                  | 30 a day                      |

A list that only turns things off counts as one change to ad spend. A list that turns anything on counts each object it changes as one. Each object turned off counts toward the 1,000.

Copied ads count as new ads, not as things turned on. An ad account that is also connected to another company in Molecule can't get raises or turn-ons over MCP.

When a limit is reached, Molecule refuses the change and says which limit. Make the change in the Molecule app instead, or wait.

### Amounts and currencies

Amounts are in each ad account's currency. In a currency where 500 units are worth less than 100 EUR, such as HUF or JPY, the amounts are that many euros instead, converted at Molecule's exchange rates: for example, a raise of at most 500 EUR's worth. If Molecule doesn't know the exchange rate for an ad account's currency, it refuses changes that would raise or start spend there, and new budgets and bids.

## Speed limits

Molecule also limits how fast apps can call it:

|                                  | Per minute | Per hour |
| -------------------------------- | ---------- | -------- |
| Calls per connection             | 30         | 600      |
| Calls per company                | 60         | 1,000    |
| Live reads from the ad platforms | 30         | 300      |
| Changes                          | 10         | 100      |
| Changes to ad spend              | 20         | 200      |

## "Pending" and "unknown"

A change that takes longer than about 45 seconds comes back as **pending**. It is neither done nor failed: your app checks on it with `get_change_status` and must not make it again.

If the answer is **unknown**, Molecule can't tell whether the change went through. Check it in Molecule or the ad platform before trying again.
