phliusphlius

Workflows

Automate your processes with powerful workflow automation and 40+ integrations

Introduction to Workflows

Workflows are automation pipelines that execute actions based on triggers. They allow you to automate repetitive tasks, integrate with external services, and create powerful automation sequences. The workflow system uses a visual node-based editor where you connect triggers to actions to build complex automation logic.

Understanding Workflows

Core Concepts

A workflow consists of three main elements:

  • Triggers - Events that start the workflow (experiment changes, schedules, webhooks)
  • Actions - Operations performed when the workflow runs (send notifications, call APIs, update records)
  • Logic Nodes - Control flow elements like conditional branching

How Workflows Execute

  1. A trigger event occurs (e.g., experiment status changes)
  2. The system finds all active workflows matching the trigger conditions
  3. Nodes execute in topological order (respecting dependencies)
  4. Each node receives context data from previous nodes
  5. Results are stored for review and debugging

Creating a Workflow

To create a new workflow:

  1. Navigate to the Workflows section from the sidebar
  2. Click Create Workflow
  3. Give your workflow a descriptive name
  4. Add a trigger node to define what starts the workflow
  5. Add action nodes for the operations to perform
  6. Connect nodes by dragging from output to input handles
  7. Configure each node's settings
  8. Save and activate the workflow

Workflow Properties

PropertyDescription
NameHuman-readable identifier (auto-generates URL slug)
ActiveEnable/disable the workflow
IconVisual identifier for the workflow
Icon ColorColor coding for organization

Trigger Nodes Reference

Triggers define what starts your workflow. Each workflow must have exactly one trigger node.

Manual Trigger

Start workflows manually with a button click.

PropertyDescription
Description"When clicking 'Execute workflow'"
ConfigurationNo additional configuration required

Usage:

  1. Add a manual trigger node to your workflow
  2. Go to the workflow page
  3. Click Execute to run the workflow on demand

Use cases: Testing workflows, on-demand reports, manual data syncs.


Schedule Trigger

Run workflows automatically on a time-based schedule.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesscheduleName to reference this trigger's data
FrequencyEnumYes-DAILY, WEEKLY, or MONTHLY
HourNumberYes9Hour of day (0-23)
Day of WeekNumberConditional-Day (0=Sunday to 6=Saturday), required if Weekly
Day of MonthNumberConditional-Day (1-31), required if Monthly
TimezoneStringYesUTCTimezone for schedule
EnabledBooleanYestrueWhether schedule is active

Available Timezones:

  • UTC
  • America/New_York, America/Chicago, America/Denver, America/Los_Angeles
  • Europe/London, Europe/Paris, Europe/Berlin
  • Asia/Tokyo, Asia/Shanghai
  • Australia/Sydney

Common Schedule Examples:

ScheduleFrequencyHourDay
Daily at 9amDAILY9-
Every Monday at 8amWEEKLY81 (Monday)
First of month at midnightMONTHLY01

Webhook Trigger

Trigger workflows via HTTP POST requests to a unique endpoint.

PropertyTypeRequiredDefaultDescription
Require SignatureBooleanNotrueValidate incoming requests with HMAC signature
SecretStringAuto-Auto-generated secret (prefix: wh_sec_)

Webhook URL Format:

{your-domain}/api/webhooks/{workflowId}

Signature Validation:

  • When enabled, include X-Signature header with HMAC signature
  • Secret can be regenerated if compromised

Available Variables: All fields from the POST request body are available as variables in downstream nodes.


Experiment Trigger (Phlius)

Trigger workflows based on experiment and document events.

Source: Experiments

PropertyTypeRequiredDescription
SourceEnumYesSet to experiments
From StatusEnumNoFilter by previous status
To StatusEnumNoFilter by new status
From PriorityEnumNoFilter by previous priority
To PriorityEnumNoFilter by new priority
From AreaEnumNoFilter by previous growth area
To AreaEnumNoFilter by new growth area
Owner IDStringNoFilter by specific owner

Status Values: IDEA, DESIGN, LIVE, ANALYSIS, WINNER, LOSER, INCONCLUSIVE

Priority Values: NO_PRIORITY, LOW, MEDIUM, HIGH, URGENT

Area Values: ACQUISITION, ACTIVATION, RETENTION, MONETIZATION

Available Variables for Experiments:

VariableDescription
{{experimentTitle}}Name of the experiment
{{currentStatus}}Current experiment status
{{transitionFrom}}Previous status
{{transitionTo}}New status
{{transitionFromPriority}}Previous priority
{{transitionToPriority}}New priority
{{transitionFromArea}}Previous growth area
{{transitionToArea}}New growth area
{{previousOwnerId}}Previous owner's ID
{{newOwnerId}}New owner's ID

