Semantiqs · Documentation

How Semantiqs works

Semantiqs adds a Semantic layer on top of an ad set: it keeps the set full of live ads and retires the losers automatically. Pick an ad set, turn it on, and it rotates your creatives and applies a dual stop-loss so weak ads stop draining budget.

How changes reach Meta. Semantiqs evaluates your ad sets and works out exactly what to retire and rotate. In Copilot you review the proposed changes and click Apply to execute them in your Meta account. In Autopilot it runs on its schedule with the same guardrails. Either way, every change is recorded in your activity log so you can see what happened and why.

What it does

Most ad sets quietly waste money: a few creatives carry the results while the rest keep spending. Semantiqs watches each enabled ad set and does two things continuously — keeps it full of live, fresh ads, and retires the underperformers using a stop-loss. No targets to micromanage, no manual pausing.

You stay in control: you choose which ad sets to turn on, the evaluation window, the floor, and whether Semantiqs proposes changes for your approval or runs on its own.

The core loop

For each ad set you enable, on a schedule:

  1. Keep the set full. Maintain a minimum number of live ads (4 by default, adjustable 3–10 per ad set — 6 is recommended once you have enough creatives). If it drops below, Semantiqs activates the best reserve ad to backfill.
  2. Evaluate every live ad over a recent window (the last 7 days by default), using each ad's real cost-per-result.
  3. Bench the losers. Any ad that fails a stop-loss test is paused and watched — it only becomes permanently retired after 72 hours with no redeeming late conversion.
  4. Never go too thin. Semantiqs never pauses below your minimum live-ad count — if too many fail at once, it only benches the worst.

The stop-loss tests

An ad is retired if it fails any of these:

Test A · relative

Worse than its peers

Compares each ad against the best ad in the same set and only retires one when Semantiqs is statistically confident it is genuinely worse — not just unlucky. You pick the confidence level (90%, 95%, or 99%). No target needed. This is opt-in and needs a few converting ads to work.

Test B · absolute

Worse than your floor

A hard ceiling you set per ad set — for example "never tolerate a cost per result above X" (or a ROAS below Y). "Result" is whatever that ad set optimizes for — a lead, a purchase, an add-to-cart, a registration, an install, and so on. Any ad that breaks it, with enough data behind it, is retired. If you haven't set a floor, Semantiqs suggests a sensible one from your own best ad.

And if the floor you set turns out to be tighter than anything your account actually achieves, Semantiqs tells you. Once an ad set has been running a while and the floor has benched two or more ads that were converting, you'll get a note saying so, with a suggested number based on your own best ad. It only counts ads that produced results — if the ads being paused never converted at all, the floor isn't the problem, and raising it would just let weak ads spend for longer. Semantiqs never changes your floor for you; it only ever suggests one.

Test C · fatigue

Shown too often (early exit)

When the same people keep seeing an ad, its cost usually starts climbing. Rather than wait for that to show up in the numbers, this optional test retires an ad once the average person has seen it past a frequency you choose (e.g. 3 times in the window), and rotates in a fresh one — catching the rise before it costs you. Off by default; turn it on per ad set.

Protecting your top ad — with a limit. An ad carrying most of an ad set's spend (the "dominant" ad) is never retired on a whim — Semantiqs only removes it once a proven replacement is ready to take over, since pulling a load-bearing ad can collapse delivery. But that protection isn't unconditional: if it breaches your floor severely (roughly 3× over, or genuinely zero-converting with real spend behind it), Semantiqs benches it anyway rather than flagging the same clear loser every run forever with no reserve to replace it.

Semantiqs can only lower cost if it has fresh creatives to rotate in. When an ad set runs out of reserves, the detail page warns you and shows your best-performing creatives from the last 30 days — worth recreating variations of.

The hard exit — bench, watch, then confirm

When an ad fails a stop-loss test it is benched, not retired outright: it's paused and put on a watch list. Meta reports conversions on the click's date, not when the click happened — so a good ad can look bad for a few hours while its real conversions are still landing. Benching gives that data time to arrive.

