1 Dashboard
2 Build
3 Configure
4 Monitor
Overview
Automation Dashboard
9:41
Engine Active
Global automation execution
47
Active Blueprints
+8 this week
1,284
Executions Today
+12%
97.3%
Success Rate
+0.5%
2.4s
Avg Duration
-0.3s
All Lead Nurture Reviews Sales Scheduling Seasonal Re-engage
New Lead Follow-up
Active
new_lead 3 steps 2m ago
Appointment Reminder
Active
appointment_scheduled 2 steps 5m ago
Job Completion Review Request
Paused
job_completed 2 steps 1h ago
Quote Follow-up Sequence
Error
quote_sent 5 steps 18m ago
Missed Call Follow-up
Draft
call_missed 4 steps Never
AdminAutomationDashboard
useQuery(api.automations.templates.listTemplates)
KPI cards from automationRuns aggregate queries
Blueprint Builder
9:41
Trigger
New Lead Created
Fires when a new lead is added to CRM
Send Email
Welcome Email
Thanks for reaching out, {{contact.name}}!
Wait
Wait 1 Day
Delay before follow-up
Condition
Check if Responded
contact.stage != "qualified"
Send Email
Follow-up Email
Following up — {{contractor.businessName}}
End
Automation Complete
Run recorded & usage metered
BlueprintBuilder
automations.steps[] rendered as connected flow nodes
Tap + between nodes to insert steps
Build
Trigger Configuration
9:41
Event Triggers
New Lead
Lead created
Bid Accepted
Contractor accepted
Job Completed
Work finished
Quote Sent
Estimate delivered
Payment Received
Escrow funded
Appointment Set
Booking confirmed
Other Triggers
Schedule
Cron / recurring
Webhook
External HTTP
Manual
Run on demand
Call Connected
Ping call linked
Call Missed
Unanswered call
Voice Agent Done
AI call completed
Conditions (Optional)
contact.stage
equals
new
contact.source
not empty
any value
TriggerConfigSheet
triggerType from schema validators
Condition builder maps to triggerConfig field
Step Type Picker
9:41
Communication
Send Email
Send SMS
Voice Call
Webhook
CRM
Update Contact
Add Tag
Sync to CRM
Sync from CRM
Create CRM Task
Update Deal
Calendar
Create Event
Update Event
Send Invite
Internal Operations
Create Job
Update Job Status
Assign to Team
Flow Control
Wait / Delay
Condition
StepTypePicker
stepType union from convex/schema/automations.ts
18 step types across 5 categories
Step Configuration
9:41
Welcome Email
Template
Welcome - New Lead
Field Mapping
{{contact.name}} recipientName
{{contact.email}} toAddress
{{contractor.businessName}} senderName
{{contractor.phone}} replyPhone
Email Preview
Thanks for reaching out, {{contact.name}}!
Hi {{contact.name}}, Thanks for contacting {{contractor.businessName}}! We'd love to help with your project. Best, {{contractor.name}}
Delay Before Step
0
minutes after previous step
Retry Settings
3
max retries 500ms base delay
On Failure

Skip

Retry