Source: Documents

PropertyTypeRequiredDescription
SourceEnumYesSet to docs
EventEnumNocreated, deleted, published, unpublished, archived, or ALL
From StatusEnumNoFilter by previous document status
To StatusEnumNoFilter by new document status
Templates OnlyBooleanNoOnly trigger for template documents
Creator IDStringNoFilter by specific creator

Available Variables for Documents:

VariableDescription
{{event}}The event type that occurred
{{docId}}Document unique identifier
{{docTitle}}Document title
{{transitionFromStatus}}Previous document status
{{transitionToStatus}}New document status
{{isTemplate}}Whether document is a template
{{createdById}}Creator's user ID
{{timestamp}}ISO timestamp of the event

Google Forms Trigger

Trigger workflows when a Google Form is submitted.

PropertyDescription
Webhook URL{your-domain}/api/webhooks/google-form?workflowId={workflowId}
Setup RequiredGoogle Apps Script integration needed

Available Variables:

VariableDescription
{{googleForm.formId}}Unique form identifier
{{googleForm.formTitle}}Form title
{{googleForm.respondentEmail}}Email of respondent (if collected)
{{googleForm.responseId}}Unique response identifier
{{googleForm.responses['Question Name']}}Answer to specific question
{{googleForm.timestamp}}ISO timestamp of submission
{{json googleForm.responses}}All Q&A pairs as JSON

Stripe Trigger

Trigger workflows on Stripe payment events.

PropertyDescription
Webhook URL{your-domain}/api/webhooks/stripe?workflowId={workflowId}
SetupConfigure webhook in Stripe Dashboard

Available Variables:

VariableDescription
{{stripe.amount}}Payment amount (in cents)
{{stripe.currency}}Currency code (e.g., usd)
{{stripe.customerId}}Stripe customer ID
{{stripe.eventType}}Event type (e.g., payment_intent.succeeded)
{{json stripe}}Full Stripe event payload as JSON

Action Nodes Reference

Actions perform operations when workflows execute. Each action stores its output in a variable that downstream nodes can reference.

AI & Language Models

Anthropic (Claude)

Generate content using Claude AI models.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyAnthropicName to reference output
CredentialAPI KeyYes-Anthropic API key
ModelEnumYes-Claude model to use
System PromptStringNo-Instructions for Claude's behavior
User PromptStringYes-The prompt to send (supports variables)

Available Models: Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Sonnet, Claude 3 Haiku

Output: Response text available via {{myAnthropic.content}}


OpenAI (GPT)

Generate content using GPT models.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyOpenAIName to reference output
CredentialAPI KeyYes-OpenAI API key
ModelEnumYes-GPT model to use
System PromptStringNo-System instructions
User PromptStringYes-The prompt to send

Available Models: GPT-4o, GPT-4 Turbo, GPT-4, GPT-3.5 Turbo


Google Gemini

Generate content using Google's Gemini models.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyGeminiName to reference output
CredentialAPI KeyYes-Google AI API key
ModelEnumYes-Gemini model to use
System PromptStringNo-System instructions
User PromptStringYes-The prompt to send

OpenRouter

Route to various AI models through OpenRouter.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyOpenRouterName to reference output
CredentialAPI KeyYes-OpenRouter API key
ModelStringYes-Any model available on OpenRouter
System PromptStringNo-System instructions
User PromptStringYes-The prompt to send

Communication

Slack

Send messages to Slack channels or users.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmySlackName to reference output
Webhook URLStringYes-Slack incoming webhook URL
ContentStringYes-Message content (max 4000 chars, supports variables)

Setup:

  1. Go to Slack Apps → Incoming Webhooks
  2. Create a new webhook for your channel
  3. Copy the webhook URL to the node configuration

Message Features:

  • Supports variable interpolation: {{experimentTitle}}
  • Objects are automatically stringified
  • Supports Slack markdown formatting

Discord

Send messages to Discord channels.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyDiscordName to reference output
Webhook URLStringYes-Discord webhook URL
ContentStringYes-Message content

Setup:

  1. In Discord channel settings → Integrations → Webhooks
  2. Create webhook and copy URL

Microsoft Teams

Send messages to Teams channels.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyTeamsName to reference output
Webhook URLStringYes-Teams incoming webhook URL
ContentStringYes-Message content

