An automation engine for every campaign decision you make.
Build rules, templates, and step-based workflows that respond to performance, budget, and time triggers — pause campaigns, shift budgets, swap creatives, or notify the team, with branching logic and approval gates across every account and platform.
Three primitives. Anything you'd otherwise click through.
Trigger, condition, action. Compose them once — Grxd runs them forever.
When to run.
- PerformanceROAS < 2.0 · 24h
- Budget eventSpend ≥ 80% cap
- ScheduleDaily 09:00 EST
- LifecycleCampaign goes live
- WebhookPOST /hooks/inv
- WorkflowOn run complete
Decide what's true.
- CTR < 1.2%
- Spend ≥ 80% of cap
- Frequency > 3.5
- Tag = "evergreen"
- Days since launch < 7
- CPA > target × 1.25
Do the thing.
- Pause / resumeRun
- Adjust budgetRun
- Swap creativeRun
- NotifyRun
- Trigger workflowRun
- Apply tagRun
Composable steps — not a blank canvas.
Typed blocks, top-down. They snap in. None of them dangle.
- Trigger · scheduleEvery day at 09:00 EST
- ConditionROAS < 2.0 AND spend ≥ 80% of cap
- BranchTwo lanes from one decision.IF · trueROAS < 2 · spend high
- ActionPause campaign
- Notify#growth-ops
ELSEotherwise- Action−15% daily budget
- Wait24h, then re-check
- Approval gate@lead-buyer approves before pause
Composable, not free-form.
- Trigger — metric · schedule · event · hook.
- Condition — AND / OR / NOT.
- Branch — IF / ELSE / ELSE-IF.
- Action — pause · budget · creative · tag.
- Wait — duration or until-state.
- Approval — human gate.
- Sub-workflow — call another inline.
- Notify — Slack · email · webhook.
Start from a known-good. Edit anything.
Two dozen templates ship with Grxd — pause rules, budget guards, creative rotators, anomaly alerts, end-of-day rollups. Copy, tune the thresholds, save it as your own.
- Pause underperformingPerformanceROAS < 2 for 48hPause + notifyLive
- Budget protectorBudgetSpend ≥ 90% of cap−25% daily budgetLive
- Creative rotatorCreativeFrequency > 3.5Swap to next creativeAvailable
- End-of-day rollupReportingDaily 17:00 ESTSlack digestAvailable
- Scaling green-lightPerformanceROAS > 4 for 24h+20% budget · approvalLive
- Anomaly alertPacingSpend pace anomalyNotify · email + SlackAvailable
- New-launch warm-upLifecycleCampaign goes liveHold 7d · enable workflowsCustom
- Pause underperformingPerformanceLiveTriggerROAS < 2 for 48hActionPause + notify
- Budget protectorBudgetLiveTriggerSpend ≥ 90% of capAction−25% daily budget
- Creative rotatorCreativeAvailableTriggerFrequency > 3.5ActionSwap to next creative
- End-of-day rollupReportingAvailableTriggerDaily 17:00 ESTActionSlack digest
- Scaling green-lightPerformanceLiveTriggerROAS > 4 for 24hAction+20% budget · approval
- Anomaly alertPacingAvailableTriggerSpend pace anomalyActionNotify · email + Slack
- New-launch warm-upLifecycleCustomTriggerCampaign goes liveActionHold 7d · enable workflows
Run anywhere from a single ad to every account.
One definition, any level. Inherit down, override at any node, exclude where it doesn't fit.
From one ad to every account.
- GlobalAcross every workspace3workflows
- WorkspaceAcme7workflows
- ClientNorth Star Co.12workflows
- CampaignSpring brand awareness4workflows
- Ad set25–34 · urban · iOS1workflows
- AdHero video v3—workflows
Set once. Honored everywhere.
- Tags — scope by label, not by tree.
- Inheritance — children pick up parent rules.
- Override — loosen or tighten one without forking.
- Exclusions — carve out specific accounts or ads.
- Cross-workspace — share with permissioning.
Try it dry. Gate the rest.
Dry-run on real data. Gate behind a human. Guardrails hold the line whether anyone's watching or not.
Pause underperforming · Q2 Acquisition
Client · North Star · 24h horizon- Pause 3 ad sets — $1,240/day · all > 7d old
- Notify #growth-ops — with the diff
- No creatives modified — budgets + status only
- Within guardrails — all four checks pass
Pick the level. Set the limits.
- Manual runClick to run. Useful while you're tuning a new rule.
- Approval requiredWorkflow runs to the gate, then waits on a human.
- Auto within guardrailsRun end-to-end while every limit holds.
- Max changes per cycle — cap touches per run.
- Quiet hours — 9pm – 7am local.
- Cool-down — min gap between runs.
- Hands off new launches — < 7 days old.
- Outcome floors — auto-disable on breach.
- Per-account ceiling — hard spend cap.
Every run, every change, every reason.
A full audit trail of what fired, what it changed, and why. Diff any run. Re-run from any point. Roll back the rest.
- 09:42Budget protectorSpend ≥ 90% of cap−25% applied to 4 ad setsSuccess
- 09:30Pause underperformingROAS < 2 for 48hAwaiting approval · @lead-buyerPending
- 09:15Creative rotatorFrequency > 3.5Swapped 2 creatives · Hero v3 → v4Success
- 08:00End-of-day rollupDaily 17:00 ESTSlack digest deliveredSuccess
- 07:42Scaling green-lightROAS > 4 for 24hNo-op · guardrail (< 7d old)Skipped
- 07:00Anomaly alertSpend pace anomalyEmail + Slack sentSuccess
- Budget protectorSuccess09:42Spend ≥ 90% of cap−25% applied to 4 ad sets
- Pause underperformingPending09:30ROAS < 2 for 48hAwaiting approval · @lead-buyer
- Creative rotatorSuccess09:15Frequency > 3.5Swapped 2 creatives · Hero v3 → v4
- End-of-day rollupSuccess08:00Daily 17:00 ESTSlack digest delivered
- Scaling green-lightSkipped07:42ROAS > 4 for 24hNo-op · guardrail (< 7d old)
- Anomaly alertSuccess07:00Spend pace anomalyEmail + Slack sent
Stop juggling tabs. Start running marketing.
Claim your spot in line for launch.
Be first in line at launch. No spam, ever.