Abort
StepConfigSheet
automationStepDef.config (v.any()) — shape depends on stepType
Interpolation via interpolateTemplate()
Monitor
Execution Log
9:41
All Completed Failed Running
run_a8f3k2m Completed
Today, 9:38 AM event trigger
new_lead — Sarah Mitchell (sarah@gmail.com)
1. Welcome Email
Sent in 1.2s
2. Wait 1 Day
Delayed 24h
3. Follow-up Email
Sent in 0.9s
View Payload
run_k4m7b1n Failed
Today, 9:12 AM event trigger
new_lead — James Rodriguez (j.rod@yahoo.com)
1. Welcome Email
Sent in 1.4s
2. Wait 1 Day
Delayed 24h
3. Follow-up Email
SendGrid 429: Rate limit exceeded
View Payload
{ "runId": "run_k4m7b1n", "automationId": "auto_9x2f", "error": "SendGrid 429", "failedStep": 2, "contact": { "name": "James Rodriguez", "email": "j.rod@yahoo.com" } }
run_p9t2z5w Running
Today, 9:40 AM manual trigger
manual — Lisa Chen (lisa.chen@outlook.com)
1. Welcome Email
Sent in 0.8s
2. Wait 1 Day
23h 41m remaining
3. Follow-up Email
Pending
ExecutionLog
useQuery(api.automations.engine.listRuns)
Steps from automationSteps indexed by by_run
Template Library
9:41
All Lead Nurture Reviews Sales Scheduling Re-engage Seasonal
Appointment Confirmation
Confirm appointment details immediately after booking via email and SMS.
scheduling email sms PRO+
New Lead Follow-up
Automatically welcome new leads and follow up after 1 day if they haven't responded.
lead_nurture email PRO
Missed Call Follow-up
Automatically reach out when you miss a call. Shows you care and captures leads that might otherwise be lost.
lead_nurture sms email PRO+
Job Completion Review Request
Send a review request 24 hours after a job is marked complete.
reviews email PRO
Post-Job Thank You
Send a thank you message after completing a job. Great for customer retention.
re_engagement email PRO
TemplateLibrary
useQuery(api.automations.templates.listTemplates)
useMutation(api.automations.templates.useTemplate) clones into contractor's automations
Analytics
9:41
Execution Volume
M
T
W
T
F
S
S
This week: 8,942 +18%
Success / Failure Ratio
97%
success
Completed 34,218
Failed 847
Cancelled 312
Most-Used Step Types
  • 1
    Send Email
    via SendGrid
    18,432
  • 2
    Wait / Delay
    avg 18h
    12,891
  • 3
    Send SMS
    via Twilio
    8,741
  • 4
    Update Contact
    CRM inline
    4,210
  • 5
    Condition
    branching logic
    3,856
Performance Metrics
Avg Execution Time 2.4s (excl. waits)
Slowest Automation Quote Follow-up (4.1s)
Error Hotspot SendGrid 429 (72%)
Retry Success Rate 89.2%
Avg Cost / Execution $0.0034
Monthly Cost (Feb) $119.42
AutomationAnalytics
automationUsage (by_contractor_month) + automationRuns aggregates
Cost metered via recordRunUsageFromSteps()

Data Architecture

Schema Tables

automations
Workflow definitions. Fields: contractorId, name, description, trigger (triggerType union), triggerConfig, steps[] (automationStepDef), status (active/paused/draft/archived), tier (pro/pro_unlimited), totalRuns, lastRunAt, createdAt, updatedAt. Indexes: by_contractor_status, by_contractor_trigger, by_trigger_status. Search: search_name.
automationTemplates
Pre-built starter workflows. Fields: name, category, description, trigger, steps[], isSystem, tier, popularity. Index: by_category. 21 system templates across 6 categories.
automationRuns
Execution history. Fields: automationId, contractorId, contactId, triggeredBy (event/manual/schedule/mcp), status (running/completed/failed/cancelled), currentStep, stepResults[], startedAt, completedAt, error, costCents. Indexes: by_automation_status, by_contractor, by_contractor_started.
automationSteps
Denormalized step execution log. Fields: runId, stepIndex, type (stepType union), status (pending/executing/completed/failed/skipped), executedAt, completedAt, result, error. Index: by_run.
automationUsage
Monthly metering per contractor. Fields: contractorId, month (YYYY-MM), totalRuns, totalSteps, emailsSent, smsSent, voiceCallsMade, webhooksCalled, conditionsEvaluated, contactsUpdated, totalCostCents, lastChargedAt, stripePaymentIntentId. Indexes: by_contractor_month, by_month.
automationSettings
Singleton for admin kill switch. Fields: automationsPaused, pausedBy, pausedAt, systemContractorId.

Engine Functions