Setup:

  1. In Teams channel → Connectors → Incoming Webhook
  2. Configure and copy the webhook URL

Telegram

Send messages via Telegram bot.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyTelegramName to reference output
Bot TokenStringYes-Telegram bot token
Chat IDStringYes-Target chat/group/channel ID
ContentStringYes-Message content

Gmail

Send emails or read inbox via Gmail.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyGmailName to reference output
OAuth CredentialOAuth2Yes-Gmail OAuth connection
OperationEnumYes-send_email, read_emails, or get_email

Send Email Options:

PropertyTypeRequiredDescription
ToStringYesRecipient email address
SubjectStringYesEmail subject line
BodyStringYesEmail body (supports HTML)

Read Emails Options:

PropertyTypeRequiredDefaultDescription
Max ResultsNumberNo10Number of emails to fetch
QueryStringNo-Gmail search query

Get Email Options:

PropertyTypeRequiredDescription
Message IDStringYesID of specific email to retrieve

Resend

Send transactional emails via Resend.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyResendName to reference output
CredentialAPI KeyYes-Resend API key
ToStringYes-Recipient email
FromStringYes-Sender email (verified domain)
SubjectStringYes-Email subject
BodyStringYes-Email body (HTML supported)

HTTP & Webhooks

HTTP Request

Make HTTP requests to any REST API.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesmyApiCallName to reference output
EndpointStringYes-URL to call (supports variables)
MethodEnumYes-GET, POST, PUT, PATCH, or DELETE
BodyStringConditional-Request body (required for POST/PUT/PATCH)
HeadersObjectNo-Custom request headers

Body Format:

{
  "title": "{{experimentTitle}}",
  "status": "{{currentStatus}}",
  "data": {{json fullObject}}
}

Variable Interpolation:

  • Simple values: {{variableName}}
  • Nested access: {{object.property}}
  • JSON stringify: {{json objectName}}

Webhook Send

Send webhook payloads to external services.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
URLStringYesDestination webhook URL
PayloadStringYesJSON payload to send

CRM Integrations

HubSpot

Manage HubSpot CRM records.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2/API KeyYesHubSpot authentication
OperationEnumYesAction to perform

Operations: Create Contact, Update Contact, Create Company, Create Deal, etc.


Salesforce

Manage Salesforce CRM records.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2YesSalesforce authentication
OperationEnumYesAction to perform

Operations: Create Lead, Update Opportunity, Create Account, etc.


ActiveCampaign

Manage ActiveCampaign contacts and automations.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesActiveCampaign API key
OperationEnumYesAction to perform

Attio

Manage Attio CRM records.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesAttio API key
OperationEnumYesAction to perform

Project Management

Jira

Create and manage Jira issues.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2/API KeyYesJira authentication
OperationEnumYesAction to perform

Operations: Create Issue, Update Issue, Add Comment, Transition Status


Confluence

Create and update Confluence pages.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2/API KeyYesConfluence authentication
OperationEnumYesAction to perform

Operations: Create Page, Update Page, Add Comment


Linear

Manage Linear issues and projects.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesLinear API key
OperationEnumYesAction to perform

Asana

Manage Asana tasks and projects.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2YesAsana authentication
OperationEnumYesAction to perform

ClickUp

Manage ClickUp tasks and spaces.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesClickUp API key
OperationEnumYesAction to perform

Monday.com

Manage Monday.com boards and items.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesMonday.com API key
OperationEnumYesAction to perform

Data & Productivity

Google Sheets

Read from and write to Google Sheets.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2YesGoogle OAuth connection
Spreadsheet IDStringYesGoogle Sheets document ID
OperationEnumYesread, write, or append

Airtable

Manage Airtable records.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesAirtable API key
Base IDStringYesAirtable base identifier
TableStringYesTable name
OperationEnumYesAction to perform

Notion

Update Notion databases and pages.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesNotion integration token
OperationEnumYesAction to perform

Automation Platforms

n8n

Trigger n8n workflows.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
Webhook URLStringYesn8n webhook trigger URL
PayloadStringNoJSON data to send

Make (Integromat)

Call Make scenarios.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
Webhook URLStringYesMake webhook URL
PayloadStringNoJSON data to send

Zapier

Trigger Zapier zaps.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
Webhook URLStringYesZapier webhook URL
PayloadStringNoJSON data to send

Trigger.dev

Execute Trigger.dev jobs.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialAPI KeyYesTrigger.dev API key
Job IDStringYesJob identifier to trigger
PayloadStringNoJSON data to pass

Other Integrations

