Built-in Workflow Examples
Energy SOAR ships with ready-to-use n8n workflows. They are pre-installed during setup and immediately available in the Workflows list.
Analyze observables — GeoIP
File: Analyze_observables_GeoIP.json
Runs the GeoIP analyzer on all IP-type observables in open cases and raises the case severity when the source country matches a configured threshold.
Nodes:
Cron — triggers on a schedule.
Get cases — fetches open cases from Energy SOAR Base.
Get observables — fetches observables from each case.
Filter public IPs — IF node; skips private address ranges.
GeoIP — submits the IP to the Automation GeoIP analyzer.
Wait 10s — pauses execution while the analyzer job runs.
Get GeoIP Report — polls Automation for the completed job result.
IF country=China — example threshold; adjust to match your threat model.
Severity=high — updates the case severity in Energy SOAR Base.
Add observable tag — tags the observable with the resolved country name.
Customise the IF country node condition to match the countries relevant to your environment.
SLA enforcement
File: SLA.json
Monitors all open cases and escalates any case that has been open for more than 50 days.
Nodes:
Cron — triggers on a schedule.
Search open cases — fetches all cases with Open status.
Function — calculates how many days each case has been open.
IF SLA > 50 days — routes cases that exceed the threshold.
Update case — sets a flag or changes the severity on breached cases.
Adjust the threshold in the IF SLA > 50 days node condition.
Open case reminder
File: Open_case_reminder.json
Sends a multi-channel notification when a case has been open for more than 7 days. Supports email, SMS (via Sms77), Slack, and a case flag in Energy SOAR Base.
Nodes:
Cron — triggers on a schedule.
Search open cases — fetches all cases with Open status.
Calculate SLA — computes case age in days.
IF SLA > 7 days — routes cases past the threshold.
Send Email — sends an email reminder to the assigned analyst.
Sms77 — sends an SMS alert (requires Sms77 credentials).
Slack — posts a message to a configured Slack channel.
Flag case — sets the flag on the case in Energy SOAR Base.
Configure the credential blocks for the channels you use; leave unused nodes disconnected.
Vulnerability tickets
File: Vulnerability_Tickets.json
Reads a spreadsheet of vulnerability tickets, matches them to open cases by observable, and updates case severity based on ticket priority.
Nodes:
Cron — triggers on a schedule.
Get cases — fetches open cases from Energy SOAR Base.
Get observables — fetches observables from each case.
Read Binary File — reads the vulnerability spreadsheet from disk.
Spreadsheet File — parses the spreadsheet into rows.
SplitInBatches — processes rows in configurable batch sizes.
IF — matches observable values against spreadsheet entries.
Change severity — updates case severity on match.
Place the spreadsheet file at the path configured in the Read Binary File node.
Phishing automation
File: Phishing.json
Automated triage for phishing cases. Fetches cases tagged automation_phishing,
analyzes URL and attachment observables via Automation, calculates a risk score, and
either escalates or closes the case. See the
Suspicious E-mail Investigation use case for the full walkthrough.
Correlate alerts
Runs on a schedule and groups alerts that share the same title into a single case. Alerts received within a configurable time window are compared: a new alert whose title matches an existing case is merged into that case; an alert with no match becomes its own case.
Nodes:
Cron — triggers every 10 minutes.
Set query time — computes the correlation window boundaries (default: 10 minutes).
Get Alerts — fetches alerts received within the window.
Remove duplicated Alerts — deduplicates the list by title.
Set fields — extracts the alert ID and title for matching.
Get Alerts by title — queries for existing cases with a matching title.
Set time — attaches the query window timestamps to each item.
Merge — joins new alerts with existing cases on the title key.
Create Case — promotes an unmatched alert to a new case.
Correlate into Case — merges a matching alert into the existing case.
Adjust the correlate_minutes value in the Set query time node to change
the correlation window.
User added to security-enabled group
Triggered by the Cortex RunWorkflow responder when a user is added to an Active Directory or LDAP security-enabled group. Checks whether the account is a non-admin user, sends a confirmation link to the SOC, waits for a webhook response, and optionally revokes the account session if creation is not confirmed.
Nodes:
Start — triggered by the Cortex RunWorkflow responder.
Get cases — fetches the triggering case.
Energy SOAR Base — fetches case observables.
IF1 — filters to username-type observables not tagged
admin.Get tasks — fetches case tasks.
Switch task — routes to the
Confirm creationtask.Send Email1 — sends a confirmation link with a webhook URL to the SOC.
Set — configures the confirmation webhook URL.
Merge — joins case and observable data.
Wait — waits for the confirmation webhook response.
Check task update — polls the task status.
IF — branches on whether the task is Completed.
Draft - kill sessions — runs an Automation responder to revoke the user session if creation is not confirmed.
Send Email — alerts the SOC if creation was not confirmed in time.
Energy SOAR Base1/2/3 — updates the
workflow-stepcustom field.
Update the Send Email and Send Email1 nodes with your SOC address. The companion workflow Webhook - confirm user creation handles the confirmation click: it marks the task as Completed when the SOC follows the link.
Analyze web scan observables
Periodically submits IP-type observables to the Energy Logserver Agent analyzer. Raises case severity on a suspicious result; closes the case when the result is clean.
Nodes:
Cron — triggers on a schedule.
Get cases — fetches open cases.
Get observables — fetches observables from each case.
Filter public IPs — IF node; skips private address ranges.
Energy Logserver Agent — submits the IP to the Energy Logserver Agent analyzer.
Analyze — starts the analyzer job.
Wait — pauses 10 seconds while the job runs.
Get Report — polls Automation for the completed job result.
IF Suspicious — routes on a suspicious result.
Severity=high — updates case severity to high on a suspicious match.
Add observable tag — tags the observable with the analysis result.
Severity=low & close case — sets severity to low and closes the case when the result is clean.
Analyze email
Triggered by the Cortex RunWorkflow responder on cases that contain an email
observable. Parses the .eml attachment with the EmlParser analyzer,
extracts all embedded observables (IP addresses, URLs, domains, hashes, email
addresses), creates them in the case, and submits each type to Automation. Calls
the Analyze observables on VT parent sub-workflow to compute a VirusTotal
risk score.
Nodes:
Start — triggered by the Cortex RunWorkflow responder.
get Observables — fetches observables from the case.
execute EmlParser — runs the EmlParser analyzer on the email attachment.
Get one report / Get reports — waits for the EmlParser result.
Create observable (domain/IP/URL/mail/hash) — creates each extracted observable in the case.
Get IPs / Get URLs / Get Domains / Get Emails / Get Hashes — separates observables by type.
Remove duplicates — deduplicates each observable type.
Analyze IP / URL / Email / Hash / Domain / File — submits each type to the corresponding webhook worker workflow.
Get risk — calls the Analyze observables on VT parent sub-workflow for VirusTotal scoring.
Update task — updates the analysis task status.
Set field (workflow.step=completed) — marks the workflow complete.
Imap2case
Polls an IMAP mailbox and converts each new message into an Energy SOAR case. The email subject becomes the case title and the case is created from the Suspicious e-mail template.
Nodes:
IMAP Email — polls the
SOARmailbox folder for new messages.Function — extracts attachment metadata from the message.
Energy SOAR Base — creates an alert with the email subject as the title.
Energy SOAR Base1 — promotes the alert to a case using the Suspicious e-mail template.
IF — branches based on whether an attachment is present.
Configure the IMAP credential block with your mailbox details. The folder name
defaults to SOAR; update the IMAP Email node if you use a different
folder.
System health
Collects operating-system statistics on a schedule and stores them in Energy SOAR Base as internal monitoring records.
Nodes:
Cron — triggers on a schedule.
Execute Command — runs the statistics script at
/opt/energysoar/workflow/script/get_os_stats.py.Create _system_stats entry — stores the result as a
stats-type alert with statusIgnoredin Energy SOAR Base.
Update owner
Finds cases assigned to the workflow@energysoar.local placeholder account
and reassigns them to the correct owner by matching case titles against recently
resolved cases.
Nodes:
Get cases — fetches open cases sorted by case number, descending.
Asignee=workflow? — IF node; filters to cases assigned to
workflow@energysoar.local.Select 1 case / Limit — processes one case per execution.
Set case id — extracts the case ID.
Get resolved case — finds a resolved case with the same title.
Search by title — joins open and resolved cases on the title key.
Set owner — extracts the assignee from the resolved case.
Merge — combines case ID and target owner.
Update owner — sets the case assignee.
Update tasks
Triggered by the Cortex RunWorkflow responder. Copies the task list from a recently resolved case with the same title into the current open case. Use this workflow to apply a task set from a reference case.
Nodes:
Start — triggered by the Cortex RunWorkflow responder.
Get case — fetches the triggering case.
Get resolved case — finds the most recently resolved case with the same title.
Get tasks — fetches tasks from the resolved case.
SplitInBatches — processes one task at a time.
Add task — copies each task into the open case.
Webhook worker workflows
Five short workflows handle Automation analysis requests dispatched by parent workflows. Each accepts a POST, calls the configured Automation analyzer on the supplied observable, and returns the result.
Webhook - Cortex Analyze IP — runs the configured IP analyzer.
Webhook - Cortex Analyze Domain — runs the configured domain analyzer.
Webhook - Cortex Analyze URL — runs the configured URL analyzer.
Webhook - Cortex Analyze Email — runs the configured email analyzer.
Webhook - Cortex Analyze Hash — runs the configured hash analyzer.
These are called internally by Analyze email and similar parent workflows. Update the analyzer ID in each Energy SOAR Base node to swap the underlying analyzer.
Responder RunWorkflow
Bridges Cortex responders and n8n workflows. When the Cortex RunWorkflow responder fires on a case, it posts to the webhook in this workflow, which then calls the target workflow by ID.
Nodes:
Webhook — receives the POST from the Cortex RunWorkflow responder.
Execute Workflow — runs the workflow whose ID is passed in the
workflow_idquery parameter.
Case created
Fires automatically when a new case is created in Energy SOAR Base. After an optional delay, it executes a configurable sub-workflow. Use the IF node to restrict execution to specific case types or tags.
Nodes:
Trigger —
energySoarBaseTrigger; fires on case creation.IF — routes based on a case attribute; configure the condition as needed.
Wait — optional delay before proceeding.
Execute Workflow — runs the configured sub-workflow.