executeAutomation
Entry point (internalMutation). Checks global kill switch, hourly rate limit (100/hr), dedup guard. Creates run record, step logs, schedules processStep.
processStep
Recursive step executor (internalMutation). Handles all 18 step types via switch. Inline steps: condition, update_contact, add_tag, create_job, update_job_status, assign_to_team. Async steps: send_email, send_sms, webhook, voice_call, CRM sync, calendar. Wait steps use ctx.scheduler.runAfter.
recordStepAndContinue
Callback from async actions (internalMutation). Records step result, handles retries (MAX_RETRIES=3, 500ms base), advances to next step or marks run failed.
sendAutomationEmail
SendGrid HTTP action (internalAction). Resolves template variables via interpolateTemplate(), sends via SENDGRID_MAIL_URL.
sendAutomationSms
Twilio HTTP action (internalAction). Sends SMS via TWILIO_API_BASE with contractor's phone number.
recordRunUsageFromSteps
Usage metering (internal). Counts step types, calculates cost, upserts automationUsage for current billing month.
useTemplate
Clone template into contractor's automations (mutation). Checks tier compatibility, enforces PRO limit (5 automations), copies steps.

Step Type Registry (18)

Communication (4)
send_email (SendGrid), send_sms (Twilio), voice_call (Twilio + ElevenLabs/Deepgram), webhook (external HTTP POST/GET)
CRM (6)
update_contact (name/email/address/status), add_tag (customFields.tags[]), sync_to_crm (HubSpot push), sync_from_crm (HubSpot pull), create_crm_task, update_crm_deal
Calendar (3)
create_calendar_event, update_calendar_event, send_calendar_invite (Google Calendar API)
Internal Ops (3)
create_job (inserts to jobs table), update_job_status (enforces state machine), assign_to_team (team member routing)
Flow Control (2)
wait (duration + unit, supports waitUntil shorthand), condition (field/operator/value with skipCount branching)
Trigger Types (11)
new_lead, job_completed, bid_accepted, quote_sent, appointment_scheduled, contact_stage_changed, manual, schedule, call_connected, call_missed, voice_agent_completed
Template Categories (6)
lead_nurture (5), reviews (2), sales (2), scheduling (2), re_engagement (5), seasonal (5). Sorted by popularity. Tier gating: pro vs pro_unlimited.
Safety Guards
Global kill switch (automationSettings), hourly rate limit (100 runs/contractor), dedup guard (no duplicate running runs per contact), MAX_STEPS_PER_RUN=20, MAX_RETRIES=3, RETRY_BASE_DELAY_MS=500, OCC serialization for race conditions.
Dashboard & Blueprints
9:41
Dashboard & Blueprints
Automation Dashboard
24
Active
1,847
Executions
Active Blueprints
Welcome Sequence
Email · 3 steps · 89% completion
Active
Lead Follow-Up
SMS + Email · 5 steps
Active
Payment Reminder
Email · 2 steps · auto-retry
Paused
Executions & Templates
9:41
Executions & Templates
Execution Log
Welcome — Mike K.
Completed 3 steps in 48h
Done
Follow-Up — Lisa C.
Step 2 of 5 in progress
Running
Reminder — Dave H.
Failed at step 1 — invalid email
Failed
Template Library
Onboarding Flow
5 steps · Email + SMS + Voice
Popular
Re-engagement
3 steps · Email only
New
Dispute Resolution
4 steps · Internal ops
Admin
Automation Command Center
https://app.3bids.io/admin/automations
3Bids
Dashboard ⌘1
Blueprints ⌘2
Triggers ⌘3
Steps ⌘4
Executions ⌘5
Templates ⌘6
Analytics ⌘7
AU
Admin User
Admin
Settings ⌘,

Automation Command Center

24
Active Blueprints
1,847
Total Runs
94%
Success Rate
18
Templates
Active Blueprints
View All
Welcome Sequence
Email · 3 steps · 89% completion
Active
Lead Follow-Up
SMS + Email · 5 steps · 72% completion
Active
Payment Reminder
Email · 2 steps · auto-retry enabled
Paused
Onboarding Voice Call
Voice + SMS · 4 steps · 95% completion
Active
Dispute Escalation
Internal ops · 3 steps · 2 failures today
Error
Recent Executions
View All
Welcome — Mike K.
Completed 3 steps in 48h
2m ago
Follow-Up — Lisa C.
Step 2 of 5 in progress
15m ago
Reminder — Dave H.
Failed at step 1 — invalid email
1h ago
Template Library
Browse All
Onboarding Flow
5 steps · Email + SMS + Voice
Popular
Re-engagement
3 steps · Email only
New
Dispute Resolution
4 steps · Internal ops
Admin