Goal & strategy

Overview
Marketing starts with a goal for four weeks (Marketing → Goal & strategy). From the goal, your brand profile, the connected channels, the results of the last four weeks and the learnings from tests, the AI creates a strategy: which channels with which share of the budget, why, and a prioritised task list in three columns — To do · In progress · Done.
Each brand always has exactly one running goal. The strategy is a proposal: it spends nothing and switches nothing on.
The autopilot (button Autopilot at the top of the page) then monitors ads and sending and optimises towards the goal metric — per channel with suggestions only, after your approval (default) or fully automatic within the limits you set.
Core tasks
1. Set a goal
- What is your goal? Pick a template: Scale volume despite losses, *Improve profitability
first*, Break even while growing, Not sure (the AI proposes a path) or Custom goal with one sentence in your own words.
- How do we measure it? Cost per lead, cost per purchase or revenue per ad euro. The KPI
that fits your past figures is marked “recommended”.
- Target for four weeks: for cost per lead the number of leads, for cost per purchase the number
of purchases, for revenue per ad euro the factor (3.5 = €3.50 revenue per ad euro). Optionally the budget for the period and the start (default today; the goal runs for 28 days).
- Create strategy creates the goal and generates the strategy. This takes a moment.
2. Read and regenerate the strategy
The Strategy card shows the summary and the channel mix with share, budget and reasoning. Regenerate creates the strategy again — open AI tasks are replaced, started, done and your own tasks stay.
If your brand profile is empty, Maintain brand profile is the first required task — without tone, audience and taboos every ad speaks into the void.
3. Work through the tasks
Clicking a task sets it to In progress and opens the page where it is done (connect ad account, create ad, create audience …). Drag a card to another column to change its state. Add task creates a task of your own.
4. Launch the campaign
Launch campaign is only possible once all required tasks are done; the goal card shows how many are open. From the launch on, the reports are created. Ad campaigns stay as they are — each is switched live individually with the release permission.
5. Edit or end the goal
Edit changes target, budget, the responsible people and which reports go out by email. End goal closes the goal early at once; afterwards a new one can be set. For five seconds Undo takes it back — via the interface POST /v1/marketing/goals/{ulid}/reopen, as long as the final report has not been written and the brand has no new goal.
6. Set up the autopilot
Autopilot opens Marketing → Goal & strategy → Autopilot (also via the card on the overview and under Settings → Marketing). Per channel — every ad network, email, SMS, WhatsApp — choose the level:
- Suggestions only — the autopilot records what it would do; you apply it yourself.
- After approval (default) — every action waits in the approval list; one click executes it.
- Fully automatic — the autopilot acts at once, always within the limits. Only someone with the
budget permission (ads) or send permission (messages) in the brand can switch it on; the page shows who did. If that person loses the permission or their account, the level falls back to “after approval” by itself — with a notice and an entry in the log.
The limits apply per brand and channel: increase per day at most (default 20 % — all increases of a day together, measured against the daily budget at the start of the day) and optionally a daily cap of the network (sum of the daily budgets of all running campaigns of the brand in that network). Every campaign’s own cap always applies. Pausing and lowering are always allowed. The autopilot never increases a lifetime budget.
The style — Cautious, Balanced (default) or Aggressive — sets how much data and confidence a decision needs and how big the steps are. It can be overridden per channel.
For email, SMS and WhatsApp set the contact cap (default at most 5 promotional messages per recipient within 7 days across all channels; 0 = off) and switch email at each recipient’s best hour and channel per recipient on or off. Save applies the changes; Check now runs at once like the hourly run.
7. Approve, reject, revert
The approval list shows every waiting action with its reasoning (rule, metric, comparison, threshold) and before → after. Approve executes it with one click — through the same paths and locks as a rule; Reject discards it, and the same decision does not come back. Suggestions (level “suggestions only”, ChatGPT Ads) can only be dismissed. Open actions expire after three days because their figures are then outdated.
The log lists every action with time, channel, reasoning, before → after, actor (Autopilot on behalf of …, a person or an AI team member) and state. Revert restores what was there before: budget, paused campaigns and ads, send time and channel per recipient. Anything that spends money again passes the cap. The same entries appear in the reports and on the overview.
8. What the autopilot checks
It runs hourly, in the channel’s style, on the figures of the last seven full days:
- Ad test — every ad group with at least two active ads: clicks per impression (from 20 results in
the group: results per impression) are compared statistically. Only with minimum runtime, minimum impressions per ad and enough clicks of the leading ad is anything decided: losers are paused; once every ad has been compared, the winner is fixed — it gets the group’s budget, and a learning is created.
- Scale winners — if a result costs at most a share of the goal cost (goal budget divided by the
target), the daily budget rises by the style’s step.
- Emergency brake — if a campaign spends a multiple of the goal cost without a single result, it is
paused (for revenue per ad euro: without revenue from twice the minimum spend).
- Outlier brake — if the warning “Sudden spend” is open for a running campaign,
the next run suggests pausing it — by the network’s level (pausing is always allowed), with the reason “Outlier warning” including spend, average and threshold in the log; at most once per campaign and day. Once the warning is acknowledged or resolved, no suggestion is created any more, and an open one expires.
- Shift budget — between campaigns and ad networks: if the best campaign leads the weakest by the
style’s gap (results per euro), a share of the daily budget moves — the total never rises.
- Fatigue — if the click-through rate drops clearly against the previous week or each person reached saw
the ads too often (frequency = impressions divided by the reach of the last seven days; only Meta, TikTok and LinkedIn report reach, the other networks check the click-through rate only), the task Renew ad appears on the goal’s task board (at most once a week). A draft with network and finding is waiting in the ad studio — whoever opens the task and clicks Create continues in exactly this draft.
- Split test of an email (subject or content) — if one variant is reliably better, it is decided
before the deadline and the remaining send starts; otherwise the deadline decides as before.
- Send time per recipient — a scheduled newsletter goes out in hourly waves: recipients with their
own best hour (from their opens and clicks) get it then, within 24 hours; all others at once.
- Channel per recipient — in flows with a fallback chain, first the channel the recipient reacts to
best; the fallback stays behind it.
Emergency brake, scaling and shifting need a running goal, the outlier brake does not. ChatGPT Ads has no management API: everything there stays a recommendation for the OpenAI Ads Manager.
| Threshold | Cautious | Balanced | Aggressive |
|---|---|---|---|
| Confidence of a test decision | 95 % | 90 % | 80 % |
| Impressions per ad / clicks of the leader | 2,000 / 30 | 1,000 / 20 | 500 / 10 |
| Runtime before a test decision | 7 days | 4 days | 2 days |
| Minimum spend of a campaign (7 days) | €50 | €30 | €15 |
| Scale at cost per result at most / step | 70 % / +10 % | 80 % / +15 % | 90 % / +20 % |
| Emergency brake from spend without result | 3 × goal cost | 2 × goal cost | 1.5 × goal cost |
| Shift from gap / share | 1.5× / 10 % | 1.3× / 20 % | 1.2× / 30 % |
| Fatigue from drop in click-through rate | 30 % | 25 % | 20 % |
| Fatigue from frequency (7 days; Meta, TikTok, LinkedIn) | 4.0 | 3.5 | 3.0 |
| Split test before deadline from recipients per variant | 200 | 100 | 50 |
9. Suggestions on their own
Every Monday from 6 am suggestions are created for every brand on their own — by default 5 ads, 3 emails, 1 SMS and 1 WhatsApp message. On top come suggestions on occasions: new product, overstock, new goal, decided test, fatigued ad and an upcoming occasion from the occasion calendar. Each occasion triggers at most once, and per day at most as many occasions as set (default 3) — the rest follow the next day.
The Suggestions on their own card on the autopilot page sets the amounts per area; 0 switches an area off. It shows whether the week is done, when the next run is due and how many occasions came today. Suggest now runs immediately like the hourly run.
- If Monday is missed (server down, AI unreachable), the next run of the week catches up.
- Without a configured AI nothing is created and nothing is charged; the card shows a hint. As soon as
the AI is on, the next run catches up on the week.
- SMS and WhatsApp suggestions are only created when the channel is set up.
- Every suggestion carries an approach, a reason with figures, a preselected product (never sold out),
format and network or channel. You find them in the ad studio, the mail studio, the SMS studio and the WhatsApp templates; one click turns them into the result. All open suggestions are returned by GET /v1/marketing/suggestions.
Fields in detail
The goal reads and writes via /v1/marketing/goals (strategy: POST …/strategy, launch: POST …/launch, end: POST …/end), tasks via /v1/marketing/goal-tasks. The grey name after the label is the API field.
Goal
| Field | Required | Values / format | What it does |
|---|---|---|---|
Brand brandId | no | a brand in which you may manage goals; default: your only or the default brand | Which brand the goal applies to. One goal runs per brand; a goal never changes brand. |
Template template | yes | scale_despite_losses, profitability_first, break_even_growth, not_sure, custom | The direction the strategy follows. |
Custom goal customGoal | for custom | text, at most 500 characters | Your goal in your own words; an addition for the other templates. |
KPI kpi | yes | cpl (cost per lead), cpa (cost per purchase), roas (revenue per ad euro) | How success is measured — in overview, progress and reports. |
Target targetValue | yes | whole number above 0: leads (cpl), purchases (cpa) or revenue per ad euro in hundredths (roas, 350 = 3.5) | What should be reached in four weeks. Progress in percent is measured against it. |
Budget budgetCent | no | cents, 0 = open | Budget for the whole period; the strategy splits it across channels to the cent. |
Start periodStart | no | YYYY-MM-DD, default today | First day; the end follows (28 days). After the launch the period is fixed. |
Responsible people reportRecipientUlids | no | up to 10 active users who may see the brand’s analytics | They receive the reports by email. |
Reports by email reportMailKinds | no | daily, weekly, final | Which reports go to the responsible people. |
Hint hint | no | text, only for …/strategy | Extra input for the AI, for example a focus. |
Read-only: end and state (periodEnd, status: active, completed, ended), launch and end (launchedAt, endedAt), the strategy (strategy with summary and channels, strategyGeneratedAt), progress (progress), task counts (taskCounts), whether launch is possible (canLaunch) and after …/strategy the result (generation: aiUsed, tasksCreated, notice — aiInactive without AI, noAnswer without a usable answer).
Task
| Field | Required | Values / format | What it does |
|---|---|---|---|
Goal goalUlid | yes, on creation | a running goal | Which goal the task belongs to; it never changes. |
Title title | yes | text, at most 200 characters | What to do. |
Description description | no | text, at most 2000 characters | Details. |
Channel channel | no | ads, email, sms, whatsapp | What the task is for. |
Ad network network | no | meta, linkedin, tiktok … | Advertising only. |
Work path action | no | brand_profile, connect_ads, ad_create, ad_review, audience, form, email_campaign, email_template, sms_campaign, whatsapp_campaign, consents, report | Which page opens when clicking the task. |
Required required | no | yes/no | Required tasks must be done before “Launch campaign”. |
Order priority | no | 1 to 999, lower = first | Where the task sits in its column. |
State status | no | todo, in_progress, done | To do · In progress · Done; start and completion are recorded. |
Read-only: origin (source: ai, system, manual) and timestamps (startedAt, completedAt).
Autopilot
Read and save via /v1/marketing/autopilot (?brandId=), check at once with POST /v1/marketing/autopilot/run.
| Field | Required | Values / format | What it does |
|---|---|---|---|
Brand brandId | no | a brand in which you may manage the autopilot | Which brand the setting applies to. |
Style style | no | cautious, balanced, aggressive | Thresholds and step size of all rules (table above). |
At most promotional messages contactCapMax | no | 0 to 100, 0 = no cap | Contact cap per recipient across email, SMS and WhatsApp together; every send checks it. |
Within days contactCapDays | no | 1 to 90 | Period of the cap. |
Email at best hour bestTime | no | yes/no | Whether the autopilot suggests “at each recipient’s best hour” for scheduled newsletters. |
Channel per recipient bestChannel | no | yes/no | Whether it suggests “channel per recipient” for flows with a fallback chain. |
Channels channels | no | list, one row per channel | Per channel: channel (required per row: meta, google, microsoft, pinterest, tiktok, linkedin, chatgpt, email, sms, whatsapp), Level level (suggest, approval, auto = suggestions only · after approval · fully automatic; ChatGPT Ads only suggest), Channel style style (cautious, balanced, aggressive or empty — overrides the brand style), Increase per day at most maxIncreasePercent (0 to 100, default 20; all increases of a day together, 0 = never increase) and Daily cap of the network dailyCapCent (cents or empty; maximum sum of the daily budgets of all running campaigns of the brand in this network). |
Read-only: per channel the kind (kind), whether the network is switched on (available) and controllable (controllable), the effective style (effectiveStyle), who switched on full automation (enabledByUlid, enabledByName, enabledAt), a fallback (notice: revoked, noticeAt) and the required permission (requiredPermission); plus the thresholds per style (styles), open actions (open) and the last run (lastRunAt, lastRun).
Suggestions on their own
Read via GET /v1/marketing/suggestion-settings (?brandId=), save with POST /v1/marketing/suggestion-settings, run immediately with POST /v1/marketing/suggestion-settings/run.
| Field | Required | Values / format | What it does |
|---|---|---|---|
Brand brandId | no | a brand in which you may run the autopilot | Which brand the amounts apply to. |
Ads per week adsPerWeek | no | 0 to 20, default 5 | Ad ideas every Monday; 0 = off. |
Emails per week mailsPerWeek | no | 0 to 20, default 3 | Email ideas every Monday; 0 = off. |
SMS per week smsPerWeek | no | 0 to 20, default 1 | SMS ideas every Monday, only with an SMS channel set up; 0 = off. |
WhatsApp per week whatsappPerWeek | no | 0 to 20, default 1 | WhatsApp ideas every Monday, only with WhatsApp switched on; 0 = off. |
Occasions per day triggersPerDay | no | 0 to 20, default 3 | At most this many occasions trigger suggestions per day; 0 = no occasion suggestions. |
reset | no | list of field names | Set these values back to the default. |
Read-only: whether the brand sets a value itself (own), the defaults (defaults), whether the AI is on (aiActive), SMS and WhatsApp are ready (smsReady, whatsappReady), the week (week, weekDone), last and next run (lastRunAt, nextRunAt), occasions today (triggersToday) and after "Suggest now" the figures of the run (lastRun).
Autopilot action
Approval list and log via /v1/marketing/autopilot-actions (?brandId=&status=open|log), approve POST …/{ulid}/approve, reject POST …/{ulid}/reject, revert POST …/{ulid}/revert. All fields are read-only: kind (kind: ad_test, budget_increase, budget_decrease, budget_shift, campaign_pause, creative_renewal, split_decide, send_time, channel_choice; log entries level_fallback, contact_cap), state (status: suggested, pending, executed, rejected, failed, expired, reverted), channel, level and style at the time of the suggestion, subject (subjectType, subjectName, subjectPath), reasoning (reason: rule, metric, value, compare, threshold, confidence, sample, windowDays; for the outlier brake also percent, severity, day, warningUlid; for fatigue by frequency frequency, frequencyThreshold, reach), before and after (before, after), notice (notice, e.g. approvalNeeded, limitReached, chatgptAdsManager, warningAcknowledged), actor (actorType: autopilot, user, ai; actorName, onBehalfOfName), timestamps, whether it can be reverted (revertible) and which permissions approving or reverting require (requiredPermissions).
Settings & permissions
- Viewing requires seeing the marketing analytics in the brand (
marketing.report.view). - Setting a goal, generating the strategy, managing tasks, launching and ending requires **Manage
marketing goal, strategy, tasks, reports and learnings (marketing.goal.manage) in the goal’s brand**. The permission does not move money.
- The strategy needs AI to be set up (
ai.gateway). The task is Create strategy for a marketing goal
(marketing.strategy); it is charged to the brand’s AI budget and throttled per user.
- The brand profile comes from Content; without that module the strategy
is created without a profile.
- Viewing the autopilot requires seeing the brand’s marketing analytics (
marketing.report.view).
Configuring, approving, rejecting and reverting requires Configure the marketing autopilot, approve and revert suggestions (marketing.autopilot.manage) in the brand — plus the permission of the effect: increasing, shifting, full automation of ads, higher limits and any revert that spends money again require marketing.ads.publish; lowering, pausing and ad tests marketing.ads.manage; split test, send time and channel per recipient as well as full automation of messages marketing.campaign.send; the renewal marketing.goal.manage.
- AI team members use the autopilot through the same paths and permissions. They trigger
increases, shifts, re-activation and the remaining send of a split test only with the authority “self” for money or external impact — otherwise an approval is created. If an AI team member switched on full automation, every such action waits in the approval list without that authority.
- Suggestions on their own are visible to anyone who sees the marketing reports; setting amounts and
"Suggest now" require marketing.autopilot.manage in the brand. The suggestions run on the brand's AI budget; what they lead to (launching an ad, sending an email) still requires its own permission.
- The autopilot runs hourly in the scheduler; networks are only controlled through their adapter, where
every campaign’s cap is checked a second time.
FAQ & troubleshooting
“A goal is already running for this brand.” Each brand has one goal. End the running goal, then a new one can be set.
“Launch campaign” is greyed out. Required tasks are still open; the goal card shows how many. Or the goal has already launched.
No strategy is created. Without AI a notice appears; the basics are still in the tasks.
The autopilot suggests nothing. It needs figures: the style’s minimum spend, minimum impressions and runtime. Budget rules also need a running goal with a budget.
An “Outlier warning” suggestion has expired. The warning has since been acknowledged or resolved (notice warningAcknowledged) — the autopilot then no longer pauses the campaign.
“Full automation and higher limits require the permission …” You lack the budget or send permission in the brand. Lowering, switching off and “after approval” always work.
Full automation is back on “after approval”. The person who switched it on lost their permission or account. Someone with the permission switches it on again.
An approval fails with “limit reached”. The campaign cap, the network’s daily cap or the percentage per day is used up — tomorrow there is room again.