Getting Started
ROASt Labs works with your existing Google, Microsoft, and Meta Ads accounts. Here’s how to go from sign-up to your first optimisation.
Head to Accounts and click Connect for each platform. You’ll authenticate via OAuth — ROASt never sees your password. Once connected, an initial sync pulls 90 days of campaign data: budgets, spend, conversions, impression share, and bid targets.
Supports Google Ads, Microsoft Ads, and Meta Ads. You can connect one or all three.
Your campaigns are grouped into portfolios — each with its own budget, target ROAS/CPA, and optimisation settings. Set a monthly budget for each portfolio and choose a preset to start with:
By default, the engine optimises against total platform-reported revenue. If you want to focus on specific conversion actions — leads, form submits, or purchases from a particular source — create a custom Goal in the Goals tab and assign it to your portfolio. The engine then scores entirely against those filtered conversions.
Click Optimise on any portfolio. The engine scores every campaign and produces a set of staged recommendations — budget changes and bid target adjustments. Nothing is pushed to your ad accounts yet.
Review the recommendations, check the reasoning breakdown for each campaign, then click Execute when you’re ready. ROASt confirms every change landed via readback verification.
Once you’re comfortable with the recommendations, head to Automation to schedule nightly runs. We recommend starting with dry-run mode — the engine will stage recommendations and log results every night, but won’t push anything. Switch to auto-execute when you’re ready.
A global kill switch is always available to halt all automated execution instantly.
Use the Dashboard for a performance overview, pacing health, and account diagnostics. The engine’s calibration loop adjusts parameters automatically as data accumulates. For on-demand analysis, ask Flume — the built-in AI assistant — to generate reports, review performance, or diagnose issues.
Pipeline overview
ROASt Labs analyses your last 91 days of daily campaign data and runs a staged pipeline to produce budget and target recommendations. The pipeline is fully deterministic — every decision is the product of signal maths, not a model that guesses.
AI (Claude) ranks candidate keyword pauses + creative pauses, writes the weekly brief, and powers Ask Flume. Never used for budget or target decisions — those run on deterministic math. See the team breakdown for which agent uses what.
The AI Ops Team
ROASt is built around nine specialists working on your account in the background. Some act on it, some watch for changes, some explain the numbers. Some run on Claude. Most run on math. This is the team, what each one decides, and where their work shows up.
The Optimisers
Budget Pacer
Reallocates daily spend across your campaigns within each portfolio’s monthly budget. Fits a saturation curve per campaign nightly from your last 30+ days of data, then solves for the spend mix that maximises ROAS within your velocity caps and budget locks.
Search Waste Hunter
Scans your Google search terms weekly. Filters for high-spend, low-converting candidates using deterministic spend + close-rate signals, then asks Claude Haiku to rank each remaining candidate for ad relevance against your portfolio goal description.
Creative Fatigue Analyst
Spots fatigued ads across Google RSA, PMax, and Meta. Combines deterministic fatigue signals (frequency, performance decay) with Claude Haiku judging each candidate against your goal description. Sibling-count guards prevent ever stranding a campaign with its last working asset.
The Watchers
Pacing Watchdog
Flags portfolios drifting off their monthly spend pace. Triggers a daily digest when month-to-date spend is more than 15% off the prorated budget target, with the worst offenders sorted first.
Market Intelligence
Reads Google’s auction insights hourly to detect when a competitor enters or leaves your auction. Writes structured change rows that the Causal Correlation surface later uses to explain ROAS shifts back to specific market events.
Health Officer
Surfaces tracking gaps, broken UTMs, and revenue divergence between ad platforms and your shop / CRM. Continuously grades the account’s measurement health and proposes specific fixes when something breaks.
The Analysts
Model Architect
Re-fits each campaign’s saturation curve nightly from new data, then grades the engine’s own predictions against actuals. You can see in the Calibration tab how well the math is keeping up with reality, campaign by campaign.
Brief Author
Writes your weekly brief and daily mini-brief — named-agent prose that narrates what the team did this week, in plain English. References each agent’s work by name so the brief reads as a real ops report, not a chart dump.
The Generalist
Ask Flume
Free chat with full team access via MCP tools. Ask anything in plain English — Flume can read your account data, propose pauses, draft briefs, or hand a structured plan back. The same tools are also available to your own LLM via the public MCP endpoint, so you can plug Claude / ChatGPT / Gemini into ROASt as the controller and let ROASt be the data layer + safety net.
Honest framing. Five of these agents are deterministic math: Budget Pacer, Pacing Watchdog, Market Intelligence, Health Officer, Model Architect. Two are math + Claude ranking: Search Waste Hunter and Creative Fatigue Analyst (Claude judges candidate ad-relevance against your goal description; math handles the filtering and the apply). Two are Claude-led: Brief Author writes the brief; Ask Flume drives the chat. No agent autonomously changes budgets or targets — that’s Budget Pacer’s job, and Budget Pacer is pure math operating inside your own caps.
Performance Dashboard
The Dashboard is your command centre — a single view of portfolio health, system status, and actionable diagnostics across all connected accounts.
System status
At-a-glance cards for Accounts, Portfolios, Audit, Platform Mix, and Events — each with a status badge and quick link to the relevant tab.
Pacing health
Pacing gauges show month-to-date vs target spend for each portfolio. Colour-coded: green (on track), amber (slightly off), red (significantly ahead or behind).
Account Health score
A composite score across six dimensions: tracking health, budget utilisation, platform coverage, optimisation readiness, creative health, and keyword quality. Each dimension is scored 0–100 with a weighted contribution to the overall grade (A–F).
Revenue reconciliation
Compares platform-reported revenue with GA4 analytics data (when connected) to surface discrepancies between attribution models.
The Optimiser
The Optimiser scores each campaign in a portfolio and allocates the total budget in proportion to those scores. It also recommends target bid adjustments (tROAS / tCPA) where impression share data suggests a ranking constraint rather than a budget constraint.
Click Optimise on any portfolio to run the pipeline manually. Results are staged — every proposed change is visible before anything is pushed to your ad accounts. You can re-run and adjust as many times as you like before executing. Use Run All to stage all portfolios at once.
Portfolio controls
Min / Max allocation % — floor and ceiling on each campaign’s share of portfolio budget
Max budget step per run — limits single-run budget change as a % of current daily budget
tROAS floor & ceiling — hard guardrails on target ROAS recommendations
Max target change % — velocity cap on tROAS / tCPA adjustments per run
Recency half-life — how quickly older data loses weight. Shorter = more reactive
Attribution lag days — recent days treated as incomplete for revenue signals
Presets (Conservative, Balanced, Aggressive, Turbo) provide a starting point. A Personalised option analyses your portfolio’s data and suggests optimal settings.
— Signals
Every signal is computed from your last 91 days of daily campaign data. Recent days are weighted more heavily via exponential decay (configurable half-life, default 14 days).
Recency-weighted ROAS
Revenue divided by spend, with more weight on recent performance. The primary scoring signal — campaigns with stronger recent ROAS receive a proportionally larger budget share.
IS Lost to Budget
Impression share lost because the daily budget runs out. Campaigns with high IS Lost to Budget have proven demand going unserved — they receive a growth tilt boost proportional to their efficiency.
IS Lost to Rank
Impression share lost because bids are too low. Rather than adding budget, the engine routes these campaigns to target nudges — adjusting tROAS or tCPA to improve auction rank.
Confidence
A composite of data coverage (40%), conversion volume (35%), and ROAS stability (25%). Low-confidence campaigns blend toward the portfolio average so they are neither over-allocated nor starved.
Learning protection
New campaigns with limited data are guaranteed a minimum allocation — at least 50% of the portfolio average — so they can gather enough signal to score fairly.
Trend momentum
Compares recent 7-day ROAS against the prior 14-day ROAS, with winsorisation to cap outliers. Dampened by volatility and conversion consistency to avoid chasing spikes.
Diminishing returns
Detects when spend has grown but ROAS has fallen — a saturation signal. Dampens allocation by up to 50%. Disabled during promotional events to avoid misidentifying promo effects.
Attribution lag discounting
The most recent days have incomplete conversion data. Revenue from recent days is scaled by a completeness curve so the engine doesn’t over-index on partial data. Default lag: 7 days, configurable.
Anomaly detection
A pre-pass flags tracking outages (spend with zero revenue for 3+ days), ROAS spikes (>3× campaign median), and data ceiling breaches. Flagged rows are downweighted by 80% before scoring.
Day-of-week multiplier
Each campaign carries a per-day-of-week performance multiplier learned from its own history. Tomorrow’s DOW (since budget changes staged today take effect tomorrow) is what the score uses. Strength of the effect is controlled by a DOW weighting setting per portfolio.
Synthetic IS fallback
Campaigns that report zero impression-share data (common on Meta) receive estimated IS values derived from same-platform peers (dampened median) or platform defaults, so they can still participate in growth tilt and reserve bidding.
Growth tilt
Campaigns with above-average efficiency AND high IS Lost to Budget receive a growth-potential boost. The boost scales with the efficiency ratio (capped at 3×) raised to the power 1.5, modulated by IS headroom. Controlled by growthTiltWeight (default 0.5).
Hill-curve marginal value (MMM blend)
When Hill response curves are available for a campaign (fitted nightly from historical spend-vs-revenue data), the engine blends a marginal-return score into the base score. The blend weight ramps with curve confidence via a smoothstep function — high-confidence curves have more influence; low-confidence ones are ignored. This shifts budget toward campaigns with genuine headroom and away from those near saturation, even when raw ROAS looks similar.
Platform anomaly scoring
Platform adapters detect 8 anomaly types that directly affect scoring: creative fatigue (Meta CTR decline, 30% score penalty), audience saturation (Meta frequency exceeding thresholds, caps growth tilt), spend velocity spike (Meta 3-day spend > 2× prior week, 15% penalty), PMax ghost capacity (Google PMax spending < 50% of budget, blocks reserve eligibility), ghost budget (Microsoft 14-day utilisation < 50%, 25% penalty + reserve block), and no/low IS data (informational only). Penalties compound but are floored at 50% of the original score so a cascade of mild signals can’t zero a campaign out.
Bid mode modifiers
Manual-bidding campaigns get a small dampening (the engine is less confident allocating heavily to manually managed budgets). Target-based bidding (tROAS, tCPA) gets a small bonus since platform algorithms respond predictably to budget changes. Click-only optimisation gets a slight penalty since click-based goals are less directly tied to value.
— Promo-aware scoring
During promotional events (§11 Events & Promotions), the engine adjusts its intelligence so it doesn’t misinterpret expected demand shifts as performance changes.
Exogenous demand multiplier
When set (e.g. 2.0 = expected 100% demand uplift), the engine normalises trend signals by the multiplier so promo-driven revenue increases are treated as expected, not as a growth signal to chase.
Anomaly threshold widening
ROAS-spike and ceiling thresholds are multiplied by the demand factor so legitimate promo spikes aren’t flagged as anomalies and downweighted.
Diminishing-returns dampening
DR signal strength is halved per multiplier unit during promos — ROAS decline during high demand may be temporary tapering rather than true saturation.
Historical–promo signal blend
On day 1 of a promo the engine has limited promo-period data. Rather than flying blind, it blends historical campaign signals (longer recency window) with promo-period signals. Progress-based: short promos (≤7 days) reach 100% promo data by their final day; longer promos cap at 7 days. Best performers from before the promo still get appropriate allocation on day 1; promo performance takes over as data accumulates.
Post-promo cooldown
For 4 days after a promo ends, negative trend and diminishing-returns signals are gradually dampened (80% → 20%) to prevent the engine from overreacting to the inevitable post-promo demand drop.
— Cumulative change tracking
The engine tracks how much each campaign’s budget has changed over a rolling window to prevent excessive flickering. An asymptotic throttle reduces change velocity as cumulative changes approach the platform maximum.
If the portfolio budget itself changes by more than 5%, the change history resets to give the engine fresh room to move.
The Pacer
The Pacer tracks your portfolio’s monthly budget and distributes what’s remaining across the rest of the month, recalculating every time you run the Optimiser. It ensures spend is shaped intentionally — not just front-loaded by default.
Flat
Equal daily allocation for every remaining day.
Front-loaded
More spend in the first half of the month, ramping down toward month-end.
End-loaded
Reserves more budget for the second half of the month.
Modelled
Weights future days using your portfolio’s own historical day-of-week and week-of-month patterns, combined with impression share data.
You can pin individual days with a custom multiplier — click any future bar in the Pacing chart — to override the mode weight for that day. Pins persist across mode changes.
Platform Adapters
After the core pipeline scores and allocates budget, platform-specific adapters apply constraints appropriate to each platform’s learning mechanics and API behaviour. The pipeline is platform-agnostic — adapters are the final safety layer.
Google Ads
- Learning phase lock — campaigns in Google’s learning phase are capped at a 5% budget step
- Spend capacity ceiling — if a campaign is only spending a fraction of its budget, recommendations are capped at 1.15× recent average spend
- Compound stepping — large increases are broken into sequential steps, one per run
- Confidence-based velocity — high-confidence campaigns get the full step; low-confidence ones are dampened
Meta Ads
- ASC dwell lock — Advantage+ Shopping campaigns have a 48-hour minimum between budget changes
- Learning stage awareness — campaigns in learning or learning_limited have reduced budget steps
- Audience saturation guard — frequency data detects saturation; increases are capped when triggered
- Creative quality dampening — campaigns with low quality or engagement rankings have increases dampened
Microsoft Ads
- Ghost budget prevention — campaigns spending less than 50% of budget over 14 days are frozen at current budget
- Conservative velocity — Microsoft’s smaller auction volume means more conservative dampening than Google
- Compound stepping — same as Google: large increases broken into sequential steps
Budget Planner
Budget Planner answers two planning questions — one cross-platform, one cross-portfolio — using the same Hill response curves the live allocator relies on. Pick the mode from the switcher at the top of the tab.
— Mode A · Platform Mix
Given a total budget for one portfolio, what’s the optimal split across Google / Meta / Microsoft? The engine fits a Hill response curve (spend → revenue saturation) per campaign over the last 91 days, aggregates to platform level, and uses Lagrangian bisection to allocate budget where marginal ROAS is highest. Each curve carries a 95% confidence interval from residual bootstrap (500 draws); narrow bands indicate a confident split, wide bands flag low-confidence curves and the live allocator’s MMM blend dials back automatically to match.
— Mode B · Portfolio Mix
Given a total budget across multiple portfolios, what’s the optimal split to maximise revenue? Select an objective, choose the portfolios to include, set a total budget, and click Model. Mode B uses a marginal-ROAS greedy algorithm — each budget increment goes to whichever portfolio has the highest marginal return at its current level.
Efficiency curve
Current vs optimised split across budget levels. Three views: Revenue, ROAS, Marginal ROAS. The marginal view shows where each unit of spend hits diminishing returns.
Revenue uplift waterfall
Per-portfolio revenue change from current to optimised allocation — so you can see exactly where the gain comes from.
Spend ceiling
Each portfolio’s addressable ceiling is estimated from impression share data. Budget Planner won’t push beyond what the portfolio can absorb.
Stepped ramp
Apply changes immediately or use Step Over N Days to ramp budgets gradually — the nightly scheduler applies one step per night.
Goals & Conversion Mapping
By default, every campaign’s optimisation is based on its total platform-reported revenue and orders. Custom Goals let you define the specific conversion actions that matter for each portfolio — and the engine scores entirely against those.
Conversion actions are synced from your ad platforms during account connection. You create named goals that group one or more actions across platforms — for example, a “Qualified Leads” goal might combine Google’s “Form Submit” and Meta’s “Lead” action.
When a portfolio has a custom goal assigned, all engine signals — ROAS, trend, confidence, diminishing returns — are computed from the filtered conversion data.
Goals can use any of four conversion sources, chosen at creation time:
Platform (default)
Conversion tracking from Google, Microsoft, and Meta directly. Supports multiple conversion actions across platforms in a single goal.
GA4
Google Analytics 4 events as the revenue / conversion source. Link a GA4 property
in Accounts and map a goal to a specific event (e.g. purchase). Uses
sessionGoogleAdsCampaignId for Google and UTM matching for Meta and
Microsoft.
Shopify
Shopify order data as ground-truth revenue, attributed to campaigns via UTM parameters. Attribution lag drops to 1 day — orders are recorded at checkout, not subject to platform attribution windows.
HubSpot CRM
HubSpot deals as the revenue / conversion source — ideal for long sales cycles and B2B. UTM-attributed, deal-stage filterable, with an extended attribution lag (default 35 days) so the engine waits for CRM value to materialise before evaluating.
Keyword Intelligence
Negative keywords and pause candidates are the highest-ROI tactical work in PPC and the thing most accounts do worst — tedious, high-judgment, weekly at best. ROASt scans your Google search-term report and active keyword list every Sunday, classifies intent against your portfolio goal with Claude Haiku, and surfaces wasted spend + low-quality keywords in a unified review modal.
Close-rate-aware, not just conversion-aware
A standalone tool flags “this term had 0 Google conversions.” ROASt flags “this term drove 8 leads that never closed in HubSpot.” When close-rate context is available (HubSpot CRM or Shopify), the suggester routes through it — that’s the stronger signal by a mile.
Goal-semantic intent matching
The portfolio goal description (e.g. “new-build kitchen installations in London”) is fed to Claude alongside the term. “Second-hand fitting request” gets flagged as off-intent because Claude knows what the portfolio is actually for — a one-line LLM judgment a regex can’t touch.
Pause + negative in one apply
The unified review modal stacks pause candidates and wasted-spend search terms together — one Apply button, parallel Google API calls, consolidated toast. Cumulative-change tracking and sibling-count guards run in the suggester so you’ll never strand an ad group with too few keywords.
Auction insights → Competitor Watch
Auction-insight data feeds the Context Hub Competitor Watch panel and the Monday brief. New domain at 22% impression-share overlap? You see it Monday morning, not three months later.
Google-only at launch — Microsoft and Meta search-term sync are on the roadmap. Lifecycle: pending → strikes-3 → stale; absence-14d → stale; spend-2× → reactivate.
Creative Intelligence
Creative is the only daily lever on Meta — there are no keywords, bidding is Advantage+, audience targeting is automated. The single most valuable PPC motion is “kill underperformers, scale winners, watch frequency.” Today most teams go back to Ads Manager to do it. ROASt scans Google + Meta creative weekly and ships a unified review modal that pauses Low Google assets and fatiguing Meta ads in one apply.
Six creative sub-views
Behind Campaigns → Creatives: RSA assets, PMax asset groups, Shopping products, Meta ads, Meta winning-creatives library, and a cross-platform Creative Health rollup. One nav, no platform-switching.
Cross-platform fatigue scanner
Sundays at 04:00 local. Pulls Low RSA assets, fatiguing PMax assets, and Below-average Meta ads with rising frequency — all judged against your portfolio goal description by Claude Haiku, not a hard threshold.
One review, one apply
Three sections in the unified modal: RSA pauses, PMax pauses, Meta ad pauses. One Apply, parallel API calls, consolidated toast. Sibling-count guards (RSA ≥3, PMax ≥4, Meta ≥1) run in the suggester so you never strand a campaign with too few headlines or one ad in the set.
Engine cross-confirmation
When the scanner’s creative-fatigue finding agrees with the engine’s anomaly detector on the same campaign, the Audit tab fires a creative_fatigue_detected finding (critical severity). Two systems agreeing is a much stronger signal than either alone.
Pause-only — ROASt won’t generate copy, ad-set duplicates, or audience
edits. Apply uses the smallest reversible unit per platform: status=REMOVED
on Google asset entities (reversible from the Ads UI), status=PAUSED on
Meta ads. Microsoft RSA support pending the Microsoft adapter follow-up.
Context Hub & Ask Why
Every PPC manager has had the “why is ROAS down?” call where the honest answer takes 45 minutes of clicking across Google Ads, GA4, Slack, the client’s Notion — and still ends with a hedge. ROASt compresses that to one click. Upload your landing pages, brand briefs, dated promos, creative refresh notes, audit CSVs, and client-meeting transcripts. When an anomaly lands, ROASt cross-references the drop against everything it knows.
Context Hub
Per-client knowledge store: PDFs, plain text, manual notes, scraped URLs (with
weekly diffing), emails. Auto-rebuild on upload (30s debounce). Chunked, embedded
via OpenAI text-embedding-3-small, retrieved on-demand by Flume and
the narrative generator.
External Changes timeline
URL diffs, CSV imports, manual entries, creative changes (per-platform asset modification dates, synced automatically). The ledger of everything that happened outside ROASt that might have moved the numbers.
“Explain this” on every anomaly
One click on any anomaly row → server-generated narrative paragraph synthesising ranked causes, relevant Context Hub panels, GA4 engagement signal, and a hedged-language fallback when engine confidence is low. Pasteable into a client reply.
Weekly Brief
Monday-morning narrative summary delivered via dashboard module + email. Same causal-narrative plumbing as “Explain this” — pacing, top movers, anomalies, creative + keyword opportunities, competitor watch — written for an agency operator triaging multiple clients.
missingSources list describing data sources the generator couldn’t
consult because they’re empty (“I couldn’t check your landing page
because it’s not connected — add it here”). Click-throughs deep-link
into Context Hub. The product teaches itself how to give richer answers next time.
Flume AI
Flume is Ask Flume, the Generalist on the AI ops team — the surface you talk to in plain English when you want the team’s help across any tool. Same model as ChatGPT-class assistants; the difference is the MCP tools underneath. Flume can read your campaign data, portfolio settings, and engine outputs — but it never makes budget decisions on its own. All budget and target recommendations are produced by the deterministic pipeline.
Ask Flume questions in natural language, or choose from pre-built prompts to generate structured reports:
Performance Review
Spend, ROAS, trends, top movers, budget concentration, and recommendations across all portfolios.
Pacing Review
Month-to-date pacing health, projected month-end spend, and portfolios materially off plan.
Recommendations
Highest-impact optimisation opportunities with supporting evidence and prioritised actions.
Account Health Check
Multi-dimensional health score breakdown with per-dimension diagnostics and fix suggestions.
Reports are saved to the Documents sidebar and can be exported as HTML or PDF. Flume usage is metered per plan tier.
— MCP · bring your own Claude
Power users can hand the controls to their own Claude (Cowork, Claude Desktop, or any MCP client) via ROASt’s Model Context Protocol endpoint. Mint a long-lived token in Settings → API Access, paste it into your MCP config, and your Claude inherits 69 ROASt tools — 42 read-only (campaigns, portfolios, goals, audits, reconciliation, briefs, keyword + creative analytics) plus 27 write tools covering portfolios, budgets, goals, events, automation, keyword + creative pause applies, and confirm-gated destructive deletes.
Writes route through the same staging + audit pipeline the in-app Optimiser uses
— nothing skips the safety net. Destructive deletes (portfolio, goal, event,
transition plan) require an explicit confirm: true flag, refused otherwise.
MCP usage doesn’t debit your Flume turn quota; you pay your own Anthropic bill via
your Cowork / Claude subscription.
Events & Promotions
The Events system lets you schedule promotional periods and settings changes on a calendar, with automatic activation and deactivation managed by the scheduler. Drag an event template onto the calendar, set the dates, and the engine handles the rest.
Promo mode
Activates the engine’s full promotional lifecycle: snapshots current settings, applies turbo settings, enables intraday runs (2-hour interval), and on deactivation restores the snapshot with a 4-day post-promo cooldown.
Settings override mode
Merges a preset and/or specific setting overrides onto portfolio settings for the duration. Useful for seasonal adjustments, testing strategies, or temporarily tightening guardrails.
While an event is active, affected portfolios’ settings are locked — manual changes are blocked and the UI shows a banner with the event name and dates.
Automation & Scheduling
The scheduler automates optimiser runs without manual intervention. Each portfolio can be configured independently — nightly runs, intraday runs, auto-execute on or off.
Nightly runs
Each portfolio can be configured with a nightly run time (default 23:50). The scheduler stages recommendations and optionally auto-executes them. Dry run mode stages but never executes.
Intraday runs
For portfolios that need faster reaction times, intraday runs can be enabled with a configurable interval (minimum 1 hour). An optional time window restricts runs to business hours.
Transition plans
When you apply a budget change via Budget Planner’s Step Over N Days option, the scheduler creates a transition plan. Each night, one step is applied toward the target budget.
- Kill switch — immediately halts all automated execution across all portfolios
- Dry run mode — stages recommendations and logs results, but never pushes to ad platforms
- Concurrency guard — only one sync or optimiser job per user per platform at a time
- Execution notifications — email digests after each batch run with success/failure breakdown and pacing alerts
- Automatic backups — database backup before each nightly batch (local 7 days, remote 30 days)
Audit & Diagnostics
The Audit tab (Mission Control) surfaces conversion tracking issues and account health problems before they affect optimisation quality.
Conversion tracking audit
A 30+ check diagnostic that detects double-counting, broken tags, zero-value conversions, stale actions, missing UET, GA4 / Shopify sync staleness, attribution drift, and more. Each issue includes severity, affected campaigns, and a one-click fix where possible.
Account health breakdown
Six dimensions scored independently: tracking health, budget utilisation, platform coverage, optimisation readiness, creative health, and keyword quality. The composite score gives you a single number to track over time, graded A–F.
Recommended actions
Prioritised suggestions based on audit findings — fix broken conversion tracking, address budget gaps, resolve pacing issues, or connect missing accounts.
Throttle diagnostics
Per-campaign view of cumulative change and remaining headroom within the platform’s rolling window. See exactly why a campaign’s budget didn’t move as much as expected.
Calibration
The engine maintains a per-portfolio feedback loop that compares its predictions against actual outcomes and adjusts parameters over time. Shrinkage blends learned values toward safe defaults until evidence accumulates (5–20 observations), and staleness decay with a 14-day half-life reverts dormant portfolios so they restart cautiously. Calibration is fully automatic and runs as part of the nightly scheduler.
When recommendations are staged, the engine records predicted ROAS, spend utilisation, IS Lost to Budget, and confidence
Waits for attribution to complete. Dynamic window: small changes use base lag; large increases add days for smart bidding to ramp
Compares predicted vs actual and updates calibration biases via EWMA. Adjusts spend ceiling, ROAS floor, confidence dampening, and saturation steepness
Security & Trust
ROASt Labs manages real ad budgets — so trust and transparency are foundational, not optional.
Staged before executed
Every recommendation is staged and visible before anything is pushed to your ad accounts. You review, adjust, and approve. Nothing happens behind your back.
Readback verification
After every execution, ROASt reads back the values from the platform API to confirm that the changes actually landed. Discrepancies are logged and surfaced.
Token encryption
All OAuth tokens are encrypted at rest using AES-256-GCM. Tokens are decrypted only in memory for the duration of an API call.
Automatic backups
Database is backed up before every nightly batch. Local backups retained for 7 days, remote backups for 30 days. Full export/import is available for data portability.
No LLM in budget decisions
AI (Flume) is used for insights, narratives, and report generation only. Every budget and target recommendation is the product of deterministic signal maths — reproducible, auditable, and explainable.
Ready to see it in action?
Connect your ad accounts and ROASt will show you exactly what it would recommend — before you execute anything.