GitHub

Create GitHub issues, PRs, and comments.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
CredentialOAuth2YesGitHub OAuth connection
OperationEnumYesAction to perform

Operations: Create Issue, Create PR, Add Comment


Phlius Action

Update experiments and internal records.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
OperationEnumYesInternal operation to perform

Gamma Action

Create Gamma presentations.

PropertyTypeRequiredDescription
Variable NameStringYesName to reference output
OperationEnumYesGamma operation to perform

Logic Nodes Reference

Logic nodes control the flow of your workflow with conditional branching and approval gates.

If/Else (Conditional Branching)

Add conditional logic to split workflow execution based on conditions.

PropertyTypeRequiredDefaultDescription
Variable NameStringYesconditionResultName to store condition result
Left ValueStringYes-First value to compare (supports variables)
OperatorEnumYesequalsComparison operator
Right ValueStringConditional-Second value (not needed for unary operators)

Available Operators:

OperatorDescriptionExample
equalsExact match{{status}} equals WINNER
not_equalsNot equal{{status}} not_equals LOSER
greater_thanNumeric greater than{{count}} greater_than 10
less_thanNumeric less than{{count}} less_than 5
greater_than_or_equalGreater or equal{{score}} greater_than_or_equal 100
less_than_or_equalLess or equal{{score}} less_than_or_equal 50
containsString contains{{title}} contains Homepage
not_containsString doesn't contain{{title}} not_contains Test
starts_withString starts with{{name}} starts_with Exp-
ends_withString ends with{{email}} ends_with @company.com
is_emptyValue is null/empty{{notes}} is_empty
is_not_emptyValue exists{{assignee}} is_not_empty

Output Handles:

  • True (green) - Connect nodes to execute when condition is true
  • False (red) - Connect nodes to execute when condition is false

Example Conditions:

Condition: {{currentStatus}} equals WINNER
→ True branch: Send celebration message
→ False branch: Log for review

Condition: {{transitionToPriority}} equals URGENT
→ True branch: Alert leadership
→ False branch: Normal notification

Condition: {{experimentTitle}} contains Homepage
→ True branch: Notify design team
→ False branch: Continue normal flow

Approval Gate

Pause workflow execution until a team member approves or rejects.

PropertyTypeRequiredDefaultDescription
Variable NameStringNoapprovalName to store approval result
ApproverStringYes-Team member ID who can approve
Request MessageStringNo-Message explaining what needs approval
Content to ReviewStringNo-Details/context for the approver
Expiration DaysNumberYes7Days until request expires (1-7)

Expiration Options: 1, 2, 3, or 7 days

Output:

{
  "approved": true,
  "reviewer": "[email protected]",
  "timestamp": "2024-01-15T10:30:00Z"
}

Workflow Behavior:

  1. Workflow pauses at approval node
  2. Approver receives notification
  3. Approver reviews and approves/rejects
  4. On approval: workflow continues to next node
  5. On rejection: workflow stops

Use Cases:

  • Require approval before launching experiments
  • Review AI-generated content before sending
  • Gate deployments behind manager approval

Using Variables

Variable Syntax

Reference data from previous nodes using Handlebars syntax:

{{variableName}}

Context Building

Each node adds its output to the workflow context:

  1. Trigger fires with initial data
  2. First action receives trigger data, adds its output
  3. Second action receives all previous data, adds its output
  4. And so on...

Variable Reference Patterns

PatternDescriptionExample
{{name}}Simple variable{{experimentTitle}}
{{object.property}}Nested property{{claude.content}}
{{json object}}Stringify object{{json fullResponse}}

Variable Examples

Reference trigger data:

Experiment "{{experimentTitle}}" moved to {{currentStatus}}

Reference previous action output:

AI generated: {{myAnthropic.content}}

Build JSON payloads:

{
  "experiment": "{{experimentTitle}}",
  "summary": "{{aiSummary.content}}",
  "metadata": {{json triggerData}}
}

Managing Workflows

Activating/Deactivating

Toggle workflows on or off:

  1. Open the workflow
  2. Click the Active toggle
  3. Inactive workflows won't trigger

Filtering Workflows

Find workflows using filters:

  • Search - Find by name
  • Node Type - Filter by actions used (e.g., show all Slack workflows)
  • Active Status - Show active only, inactive only, or all

Bulk Operations

Perform actions on multiple workflows:

  • Select multiple workflows
  • Delete selected workflows
  • Activate/deactivate in bulk

Workflow Executions

Viewing Executions

