# Bidding and conversion goals

> Ask your AI assistant to change max bids, bidding strategies and targets, and the conversion goals a search campaign bids on, within your guardrails.

Your AI assistant changes max bids, how a search campaign bids, and which conversion goals it bids on. There is no web form for these: the [Campaigns](/docs/campaigns) page shows each campaign's bidding and goals, and your assistant shows you every change before it makes it.

Every change here passes your ad account's guardrails (see the [safety model](/docs/safety-model)) and is added to the [change log](/docs/change-log), where you can revert it.

## Changing conversion goals through your AI assistant

Your assistant can make a Google Ads or Microsoft Ads search campaign bid on the ad account's goals again, or on goals of its own. The [Campaigns](/docs/campaigns#conversion-goals) page shows which goals each campaign bids on.

1. It reads the campaign's goals with `get_campaign_performance` (on Google Ads each goal has a key) or the conversion goals with `list_conversion_actions` (Microsoft Ads).
2. It checks the change with `preview_update_conversion_goals`.
3. It makes it with `update_conversion_goals` once you confirm.

Try *"Make the Brand campaign bid only on purchases"* or *"Let the Brand campaign use the account's conversion goals again"*.

- The preview lists each chosen goal that is not recording conversions: bidding learns nothing from it.
- Changing what bidding aims for restarts the learning period of automated bidding: results can swing for one to two weeks.
- Roasby never creates a Google Ads custom goal. A revert puts back exactly what the campaign bid on before, including a custom goal.
- A campaign changed in the ad platform since Roasby last read it is not changed: Roasby reads it again first.

Conversion actions themselves are set up in the ad platform. Ask your assistant about them: see [Conversions](/docs/conversions).

## Changing bids through your AI assistant

Ask your assistant to change the max bid of an ad group or a keyword, or of many at once. It shows you each bid before and after, and changes nothing until you confirm.

- For one bid it uses `preview_update_bid`, then `update_bid`.
- For many, `preview_update_bids`, then `update_bids`.

Try *"Lower the bids of the ad groups in the Brand campaign by 15%"* or *"Raise every keyword of the Trail ad group to its first page bid, at most 2 dollars, within my guardrails"*.

### Many bids at once

You can ask for many bids in three ways:

- **One amount**: every item gets the same max bid, or each its own.
- **A change in percent**: each bid goes up or down by a whole percent of its current bid, for example 20 or -15 (a keyword without its own bid starts from its ad group's). The new bid is rounded toward the current one, so it never moves further than you asked.
- **The first page bid** (keywords only): each keyword goes up to the [first page bid](/docs/campaigns#quality-score-and-first-page-bid) the ad platform estimates, never above the highest bid you name. Keywords already at or above it stay as they are, and keywords without an estimate are left out, with the reason.

Many bids change together as one **Bids changed** entry in the change log; **Revert batch** puts back each bid as it was (a keyword that had no bid of its own uses its ad group's again).

### Bid guardrails

Every bid passes the same guardrails:

- the account's max bid;
- its max bid change per step;
- only campaigns that use your bids.

A rise larger than the max bid change per step, or past the max bid, is refused (a cut takes no steps), unless you ask your assistant to limit the bids to the guardrails. Such a bid then moves as far as the guardrails allow and is shown as limited, with the bid you asked for. For example, at a 50% step, raising EGP 27.00 to EGP 53.00 becomes EGP 40.50 now.

- Once that is applied, ask for the bids you wanted again (your assistant gets them as the next step) to take the next step.
- Don't repeat a percent, which would add up.
- A bid stopped by the max bid goes no further until you raise the max bid.

The guardrails are never passed, and only people change them, on the [Ad accounts](/docs/ad-accounts) page.

### Where bids can change

Bids can change only where your bid is used:

- Google Ads search campaigns with manual cost per click;
- Microsoft Ads search campaigns with manual or enhanced cost per click;
- ChatGPT Ads ad groups with a fixed max cost per click.

Under automated bidding (such as maximize clicks or conversions) the platform sets the bids, and other campaign types use other bids, so Roasby refuses the change. Each ad platform also has its own bid limits, and a bid it refuses shows as failed in the change log.

## Changing bidding through your AI assistant

Under each campaign's name on the [Campaigns](/docs/campaigns#bidding) page, a small label says how it bids, with its targets (for example **Maximize conversions, target CPA $45.00**). Select it to see whether your assistant can change it; an ad group with a target CPA of its own shows it under its name.

Your assistant can change how a Google Ads or Microsoft Ads search campaign bids. It reads the bidding with `list_ad_entities`, checks the change with `preview_update_bidding`, and makes it with `update_bidding` once you confirm. Try *"Switch the Brand campaign to maximize conversions with a target CPA of 40 dollars"* or *"Raise the target ROAS of the Shoes campaign to 450%"*.

### Bidding strategies

- **Manual cost per click**: your ad group and keyword bids set the price (Microsoft Ads uses enhanced cost per click for it).
- **Maximize clicks**: the most clicks for the budget.
- **Maximize conversions**, with an optional **target CPA** (the cost per conversion to aim for).
- **Maximize conversion value**, with an optional **target ROAS** (the return on ad spend to aim for, in percent).
- **Target impression share**: show on a share of searches, anywhere on the page, at the top or in the very first position, with a max cost per click.
- **Ad group target CPA** (Google Ads, under maximize conversions): an ad group aims for its own target CPA instead of the campaign's.

### What keeps it safe

- **Guardrails.**
  - Each guardrail below holds only once a person sets it under **Ad accounts → Guardrails**; the daily budget and its guardrail always bound the spend.
  - A max cost per click stays within the ad account's **max bid**.
  - A target CPA stays within the account's **max target CPA**. A target CPA is a cost per conversion, usually many times a cost per click, so it is never held to the max bid.
  - A target ROAS stays at or above the account's **min target ROAS**, when one is set.
  - In one step, a target CPA or max cost per click rises at most the **max bid change**, and a target ROAS falls at most that much (a lower target ROAS spends more).
  - A first target is held to those caps only.
  - Ask your assistant to limit a change to the guardrails, and it moves the target as far as they allow and tells you the next step.
- **Conversions first.** Maximize conversions and maximize conversion value need conversion goals that record conversions (and, for value, conversions with a value). Otherwise the preview warns you, but doesn't refuse: the ad platform takes the bidding, and the tracking is yours to fix. Check [Conversions](/docs/conversions) first.
- **Bids under automated bidding.** Automated bidding sets the bids itself, so your keyword and ad group bids are not used, Roasby shows no bid for them, and it refuses bid changes until the campaign bids manually again. It also ignores device bid adjustments (other than -100%), which the settings preview says.
- **Goals of a new campaign.** Roasby reads a new search campaign's conversion goals a few minutes after it creates it, and **Sync now** reads them too, so you can set its goals, target CPA or target ROAS right away instead of hours later.
- **Learning.** A bidding change starts a learning period: results can swing for one to two weeks. Bidding without a target spends up to the daily budget, within its guardrails.
- **Only what Roasby can put back.** Roasby changes a campaign's own bidding only when it could set the bidding before back exactly. A portfolio strategy (shared with other campaigns), enhanced cost per click on Google Ads and some other strategies are changed in the ad platform. A revert puts back the strategy and every target the campaign had, with one exception: Microsoft Ads doesn't take a max cost per click on maximize clicks, conversions or conversion value again once the strategy changes, so a revert sets that strategy back without its max cost per click (spend stays within the daily budget and its guardrails). The preview of the change, and of the revert, says so.

## Amounts

Bids use at most two decimals, or whole numbers in a currency without decimals, such as the yen. Roasby refuses a finer amount rather than rounding it, so the amount you confirm is the amount that is set.

## Ask your AI assistant

Your assistant checks conversion tracking with `list_conversion_actions` before it suggests how a campaign should bid.

- To change how a search campaign bids it uses `preview_update_bidding` (it reads the current bidding in `list_ad_entities`), then `update_bidding`.
- To change the conversion goals it bids on, `preview_update_conversion_goals`, then `update_conversion_goals`.
- For one bid, `preview_update_bid`, then `update_bid`.
- For many bids, it uses `preview_update_bids` (an amount per item, or one rule: an amount, a change in percent or the first page bid up to a cap, optionally limited to the guardrails), then `update_bids`.

Try:

- *"Is conversion tracking set up right before I switch to maximize conversions?"*
- *"Raise every keyword of the Primary FRCA ad group to its first page bid, at most 55 pounds, within my guardrails"*
- *"Lower the bids of these ad groups by 15%"*

## Limitations

- Conversion goals:
  - your assistant can change which goals a search campaign bids on, not on ChatGPT Ads, whose campaigns show no conversion goals;
  - Roasby never creates a custom goal;
  - conversion actions are read only, every few hours, and changed in the ad platform.
- Bidding:
  - a campaign's own strategy only (not portfolio strategies), on Google Ads and Microsoft Ads search campaigns;
  - ad group target CPAs on Google Ads only, under a campaign that has a target CPA;
  - a target taken away and set again keeps the max bid change per step from the one before;
  - your assistant's reverts keep the guardrails; a revert you make on the **Change log** page restores the exact earlier target;
  - ChatGPT Ads bidding is changed in ChatGPT Ads Manager.
- On Microsoft Ads, Roasby:
  - doesn't change target impression share yet;
  - never adds a target CPA or target ROAS to (or takes one from) a campaign that keeps its strategy;
  - doesn't move a campaign to or from the account's conversion goals: Microsoft offers no way to set those back;
  - uses enhanced cost per click for manual cost per click;
  - keeps a strategy's max cost per click while the strategy stays, but can't set it again after a switch: a revert then comes back without it.
- Bulk bid changes:
  - they keep the max bid change per step: a larger rise takes several steps (a cut takes none) (Roasby limits each one for you if you ask, but never passes the guardrails);
  - first page bid estimates exist only for keywords, not under automated bidding, and on Microsoft Ads only for keywords with recent activity: keywords without one are left out when you raise keywords to their first page bid;
  - estimates are as of Roasby's last sync.
- ChatGPT Ads: max bids on ad groups only.

See every limit by platform on [Limitations](/docs/limitations).