If a late-arriving conversion redeems the ad — its cost per result recovers to a comfortably better level than the bar it failed — Semantiqs reinstates it automatically on the next run. No action needed. An ad only becomes permanently retired once it has sat benched for 72 hours with no redeeming evidence. A second bench never auto-reinstates — it goes straight to confirmation. Only a manual override in Meta can bring a confirmed-retired ad back.

The best reserve ad (a paused ad with a track record) is rotated in to replace the benched ad immediately, so the set stays full and keeps learning while the bench plays out.

Archiving is different from pausing — and it's deliberate. If you archive an ad in Meta, Semantiqs treats that as final: an archived ad is never selected, ranked, or rotated back in, though its past spend and results can still inform the set's baseline and floor suggestion. If you just pause an ad yourself, that's not a verdict — it's a suggestion the data can overrule. A hand-paused ad is an ordinary reserve like any other, so it may get rotated back in and re-tested on real numbers. If it's genuinely bad it will fail the same stop-loss test again — this time permanently. If it's fine, the data was right and you were wrong to worry. Either way, you'll see it in the activity log as a re-test, not a silent reversal of your pause — that's intentional, not a bug.

Which ad sets can run it

An ad set is eligible when it has:

  • An active campaign and an active ad set (it has to be delivering).
  • At least the minimum number of ads (4 by default), with a reserve to rotate in.

Ad sets with too few ads can't rotate yet — add more creatives to unlock them. A set also needs at least one paused ad in reserve to rotate in — if every ad is currently live, it shows as not-yet-eligible until one becomes a reserve (pause one, or add a fresh one paused). On the Ad sets screen, sets are grouped into Enabled, Eligible, and Not eligible, with the reason shown for each one that isn't ready.

One exception: a brand-new ad set. If you just launched a set — created within the last week, with every ad live and none paused yet — it's eligible right away, even without a reserve. Semantiqs treats a fresh launch as its own first job: it keeps your top-performing ads live up to your minimum and pauses the rest as reserves as soon as it starts running, so you don't have to manually pause anything before turning it on.

Copilot vs Autopilot

Each ad set runs in one of two modes — your choice, switchable any time:

  • Copilot. Semantiqs evaluates and proposes changes. Nothing reaches Meta until you click Apply. Good for staying hands-on.
  • Autopilot. Semantiqs runs the same logic and acts automatically — same guardrails, full activity log. You set how often it runs — daily, every 2/3/5 days, or intraday (every 2, 3, 6, or 12 hours) — and can switch back to Copilot any time.

The window & your data

Semantiqs judges ads on a recent window — the last 3, 5, 7, or 14 days (7 by default) — built from each ad's day-by-day performance, not a flat 90-day average. Meta concentrates spend on early winners, so most ads are under-funded; the recent window keeps decisions fair and current, and ads without enough data are simply skipped.

Your data refreshes automatically every hour, and the window always includes today's spend and conversions so far — it's never held back until the day closes. That's by design: a 7-day window means "the 7 days up to and including right now," not "the 7 days before today." It's also what makes an intraday Autopilot schedule (every 2, 3, 6, or 12 hours) actually useful — each hourly run sees today's latest numbers layered onto the trailing days, not stale data from yesterday. You can also pull the latest from Meta at any time with the Sync now button on the Ad sets screen.

One caveat: because today is still in progress, a live number can differ slightly from Meta Ads Manager's own "last 7 days" quick filter, which excludes today by default — the gap is just today's partial spend and shrinks to zero once the day ends.

A connected account with nothing enabled on it — no ad set turned on, and not used to pull reporting data — automatically stops refreshing within 48-72 hours of going idle (the check runs once a day), so Semantiqs isn't quietly polling an account you're not using. Hit Sync now or enable an ad set on it and it resumes immediately. Prefer it always stays fresh? Turn that off in Profile → Automation.

How "money & time saved" is calculated

