The Valstorm Drip System allows you to schedule sequential, automated actions (drips) for your records. This system is built upon two core objects: the Drip Definition (the blueprint) and the Drip Enrollment (the active tracking of a record).
drip_definition)The Drip Definition acts as the template or "blueprint" for your campaign. It defines what should happen, when it should happen, and who it applies to. It does not store the state of individual records; rather, it stores the rules that the system uses to generate events.
| Field | Type | Description |
|---|---|---|
| Name | Text | The internal name of the campaign (e.g., "New Lead Nurture"). |
| Active | Boolean | Master switch. If disabled, no new steps will execute for any enrollment linked to this definition. |
| Target Schema | Lookup (Schema) | Defines the type of record this drip targets (e.g., lead, contact, opportunity). This ensures the logic receives the correct data type. |
| Automation | Lookup | (Option A) Select a drag-and-drop Automation to execute at every step. The automation will receive the current step number as input logic. |
| Function | Lookup | (Option B) Select a code-based Function to execute. This is an alternative to Automation for developers who prefer writing Python logic for complex drips. |
| Step Configuration | JSON | An array defining the timeline of the drip. It maps step numbers to time delays. |
Example:
[{"step": 1, "delay_minutes": 0}, {"step": 2, "delay_minutes": 1440}] |
| Exit Condition | JSON | A set of rules checked before every step. If the target record matches these rules, the drip stops automatically.
Example:
{"status": "Won"} |
Note: You must select either an Automation OR a Function to handle the logic. The system will use whichever field is populated to execute the campaign steps.
drip_enrollment)The Drip Enrollment represents a single run of a specific record through a Drip Definition. It acts as the "state container," tracking exactly where the record is in the sequence.
| Field | Description |
|---|
Status | The current state of the enrollment:
Active: Pending future steps.
Paused: Halted manually; no steps will fire until resumed.
Completed: All steps in the configuration have finished.
Exited: The record met the Exit Condition (e.g., Client replied), stopping the drip early
Start Date Time: When the drip will begin executing.
Error: System failed to execute a step. |
Current Step | The integer number of the last successfully completed step. |
Last Run Date | The timestamp of the last executed step. |
| Field | Type | Description |
|---|---|---|
| Drip Definition | Lookup | Links this enrollment back to the blueprint rules. |
| Target Record | Compound Lookup | A dynamic link to the actual record being nurtured. Because drips can target Leads, Contacts, or custom objects, this field stores both the ID and the Schema Type of the target. |
| Scheduled Item | Lookup | A link to the specific system task waiting to fire the next step. If you cancel an enrollment, the system automatically removes this linked item. |
| Exit Reason | Text | If the status is "Exited" or "Error," this field explains why (e.g., "Exit Condition Met: Status changed to Won"). |
| Error Log | Rich Text | Contains detailed technical logs if the automation or function failed, helping admins debug the issue. |
Target Record (e.g., Lead: John Doe) to a Drip Definition. It has a start_date_time which will auto-create the first Scheduled Item to run.Step Configuration in the Definition. It calculates the delay for Step 1 and creates a Scheduled Item.Exit Condition against the Target Record.Current Step on the Enrollment.Here are 5 concrete examples of Drip System configurations. These highlight the system's flexibility across different objects (Leads, Invoices, Employees) and different types of actions (AI, Tasks, SMS).
Showcases: Multi-channel outreach (Email + SMS) and AI integration.
Lead{"status": ["Connected", "Meeting Booked", "Bad Data"]}The Sequence:
Step 1 (Day 0): Automation: Send "Intro Email" with a scheduling link.
Step 2 (Day 2): Automation: Send SMS: "Hi [Name], just checking if you saw my email?"
Step 3 (Day 5): AI Agent: Run "Lead Researcher" Agent.
Action: The Agent scrapes the lead's LinkedIn profile to find recent posts/news and updates a "Personalization Notes" field on the record for the sales rep to use later.
Step 4 (Day 7): Automation: Create Task for Owner: "Call [Lead Name] - Use AI notes for opener."
Showcases: Internal HR flows targeting the User/Employee object.
User (or Employee)Department = "Sales".{"onboarding_status": "Complete"}The Sequence:
provision_software_licensesShowcases: Finance automation targeting the Invoice object.
Invoice{"status": "Paid"}The Sequence:
Step 1 (Day 1 Past Due): Automation: Send Email to Client: "Friendly Reminder: Invoice #[ID] is overdue."
Step 2 (Day 7 Past Due): Automation: Send SMS to Billing Contact: "Urgent: We haven't received payment for Invoice #[ID]."
Step 3 (Day 15 Past Due): Function: suspend_service_access
Action: Script toggles the client's Account Status to "Suspended" to prevent login.
Step 4 (Day 16 Past Due): Automation: Create Task for CFO: "Review Account for Collections."
Showcases: Content delivery and PDF generation.
Contact{"unsubscribed": true}The Sequence:
Step 1 (Day 0): Automation: Send Email: "Thanks for coming! Here is the slide deck."
Step 2 (Day 1): Function: generate_custom_report
Action: Generates a personalized PDF ROI analysis based on the Contact's industry and emails it to them as an attachment.
Step 3 (Day 4): Automation: Send Email: "Did you find the report useful? Here is a calendar link if you want to discuss the data."
Showcases: Operational health checks on Project objects.
Project{"last_activity_date": "Today"} (i.e., someone updated the project).The Sequence:
downgrade_project_healthHealth Score field to "At Risk" which triggers dashboard red flags.