Copilot
The Copilot reads each campaign's last seven days every morning and suggests what to block, scale or fix — with the figures behind each suggestion, one button to act, and Undo.
The Copilot reads every campaign's numbers once a day, at 06:00 UTC, and again whenever you press Refresh. It lists what is losing money, what is worth scaling, which split test has a winner, and where tracking looks broken. Each suggestion shows the figures it is based on.
Open it with the Copilot button at the top right of every screen. It opens beside the page you are on, so you can act on a suggestion without leaving your work; Open the full view shows every suggestion grouped by campaign, with filters and the whole list of changes.
Nothing changes on its own. A suggestion is a list item until somebody presses its button, and every change made from one is recorded under Recent changes, where Undo puts it back.
#What it looks for
| Suggestion | When it appears | The button |
|---|---|---|
| Losing money — a zone, placement, country or ISP | It has spent at least twice what a conversion pays, with no conversions and under a 5% chance that is bad luck; or it converts but loses half or more of what it spends | Blocks it for that campaign |
| Mostly bots | At least 30% of 500 or more visits were bots | Blocks it for that campaign |
| Scale | Even its lowest plausible conversion rate beats the campaign's, from at least 5 conversions | Advice: raise its bid in the ad platform |
| Split test | One landing page or offer is at least 95% likely to be better, and every side has had 300 clicks and 10 conversions | Sends all of the traffic, or 80%, to the winner |
| Campaign losing money | A return worse than −30% over three days, after spending three times what a conversion pays | Pauses the campaign, after asking |
| Tracking | Conversions stopped for two days while clicks kept arriving | Advice: check the postback |
| No cost | 500 or more clicks in a week with no cost recorded | Advice: set a cost, or connect cost sync |
A conversion the network is still deciding on holds a suggestion back: it may yet turn a loss into a profit.
#Tracking health
The checks above assume the tracking works. These check that it does — each is a fault that makes every other number wrong. They carry a How to fix link to the part of this manual that explains the fix, and a button to the page where it is made.
| Suggestion | When it appears |
|---|---|
| Macros | A sub field arrived as the macro itself — {zoneid}, ${SUBID}, __AID__ — on 20 or more clicks in two days. The ad platform is not filling it in. |
| Click IDs | Half or more of 100+ clicks from Google, Microsoft, Meta or TikTok arrived without the platform's click ID, so their conversions cannot be sent back to it |
| Conversions | Three or more conversions failed to reach the ad platform in a day |
| Cost sync | A traffic source's cost sync failed, or has not run for a day |
| Connection | A Google or Microsoft sign-in stopped working and needs reconnecting |
| Network | An affiliate network's API check failed |
| Landing page | Its click-through fell below a quarter of the week before |
| Tag | Google or Microsoft reports spend, and UTMCAP recorded no visits from it — the tag is missing or the Final URL lacks its parameters |
| Goal | A goal has never fired three days after it was made, or has not fired for two weeks |
| Approvals | The network approved under half of ten or more conversions it decided on in a week |
| Bots | A campaign's bot rate jumped at least 15 points and doubled against the week before |
| Postbacks | A network sent five or more conversions in a day that matched no click — usually a click ID cut short or sent in the wrong parameter. Counted for postbacks sent to the network's own postback URL. |
| Search term | Google Ads or Microsoft Advertising: a search that spent at least twice what a conversion pays over 30 days, with none converting, and under a 5% chance of that by bad luck at the campaign's rate. Read each morning from the connected account. |
| Repeat clicks | Google Ads: one IP address clicked ten times or more in seven days and never converted, where the campaign's rate says it should have. |
Where the campaign's traffic source is connected and changes in that network are switched on, a suggestion also offers its button there: Block in PropellerAds on a losing zone, Raise its bid 10% on a winning one, Exclude in Google Ads on a losing placement, Add as negative keyword on a search, Exclude IP on repeat clicks, and Pause in … on a losing campaign. Each is checked against the network again when pressed, and undone from Recent changes.
The alerts under the bell — an unverified domain, a certificate expiring, a network that has never sent a postback — stay there, and are not repeated here.
Which sub is the zone? The traffic source's template names each field, so a suggestion reads "Zone ID 48213" rather than "sub3 48213". A source without a template shows the field name.
#Ask the Copilot
The box at the foot of the Copilot panel answers questions in plain words — "why did ROI drop yesterday?", "which TikTok ads should I stop?", "how do I send conversions back to Taboola?". To answer, it looks things up: your campaigns and reports, your setup, the Copilot's own suggestions, these help pages and the platform guides. Under each answer it lists what it looked at.
Asking it to fix something. Say "block the losing zones on this campaign", "send all the traffic to the better landing page" or "pause it", and the Copilot prepares the change as a card under its answer: what will change, with the figures behind it. Nothing changes until you press Apply; Cancel drops it. It can prepare three kinds of change — blocking sub values, countries, ISPs or networks on a campaign; changing a campaign's split between offers or landing pages; pausing a campaign — and anything else it explains how to do by hand.
An applied change goes into Recent changes with the rest of the Copilot's, and Undo puts it back. The same rules as by hand apply: a viewer cannot apply, a buyer only on campaigns they created, and applying is on Starter and above. A card lasts a day; after that, ask again for figures that are up to date.
Changes inside the ad network. When the campaign's traffic source is connected under Integrations, the Copilot can also prepare changes in the network itself — so the network stops charging for what you block:
| Network | What it can change |
|---|---|
| PropellerAds | Block zones, raise or lower a zone's bid, pause a campaign |
| Google Ads | Negative keywords (from its search terms), exclude placements and IPs, keyword bids, daily budgets, pause |
| Microsoft Advertising | Negative keywords (from its search terms), exclude sites, keyword bids, daily budgets, pause |
| Taboola | Block sites, adjust a site's bid, daily cap, pause |
| Outbrain | Block publishers, daily budget (not a shared one), pause |
| MGID | Block widgets, adjust a widget's coefficient, exclude IPs, pause |
| Adsterra | Block placements, a placement's custom bid, pause |
| ExoClick | Exclude IPs, pause |
| TrafficJunky | A spot's bid, daily budget, pause |
| TikTok Ads | Daily campaign budget, pause |
Some changes are left out on purpose where a network's own documentation does not make certain what a call does: ExoClick's zone toggle, Adsterra's budget (it can wait for Adsterra's approval), TrafficJunky's spot exclusion (there is none) and TikTok's bids. RevContent and NewsBreak are advice only for now.
A bid moves at most 20% and a budget at most 30% in one change, and a keyword bid is only offered where the campaign bids manually — under automated bidding the network ignores it. Before applying, each value is checked against the network again: if it has changed there since the card was made, nothing is overwritten. Undo takes the change back in the network. For Facebook, TikTok and the rest, the Copilot says what to change and where.
What answers. Either your own AI or UTMCAP's:
| How | Who pays | |
|---|---|---|
| Your own API key | Integrations → AI: paste a key from Anthropic, OpenAI, Google Gemini or OpenRouter, and choose a model. One OpenRouter key reaches Claude, GPT and many other models | Your provider bills you; no monthly limit here |
| UTMCAP's built-in AI | Nothing to connect | Included: 100 questions a month on Growth, 250 on Pro, 500 on Scale |
A ChatGPT or Claude subscription cannot be used: those work only in the companies' own apps. An API key is a separate account with the provider.
What the AI sees. Grouped figures and names — campaign and source names, zone ids, countries, totals. Never a visitor's IP address, a click id or any of your keys. Conversations are not stored; only that a question was asked, and its size, for the monthly count.
#Blocking in the ad platform
Blocking a zone in UTMCAP stops its visitors reaching your offer — but the ad platform still charges for the click. To stop paying for it, block the zone in the ad platform too. Copy blocklist beside a campaign copies every ID the Copilot has suggested blocking, one per line, ready to paste.
UTMCAP can block on a sub field, country, ISP or network (ASN). A losing device or operating system is shown as advice, to change in the ad platform.
#Dismiss and snooze
Dismiss hides a suggestion. It comes back only if its spend grows by half again — clearly worse, not one more click. Snooze hides it for a week.
#Who can do what
Everyone on the account can read the Copilot. A viewer cannot change anything; a contributor can act on campaigns they created; admins and members can act on any. Applying in one click is on Starter and above — the free plan sees its top three suggestions and acts on them by hand.