Semantiqs shows the value it delivers in two honest, backward-looking numbers — not a projected monthly or annual figure. (An earlier version of this page projected an ad's current spend out to 30 days; we dropped that — a media buyer reviewing daily would catch a bad ad within about a day anyway, so a month of "avoided spend" overstated the real value.)

Money — avoided waste

The counterfactual is simple: Semantiqs catches an underperformer roughly a day before a human reviewing daily would have. So the money value of one pause is one day of that ad's spend, not thirty:

  • daily spend = spend in the window ÷ window days

How much of that day counts depends on why the ad was paused:

  • Zero conversions, but real spend. Nothing came back for the money, so the whole day counts as avoided waste.
  • Has conversions but breaks your floor. The ad still produced some results, so only the overspend versus your floor counts — the same overspend-fraction logic as before, just applied to one day instead of thirty.
  • Worse than its peers, but still under your floor. The relative test can retire an ad that passes your floor yet costs more than the rest of the set. There's no floor overspend to count, so instead the gap between its cost and the set's own blended cost per result counts — the share of its spend that could have run at the rate the rest of the set already achieves. (Before, this booked nothing; now it's credited properly.)
  • Confidently worse, with no floor and no baseline to compare against. Nothing to measure the gap from, so the whole day of a reallocatable spend counts.

These per-pause amounts are added up into a running total across every change that actually stuck — if an ad is later reinstated (its late conversions redeemed it), that pause's contribution is removed from the total, since it was never real waste.

Time — actions handled for you

Every pause and every rotate-in is something a human would otherwise have had to spot and do by hand in Meta — roughly 10 seconds each. Semantiqs counts every one it's actually executed and adds up the time, shown as "N actions handled for you · ~T saved". This is deliberately conservative — it only counts the mechanical click, not the time spent watching and deciding.

Did it work?

Each ad set's detail page shows a line of your cost per result over the last 30 days, so you can see the trend right away — no waiting. Each point is a 7-day average (raw day-to-day numbers jump around too much to read on a set with only a few conversions a day). Dashed amber lines mark the days Semantiqs retired or rotated an ad, so you can read the line after each change.

Alongside the line, every time Semantiqs acts it records that set's cost per result before the change. Seven days later it measures the after and shows a before → after comparison — on the ad set, and rolled up across your account on the Activity page ("X of Y measured changes improved").

The before → after appears about a week after each change, once there's enough follow-up data to judge fairly. It only ever shows a run that actually changed something — a run where nothing was retired or rotated has no "did it work" story, so it's never shown as if it did. This is also how Semantiqs learns which decisions paid off — the foundation for it getting smarter over time.

Backtest — a rewind of your current settings

Below the chart, an optional Backtest card answers a different question: with today's window and floor, which of your ads would Semantiqs have flagged — cost bad enough to bench or retire — on each of the last 30 days? It replays the verdict day by day and shows the average number of ads/day it would have flagged and roughly how much daily spend was going to them. It's advisory: it replays the verdict logic on today's settings, not a full rebuild of what actually happened historically (which ads were live, benched, or rotated in on any given past day).

Creatives

The Creatives screen (in the sidebar) shows your best-performing ad for every enabled ad set, ranked by cost per result over the last 30 days — rendered right here as a real feed-style card, not a link out to Meta. Images show at full quality and videos play inline with a tap, so you can see what's actually working without leaving Semantiqs.

A creative only shows up once it has enough real data behind it — a handful of genuine conversions and meaningful spend — so a brand-new ad with no track record yet won't be flagged as a "winner" on a fluke. Use it to see at a glance which creative is actually earning its keep in an ad set, and as a reference for what a fresh reserve should look like when you need to add more.

When Meta has flagged a creative as fatigued (shown too often to the same audience), a small badge appears on the card — Meta's own read on ad fatigue, shown for information only. It never pauses or changes anything on its own; it's a separate signal from Semantiqs' own stop-loss tests.

Notifications

When Autopilot makes a live change, Semantiqs can message you on Telegram with a short summary: which ads were retired, which were rotated in, and the recoverable spend. The wording follows your communication tone (Professional, Casual, or Direct) from Profile & Settings.

A run that changed nothing, or an ad set that's turned off, never pings you the moment it happens — so every immediate message maps to a real change. If a set ran but had nothing to change, you'll instead see it rolled into one end-of-day summary — "N ad sets checked, all clear" — rather than a separate ping every time it runs.

To turn it on, open Profile & Settings and tap Connect Telegram: it opens our bot, you tap Start, and your chat is linked. No chat IDs to copy. You can disconnect any time from the same panel.

System health

The System health screen (in the sidebar) answers "is it actually running, and if not, why?" across every ad set you've enabled, on every account. Each one shows as running, or idle for a benign reason (paused in Meta, outside your allowed hours, or cooling down right after a change) — never mistaken for a stall — or genuinely stalled, with the specific reason spelled out. It's read-only: it never changes anything, it just tells you what's happening and why.

The same screen also has a Meta's recommendations section — Meta's own optimization suggestions for your ad sets, kept as a running list you can dismiss one at a time. Semantiqs does not act on these automatically; they're shown purely so you can review Meta's opinion alongside your own automation.

Safety

  • You decide what runs. In Copilot, nothing reaches Meta until you click Apply — you see every proposed change first. Autopilot only ever acts on the ad sets you explicitly enable.
  • A minimum is always protected. It will never pause your set down below its minimum live-ad count.
  • Goes dormant when you turn a campaign off. If you pause the campaign or ad set in Meta, Autopilot detects it — from the synced status and, in case that hasn't caught up yet, from the ad set simply no longer spending or delivering — and skips it entirely rather than trying (and failing) to change anything on an off campaign. It stays enabled and picks back up automatically the moment you turn the campaign back on — no need to re-enable it.
  • Fair tests only. The relative test waits for statistical confidence; the floor needs enough spend behind an ad before it counts.
  • Full audit trail. Every decision — retire, rotate-in, or watch — is logged per ad set with the reason and the window it was based on.
  • Honest about Meta outages. If Meta itself is having problems and new data can't be pulled, Semantiqs shows a banner saying so (with a link to Meta's status page) rather than looking broken — and automation goes quiet on stale data until Meta recovers, then picks back up on its own.

FAQ

Does Semantiqs pause my real ads?
In Copilot, only when you click Apply — it pauses and rotates exactly the changes you approved, in your real Meta account. In Autopilot it acts on schedule on the ad sets you've enabled. Every change is in your activity log.
What funnel types does it support?
Any. It reads each ad set's own conversion event and judges it on that — lead gen (CPL), e-commerce (ROAS / cost per purchase), add-to-cart, checkout, registration, subscription, content view, app installs (CPI), traffic (CPC) and more. Figures show in your account's own currency.
Will it kill my best ad if it has a bad week?
No. The relative test only retires an ad when it's confidently worse than the best ad, and a load-bearing ad with no proven replacement is downgraded to "watch" rather than retired.
Can a retired ad come back?
Only if you manually override it. Semantiqs never auto-reactivates a retired ad — that's the whole point of the hard exit.
Will it protect my top-spending ad forever, even if it's failing?
No. A dominant ad (carrying most of the set's spend) is protected from being retired without a proven reserve ready to replace it — but only up to a point. If it breaches your floor severely (roughly 3× over) or genuinely converts nothing despite real spend, Semantiqs benches it anyway rather than flagging the same clear loser every run forever.
What happens if I pause the campaign in Meta?
Semantiqs never touches an off campaign — it detects it and skips it entirely. By default, if a campaign or ad set stays off in Meta for more than 7 days, Semantiqs automatically detaches the Semantic layer from that ad set (your activity and history are kept — just re-enable it to start again). Prefer it to stay attached? In Profile → Automation, turn Auto-detach off and the layer stays on the ad set and resumes automatically the moment you turn the campaign back on.
Why is one of my ad sets "not eligible"?
Usually because the campaign or ad set is paused, or it has fewer than the minimum number of ads with a reserve to rotate in. The exact reason is shown on the card.
How much does Semantiqs cost?
You start with a 7-day free trial — no card, with the full product on one ad account. After that you pick a plan based on how many ad accounts you manage: Starter (1 account), Growth (up to 5), or Scale (unlimited). Every paid plan includes the whole engine — Copilot and Autopilot — nothing is held back. See the pricing page for current rates.
What happens after the 7-day trial if I don't pick a plan?
Your automation simply pauses — Semantiqs stops making changes in Meta. Nothing is deleted: your ads keep running exactly as they were, your history stays, and the money- and time-saved numbers you accrued during the trial stay visible. Pick a plan whenever you're ready and it picks straight back up.