Follow-up is the work no one has time for
Reps forget the two-week nudge. Customer success never writes the renewal reminder. Marketing ships a sequence once a quarter. Meanwhile your CRM already knows a tag changed, a meeting was booked, and a score crossed a threshold — it just sits there and doesn't act.
11
trigger types — every CRM signal
Tags, fields, stages, scores, forms, tasks, dates, meetings
30 days
durable workflow window
Multi-week drips survive restarts and deploys
8
AI starter prompts
One sentence produces a full workflow on the canvas
Design workflows the way you think about them
Drag triggers, actions, delays, and conditions onto a ReactFlow canvas. Color-coded nodes, two-port branching on conditions, double-click to edit. Positions, edges, and configs are all round-trippable JSON.
Triggers
Green nodes
Actions
Blue nodes
Timing
Amber delays
Logic
Purple branching
Branching is visually unambiguous
Condition nodes have two output handles — a green "Yes" port and a red "No" port. Edges encode which branch they follow, so you can see at a glance where a contact goes when the condition fires.
Every CRM signal fires a workflow. Every workflow can do real work.
Tag changes, field changes, pipeline stage moves, lead-score thresholds, form submissions, task completion, date proximity, parent-object changes, and meeting bookings are all first-class triggers. No custom-event plumbing required.
11 Triggers
When a workflow starts
10 Actions
What a workflow does
Five delay modes, including the one other tools miss
Most marketing automation tools give you one kind of wait. Gabriel gives you five — and the fifth reads a datetime out of the enrollment's own context, so reminders schedule relative to a booked meeting without hand-rolled cron.
Fixed duration
Wait N minutes, hours, days, or weeks.
Until time of day
Wait N units, then hold until a specific time.
Specific datetime
Wait until an absolute calendar moment.
Until contact date field
Anchor to a contact's date field, plus or minus an offset.
Before context date
Read a datetime from enrollment context (e.g., meeting time) and schedule relative to it.
Business-hours-only and skip-if-past, on every delay
Constrain any delay to working hours with a flag. Prevent delays from firing instantly when the computed target is already in the past. Set a tenant-wide timezone once and every workflow schedules against it.
Branch on anything the CRM knows — including email engagement
Evaluate contact fields, nested relations (company.name, assignedTo.email), and engagement signals (opened, clicked). Nested path access is null-safe. Every condition routes to one of two ports, so branches stay unambiguous.
12 operators
if emailEvent.opened is_true
→ yes: add tag "engaged"
→ no: wait 3 days, send follow-up
Engagement branching, in the same workflow
The checkEmailEngagement activity lets a condition step ask "did this contact open the last email in the past N hours?" — so you can send a different next email based on whether the previous one landed. No separate tool, no re-enrollment gymnastics.
A three-week drip is one durable object —not a pile of cron jobs
Every enrollment launches a Temporal workflow on the automation-queue task queue. Activities run with a 30-second timeout and a 3-attempt retry policy with exponential backoff. Delays use Temporal's durable sleep, so waiting two weeks holds no resources and loses no state.
Enrollment · Acme Corp
ACTIVEFrom empty canvas to live workflow in one sentence
Describe the cadence you want — 'three-touch follow-up for SDRs after a demo' — and Gabriel's AI generator produces a full workflow: name, description, triggers, steps, edges, and settings. Drops directly into the builder for editing.
One sentence in
Pick a workflow goal — nurture, onboard, reengage, followup, upsell, retain, or qualify — and optionally describe the target audience.
Response includes provider, model, and estimated-cost metadata — no black box.
8 one-click starter prompts
Deliverability and compliance, built in
Emails sent from workflows run through Gabriel's email service: merge fields replaced, CAN-SPAM footer auto-injected with unsubscribe, open pixel JWT-signed, outbound links rewritten for click tracking, and every event stored as an EmailEvent row.
Merge fields across three namespaces
contact.*, user.*, and tenant.* tokens replaced at send time. Template support or inline subject and HTML.
Auto CAN-SPAM footer
Unsubscribe link injected on every message. Users never configure a footer or an opt-out page.
JWT-signed open pixel
Open tracking that can't be spoofed, with delivered, opened, clicked, bounced, and unsubscribed timestamps per event.
Click tracking
Outbound links rewritten and the clicks array stored per event — URL and timestamp — for downstream analytics.
Bounce and unsubscribe handling
Resend webhook callbacks update deliveredAt, openedAt, clickedAt, bouncedAt, and unsubscribedAt as events arrive.
Feeds lead scoring
Opens, clicks, and workflow activity flow back into Gabriel's scoring engine. Automations don't just act on scores — they improve them.
See not just 'did it work' — see which step is losing people
Every automation exposes three layers of analytics, all filterable by 7d, 30d, 90d, or all time. A tenant-wide summary rolls the same metrics across every automation and ranks a top-automations leaderboard by enrollment volume.
Summary analytics
Totals and rates for enrollments (active, completed, error, exited, completion rate) and email (delivered, opened, clicked, bounced, unsubscribed, plus derived rates).
Per-step analytics
Each step reports started, completed, failed, skipped, and success rate — with per-step email metrics on send steps. See exactly which node is losing people.
Timeline
Date-bucketed series of enrollments, completions, emails sent, opens, and clicks — ready to chart. Filter by 7d, 30d, 90d, or all time.
Enrollments
Completion rate
Delivered
Opened
Clicked
Bounced
Auditability, attribution, and control — out of the box
Every step execution is logged. Every enrollment remembers which signal fired it. Re-enrollment cooldowns, duplicate handling, and system-automation protection are tenant settings — not bespoke logic.
EnrollmentLog on every step
Each step execution writes a row with status, result JSON, error string, and timestamps. Debugging is reading a list of rows, not trawling application logs.
Attribution on every enrollment
The triggeredBy field records exactly which signal fired — tag:qualified:added, field:status:changed, leadscore:50 — so conversions link back to the trigger source.
Protected system automations
Gabriel-provisioned flows (meeting reminders, welcome sequences) are flagged isSystem and can't be deleted. Foundational behavior stays foundational.
Re-enrollment cooldowns built in
allowReEnrollment, reEnrollmentCooldownDays, and onDuplicateTrigger (skip / restart / error) are tenant settings — not bespoke logic in every workflow.
Non-blocking trigger detection
A Prisma middleware scans active automations when contacts change, and runs enrollment via setImmediate so the originating write never blocks.
Bulk enrollment at scale
Enroll up to 1,000 contacts per API request, or kick off from a saved list in a single call.
Automation that acts like production infrastructure
Most CRMs ship automation as a simple 'if this then email' builder. Gabriel gives you a visual canvas, a durable orchestrator, engagement branching, and the audit trail a real operations team needs.
Durable, Temporal-backed execution
Workflows run on Temporal — not a polling cron or a job queue. A three-week drip is one workflow object, and state survives process restarts, deploys, and host failures.
30-day windows with durable sleeps
Delays use Temporal's sleep() primitive, not activity timers. Waiting 14 days between steps costs nothing — no resources held, no drift.
Pause and resume one contact mid-flight
Three workflow signals (pause, resume, cancel) let you intervene on a single enrollment without touching the automation definition. Most tools make you yank everyone or no one.
Five delay modes — including before-context-date
Schedule relative to a datetime carried in the enrollment itself (e.g., 24 hours before a booked meeting). That's how you build real reminders without hand-rolled cron.
Branch on email engagement, in the same workflow
Ask "did this contact open the last email within N hours?" and follow a different path if they did. No separate tool, no re-enrollment gymnastics.
Deliverability and compliance, zero setup
Resend handles sending. Gabriel auto-injects a CAN-SPAM footer with unsubscribe, JWT-signs the open pixel, and rewrites links for click tracking. You never configure a pixel.
One automation engine. Every team gets what they need.
Sales Teams
Drop a tag, book a meeting, or move a deal to a new stage — the right follow-up fires on its own. Reps wake up to a prioritized task list, not a cold pipeline.
Sales Managers
Define the cadences your team should run once, and let Gabriel enforce them on every lead. Per-step analytics show exactly where coaching is needed.
Revenue Operations
Durable Temporal workflows, 30-day windows, 3-attempt retries, and a full EnrollmentLog audit trail. Production-grade observability without standing up jobs or queues.
Customer Success
Context-aware delays — '24 hours before the renewal meeting,' '3 days before the contract anniversary' — turn the CRM into a proactive account manager.
Marketing
Forms, tags, lead-score thresholds, and list additions fire automations directly. Branch on opens and clicks inside the same workflow. No engineering hand-off required.
Day-One Value
Open the AI Workflow Generator, describe the cadence in a sentence, and a complete workflow appears on the canvas — ready to publish in minutes.
Engineered for real automation operations
Temporal-backed, tenant-scoped, and ready to run multi-week sequences. The numbers behind every workflow.
Describe it.Publish it. Done.
Start your free trial, open the AI Workflow Generator, and watch a full multi-step cadence land on the canvas. Tweak or publish — and every follow-up, reminder, and nudge runs on its own.