Automations run workflows on their own when something happens in your DFM account β so you can follow up faster, keep your data in sync, and connect DFM to the other tools you use.
Send SMS or plain-text emails when a contact is created, updated, or submits a form.
Apply tags, update fields, create tasks, and log notes or calls based on activity.
Notify the right person the moment a lead comes in or a message is received.
Get a response from an AI Employee, act on conversation summaries, and follow up after meetings or invoices.
Every automation has three parts:
The event that starts the workflow β for example, "A contact is created."
Optional filters that must be true for it to run β for example, "Contact has the tag New Lead."
What happens next β for example, "Send SMS," "Create task," or "Update company."
Example: A form is submitted β the form submitted for a contact trigger fires β the automation checks whether the contact has the "New Lead" tag β if yes, it sends a welcome email.
You can start from a pre-built template (triggers and steps are already set up β you just customize them) or from Blank to build every step yourself.
When you toggle an automation on, you'll be asked to review three settings before it goes live:
See the Settings & Activity tab for a full explanation of each option.
When you toggle an automation off, you'll choose what happens to runs already in progress:
| Option | What it does | When to use |
|---|---|---|
| Stop runs in progress | Immediately stops every active run. Stopped runs won't resume if you turn the automation back on. | The automation is behaving unexpectedly and you need everything to halt now |
| Drain runs | Lets runs in progress finish. The automation turns off on its own once they're done. | You don't want to interrupt contacts who are mid-workflow |
You can run an existing automation on specific records without opening the Automations page:
To run an automation for everyone on a list, go to CRM > Lists, open the list's three-dot menu, and choose Start Automation.
Triggers are the events that start your workflow. Some fire automatically (for example, "A contact is created"). Others need options, like which fields must change before the trigger fires.
| Trigger | When it fires |
|---|---|
| A contact is created or modified | When a contact is created or a field you specify changes |
| A contact is added to a list | When a contact is added to a CRM list |
| A contact is removed from a list | When a contact is removed from a CRM list |
| A form is submitted for a contact | When a form submission is associated with a contact |
| A note activity is created or modified for a contact | When a note is created or updated on a contact |
| A meeting activity is created or modified for a contact | When a meeting is logged or updated on a contact |
| A CRM sales task is created or modified for a contact | When a sales task is created or updated for a contact |
| A CRM sales task is overdue for a contact | When a sales task passes its due date |
| Trigger | When it fires |
|---|---|
| A company is created or modified | When a company is created or a field you specify changes |
| A company is added to a list | When a company is added to a CRM list |
| A company is removed from a list | When a company is removed from a CRM list |
| A form is submitted for a company | When a form submission is associated with a company |
| A note activity is created or modified for a company | When a note is created or updated on a company |
| A CRM sales task is created or modified for a company | When a sales task is created or updated for a company |
| Trigger | When it fires |
|---|---|
| Web Chat captures a lead | When a visitor submits their info through the Web Chat widget |
| An AI-handled call is transferred | When your AI Voice Receptionist transfers or dispatches a call. Filter by transfer outcome: Answered, Voicemail, No answer, Busy, Failed, or Unknown. See the on-call dispatch example in Use Cases. |
| Trigger | When it fires |
|---|---|
| An opportunity is created or modified | When an opportunity is created, moves to a new stage, or is closed |
| Triggered manually for a contact | On demand for a selected contact β like a shortcut you run whenever you need it |
| Triggered manually for a company | On demand for a selected company |
| On a schedule | At a set time β daily, weekly, or monthly. See Scheduled Automations. |
| A webhook is received | When an outside system sends a POST request to your automation's webhook URL |
| Triggered via Zapier | When a Zap in Zapier runs this automation. Found under Advanced in the trigger picker. See the Zapier tab. |
Conditions work alongside triggers to control exactly when a workflow runs. Add them so the automation doesn't fire every time β only when the contact or company matches your criteria. You can filter on tags, contact fields, company fields, account location, and more.
For example: only run when the contact has the tag "New Lead," or only when the company's City equals "Austin."
When you add multiple conditions, choose how they combine:
| Operator | Conditions are met when⦠| Example |
|---|---|---|
| OR | Any condition in the group is true | Contact does not have the tag "Deactivated" OR has the tag "Newly created" OR has a website |
| AND | All conditions (or groups) are true | One condition from the first group is true AND the condition in the second group is true |
You can group conditions and combine the groups β for example, an OR group of tags joined by AND to a location condition.
When you pick a CRM field for a condition, its description appears below the field selector. This helps you confirm you've chosen the right field, including any expected format or unit. Descriptions only show for fields that have one β add or edit them in Administration > CRM Objects.
Steps are what happen after a trigger fires. You can add as many as you need, and they run from top to bottom. There are two types, color-coded in the builder:
Do the work: send messages, update records, create tasks, log activity, and connect to other apps.
Control the flow: add delays, branch based on conditions, jump to another step, or end the run early.
Pauses the automation for a set amount of time before the next step. Use it when timing matters β like waiting a day before a follow-up.
Pauses and waits for a specific event before continuing, instead of waiting a fixed time. You set a maximum wait, and the workflow splits into two paths depending on whether the event happened.
Splits the workflow into different paths based on conditions you define. You start with two branches and can add more:
Each branch can have its own steps.
Immediately stops the current run. It's most useful inside an If/Else branch when one path should continue and the other should stop.
| Step | What it does | Good to know |
|---|---|---|
| Assign a contact owner / salesperson | Assigns a team member as the owner of a contact | |
| Assign a company owner / salesperson | Assigns a team member as the owner of a company | |
| Get my team member | Retrieves a team member for use in later steps, like assigning a record or sending a notification | |
| Create a contact | Creates a new contact in your CRM | |
| Create a company | Creates a new company in your CRM | Company name is required. Duplicates are not checked. |
| Create an opportunity | Creates an opportunity and adds it to your pipeline | Needs a company or contact from an earlier step. If both exist, it's linked to both. |
| Find contact | Searches for an existing contact based on criteria you set | |
| Update contact | Updates fields on a contact | Can append to or clear existing values |
| Update company | Updates fields on a company | |
| Associate company with contact | Links a company to a contact |
Getter steps pull in related records so later steps can use them. For example, if your trigger gives you a contact, Get company from contact lets you update or email that contact's company.
| Step | What it does | Good to know |
|---|---|---|
| Get company from contact | Retrieves the company linked to a contact | Errors if no company is linked |
| Get contact from company | Retrieves a contact linked to a company | Errors if no contact is linked |
| Get opportunity from contact | Retrieves an opportunity linked to a contact | Errors if none is linked |
| Get opportunity from company | Retrieves an opportunity linked to a company | Errors if none is linked |
| Get custom object from contact / company | Retrieves a custom object record linked to a contact or company | |
| Get my business profile | Retrieves your business profile, such as your business name or address, for personalizing messages |
| Step | What it does |
|---|---|
| Send an SMS message via Conversations | Texts the contact through your Conversations inbox |
| Send an SMS message to a phone number | Texts any number you enter, including numbers not in your CRM β great for alerting team members |
| Send a plain text email via Conversations | Emails the contact from your Conversations inbox |
| Send a WhatsApp template to a contact | Sends a pre-approved WhatsApp template message |
| Make outbound call with an employee | Places an outbound AI phone call to a contact using the AI Employee you choose |
| Notify a user | Sends an in-app and email notification to a team member. Pick a specific user, or insert a user from an earlier step so it routes to the right person automatically. |
| Step | What it does |
|---|---|
| Start a campaign for the contact | Enrolls a contact in a campaign |
| Start a campaign for the company | Enrolls every contact linked to a company in a campaign |
| Pause campaign for contact | Pauses an active campaign for one contact |
| Pause campaign for company | Pauses an active campaign for all contacts linked to the company (up to 50) |
| Start a Yesware campaign for the contact | Enrolls a contact in a Yesware email sequence |
| Send a marketing email template to a contact | Sends a marketing email from a template |
| Send a marketing email template to a company | Sends a template email to the company's primary email address |
| Send a marketing email to a contact | Sends a standalone marketing email |
| Send a review request | Sends a review request email to a contact |
| Step | What it does |
|---|---|
| Create a CRM sales task for the contact / company | Creates a sales task on the record |
| Add a note to the contact / company | Adds a note to the record |
| Log a call activity to the contact / company | Logs a call on the record's activity timeline |
| Modify a call activity for the company | Updates an existing call activity on a company |
| Step | What it does |
|---|---|
| Send a request to an AI Employee | Sends a prompt or context to your AI Employee and uses its response in later steps |
| Send a prompt to AI | Sends a text prompt to an AI model and returns the response for later steps |
| Format text | Transforms text (uppercase, trim, replace, etc.) before passing it to another step |
| Send a webhook | Sends an HTTP POST request with custom data to an outside URL β including Zapier |
| Add / remove contact from Kixie powerlist | Adds or removes a contact from a Kixie powerlist for outbound calling |
| Step | What it does |
|---|---|
| Delay | Waits a set amount of time before continuing |
| Delay until an event happens | Waits until a specific event occurs (like a task being completed or a campaign email being clicked) |
| If/Else branch | Sends records down different paths based on conditions |
| Jump to a step | Skips forward or back to a specific step in the workflow |
| Rate filter | Limits how often the same contact can move through the automation |
| A/B branch | Randomly splits contacts into two groups so you can test different paths |
| End this automation | Immediately stops the current run |
Each automation has a Settings tab where you control how and when it runs. These settings help you avoid duplicate runs, handle errors gracefully, and make sure automations behave as expected.
Many triggers can fire more than once for the same record β for example, a payment trigger fires every time a customer attempts a payment. Entry settings decide whether the automation runs only the first time or every time.
| Setting | What it does | When to use | Example |
|---|---|---|---|
| Only once per contact | Runs a single time for each contact, ever | One-time steps that should never repeat | Welcome email when a contact is created |
| Multiple times per contact | Runs every time the trigger conditions are met | Recurring notifications or event responses | Log activity each time an email is opened |
| One at a time per contact | A new run starts only after the previous one finishes | Workflows that update the same fields or depend on each other | Update a lead score based on several criteria |
Decides what happens when a step fails β for example, a required field is missing or an outside service times out.
| Setting | What it does | When to use | Example |
|---|---|---|---|
| Skip the step and continue (Recommended) | Continues to the next step even if one fails. Failed steps are logged in the Activity tab. | Steps that don't depend on each other | Send a notification + update a field β if the notification fails, the field still updates |
| Stop the automation run | Stops the whole run if any step fails | Later steps depend on earlier ones succeeding | Create opportunity β add note β assign rep (you can't add a note if the opportunity wasn't created) |
Set the timezone used for scheduled triggers and time-based steps.
Subscribe to get alerted whenever the automation runs into an error.
The Activity tab inside each automation shows what ran, when it ran, and whether it succeeded. Use the entity search and filters to narrow down to a specific contact or time.
Each row is one step in a run:
| Column | What it shows |
|---|---|
| Contact | The contact or company that triggered the run |
| Step | Which part of the workflow ran β for example, "Trigger," "Send SMS," or "Create an opportunity" |
| Activity | The outcome of that step (see statuses below) |
| Started Time | When the step began |
Common statuses include Entered automation (the run started), Running (in progress β updates in real time), Automation completed (finished successfully), and step-specific results like Sent webhook or Created opportunity.
Check these in order:
Find the run in the Activity tab and read the failed step's details β they usually explain the problem. Common causes:
Dynamic content is a placeholder in your message β like an email body or SMS β that's replaced with real data when the automation runs. Insert a contact's name, a task ID from the trigger, or a form answer, and every message stays personal and accurate without typing each value.
In any step that sends or displays text (Send SMS, Send a plain text email, and other messaging steps), click the Insert dynamic content button in the message field. Browse the available values and pick one, or type the syntax directly.
You can insert automation details (like the date and time it ran) or data from the trigger. For example, if the trigger is "A company is added to a list," you can insert the company ID or the list ID.
Dynamic content uses dot notation β think of it as an address with three parts:
| Part | What it means | Example |
|---|---|---|
| Step | Which step in the workflow to look at | .WorkflowStep |
| Object | What that step produced or received | .trigger |
| Property | The specific detail you want | .task_id |
Put together: {.WorkflowStep.trigger.task_id} β look at the trigger event and grab its task ID. When the message sends, the placeholder becomes the actual value (for example, "TSK-4821").
When you pull a value from an earlier step instead of the trigger, the step appears as an ID rather than a name β for example, {.WorkflowStep.773dcc25-db4c-β¦β.response}. Turn on Step references (below) to see which step that ID belongs to.
Once an automation grows past a handful of steps, it gets hard to scan. The builder has three tools in the toolbar on the right edge of the canvas. They only change what you see β they never alter your automation, and there's nothing to save.
| Tool | What it does |
|---|---|
| Search for steps | Finds and highlights steps that match a keyword |
| Step references | Draws lines showing which steps pass data to which |
| Minimap | Shows a small overview of the whole workflow and jumps you to any part of it |
Press Cmd+F (Mac) or Ctrl+F (Windows) inside the automation editor. Type any keyword β a step name, action type, or phrase like "email" or "update contact" β and matching steps are highlighted.
Click the step references icon (between search and minimap) and the canvas draws colored dotted lines from each step that produces data to each step that uses it β a different color for each source step. Click it again to hide the lines.
Use it to:
The minimap is a scaled-down view of the whole workflow in the bottom-left corner. A highlighted box shows the part you're viewing β click anywhere on the minimap to jump there. Toggle it with the minimap icon at the bottom of the toolbar.
Use β and + to zoom, or the expand icon to fit the whole automation on screen. Zooming out and then clicking into a section of the minimap is the fastest way around a large, branching automation.
The On a schedule trigger runs automations at times you choose β no event needed. It's ideal for routine work like team reminders, weekly check-ins, or daily AI-generated reports. The trigger also shows when the automation will run next, so you can confirm the schedule at a glance.
| Frequency | Settings |
|---|---|
| Daily | Time of day |
| Weekly | Time of day, plus one or more days of the week |
| Monthly | Time of day, plus one or more days of the month (1β31), or End of month |
All times use your automation's timezone setting (in the Settings tab).
DFM includes a built-in Review Request automation that emails customers after a purchase, visit, or other interaction β so you never have to send requests one by one.
{{ business_name }} to insert your business name automatically.Review request emails include a business address, chosen like this:
Changes to either setting apply to review requests sent afterward β no extra steps needed.
Once the automation is on, the Review Activity section shows how many emails were sent, opened, and clicked through to review sites, how often they led to a review, and the ratings of reviews that came from the automation.
Zapier connects thousands of apps. Its automated workflows are called Zaps β each has a trigger in one app and one or more actions in others. With DFM's Zapier integration, you can connect your DFM automations to the tools you already use, with no coding.
| Direction | How it works | Example |
|---|---|---|
| DFM β Zapier | A Send a webhook step in your DFM automation pushes data out to Zapier | Opportunity marked won in DFM β create a customer in QuickBooks Online |
| Zapier β DFM | Zapier's Run Automation action fires one of your DFM automations | New QuickBooks payment β send the customer a review request |
You'll need a Zapier account. A free account works for basic Zaps; more complex multi-step Zaps may need a paid plan.
You only do this once β the same connection works for all your Zaps.
When something happens in DFM, push the details to Zapier so it can act in another app.
When something happens in another app β a new QuickBooks payment, a booking, a form response β Zapier can fire one of your DFM automations.
company-name) and choose a Type that matches how DFM uses it β for a company, choose Company Id. Add more values if you need them.company-name to the form question asking for the company.Ready-to-build examples you can copy and customize for your business.
The faster you respond to a new lead, the better your chances of winning it. These automations notify the right person the moment something happens.
| Trigger | Notification | Why it helps |
|---|---|---|
| Web Chat captures a lead | SMS to the assigned sales rep | Immediate follow-up on hot leads |
| "Request a Quote" form submitted | SMS to the sales manager with project details | Faster response to high-intent leads |
| Contact tagged as VIP | SMS to the business owner | Timely personal outreach |
| Newsletter signup form submitted | Welcome email to the subscriber | Engagement while interest is high |
An emergency call comes in after hours. Your AI Voice Receptionist screens it β who's calling, what the emergency is, and where service is needed β then calls your on-call technician. Sometimes they answer; sometimes it goes to voicemail. Either way, this automation texts them the full details so they can get on the road.
{.WorkflowStep.trigger.transferred_to_number} β the number the call was sent to. If you have more than one on-call number, the text follows whichever one received the dispatch.After-hours dispatch: {.WorkflowStep.trigger.outcome}
Caller: {.WorkflowStep.trigger.caller_name}
Issue: {.WorkflowStep.trigger.reason_for_call}
Location: {.WorkflowStep.trigger.service_location}
Call back: {.WorkflowStep.trigger.caller_number}
Insert these with the Insert dynamic content button in the message editor.
| Field | What it is | Example |
|---|---|---|
transferred_to_number | The number the call was dispatched or transferred to | +15551234567 |
caller_number | The caller's phone number | +15559876543 |
outcome | answered, voicemail, no_answer, busy, failed, or unknown | no_answer |
caller_name | The caller's name, collected by the AI | Jordan Smith |
reason_for_call | The emergency in the caller's own words | Burst pipe in the basement |
service_location | The service address the AI confirmed | 123 Main St, Springfield |
contact_id | The matching CRM contact, if found | CON-12345 |
crm_contact_created | Whether a new CRM contact was created for the caller | true |
caller_name, reason_for_call, and service_location are only filled for dispatched calls β they're empty for standard transfers. If you use this trigger for other transfers, stick to always-available fields like caller_number, transferred_to_number, and outcome.If a lead books a meeting, bounces an email, or drops off a target list, continuing to send campaign messages can feel irrelevant β or hurt the relationship. These automations pause campaigns automatically.
When to use it:
You're running a "Winter Promo" campaign for Tier A companies. When a company is removed from your Tier A list, pause the campaign for that whole company.
list_id contains "Tier A."| Level | Step | When to use |
|---|---|---|
| Contact | Pause campaign for contact | A specific lead takes action (books a meeting, bounces an email) |
| Company | Pause campaign for company | A whole business goes cold or no longer qualifies β stops outreach to all its contacts |
You can combine both β for example, pause a contact's campaign right away on a bounce, and pause the company's campaign if every contact there has bounced.
When a contact opens your campaign email, they're showing interest. A quick personal follow-up can turn that into a conversation.
After it runs, the automation's Activity tab shows every step that ran for each contact.