Monitor workflow runs:

  1. Open a workflow
  2. Click Executions tab
  3. View list of all runs with status

Execution Details

Each execution shows:

  • Status - Running, Success, or Failed
  • Start Time - When execution began
  • Duration - How long it took
  • Node Results - Output from each node
  • Errors - Any error messages if failed

Real-Time Monitoring

Watch workflows execute in real-time:

  • Live status updates via streaming
  • Node-by-node progress
  • Immediate error notification

Debugging Failed Executions

When a workflow fails:

  1. Open the failed execution
  2. Find the node that failed (marked in red)
  3. View error message and stack trace
  4. Check node input to understand the context
  5. Fix the issue and re-run

AI-Powered Workflow Generation

Generate workflows from natural language:

  1. Open a workflow
  2. Click the AI Generate button
  3. Describe what you want in plain English
  4. AI creates the workflow structure
  5. Review and adjust as needed

Example prompts:

  • "When an experiment wins, send a Slack message and create a Jira ticket"
  • "Every Monday at 9am, send a summary email of active experiments"
  • "When priority changes to urgent, notify the team in Discord"

AI generation costs 50 credits per request.

Credentials Management

Store credentials securely for integrations:

Adding Credentials

  1. In a node that requires authentication
  2. Click Add Credential
  3. Enter the required authentication details
  4. Credentials are encrypted and stored securely

Credential Types by Node

Credential TypeUsed By
API KeyAnthropic, OpenAI, Gemini, Slack, Linear, Airtable, Notion
OAuth2Gmail, Google Sheets, GitHub, HubSpot, Salesforce, Asana
Webhook URLSlack, Discord, Teams, n8n, Make, Zapier

Credential Security

  • Credentials are encrypted at rest
  • Never exposed in workflow outputs
  • Can be shared across workflows in your organization

Webhooks

Receiving Webhooks

When using a webhook trigger:

  1. Add a webhook trigger node to your workflow
  2. Copy the unique webhook URL
  3. Configure external services to POST to this URL
  4. Incoming data becomes available as variables

Sending Webhooks

Use the HTTP Request or Webhook Send action to send webhooks:

  1. Add an HTTP action node
  2. Set method to POST
  3. Enter the destination URL
  4. Configure the payload body
  5. Add any required headers

Best Practices

Workflow Design

  • Keep workflows focused on a single purpose
  • Use descriptive names that explain what the workflow does
  • Add comments to complex logic for future reference
  • Test workflows before activating in production

Error Handling

  • Expect external services to fail occasionally
  • Use If/Else to check for error conditions
  • Configure retry logic where appropriate
  • Monitor executions for recurring failures

Performance

  • Avoid unnecessary API calls
  • Use filters in triggers to reduce executions
  • Cache results when calling the same data multiple times
  • Keep workflows simple when possible

Security

  • Use credentials instead of hardcoding secrets
  • Limit workflow access to necessary team members
  • Review webhook URLs periodically
  • Audit executions for unexpected behavior

Maintenance

  • Document what each workflow does
  • Review inactive workflows periodically
  • Update workflows when integrated services change
  • Test after making changes

Common Workflow Patterns

Notification on Status Change

Notify team when experiments reach important milestones:

Trigger: Experiment status → LIVE
Action: Send Slack message to #experiments channel

Winner Celebration

Celebrate experiment wins:

Trigger: Experiment status → WINNER
Action 1: Send Slack message with confetti emoji
Action 2: Create Jira ticket for deployment
Action 3: Update Google Sheet with results

Urgent Priority Alert

Alert on urgent experiments:

Trigger: Priority changes to URGENT
Action: Send Teams message to leadership

Weekly Digest

Send weekly experiment summaries:

Trigger: Schedule (Monday 9am)
Action 1: Fetch active experiments via HTTP
Action 2: Format summary with AI
Action 3: Send email to stakeholders

Approval Flow

Require approval before launching:

Trigger: Experiment status → DESIGN
Action 1: Send Slack notification
Action 2: Wait for approval
Action 3: (On approval) Move experiment to LIVE

AI-Enhanced Notifications

Use AI to create smart summaries:

Trigger: Experiment status → WINNER
Action 1: Anthropic - Generate congratulations message
Action 2: Slack - Send AI-generated message
Action 3: Jira - Create deployment ticket

Multi-Channel Alerts

Notify across multiple platforms:

Trigger: Priority changes to URGENT
Action 1: Slack - Alert #urgent channel
Action 2: Teams - Notify leadership
Action 3: Gmail - Send email to stakeholders

On this page