Playbooks built by the world's best operations teams
Playbooks built by the world's best operations teams
Playbooks built by the world's best operations teams
Write the logic once in natural language. Console executes it across identity, access, devices, and more.
Write the logic once in natural language. Console executes it across identity, access, devices, and more.
Write the logic once in natural language.
Console executes it across identity, access, devices, and more.
All
IT
HR
Security
RevOps
Finance
Legal
New Hire Onboarding
Playbooks
/
New Hire Onboarding
New Hire Onboarding
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+1
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.preferredName, $employee.startDate, $employee.managerEmail, $employee.team, $employee.location, $employee.title, $employee.personalEmail
Instructions
#Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the buddy:
#Search Graph the HR ingest for active team members on
$employee.teamwith tenure >6 months.Pick one not already buddying for someone else; capture buddy email.
Pre-day-1 (fires immediately on webhook):
#Send Email to
$employee.personalEmailwith the welcome packet: handbook link, benefits enrollment link, day-1 logistics, dress code, what-to-bring, parking/transit info, manager intro.Attach the team intro doc and the location-specific office welcome PDF.
Day-1 calendar (fires 3 business days before
$employee.startDate):#Custom Google Calendar Create Event for a 30-min day-1 manager intro at 10:00 AM local on
$employee.startDate. Invite$employee.email, manager, and HRBP.#Custom Google Calendar Create Event for buddy lunch at 12:30 PM local on day 2. Invite
$employee.emailand the buddy.#Custom Google Calendar Create Event for HR orientation at 2:00 PM local on day 1.
#Custom Google Calendar Create Event for day-1 IT setup walkthrough at 9:00 AM local.
Slack onboarding (fires on
$employee.startDateat 9:00 AM local):#Add Users To Channel for
#welcome,#all-hands,#{{team}}, and#{{location}}-office.#Send Channel Message to
#welcomeintroducing the new hire with their preferred name, title, team, fun fact (collected via pre-start form if available), and a "say hi" prompt.
Team channel intro:
#Send Channel Message to
#{{team}}with a fuller bio and the manager tagged.
Manager + buddy nudge:
#Send Direct Message to the manager: pre-start checklist (set up 1:1 cadence, prep first-week agenda, intro to key collaborators).
#Send Direct Message to the buddy: their role (informal questions, lunch on day 2, check-in at end of week 1).
schedule_action wake at end of day 1 to confirm with the new hire via #Send Direct Message: "How did day 1 go? Anything blocking you?"
#Leave Internal Note capturing manager, buddy, calendar event IDs
New Hire Onboarding
Playbooks
/
New Hire Onboarding
New Hire Onboarding
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+1
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.preferredName, $employee.startDate, $employee.managerEmail, $employee.team, $employee.location, $employee.title, $employee.personalEmail
Instructions
#Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the buddy:
#Search Graph the HR ingest for active team members on
$employee.teamwith tenure >6 months.Pick one not already buddying for someone else; capture buddy email.
Pre-day-1 (fires immediately on webhook):
#Send Email to
$employee.personalEmailwith the welcome packet: handbook link, benefits enrollment link, day-1 logistics, dress code, what-to-bring, parking/transit info, manager intro.Attach the team intro doc and the location-specific office welcome PDF.
Day-1 calendar (fires 3 business days before
$employee.startDate):#Custom Google Calendar Create Event for a 30-min day-1 manager intro at 10:00 AM local on
$employee.startDate. Invite$employee.email, manager, and HRBP.#Custom Google Calendar Create Event for buddy lunch at 12:30 PM local on day 2. Invite
$employee.emailand the buddy.#Custom Google Calendar Create Event for HR orientation at 2:00 PM local on day 1.
#Custom Google Calendar Create Event for day-1 IT setup walkthrough at 9:00 AM local.
Slack onboarding (fires on
$employee.startDateat 9:00 AM local):#Add Users To Channel for
#welcome,#all-hands,#{{team}}, and#{{location}}-office.#Send Channel Message to
#welcomeintroducing the new hire with their preferred name, title, team, fun fact (collected via pre-start form if available), and a "say hi" prompt.
Team channel intro:
#Send Channel Message to
#{{team}}with a fuller bio and the manager tagged.
Manager + buddy nudge:
#Send Direct Message to the manager: pre-start checklist (set up 1:1 cadence, prep first-week agenda, intro to key collaborators).
#Send Direct Message to the buddy: their role (informal questions, lunch on day 2, check-in at end of week 1).
schedule_action wake at end of day 1 to confirm with the new hire via #Send Direct Message: "How did day 1 go? Anything blocking you?"
#Leave Internal Note capturing manager, buddy, calendar event IDs
New Hire Onboarding
Playbooks
/
New Hire Onboarding
New Hire Onboarding
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+1
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.preferredName, $employee.startDate, $employee.managerEmail, $employee.team, $employee.location, $employee.title, $employee.personalEmail
Instructions
#Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the buddy:
#Search Graph the HR ingest for active team members on
$employee.teamwith tenure >6 months.Pick one not already buddying for someone else; capture buddy email.
Pre-day-1 (fires immediately on webhook):
#Send Email to
$employee.personalEmailwith the welcome packet: handbook link, benefits enrollment link, day-1 logistics, dress code, what-to-bring, parking/transit info, manager intro.Attach the team intro doc and the location-specific office welcome PDF.
Day-1 calendar (fires 3 business days before
$employee.startDate):#Custom Google Calendar Create Event for a 30-min day-1 manager intro at 10:00 AM local on
$employee.startDate. Invite$employee.email, manager, and HRBP.#Custom Google Calendar Create Event for buddy lunch at 12:30 PM local on day 2. Invite
$employee.emailand the buddy.#Custom Google Calendar Create Event for HR orientation at 2:00 PM local on day 1.
#Custom Google Calendar Create Event for day-1 IT setup walkthrough at 9:00 AM local.
Slack onboarding (fires on
$employee.startDateat 9:00 AM local):#Add Users To Channel for
#welcome,#all-hands,#{{team}}, and#{{location}}-office.#Send Channel Message to
#welcomeintroducing the new hire with their preferred name, title, team, fun fact (collected via pre-start form if available), and a "say hi" prompt.
Team channel intro:
#Send Channel Message to
#{{team}}with a fuller bio and the manager tagged.
Manager + buddy nudge:
#Send Direct Message to the manager: pre-start checklist (set up 1:1 cadence, prep first-week agenda, intro to key collaborators).
#Send Direct Message to the buddy: their role (informal questions, lunch on day 2, check-in at end of week 1).
schedule_action wake at end of day 1 to confirm with the new hire via #Send Direct Message: "How did day 1 go? Anything blocking you?"
#Leave Internal Note capturing manager, buddy, calendar event IDs
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
IT
Okta
Kandji
Ramp
+8
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.department
Instructions
#Lookup Users on $employee.email with includeGroups, includeApps, includeManager.
#Search Okta User by Email, then #Revoke All User Sessions, then #Deactivate User (Okta).
#Suspend Google User and #Transfer Drive Files to $employee.managerEmail.
#Out Of Office to set the auto-reply.
If department == "Engineering": #Remove User from Org (GitHub), #Disable Datadog User, custom AWS IAM detach.
If department == "Sales": revoke Salesforce/Gong/Outreach seats (custom actions).
Loop user's apps from step 1; for each Productiv-tracked SaaS, call the appropriate #Remove from Group action.
#Kandji: Force Device Check-In then #Device Lock for each assigned device.
#Update User (Ramp) to suspend the card.
Create Linear Issue in the IT-Audit project documenting the offboarding.
#Send Channel Message to #it-audit summarizing what was revoked.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
IT
Okta
Kandji
Ramp
+8
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.department
Instructions
#Lookup Users on $employee.email with includeGroups, includeApps, includeManager.
#Search Okta User by Email, then #Revoke All User Sessions, then #Deactivate User (Okta).
#Suspend Google User and #Transfer Drive Files to $employee.managerEmail.
#Out Of Office to set the auto-reply.
If department == "Engineering": #Remove User from Org (GitHub), #Disable Datadog User, custom AWS IAM detach.
If department == "Sales": revoke Salesforce/Gong/Outreach seats (custom actions).
Loop user's apps from step 1; for each Productiv-tracked SaaS, call the appropriate #Remove from Group action.
#Kandji: Force Device Check-In then #Device Lock for each assigned device.
#Update User (Ramp) to suspend the card.
Create Linear Issue in the IT-Audit project documenting the offboarding.
#Send Channel Message to #it-audit summarizing what was revoked.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
IT
Okta
Kandji
Ramp
+8
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.department
Instructions
#Lookup Users on $employee.email with includeGroups, includeApps, includeManager.
#Search Okta User by Email, then #Revoke All User Sessions, then #Deactivate User (Okta).
#Suspend Google User and #Transfer Drive Files to $employee.managerEmail.
#Out Of Office to set the auto-reply.
If department == "Engineering": #Remove User from Org (GitHub), #Disable Datadog User, custom AWS IAM detach.
If department == "Sales": revoke Salesforce/Gong/Outreach seats (custom actions).
Loop user's apps from step 1; for each Productiv-tracked SaaS, call the appropriate #Remove from Group action.
#Kandji: Force Device Check-In then #Device Lock for each assigned device.
#Update User (Ramp) to suspend the card.
Create Linear Issue in the IT-Audit project documenting the offboarding.
#Send Channel Message to #it-audit summarizing what was revoked.
Okta Password / MFA Reset
Playbooks
/
Okta Password / MFA Reset
Okta Password / MFA Reset
Created by

Console Team
Published
IT
Okta
Conditions
Requester reports being locked out, lost MFA device (YubiKey, phone, Authenticator), needs a password reset, or needs a factor reset.
Instructions
#Search Okta User by Email for the requester to confirm the account exists and get the user ID.
#Search Okta System Log Custom for
user.account.reset_passwordanduser.mfa.factor.resetevents in the last 30 days for this user.#List User Factors to see current enrollments.
Risk score the request based on:
3+ resets in last 30 days → High
Login from new country or unusual IP in last 24h → High
Standard request from known device/location → Low
Recent suspicious activity in Okta log → Medium
Identity verification per risk:
Low → ask 2 security questions inline (custom action to check answers against profile).
Medium → #Request Approval from the requester's manager (configured with
requestersManager) confirming they spoke to the user.High → #Prompt for Handoff to a security team member for live video ID verification.
If verification fails or is denied: #Send Direct Message to the requester explaining next steps, #Send Channel Message to
#sec-alerts, and #Resolve Request. Stop.Execute the reset based on the issue type:
Password reset → #Reset Password (Okta) with
sendEmail = true.MFA factor reset → identify the specific factor from step 3 and call #Reset User Factor with that factor ID.
Full factor wipe (lost device) → #Reset User Factors (Custom) to clear all factors so the user re-enrolls.
Account locked → #custom Okta Unlock User action.
#Send Direct Message to the requester with confirmation and next-step instructions.
If risk was High OR pattern-flag triggered (3+ resets): #Send Channel Message to
#sec-alertswith the user, the reason, and the action taken.#Leave Internal Note on the request capturing risk score, verification method, and action taken.
Okta Password / MFA Reset
Playbooks
/
Okta Password / MFA Reset
Okta Password / MFA Reset
Created by

Console Team
Published
IT
Okta
Conditions
Requester reports being locked out, lost MFA device (YubiKey, phone, Authenticator), needs a password reset, or needs a factor reset.
Instructions
#Search Okta User by Email for the requester to confirm the account exists and get the user ID.
#Search Okta System Log Custom for
user.account.reset_passwordanduser.mfa.factor.resetevents in the last 30 days for this user.#List User Factors to see current enrollments.
Risk score the request based on:
3+ resets in last 30 days → High
Login from new country or unusual IP in last 24h → High
Standard request from known device/location → Low
Recent suspicious activity in Okta log → Medium
Identity verification per risk:
Low → ask 2 security questions inline (custom action to check answers against profile).
Medium → #Request Approval from the requester's manager (configured with
requestersManager) confirming they spoke to the user.High → #Prompt for Handoff to a security team member for live video ID verification.
If verification fails or is denied: #Send Direct Message to the requester explaining next steps, #Send Channel Message to
#sec-alerts, and #Resolve Request. Stop.Execute the reset based on the issue type:
Password reset → #Reset Password (Okta) with
sendEmail = true.MFA factor reset → identify the specific factor from step 3 and call #Reset User Factor with that factor ID.
Full factor wipe (lost device) → #Reset User Factors (Custom) to clear all factors so the user re-enrolls.
Account locked → #custom Okta Unlock User action.
#Send Direct Message to the requester with confirmation and next-step instructions.
If risk was High OR pattern-flag triggered (3+ resets): #Send Channel Message to
#sec-alertswith the user, the reason, and the action taken.#Leave Internal Note on the request capturing risk score, verification method, and action taken.
Okta Password / MFA Reset
Playbooks
/
Okta Password / MFA Reset
Okta Password / MFA Reset
Created by

Console Team
Published
IT
Okta
Conditions
Requester reports being locked out, lost MFA device (YubiKey, phone, Authenticator), needs a password reset, or needs a factor reset.
Instructions
#Search Okta User by Email for the requester to confirm the account exists and get the user ID.
#Search Okta System Log Custom for
user.account.reset_passwordanduser.mfa.factor.resetevents in the last 30 days for this user.#List User Factors to see current enrollments.
Risk score the request based on:
3+ resets in last 30 days → High
Login from new country or unusual IP in last 24h → High
Standard request from known device/location → Low
Recent suspicious activity in Okta log → Medium
Identity verification per risk:
Low → ask 2 security questions inline (custom action to check answers against profile).
Medium → #Request Approval from the requester's manager (configured with
requestersManager) confirming they spoke to the user.High → #Prompt for Handoff to a security team member for live video ID verification.
If verification fails or is denied: #Send Direct Message to the requester explaining next steps, #Send Channel Message to
#sec-alerts, and #Resolve Request. Stop.Execute the reset based on the issue type:
Password reset → #Reset Password (Okta) with
sendEmail = true.MFA factor reset → identify the specific factor from step 3 and call #Reset User Factor with that factor ID.
Full factor wipe (lost device) → #Reset User Factors (Custom) to clear all factors so the user re-enrolls.
Account locked → #custom Okta Unlock User action.
#Send Direct Message to the requester with confirmation and next-step instructions.
If risk was High OR pattern-flag triggered (3+ resets): #Send Channel Message to
#sec-alertswith the user, the reason, and the action taken.#Leave Internal Note on the request capturing risk score, verification method, and action taken.
Device Recovery / Unlock
Playbooks
/
Device Recovery / Unlock
Device Recovery / Unlock
Created by

Console Team
Published
IT
Okta
Kandji
Conditions
User reports being locked out of their laptop ("forgot FileVault password", "can't get past BitLocker", "MacBook is asking for recovery key").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmail = requester.emailto find their device(s).If multiple devices, #Trigger Form to ask which device.
#Get Device Details (Kandji) to confirm the device is enrolled and active.
Risk check: #Search Okta System Log Custom for recent suspicious activity. If anomalous, escalate to Sec-12 flow.
Identity verification:
#Request Approval from the requester's manager confirming the user is who they say they are.
For high-risk cases (recent termination flag, device marked lost, off-hours request from new IP) → #Prompt for Handoff to security.
On approval: #Get Device FileVault Recovery Key (Kandji) for Mac, or custom Get BitLocker Recovery Key for Windows.
#Send Direct Message to the requester with:
The recovery key
Step-by-step unlock instructions (different for Mac vs Windows)
Reminder to reset their password after unlock
Wait for the requester to confirm they're back in via a follow-up message.
After confirmation, #Send Direct Message suggesting they update their password and re-enroll FileVault/BitLocker.
#Leave Internal Note capturing device serial, verification method, and outcome.
Device Recovery / Unlock
Playbooks
/
Device Recovery / Unlock
Device Recovery / Unlock
Created by

Console Team
Published
IT
Okta
Kandji
Conditions
User reports being locked out of their laptop ("forgot FileVault password", "can't get past BitLocker", "MacBook is asking for recovery key").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmail = requester.emailto find their device(s).If multiple devices, #Trigger Form to ask which device.
#Get Device Details (Kandji) to confirm the device is enrolled and active.
Risk check: #Search Okta System Log Custom for recent suspicious activity. If anomalous, escalate to Sec-12 flow.
Identity verification:
#Request Approval from the requester's manager confirming the user is who they say they are.
For high-risk cases (recent termination flag, device marked lost, off-hours request from new IP) → #Prompt for Handoff to security.
On approval: #Get Device FileVault Recovery Key (Kandji) for Mac, or custom Get BitLocker Recovery Key for Windows.
#Send Direct Message to the requester with:
The recovery key
Step-by-step unlock instructions (different for Mac vs Windows)
Reminder to reset their password after unlock
Wait for the requester to confirm they're back in via a follow-up message.
After confirmation, #Send Direct Message suggesting they update their password and re-enroll FileVault/BitLocker.
#Leave Internal Note capturing device serial, verification method, and outcome.
Device Recovery / Unlock
Playbooks
/
Device Recovery / Unlock
Device Recovery / Unlock
Created by

Console Team
Published
IT
Okta
Kandji
Conditions
User reports being locked out of their laptop ("forgot FileVault password", "can't get past BitLocker", "MacBook is asking for recovery key").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmail = requester.emailto find their device(s).If multiple devices, #Trigger Form to ask which device.
#Get Device Details (Kandji) to confirm the device is enrolled and active.
Risk check: #Search Okta System Log Custom for recent suspicious activity. If anomalous, escalate to Sec-12 flow.
Identity verification:
#Request Approval from the requester's manager confirming the user is who they say they are.
For high-risk cases (recent termination flag, device marked lost, off-hours request from new IP) → #Prompt for Handoff to security.
On approval: #Get Device FileVault Recovery Key (Kandji) for Mac, or custom Get BitLocker Recovery Key for Windows.
#Send Direct Message to the requester with:
The recovery key
Step-by-step unlock instructions (different for Mac vs Windows)
Reminder to reset their password after unlock
Wait for the requester to confirm they're back in via a follow-up message.
After confirmation, #Send Direct Message suggesting they update their password and re-enroll FileVault/BitLocker.
#Leave Internal Note capturing device serial, verification method, and outcome.
Just-In-Time (JIT) Access
Playbooks
/
Just-In-Time (JIT) Access
Just-In-Time (JIT) Access
Created by

Console Team
Published
Security
Okta
AWS
Snowflake
+1
Conditions
Requester asks for time-bound privileged access (AWS root, prod DB, financial systems, admin console).
Instructions
Parse target system, role/entitlement, duration, and justification from the request.
#Lookup Users on the requester with
includeManagerandincludeGroups.#Trigger Form to collect:
Target system (dropdown of JIT-eligible systems)
Specific role or scope (e.g. "AWS prod read-only", "Snowflake admin")
Duration (max 8 hours, max 24 hours, max 7 days based on system tier)
Business justification (free text, min 50 chars)
Ticket/incident reference if responding to an incident
Validate the request:
Requester is eligible for this system via custom Check JIT Eligibility.
Duration is within max allowed for the system tier.
Not already holding active JIT access for the same system.
Approval chain:
#Request Approval from system owner (custom Get System Owner).
#Request Approval from security on-call (custom Get Security Oncall).
For top-tier systems (AWS root, prod DB): also #Request Approval from CISO or delegate.
On full approval:
For Okta-managed → #Add to Group for the JIT entitlement group.
For AWS → #custom AWS IAM Attach Policy with the specified role and a duration tag.
For Snowflake → #custom Snowflake Grant Role with the role and the user.
For app-specific → call the app's JIT grant action.
schedule_action wake at the TTL to execute revocation:
Reverse of step 6 (Remove from Group / Detach Policy / Revoke Role).
#Send Direct Message to the requester with: access details, expiry timestamp, system access URL, what they can/cannot do.
#Send Channel Message to
#security-jitlogging the grant with: requester, system, role, duration, justification, ticket reference.#Custom Vanta Log JIT Event with the full audit trail.
On revocation wake: #Send Direct Message to the requester confirming auto-expire; #Send Channel Message to
#security-jitconfirming revoke.#Leave Internal Note capturing approval trail and grant/revoke timestamps.
Just-In-Time (JIT) Access
Playbooks
/
Just-In-Time (JIT) Access
Just-In-Time (JIT) Access
Created by

Console Team
Published
Security
Okta
AWS
Snowflake
+1
Conditions
Requester asks for time-bound privileged access (AWS root, prod DB, financial systems, admin console).
Instructions
Parse target system, role/entitlement, duration, and justification from the request.
#Lookup Users on the requester with
includeManagerandincludeGroups.#Trigger Form to collect:
Target system (dropdown of JIT-eligible systems)
Specific role or scope (e.g. "AWS prod read-only", "Snowflake admin")
Duration (max 8 hours, max 24 hours, max 7 days based on system tier)
Business justification (free text, min 50 chars)
Ticket/incident reference if responding to an incident
Validate the request:
Requester is eligible for this system via custom Check JIT Eligibility.
Duration is within max allowed for the system tier.
Not already holding active JIT access for the same system.
Approval chain:
#Request Approval from system owner (custom Get System Owner).
#Request Approval from security on-call (custom Get Security Oncall).
For top-tier systems (AWS root, prod DB): also #Request Approval from CISO or delegate.
On full approval:
For Okta-managed → #Add to Group for the JIT entitlement group.
For AWS → #custom AWS IAM Attach Policy with the specified role and a duration tag.
For Snowflake → #custom Snowflake Grant Role with the role and the user.
For app-specific → call the app's JIT grant action.
schedule_action wake at the TTL to execute revocation:
Reverse of step 6 (Remove from Group / Detach Policy / Revoke Role).
#Send Direct Message to the requester with: access details, expiry timestamp, system access URL, what they can/cannot do.
#Send Channel Message to
#security-jitlogging the grant with: requester, system, role, duration, justification, ticket reference.#Custom Vanta Log JIT Event with the full audit trail.
On revocation wake: #Send Direct Message to the requester confirming auto-expire; #Send Channel Message to
#security-jitconfirming revoke.#Leave Internal Note capturing approval trail and grant/revoke timestamps.
Just-In-Time (JIT) Access
Playbooks
/
Just-In-Time (JIT) Access
Just-In-Time (JIT) Access
Created by

Console Team
Published
Security
Okta
AWS
Snowflake
+1
Conditions
Requester asks for time-bound privileged access (AWS root, prod DB, financial systems, admin console).
Instructions
Parse target system, role/entitlement, duration, and justification from the request.
#Lookup Users on the requester with
includeManagerandincludeGroups.#Trigger Form to collect:
Target system (dropdown of JIT-eligible systems)
Specific role or scope (e.g. "AWS prod read-only", "Snowflake admin")
Duration (max 8 hours, max 24 hours, max 7 days based on system tier)
Business justification (free text, min 50 chars)
Ticket/incident reference if responding to an incident
Validate the request:
Requester is eligible for this system via custom Check JIT Eligibility.
Duration is within max allowed for the system tier.
Not already holding active JIT access for the same system.
Approval chain:
#Request Approval from system owner (custom Get System Owner).
#Request Approval from security on-call (custom Get Security Oncall).
For top-tier systems (AWS root, prod DB): also #Request Approval from CISO or delegate.
On full approval:
For Okta-managed → #Add to Group for the JIT entitlement group.
For AWS → #custom AWS IAM Attach Policy with the specified role and a duration tag.
For Snowflake → #custom Snowflake Grant Role with the role and the user.
For app-specific → call the app's JIT grant action.
schedule_action wake at the TTL to execute revocation:
Reverse of step 6 (Remove from Group / Detach Policy / Revoke Role).
#Send Direct Message to the requester with: access details, expiry timestamp, system access URL, what they can/cannot do.
#Send Channel Message to
#security-jitlogging the grant with: requester, system, role, duration, justification, ticket reference.#Custom Vanta Log JIT Event with the full audit trail.
On revocation wake: #Send Direct Message to the requester confirming auto-expire; #Send Channel Message to
#security-jitconfirming revoke.#Leave Internal Note capturing approval trail and grant/revoke timestamps.
New Hire Provisioning
Playbooks
/
New Hire Provisioning
New Hire Provisioning
Created by

Console Team
Published
IT
Okta
Google Calendar
Slack
+5
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.role, $employee.department, $employee.startDate, $employee.managerEmail, $employee.location, $employee.shippingAddress
Instructions
Use #Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the provisioning bundle based on
$employee.department:Engineering → GitHub, Datadog, AWS sandbox
Sales → Salesforce, Gong, Outreach, Sales Nav
All → Okta, Google Workspace, Slack
Use #Create Okta User (Staged) with the email, first/last name, department, and manager.
Use #Activate Okta User to activate the account and send the activation email.
For each baseline group, call #Add to Group (Okta):
all-employees, the department group, and the location group.Use #Add to Group (Google) for
all@,{{department}}@, and{{location}}@.If
$employee.department == "Engineering": #Invite User to Org (GitHub), #Add User to Team for the right team, #Invite User to Datadog, and grant AWS sandbox via #AWS IAM - List Attached User Policies + custom IAM attach.If
$employee.department == "Sales": invite to Salesforce, Gong, Outreach, Sales Nav (custom actions).Use #Kandji Assign ADE Device User to pre-assign a device to
$employee.emailand ship to$employee.shippingAddress.Use #List Google Calendar Events to find the manager's calendar, then create a day-1 intro event and a buddy lunch via Google Calendar.
Use #Invite to Channel to add the user to
#welcome,#all-hands, and their team channel.Use schedule_action to wake on Monday 9am
$employee.locationtime to post a welcome thread in the team channel via #Send Channel Message.
New Hire Provisioning
Playbooks
/
New Hire Provisioning
New Hire Provisioning
Created by

Console Team
Published
IT
Okta
Google Calendar
Slack
+5
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.role, $employee.department, $employee.startDate, $employee.managerEmail, $employee.location, $employee.shippingAddress
Instructions
Use #Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the provisioning bundle based on
$employee.department:Engineering → GitHub, Datadog, AWS sandbox
Sales → Salesforce, Gong, Outreach, Sales Nav
All → Okta, Google Workspace, Slack
Use #Create Okta User (Staged) with the email, first/last name, department, and manager.
Use #Activate Okta User to activate the account and send the activation email.
For each baseline group, call #Add to Group (Okta):
all-employees, the department group, and the location group.Use #Add to Group (Google) for
all@,{{department}}@, and{{location}}@.If
$employee.department == "Engineering": #Invite User to Org (GitHub), #Add User to Team for the right team, #Invite User to Datadog, and grant AWS sandbox via #AWS IAM - List Attached User Policies + custom IAM attach.If
$employee.department == "Sales": invite to Salesforce, Gong, Outreach, Sales Nav (custom actions).Use #Kandji Assign ADE Device User to pre-assign a device to
$employee.emailand ship to$employee.shippingAddress.Use #List Google Calendar Events to find the manager's calendar, then create a day-1 intro event and a buddy lunch via Google Calendar.
Use #Invite to Channel to add the user to
#welcome,#all-hands, and their team channel.Use schedule_action to wake on Monday 9am
$employee.locationtime to post a welcome thread in the team channel via #Send Channel Message.
New Hire Provisioning
Playbooks
/
New Hire Provisioning
New Hire Provisioning
Created by

Console Team
Published
IT
Okta
Google Calendar
Slack
+5
Conditions
Webhook — Workday/HiBob/Rippling worker.hired Variables: $employee.email, $employee.firstName, $employee.lastName, $employee.role, $employee.department, $employee.startDate, $employee.managerEmail, $employee.location, $employee.shippingAddress
Instructions
Use #Lookup Users to resolve the manager record from
$employee.managerEmail.Determine the provisioning bundle based on
$employee.department:Engineering → GitHub, Datadog, AWS sandbox
Sales → Salesforce, Gong, Outreach, Sales Nav
All → Okta, Google Workspace, Slack
Use #Create Okta User (Staged) with the email, first/last name, department, and manager.
Use #Activate Okta User to activate the account and send the activation email.
For each baseline group, call #Add to Group (Okta):
all-employees, the department group, and the location group.Use #Add to Group (Google) for
all@,{{department}}@, and{{location}}@.If
$employee.department == "Engineering": #Invite User to Org (GitHub), #Add User to Team for the right team, #Invite User to Datadog, and grant AWS sandbox via #AWS IAM - List Attached User Policies + custom IAM attach.If
$employee.department == "Sales": invite to Salesforce, Gong, Outreach, Sales Nav (custom actions).Use #Kandji Assign ADE Device User to pre-assign a device to
$employee.emailand ship to$employee.shippingAddress.Use #List Google Calendar Events to find the manager's calendar, then create a day-1 intro event and a buddy lunch via Google Calendar.
Use #Invite to Channel to add the user to
#welcome,#all-hands, and their team channel.Use schedule_action to wake on Monday 9am
$employee.locationtime to post a welcome thread in the team channel via #Send Channel Message.
CRM Data Hygiene & Updates
Playbooks
/
CRM Data Hygiene & Updates
CRM Data Hygiene & Updates
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
+5
Conditions
Requester asks to update a CRM record ("change opp owner to Jeff", "update close date to next Friday", "mark closed-lost to competitor as Serval").
Instructions
Parse the request:
Target object (deal / opportunity / contact / company / lead).
Target identifier (deal name, ID, account name).
Field to update.
New value.
#Lookup Users on the requester with
includeGroups.Permission check:
#Custom Check CRM Permission for the requester on the target object and field.
Rep can update their own records.
Manager can update reports' records.
Ops can update any.
If permission denied → #Request Approval from the record owner.
Locate the record:
#Hubspot Search Deals (or #Search HubSpot Contacts, #Search HubSpot Companies) by name + owner.
If multiple matches, #Send Direct Message with a disambiguation list via #Trigger Form.
#Get HubSpot Deal Details with Activity Timeline (or contact/company equivalent) to confirm current state.
Validate the new value:
For owner changes: #Lookup Users to confirm the new owner exists.
For close dates: must be future or current quarter unless requester is ops.
For stage changes: must follow stage progression (route through Rev-15 if backward jump).
For status changes: require
closedLostReasonif moving to closed-lost.
Confirm with the requester via #Send Direct Message showing the diff: "Will change {{field}} from {{old}} to {{new}}. Confirm?"
On confirm: #Update HubSpot Deal Properties (or custom Salesforce update action) with the new value.
Log the change:
#Create HubSpot Note on Deal capturing who/what/when/why.
#Send Channel Message to
#revops-auditfor high-impact changes (owner change, close-lost, stage skip).
#Send Direct Message to the requester confirming, including the deal link.
If the owner changed: #Send Direct Message to the new owner with the handoff.
#Leave Internal Note capturing the change and approval trail.
CRM Data Hygiene & Updates
Playbooks
/
CRM Data Hygiene & Updates
CRM Data Hygiene & Updates
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
+5
Conditions
Requester asks to update a CRM record ("change opp owner to Jeff", "update close date to next Friday", "mark closed-lost to competitor as Serval").
Instructions
Parse the request:
Target object (deal / opportunity / contact / company / lead).
Target identifier (deal name, ID, account name).
Field to update.
New value.
#Lookup Users on the requester with
includeGroups.Permission check:
#Custom Check CRM Permission for the requester on the target object and field.
Rep can update their own records.
Manager can update reports' records.
Ops can update any.
If permission denied → #Request Approval from the record owner.
Locate the record:
#Hubspot Search Deals (or #Search HubSpot Contacts, #Search HubSpot Companies) by name + owner.
If multiple matches, #Send Direct Message with a disambiguation list via #Trigger Form.
#Get HubSpot Deal Details with Activity Timeline (or contact/company equivalent) to confirm current state.
Validate the new value:
For owner changes: #Lookup Users to confirm the new owner exists.
For close dates: must be future or current quarter unless requester is ops.
For stage changes: must follow stage progression (route through Rev-15 if backward jump).
For status changes: require
closedLostReasonif moving to closed-lost.
Confirm with the requester via #Send Direct Message showing the diff: "Will change {{field}} from {{old}} to {{new}}. Confirm?"
On confirm: #Update HubSpot Deal Properties (or custom Salesforce update action) with the new value.
Log the change:
#Create HubSpot Note on Deal capturing who/what/when/why.
#Send Channel Message to
#revops-auditfor high-impact changes (owner change, close-lost, stage skip).
#Send Direct Message to the requester confirming, including the deal link.
If the owner changed: #Send Direct Message to the new owner with the handoff.
#Leave Internal Note capturing the change and approval trail.
CRM Data Hygiene & Updates
Playbooks
/
CRM Data Hygiene & Updates
CRM Data Hygiene & Updates
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
+5
Conditions
Requester asks to update a CRM record ("change opp owner to Jeff", "update close date to next Friday", "mark closed-lost to competitor as Serval").
Instructions
Parse the request:
Target object (deal / opportunity / contact / company / lead).
Target identifier (deal name, ID, account name).
Field to update.
New value.
#Lookup Users on the requester with
includeGroups.Permission check:
#Custom Check CRM Permission for the requester on the target object and field.
Rep can update their own records.
Manager can update reports' records.
Ops can update any.
If permission denied → #Request Approval from the record owner.
Locate the record:
#Hubspot Search Deals (or #Search HubSpot Contacts, #Search HubSpot Companies) by name + owner.
If multiple matches, #Send Direct Message with a disambiguation list via #Trigger Form.
#Get HubSpot Deal Details with Activity Timeline (or contact/company equivalent) to confirm current state.
Validate the new value:
For owner changes: #Lookup Users to confirm the new owner exists.
For close dates: must be future or current quarter unless requester is ops.
For stage changes: must follow stage progression (route through Rev-15 if backward jump).
For status changes: require
closedLostReasonif moving to closed-lost.
Confirm with the requester via #Send Direct Message showing the diff: "Will change {{field}} from {{old}} to {{new}}. Confirm?"
On confirm: #Update HubSpot Deal Properties (or custom Salesforce update action) with the new value.
Log the change:
#Create HubSpot Note on Deal capturing who/what/when/why.
#Send Channel Message to
#revops-auditfor high-impact changes (owner change, close-lost, stage skip).
#Send Direct Message to the requester confirming, including the deal link.
If the owner changed: #Send Direct Message to the new owner with the handoff.
#Leave Internal Note capturing the change and approval trail.
Identity Group Management
Playbooks
/
Identity Group Management
Identity Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, modify membership, or change ownership of an Okta/Google/Slack group (e.g. "create Okta group for brand campaign team", "remove Sarah from eng-leadership", "add this week's new hires to #all-eng").
Instructions
Parse the action type (create / add members / remove members / delete / change owner), target group name, downstream systems (Okta / Google / Slack / all), and member list.
Validate group name against naming convention (
^[a-z][a-z0-9-]+$, max 40 chars). If invalid:#Send Direct Message explaining the rule and ask for a corrected name.
#Lookup Users on the requester with
includeGroups.Check authorization:
Create → requester must be in the
group-creatorsOkta group or an IT admin.Modify/Delete → requester must be the group owner OR an admin. Use #custom Get Group Owner action.
If unauthorized → #Request Approval from an IT admin.
For Create:
#Create Okta Group (Custom) with the name and description.
#Create Group (Google) with the equivalent name (
{{group}}@company.com).#Create Usergroup (Slack) with the handle
@{{group}}.Set the requester as owner via custom Set Group Owner action.
For Add members:
#Lookup Users for each member to resolve their IDs.
For each: #Add to Group (Okta), #Add to Group (Google), #Add Usergroup Users (Slack).
For Remove members:
For Delete: confirm with the requester via #Trigger Form ("This will delete the group across all systems — confirm?"), then call custom delete actions for Okta + Google + Slack.
For role/manager-based sync (e.g. "add this week's new hires"): query the HR ingest via #Search Graph for matching users, then loop step 6.
#Send Direct Message to the requester with a summary of changes.
#Leave Internal Note capturing the action and downstream sync.
Identity Group Management
Playbooks
/
Identity Group Management
Identity Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, modify membership, or change ownership of an Okta/Google/Slack group (e.g. "create Okta group for brand campaign team", "remove Sarah from eng-leadership", "add this week's new hires to #all-eng").
Instructions
Parse the action type (create / add members / remove members / delete / change owner), target group name, downstream systems (Okta / Google / Slack / all), and member list.
Validate group name against naming convention (
^[a-z][a-z0-9-]+$, max 40 chars). If invalid:#Send Direct Message explaining the rule and ask for a corrected name.
#Lookup Users on the requester with
includeGroups.Check authorization:
Create → requester must be in the
group-creatorsOkta group or an IT admin.Modify/Delete → requester must be the group owner OR an admin. Use #custom Get Group Owner action.
If unauthorized → #Request Approval from an IT admin.
For Create:
#Create Okta Group (Custom) with the name and description.
#Create Group (Google) with the equivalent name (
{{group}}@company.com).#Create Usergroup (Slack) with the handle
@{{group}}.Set the requester as owner via custom Set Group Owner action.
For Add members:
#Lookup Users for each member to resolve their IDs.
For each: #Add to Group (Okta), #Add to Group (Google), #Add Usergroup Users (Slack).
For Remove members:
For Delete: confirm with the requester via #Trigger Form ("This will delete the group across all systems — confirm?"), then call custom delete actions for Okta + Google + Slack.
For role/manager-based sync (e.g. "add this week's new hires"): query the HR ingest via #Search Graph for matching users, then loop step 6.
#Send Direct Message to the requester with a summary of changes.
#Leave Internal Note capturing the action and downstream sync.
Identity Group Management
Playbooks
/
Identity Group Management
Identity Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, modify membership, or change ownership of an Okta/Google/Slack group (e.g. "create Okta group for brand campaign team", "remove Sarah from eng-leadership", "add this week's new hires to #all-eng").
Instructions
Parse the action type (create / add members / remove members / delete / change owner), target group name, downstream systems (Okta / Google / Slack / all), and member list.
Validate group name against naming convention (
^[a-z][a-z0-9-]+$, max 40 chars). If invalid:#Send Direct Message explaining the rule and ask for a corrected name.
#Lookup Users on the requester with
includeGroups.Check authorization:
Create → requester must be in the
group-creatorsOkta group or an IT admin.Modify/Delete → requester must be the group owner OR an admin. Use #custom Get Group Owner action.
If unauthorized → #Request Approval from an IT admin.
For Create:
#Create Okta Group (Custom) with the name and description.
#Create Group (Google) with the equivalent name (
{{group}}@company.com).#Create Usergroup (Slack) with the handle
@{{group}}.Set the requester as owner via custom Set Group Owner action.
For Add members:
#Lookup Users for each member to resolve their IDs.
For each: #Add to Group (Okta), #Add to Group (Google), #Add Usergroup Users (Slack).
For Remove members:
For Delete: confirm with the requester via #Trigger Form ("This will delete the group across all systems — confirm?"), then call custom delete actions for Okta + Google + Slack.
For role/manager-based sync (e.g. "add this week's new hires"): query the HR ingest via #Search Graph for matching users, then loop step 6.
#Send Direct Message to the requester with a summary of changes.
#Leave Internal Note capturing the action and downstream sync.
Contractor Access Expiration
Playbooks
/
Contractor Access Expiration
Contractor Access Expiration
Created by

Console Team
Published
IT
Okta
Slack
Workday
+1
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
Query the #custom Workday/HR ingest via #Search Graph for contractors with
endDatebetweentoday + 5 daysandtoday + 7 days.For each contractor, #Lookup Users on the engagement owner's email with
includeSlackId.#Send Direct Message to the engagement owner with a #Trigger Form containing options: "Extend"(collect new end-date), "Expire on schedule", "Expire immediately".
Use schedule_action to wake 5 days later to check the form response.
On wake, branch on the response:
Extend → #custom Workday Update Contractor End Date with the new date, then #Send Direct Message confirming.
Expire on schedule or no response → schedule_action wake on the contractor's
endDateto execute revocation.Expire immediately → execute revocation now.
Revocation sequence:
#Search Okta User by Email to resolve the contractor's Okta ID.
#Remove from Group (Okta) for every contractor-restricted group from the user's group list.
#Remove User from Org (GitHub) to remove outside-collab status.
#Custom Figma Revoke Member and Notion Revoke Guest actions.
For each Slack guest channel: #Remove User From Channel.
#Create Linear Issue in the IT-Audit project documenting the revocation.
#Send Channel Message to
#it-auditwith the contractor name, owner, expiry type, and revoked entitlements.
Contractor Access Expiration
Playbooks
/
Contractor Access Expiration
Contractor Access Expiration
Created by

Console Team
Published
IT
Okta
Slack
Workday
+1
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
Query the #custom Workday/HR ingest via #Search Graph for contractors with
endDatebetweentoday + 5 daysandtoday + 7 days.For each contractor, #Lookup Users on the engagement owner's email with
includeSlackId.#Send Direct Message to the engagement owner with a #Trigger Form containing options: "Extend"(collect new end-date), "Expire on schedule", "Expire immediately".
Use schedule_action to wake 5 days later to check the form response.
On wake, branch on the response:
Extend → #custom Workday Update Contractor End Date with the new date, then #Send Direct Message confirming.
Expire on schedule or no response → schedule_action wake on the contractor's
endDateto execute revocation.Expire immediately → execute revocation now.
Revocation sequence:
#Search Okta User by Email to resolve the contractor's Okta ID.
#Remove from Group (Okta) for every contractor-restricted group from the user's group list.
#Remove User from Org (GitHub) to remove outside-collab status.
#Custom Figma Revoke Member and Notion Revoke Guest actions.
For each Slack guest channel: #Remove User From Channel.
#Create Linear Issue in the IT-Audit project documenting the revocation.
#Send Channel Message to
#it-auditwith the contractor name, owner, expiry type, and revoked entitlements.
Contractor Access Expiration
Playbooks
/
Contractor Access Expiration
Contractor Access Expiration
Created by

Console Team
Published
IT
Okta
Slack
Workday
+1
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
Query the #custom Workday/HR ingest via #Search Graph for contractors with
endDatebetweentoday + 5 daysandtoday + 7 days.For each contractor, #Lookup Users on the engagement owner's email with
includeSlackId.#Send Direct Message to the engagement owner with a #Trigger Form containing options: "Extend"(collect new end-date), "Expire on schedule", "Expire immediately".
Use schedule_action to wake 5 days later to check the form response.
On wake, branch on the response:
Extend → #custom Workday Update Contractor End Date with the new date, then #Send Direct Message confirming.
Expire on schedule or no response → schedule_action wake on the contractor's
endDateto execute revocation.Expire immediately → execute revocation now.
Revocation sequence:
#Search Okta User by Email to resolve the contractor's Okta ID.
#Remove from Group (Okta) for every contractor-restricted group from the user's group list.
#Remove User from Org (GitHub) to remove outside-collab status.
#Custom Figma Revoke Member and Notion Revoke Guest actions.
For each Slack guest channel: #Remove User From Channel.
#Create Linear Issue in the IT-Audit project documenting the revocation.
#Send Channel Message to
#it-auditwith the contractor name, owner, expiry type, and revoked entitlements.
New Device Order
Playbooks
/
New Device Order
New Device Order
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+2
Conditions
User requests a new or replacement laptop, monitor, or peripheral.
Instructions
#Lookup Users on the requester with
includeManagerandincludeGroupsto get role, department, location.#Trigger Form to collect:
Device type (laptop / monitor / accessory)
Reason (new hire / refresh / replacement / additional)
Specific model preference
Shipping address (default to address on file)
Needed-by date
#List Devices (Kandji) to check existing assigned devices and age.
Validate against role's approved spec:
#Custom Zip Get Approved Spec action based on role.
If requester is asking for an above-spec model, capture the justification.
Determine approval tier:
<$2k → manager approval only.
$2k–$5k → manager + finance approval.
>$5k → manager + finance + VP approval.
#Request Approval chained per tier.
On approval, place the order:
#Custom Zip Create Order with line items.
#Custom CDW Place Order for actual procurement.
Or #custom Apple Business Order for Apple direct.
Capture the tracking number from the order response.
schedule_action wake daily until delivered to:
#Send Direct Message with the latest status if it changed.
On delivery confirmation:
#Kandji Assign ADE Device User to pre-assign the device.
#Send Direct Message with first-time setup instructions.
#Leave Internal Note capturing model, price, approvers, tracking.
#Resolve Request on delivery + setup confirmation.
New Device Order
Playbooks
/
New Device Order
New Device Order
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+2
Conditions
User requests a new or replacement laptop, monitor, or peripheral.
Instructions
#Lookup Users on the requester with
includeManagerandincludeGroupsto get role, department, location.#Trigger Form to collect:
Device type (laptop / monitor / accessory)
Reason (new hire / refresh / replacement / additional)
Specific model preference
Shipping address (default to address on file)
Needed-by date
#List Devices (Kandji) to check existing assigned devices and age.
Validate against role's approved spec:
#Custom Zip Get Approved Spec action based on role.
If requester is asking for an above-spec model, capture the justification.
Determine approval tier:
<$2k → manager approval only.
$2k–$5k → manager + finance approval.
>$5k → manager + finance + VP approval.
#Request Approval chained per tier.
On approval, place the order:
#Custom Zip Create Order with line items.
#Custom CDW Place Order for actual procurement.
Or #custom Apple Business Order for Apple direct.
Capture the tracking number from the order response.
schedule_action wake daily until delivered to:
#Send Direct Message with the latest status if it changed.
On delivery confirmation:
#Kandji Assign ADE Device User to pre-assign the device.
#Send Direct Message with first-time setup instructions.
#Leave Internal Note capturing model, price, approvers, tracking.
#Resolve Request on delivery + setup confirmation.
New Device Order
Playbooks
/
New Device Order
New Device Order
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+2
Conditions
User requests a new or replacement laptop, monitor, or peripheral.
Instructions
#Lookup Users on the requester with
includeManagerandincludeGroupsto get role, department, location.#Trigger Form to collect:
Device type (laptop / monitor / accessory)
Reason (new hire / refresh / replacement / additional)
Specific model preference
Shipping address (default to address on file)
Needed-by date
#List Devices (Kandji) to check existing assigned devices and age.
Validate against role's approved spec:
#Custom Zip Get Approved Spec action based on role.
If requester is asking for an above-spec model, capture the justification.
Determine approval tier:
<$2k → manager approval only.
$2k–$5k → manager + finance approval.
>$5k → manager + finance + VP approval.
#Request Approval chained per tier.
On approval, place the order:
#Custom Zip Create Order with line items.
#Custom CDW Place Order for actual procurement.
Or #custom Apple Business Order for Apple direct.
Capture the tracking number from the order response.
schedule_action wake daily until delivered to:
#Send Direct Message with the latest status if it changed.
On delivery confirmation:
#Kandji Assign ADE Device User to pre-assign the device.
#Send Direct Message with first-time setup instructions.
#Leave Internal Note capturing model, price, approvers, tracking.
#Resolve Request on delivery + setup confirmation.
Network Troubleshooting
Playbooks
/
Network Troubleshooting
Network Troubleshooting
Created by

Console Team
Published
IT
Okta
Kandji
Linear
+1
Conditions
Requester reports WiFi/VPN/connectivity issues ("VPN keeps dropping every 20 min", "can't reach internal DNS", "Berlin office connectivity slow").
Instructions
#Lookup Users on the requester with
includeManagerto get location.#List Devices (Kandji) to identify their device(s).
#Trigger Form to collect:
Symptom (drops / slow / can't connect / DNS / VPN)
Office or remote
When it started
Frequency
Check upstream first:
#List Meter Networks for the user's office.
#Get Meter ISP Connectivity to confirm WAN is healthy.
#Diagnose Meter Access Point for the AP they're connected to.
If WAN or AP issue → escalate to networking (skip to step 9).
Check user-side:
#Get Meter Client by MAC Address to see if the user's device is associated and healthy.
#Search Okta System Log Custom for VPN/SSO failures in the last hour.
#Get Device Details for Kandji-reported network config.
Attempt remediation:
VPN drops → custom Re-establish VPN Tunnel action.
DNS → #Create Kandji Custom Script to flush DNS cache and reset network interfaces.
Slow → run iperf script via Kandji and compare to baseline.
Ask via #Send Direct Message if it's resolved after each remediation.
If resolved → #Resolve Request.
If unresolved or upstream issue: #Create Linear Issue in the networking project with the diagnostic bundle.
#Send Channel Message to
#network-opsfor upstream issues.#Send Direct Message to the user with escalation and expected timeline.
#Leave Internal Note with full diagnostic trail.
Network Troubleshooting
Playbooks
/
Network Troubleshooting
Network Troubleshooting
Created by

Console Team
Published
IT
Okta
Kandji
Linear
+1
Conditions
Requester reports WiFi/VPN/connectivity issues ("VPN keeps dropping every 20 min", "can't reach internal DNS", "Berlin office connectivity slow").
Instructions
#Lookup Users on the requester with
includeManagerto get location.#List Devices (Kandji) to identify their device(s).
#Trigger Form to collect:
Symptom (drops / slow / can't connect / DNS / VPN)
Office or remote
When it started
Frequency
Check upstream first:
#List Meter Networks for the user's office.
#Get Meter ISP Connectivity to confirm WAN is healthy.
#Diagnose Meter Access Point for the AP they're connected to.
If WAN or AP issue → escalate to networking (skip to step 9).
Check user-side:
#Get Meter Client by MAC Address to see if the user's device is associated and healthy.
#Search Okta System Log Custom for VPN/SSO failures in the last hour.
#Get Device Details for Kandji-reported network config.
Attempt remediation:
VPN drops → custom Re-establish VPN Tunnel action.
DNS → #Create Kandji Custom Script to flush DNS cache and reset network interfaces.
Slow → run iperf script via Kandji and compare to baseline.
Ask via #Send Direct Message if it's resolved after each remediation.
If resolved → #Resolve Request.
If unresolved or upstream issue: #Create Linear Issue in the networking project with the diagnostic bundle.
#Send Channel Message to
#network-opsfor upstream issues.#Send Direct Message to the user with escalation and expected timeline.
#Leave Internal Note with full diagnostic trail.
Network Troubleshooting
Playbooks
/
Network Troubleshooting
Network Troubleshooting
Created by

Console Team
Published
IT
Okta
Kandji
Linear
+1
Conditions
Requester reports WiFi/VPN/connectivity issues ("VPN keeps dropping every 20 min", "can't reach internal DNS", "Berlin office connectivity slow").
Instructions
#Lookup Users on the requester with
includeManagerto get location.#List Devices (Kandji) to identify their device(s).
#Trigger Form to collect:
Symptom (drops / slow / can't connect / DNS / VPN)
Office or remote
When it started
Frequency
Check upstream first:
#List Meter Networks for the user's office.
#Get Meter ISP Connectivity to confirm WAN is healthy.
#Diagnose Meter Access Point for the AP they're connected to.
If WAN or AP issue → escalate to networking (skip to step 9).
Check user-side:
#Get Meter Client by MAC Address to see if the user's device is associated and healthy.
#Search Okta System Log Custom for VPN/SSO failures in the last hour.
#Get Device Details for Kandji-reported network config.
Attempt remediation:
VPN drops → custom Re-establish VPN Tunnel action.
DNS → #Create Kandji Custom Script to flush DNS cache and reset network interfaces.
Slow → run iperf script via Kandji and compare to baseline.
Ask via #Send Direct Message if it's resolved after each remediation.
If resolved → #Resolve Request.
If unresolved or upstream issue: #Create Linear Issue in the networking project with the diagnostic bundle.
#Send Channel Message to
#network-opsfor upstream issues.#Send Direct Message to the user with escalation and expected timeline.
#Leave Internal Note with full diagnostic trail.
App Registration & SSO Setup
Playbooks
/
App Registration & SSO Setup
App Registration & SSO Setup
Created by

Console Team
Published
IT
Okta
1Password
Linear
+2
Conditions
IT or admin requests onboarding a new SaaS app with SSO ("we want to onboard Linear company-wide", "set up SSO for the new Highspot tenant").
Instructions
#Trigger Form to collect:
App name and vendor URL
SSO protocol (SAML 2.0 / OIDC)
For SAML: ACS URL, entity ID, name ID format, certificate
For OIDC: redirect URI, scopes needed
SCIM endpoint + bearer token (if available)
Default user groups to provision (eng / product / design / all-company)
#Lookup Apps to confirm the app isn't already onboarded. If it exists, ask the requester whether to modify or reject.
#Request Approval from the security team for the new vendor (chain to Sec-18 if not already approved).
Create the Okta app:
For SAML → custom Okta Create SAML App with ACS URL, entity ID, attributes mapping.
For OIDC → custom Okta Create OIDC App with redirect URI and scopes.
#Create Okta Group (Custom) for default access: {{app-slug}}-users and {{app-slug}}-admins.
#Add to Group to assign the requester to {{app-slug}}-admins.
For each requested default group (eng/product/design/all-company): custom Okta Assign
Group to App to grant baseline access.
If SCIM endpoint provided: custom Okta Configure SCIM with the endpoint + token, then #Update 1Password App Username Template to set the username convention.
Generate test credentials via custom Okta Create Test User and Assign action.
#Send Direct Message to the requester with SSO sign-in URL, test creds, SCIM status, next steps.
#Create Linear Issue in the IT project for follow-up tasks: app catalog entry, access policy creation, KB doc.
#Leave Internal Note capturing the protocol, ACS URL, and groups configured.
App Registration & SSO Setup
Playbooks
/
App Registration & SSO Setup
App Registration & SSO Setup
Created by

Console Team
Published
IT
Okta
1Password
Linear
+2
Conditions
IT or admin requests onboarding a new SaaS app with SSO ("we want to onboard Linear company-wide", "set up SSO for the new Highspot tenant").
Instructions
#Trigger Form to collect:
App name and vendor URL
SSO protocol (SAML 2.0 / OIDC)
For SAML: ACS URL, entity ID, name ID format, certificate
For OIDC: redirect URI, scopes needed
SCIM endpoint + bearer token (if available)
Default user groups to provision (eng / product / design / all-company)
#Lookup Apps to confirm the app isn't already onboarded. If it exists, ask the requester whether to modify or reject.
#Request Approval from the security team for the new vendor (chain to Sec-18 if not already approved).
Create the Okta app:
For SAML → custom Okta Create SAML App with ACS URL, entity ID, attributes mapping.
For OIDC → custom Okta Create OIDC App with redirect URI and scopes.
#Create Okta Group (Custom) for default access: {{app-slug}}-users and {{app-slug}}-admins.
#Add to Group to assign the requester to {{app-slug}}-admins.
For each requested default group (eng/product/design/all-company): custom Okta Assign
Group to App to grant baseline access.
If SCIM endpoint provided: custom Okta Configure SCIM with the endpoint + token, then #Update 1Password App Username Template to set the username convention.
Generate test credentials via custom Okta Create Test User and Assign action.
#Send Direct Message to the requester with SSO sign-in URL, test creds, SCIM status, next steps.
#Create Linear Issue in the IT project for follow-up tasks: app catalog entry, access policy creation, KB doc.
#Leave Internal Note capturing the protocol, ACS URL, and groups configured.
App Registration & SSO Setup
Playbooks
/
App Registration & SSO Setup
App Registration & SSO Setup
Created by

Console Team
Published
IT
Okta
1Password
Linear
+2
Conditions
IT or admin requests onboarding a new SaaS app with SSO ("we want to onboard Linear company-wide", "set up SSO for the new Highspot tenant").
Instructions
#Trigger Form to collect:
App name and vendor URL
SSO protocol (SAML 2.0 / OIDC)
For SAML: ACS URL, entity ID, name ID format, certificate
For OIDC: redirect URI, scopes needed
SCIM endpoint + bearer token (if available)
Default user groups to provision (eng / product / design / all-company)
#Lookup Apps to confirm the app isn't already onboarded. If it exists, ask the requester whether to modify or reject.
#Request Approval from the security team for the new vendor (chain to Sec-18 if not already approved).
Create the Okta app:
For SAML → custom Okta Create SAML App with ACS URL, entity ID, attributes mapping.
For OIDC → custom Okta Create OIDC App with redirect URI and scopes.
#Create Okta Group (Custom) for default access: {{app-slug}}-users and {{app-slug}}-admins.
#Add to Group to assign the requester to {{app-slug}}-admins.
For each requested default group (eng/product/design/all-company): custom Okta Assign
Group to App to grant baseline access.
If SCIM endpoint provided: custom Okta Configure SCIM with the endpoint + token, then #Update 1Password App Username Template to set the username convention.
Generate test credentials via custom Okta Create Test User and Assign action.
#Send Direct Message to the requester with SSO sign-in URL, test creds, SCIM status, next steps.
#Create Linear Issue in the IT project for follow-up tasks: app catalog entry, access policy creation, KB doc.
#Leave Internal Note capturing the protocol, ACS URL, and groups configured.
AVD Assignment
Playbooks
/
AVD Assignment
AVD Assignment
Created by

Console Team
Published
IT
Azure DevOps
Entrata
+2
Conditions
Contractor in a restricted country or BYOD user needs an Azure Virtual Desktop session.
Instructions
#Lookup Users on the requester with includeManager and includeGroups.
#Search Graph in the custom HR/contractor ingest to find the engagement end-date.
#Trigger Form to collect:
Role-based image needed (eng tools / design tools / GTM tools)
Country of access
Engagement duration (auto-fill from HR ingest if available)
#Request Approval from the requester's engagement owner.
On approval, provision the AVD:
#Custom Azure AVD Create Host Pool Assignment with image template and user UPN.
#Custom Entra Assign User to AVD App scoped to this user only.
#Custom Entra Set Conditional Access restricting sign-in to the engagement country.
Time-box the access:
schedule_action wake on the engagement end-date to call #custom Azure AVD
Remove Assignment and Entra Revoke AVD App Access.
#Send Direct Message to the requester with AVD connection URL, sign-in credentials, expiry date, support path.
#Send Channel Message to #it-contractor-access logging the provision.
#Leave Internal Note capturing image, country, end-date.
AVD Assignment
Playbooks
/
AVD Assignment
AVD Assignment
Created by

Console Team
Published
IT
Azure DevOps
Entrata
+2
Conditions
Contractor in a restricted country or BYOD user needs an Azure Virtual Desktop session.
Instructions
#Lookup Users on the requester with includeManager and includeGroups.
#Search Graph in the custom HR/contractor ingest to find the engagement end-date.
#Trigger Form to collect:
Role-based image needed (eng tools / design tools / GTM tools)
Country of access
Engagement duration (auto-fill from HR ingest if available)
#Request Approval from the requester's engagement owner.
On approval, provision the AVD:
#Custom Azure AVD Create Host Pool Assignment with image template and user UPN.
#Custom Entra Assign User to AVD App scoped to this user only.
#Custom Entra Set Conditional Access restricting sign-in to the engagement country.
Time-box the access:
schedule_action wake on the engagement end-date to call #custom Azure AVD
Remove Assignment and Entra Revoke AVD App Access.
#Send Direct Message to the requester with AVD connection URL, sign-in credentials, expiry date, support path.
#Send Channel Message to #it-contractor-access logging the provision.
#Leave Internal Note capturing image, country, end-date.
AVD Assignment
Playbooks
/
AVD Assignment
AVD Assignment
Created by

Console Team
Published
IT
Azure DevOps
Entrata
+2
Conditions
Contractor in a restricted country or BYOD user needs an Azure Virtual Desktop session.
Instructions
#Lookup Users on the requester with includeManager and includeGroups.
#Search Graph in the custom HR/contractor ingest to find the engagement end-date.
#Trigger Form to collect:
Role-based image needed (eng tools / design tools / GTM tools)
Country of access
Engagement duration (auto-fill from HR ingest if available)
#Request Approval from the requester's engagement owner.
On approval, provision the AVD:
#Custom Azure AVD Create Host Pool Assignment with image template and user UPN.
#Custom Entra Assign User to AVD App scoped to this user only.
#Custom Entra Set Conditional Access restricting sign-in to the engagement country.
Time-box the access:
schedule_action wake on the engagement end-date to call #custom Azure AVD
Remove Assignment and Entra Revoke AVD App Access.
#Send Direct Message to the requester with AVD connection URL, sign-in credentials, expiry date, support path.
#Send Channel Message to #it-contractor-access logging the provision.
#Leave Internal Note capturing image, country, end-date.
Slack Channel & Group Management
Playbooks
/
Slack Channel & Group Management
Slack Channel & Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, archive, modify visibility, or manage membership of a Slack channel or usergroup.
Instructions
Parse: action (create / archive / unarchive / change visibility / add members / remove members / rename / set manager), target channel name, member list, visibility setting.
Validate name against policy:
Channels must match
^(launch|project|incident|team|all|fun|help|wg)-[a-z0-9-]+$.Length ≤ 80 chars.
If invalid → #Send Direct Message explaining the rule.
#Lookup Users on the requester.
Authorization check:
Create → any employee.
Archive / rename / change visibility → requester must be a channel manager (#Get Channel Managers) or IT admin.
Private channel operations → require #Request Approval from a channel manager.
#Search Channels to check if the channel already exists.
Execute the action:
Create → #Create Channel with parsed visibility. Then #Set Channel Manager to the requester. #Set Custom Retention to policy default.
Add members → if a list, #Lookup Users to resolve, then #Add Users To Channel. If Okta group sync requested, #Get Group Members then #Add Users To Channel.
Remove members → #Remove User From Channel for each.
Archive → #Archive Channel.
Unarchive → #Unarchive Channel.
Change visibility → #Change Channel Visibility.
Rename → #Rename Channel.
Set manager → #Set Channel Manager.
If the request mentions pinning a doc: #Slack Pin Message action with the doc URL.
#Send Direct Message confirming the change with the channel link.
#Leave Internal Note capturing action, channel, members.
Slack Channel & Group Management
Playbooks
/
Slack Channel & Group Management
Slack Channel & Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, archive, modify visibility, or manage membership of a Slack channel or usergroup.
Instructions
Parse: action (create / archive / unarchive / change visibility / add members / remove members / rename / set manager), target channel name, member list, visibility setting.
Validate name against policy:
Channels must match
^(launch|project|incident|team|all|fun|help|wg)-[a-z0-9-]+$.Length ≤ 80 chars.
If invalid → #Send Direct Message explaining the rule.
#Lookup Users on the requester.
Authorization check:
Create → any employee.
Archive / rename / change visibility → requester must be a channel manager (#Get Channel Managers) or IT admin.
Private channel operations → require #Request Approval from a channel manager.
#Search Channels to check if the channel already exists.
Execute the action:
Create → #Create Channel with parsed visibility. Then #Set Channel Manager to the requester. #Set Custom Retention to policy default.
Add members → if a list, #Lookup Users to resolve, then #Add Users To Channel. If Okta group sync requested, #Get Group Members then #Add Users To Channel.
Remove members → #Remove User From Channel for each.
Archive → #Archive Channel.
Unarchive → #Unarchive Channel.
Change visibility → #Change Channel Visibility.
Rename → #Rename Channel.
Set manager → #Set Channel Manager.
If the request mentions pinning a doc: #Slack Pin Message action with the doc URL.
#Send Direct Message confirming the change with the channel link.
#Leave Internal Note capturing action, channel, members.
Slack Channel & Group Management
Playbooks
/
Slack Channel & Group Management
Slack Channel & Group Management
Created by

Console Team
Published
IT
Okta
Slack
Conditions
Requester asks to create, archive, modify visibility, or manage membership of a Slack channel or usergroup.
Instructions
Parse: action (create / archive / unarchive / change visibility / add members / remove members / rename / set manager), target channel name, member list, visibility setting.
Validate name against policy:
Channels must match
^(launch|project|incident|team|all|fun|help|wg)-[a-z0-9-]+$.Length ≤ 80 chars.
If invalid → #Send Direct Message explaining the rule.
#Lookup Users on the requester.
Authorization check:
Create → any employee.
Archive / rename / change visibility → requester must be a channel manager (#Get Channel Managers) or IT admin.
Private channel operations → require #Request Approval from a channel manager.
#Search Channels to check if the channel already exists.
Execute the action:
Create → #Create Channel with parsed visibility. Then #Set Channel Manager to the requester. #Set Custom Retention to policy default.
Add members → if a list, #Lookup Users to resolve, then #Add Users To Channel. If Okta group sync requested, #Get Group Members then #Add Users To Channel.
Remove members → #Remove User From Channel for each.
Archive → #Archive Channel.
Unarchive → #Unarchive Channel.
Change visibility → #Change Channel Visibility.
Rename → #Rename Channel.
Set manager → #Set Channel Manager.
If the request mentions pinning a doc: #Slack Pin Message action with the doc URL.
#Send Direct Message confirming the change with the channel link.
#Leave Internal Note capturing action, channel, members.
License Reclamation
Playbooks
/
License Reclamation
License Reclamation
Created by

Console Team
Published
IT
Okta
Lattice
Linear
+2
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
Query the custom Productiv ingest via #Search Graph for seats with no logins in 60+ days across Outreach, Gong, Lattice, Figma.
For each stale seat:
#Lookup Users on the seat owner with
includeManagerandincludeSlackId.Skip if user was hired in the last 30 days (grace period) or has an active PTO/leave entry in HR ingest.
#Send Direct Message to the user (cc manager in a separate DM): "You haven't logged into {{app}} in 60 days. Still need it? Confirm in 7 days or it gets reclaimed." with a #Trigger Form containing "Keep" / "Reclaim".
schedule_action wake 7 days later to check the form response.
On wake, branch on response:
Keep → log to internal note, #Send Direct Message confirming, no further action.
Reclaim or no response → execute reclamation:
For Okta-managed app → #Remove from Group for the entitlement group.
For app with native API → call the custom {{App}} Remove Seat action.
#Send Direct Message to the user confirming reclamation with re-request instructions if needed.
#Send Channel Message to
#it-licenseswith: user, app, seat reclaimed, savings estimate.#Create Linear Issue weekly summarizing total seats reclaimed and dollar savings.
License Reclamation
Playbooks
/
License Reclamation
License Reclamation
Created by

Console Team
Published
IT
Okta
Lattice
Linear
+2
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
Query the custom Productiv ingest via #Search Graph for seats with no logins in 60+ days across Outreach, Gong, Lattice, Figma.
For each stale seat:
#Lookup Users on the seat owner with
includeManagerandincludeSlackId.Skip if user was hired in the last 30 days (grace period) or has an active PTO/leave entry in HR ingest.
#Send Direct Message to the user (cc manager in a separate DM): "You haven't logged into {{app}} in 60 days. Still need it? Confirm in 7 days or it gets reclaimed." with a #Trigger Form containing "Keep" / "Reclaim".
schedule_action wake 7 days later to check the form response.
On wake, branch on response:
Keep → log to internal note, #Send Direct Message confirming, no further action.
Reclaim or no response → execute reclamation:
For Okta-managed app → #Remove from Group for the entitlement group.
For app with native API → call the custom {{App}} Remove Seat action.
#Send Direct Message to the user confirming reclamation with re-request instructions if needed.
#Send Channel Message to
#it-licenseswith: user, app, seat reclaimed, savings estimate.#Create Linear Issue weekly summarizing total seats reclaimed and dollar savings.
License Reclamation
Playbooks
/
License Reclamation
License Reclamation
Created by

Console Team
Published
IT
Okta
Lattice
Linear
+2
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
Query the custom Productiv ingest via #Search Graph for seats with no logins in 60+ days across Outreach, Gong, Lattice, Figma.
For each stale seat:
#Lookup Users on the seat owner with
includeManagerandincludeSlackId.Skip if user was hired in the last 30 days (grace period) or has an active PTO/leave entry in HR ingest.
#Send Direct Message to the user (cc manager in a separate DM): "You haven't logged into {{app}} in 60 days. Still need it? Confirm in 7 days or it gets reclaimed." with a #Trigger Form containing "Keep" / "Reclaim".
schedule_action wake 7 days later to check the form response.
On wake, branch on response:
Keep → log to internal note, #Send Direct Message confirming, no further action.
Reclaim or no response → execute reclamation:
For Okta-managed app → #Remove from Group for the entitlement group.
For app with native API → call the custom {{App}} Remove Seat action.
#Send Direct Message to the user confirming reclamation with re-request instructions if needed.
#Send Channel Message to
#it-licenseswith: user, app, seat reclaimed, savings estimate.#Create Linear Issue weekly summarizing total seats reclaimed and dollar savings.
Spend Monitoring Detection
Playbooks
/
Spend Monitoring Detection
Spend Monitoring Detection
Created by

Console Team
Published
Finance
Ramp
NetSuite
Conditions
Detection — scheduled scan every day at 6:00 AM America/Chicago
Instructions
Pull spend:
#Custom Ramp List Transactions for last 30 days.
#Custom NetSuite Get Spend by Cost Center.
Compute baselines per employee / cost center / vendor / category.
Detect anomalies:
Spike: today >3x trailing AND >$500.
New vendor: first transaction AND >$10k.
Unusual category: cost center with no history AND >$1k.
Late-night: card swipes midnight-5am local.
High-velocity: >10 transactions on same card in 1h.
Round-number suspicious: round numbers >$5k.
For each flagged transaction:
#Custom Get Transaction Owner (cardholder).
#Lookup Users with
includeManager.
Routing:
High confidence (multiple signals): #Send Channel Message to
#finance-anomaly+ DM to cost-center owner + cardholder + finance lead.Medium: DM cost-center owner with #Trigger Form for clarification.
Low: log for weekly batch.
Potential fraud (late-night + high-velocity + round + new vendor):
#Send Channel Message to
#finance-fraud-log.DM cardholder.
schedule_action wake at 24h for responses.
Weekly summary to
#financewith counts + resolution rate.#Leave Internal Note per anomaly.
Spend Monitoring Detection
Playbooks
/
Spend Monitoring Detection
Spend Monitoring Detection
Created by

Console Team
Published
Finance
Ramp
NetSuite
Conditions
Detection — scheduled scan every day at 6:00 AM America/Chicago
Instructions
Pull spend:
#Custom Ramp List Transactions for last 30 days.
#Custom NetSuite Get Spend by Cost Center.
Compute baselines per employee / cost center / vendor / category.
Detect anomalies:
Spike: today >3x trailing AND >$500.
New vendor: first transaction AND >$10k.
Unusual category: cost center with no history AND >$1k.
Late-night: card swipes midnight-5am local.
High-velocity: >10 transactions on same card in 1h.
Round-number suspicious: round numbers >$5k.
For each flagged transaction:
#Custom Get Transaction Owner (cardholder).
#Lookup Users with
includeManager.
Routing:
High confidence (multiple signals): #Send Channel Message to
#finance-anomaly+ DM to cost-center owner + cardholder + finance lead.Medium: DM cost-center owner with #Trigger Form for clarification.
Low: log for weekly batch.
Potential fraud (late-night + high-velocity + round + new vendor):
#Send Channel Message to
#finance-fraud-log.DM cardholder.
schedule_action wake at 24h for responses.
Weekly summary to
#financewith counts + resolution rate.#Leave Internal Note per anomaly.
Spend Monitoring Detection
Playbooks
/
Spend Monitoring Detection
Spend Monitoring Detection
Created by

Console Team
Published
Finance
Ramp
NetSuite
Conditions
Detection — scheduled scan every day at 6:00 AM America/Chicago
Instructions
Pull spend:
#Custom Ramp List Transactions for last 30 days.
#Custom NetSuite Get Spend by Cost Center.
Compute baselines per employee / cost center / vendor / category.
Detect anomalies:
Spike: today >3x trailing AND >$500.
New vendor: first transaction AND >$10k.
Unusual category: cost center with no history AND >$1k.
Late-night: card swipes midnight-5am local.
High-velocity: >10 transactions on same card in 1h.
Round-number suspicious: round numbers >$5k.
For each flagged transaction:
#Custom Get Transaction Owner (cardholder).
#Lookup Users with
includeManager.
Routing:
High confidence (multiple signals): #Send Channel Message to
#finance-anomaly+ DM to cost-center owner + cardholder + finance lead.Medium: DM cost-center owner with #Trigger Form for clarification.
Low: log for weekly batch.
Potential fraud (late-night + high-velocity + round + new vendor):
#Send Channel Message to
#finance-fraud-log.DM cardholder.
schedule_action wake at 24h for responses.
Weekly summary to
#financewith counts + resolution rate.#Leave Internal Note per anomaly.
Proactive Device Health
Playbooks
/
Proactive Device Health
Proactive Device Health
Created by

Console Team
Published
IT
Kandji
Linear
Conditions
Detection — scheduled scan every 6 hours Conditions: Device matches: crash count ≥3 in 7 days, OR disk usage ≥90%, OR OS version more than 2 releases behind.
Instructions
#List Devices (Kandji) with all enrolled devices.
For each device, #Get Device Details and #Get Device Parameters to pull telemetry.
Filter to devices matching any trigger condition.
For each matching device:
#Lookup Users on
device.assignedUserEmailto get the owner.Skip if the user is on PTO/leave (check HR ingest) or if the same device was already pinged in the last 7 days.
#Send Direct Message to the user: "Saw your laptop's been struggling — looks like {{issue summary}}. Want me to run the fix?" with #Trigger Form containing "Run fix" / "Schedule for later" / "Not now".
schedule_action wake at 24 hours to check the form response.
On wake, branch on response:
Run fix → execute remediation:
Disk full → #Create Kandji Custom Script for cleanup (clear caches, purge old downloads).
OS outdated → #Create Kandji Custom Script to trigger software update.
Frequent crashes → #Kandji Blank Push (Force Check-In) then #Create Kandji Custom Script to reset problem services.
Schedule for later → re-schedule wake for the chosen time.
Not now or no response → proceed to step 8.
schedule_action wake at 48 hours after the fix to verify resolution via re-checking telemetry.
If still failing or user declined: #Create Linear Issue in the IT project assigned to a human technician.
#Send Direct Message to the user confirming the outcome.
#Leave Internal Note capturing the diagnosis and action.
Proactive Device Health
Playbooks
/
Proactive Device Health
Proactive Device Health
Created by

Console Team
Published
IT
Kandji
Linear
Conditions
Detection — scheduled scan every 6 hours Conditions: Device matches: crash count ≥3 in 7 days, OR disk usage ≥90%, OR OS version more than 2 releases behind.
Instructions
#List Devices (Kandji) with all enrolled devices.
For each device, #Get Device Details and #Get Device Parameters to pull telemetry.
Filter to devices matching any trigger condition.
For each matching device:
#Lookup Users on
device.assignedUserEmailto get the owner.Skip if the user is on PTO/leave (check HR ingest) or if the same device was already pinged in the last 7 days.
#Send Direct Message to the user: "Saw your laptop's been struggling — looks like {{issue summary}}. Want me to run the fix?" with #Trigger Form containing "Run fix" / "Schedule for later" / "Not now".
schedule_action wake at 24 hours to check the form response.
On wake, branch on response:
Run fix → execute remediation:
Disk full → #Create Kandji Custom Script for cleanup (clear caches, purge old downloads).
OS outdated → #Create Kandji Custom Script to trigger software update.
Frequent crashes → #Kandji Blank Push (Force Check-In) then #Create Kandji Custom Script to reset problem services.
Schedule for later → re-schedule wake for the chosen time.
Not now or no response → proceed to step 8.
schedule_action wake at 48 hours after the fix to verify resolution via re-checking telemetry.
If still failing or user declined: #Create Linear Issue in the IT project assigned to a human technician.
#Send Direct Message to the user confirming the outcome.
#Leave Internal Note capturing the diagnosis and action.
Proactive Device Health
Playbooks
/
Proactive Device Health
Proactive Device Health
Created by

Console Team
Published
IT
Kandji
Linear
Conditions
Detection — scheduled scan every 6 hours Conditions: Device matches: crash count ≥3 in 7 days, OR disk usage ≥90%, OR OS version more than 2 releases behind.
Instructions
#List Devices (Kandji) with all enrolled devices.
For each device, #Get Device Details and #Get Device Parameters to pull telemetry.
Filter to devices matching any trigger condition.
For each matching device:
#Lookup Users on
device.assignedUserEmailto get the owner.Skip if the user is on PTO/leave (check HR ingest) or if the same device was already pinged in the last 7 days.
#Send Direct Message to the user: "Saw your laptop's been struggling — looks like {{issue summary}}. Want me to run the fix?" with #Trigger Form containing "Run fix" / "Schedule for later" / "Not now".
schedule_action wake at 24 hours to check the form response.
On wake, branch on response:
Run fix → execute remediation:
Disk full → #Create Kandji Custom Script for cleanup (clear caches, purge old downloads).
OS outdated → #Create Kandji Custom Script to trigger software update.
Frequent crashes → #Kandji Blank Push (Force Check-In) then #Create Kandji Custom Script to reset problem services.
Schedule for later → re-schedule wake for the chosen time.
Not now or no response → proceed to step 8.
schedule_action wake at 48 hours after the fix to verify resolution via re-checking telemetry.
If still failing or user declined: #Create Linear Issue in the IT project assigned to a human technician.
#Send Direct Message to the user confirming the outcome.
#Leave Internal Note capturing the diagnosis and action.
Hardware Troubleshooting
Playbooks
/
Hardware Troubleshooting
Hardware Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
User reports a hardware issue (external monitor not detecting, Bluetooth keyboard won't pair, Zoom is choppy, audio drops).
Instructions
#Lookup Users on the requester to identify the user.
#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Symptom (peripheral / display / audio / network / performance)
When it started
What they've already tried
#Get Device Details (Kandji) and #Get Device Parameters to pull current state.
#Kandji Get Device Library Items Status to confirm required drivers/profiles are installed.
#Search Knowledge Base for the symptom + device model for any known internal fixes.
If no KB hit: #Web Research vendor docs (apple.com, Microsoft Learn, Dell, Logitech) for the specific symptom.
Walk the user through fixes step-by-step via #Send Direct Message:
For peripherals → reset / re-pair / reinstall driver
For display → NVRAM reset, check cable, try alternate port
For audio/video → reset Core Audio / Windows audio service via Kandji script
For performance → free up RAM, check Activity Monitor / Task Manager
After each step, ask "did that fix it?" via #Send Direct Message.
If fixed → #Resolve Request.
If hardware-failure signature detected → kick off IT-15 RMA & Repair flow.
If still unresolved after exhausting steps → #Escalate Request to a human IT technician.
#Leave Internal Note capturing the diagnosis trail and resolution path.
Hardware Troubleshooting
Playbooks
/
Hardware Troubleshooting
Hardware Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
User reports a hardware issue (external monitor not detecting, Bluetooth keyboard won't pair, Zoom is choppy, audio drops).
Instructions
#Lookup Users on the requester to identify the user.
#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Symptom (peripheral / display / audio / network / performance)
When it started
What they've already tried
#Get Device Details (Kandji) and #Get Device Parameters to pull current state.
#Kandji Get Device Library Items Status to confirm required drivers/profiles are installed.
#Search Knowledge Base for the symptom + device model for any known internal fixes.
If no KB hit: #Web Research vendor docs (apple.com, Microsoft Learn, Dell, Logitech) for the specific symptom.
Walk the user through fixes step-by-step via #Send Direct Message:
For peripherals → reset / re-pair / reinstall driver
For display → NVRAM reset, check cable, try alternate port
For audio/video → reset Core Audio / Windows audio service via Kandji script
For performance → free up RAM, check Activity Monitor / Task Manager
After each step, ask "did that fix it?" via #Send Direct Message.
If fixed → #Resolve Request.
If hardware-failure signature detected → kick off IT-15 RMA & Repair flow.
If still unresolved after exhausting steps → #Escalate Request to a human IT technician.
#Leave Internal Note capturing the diagnosis trail and resolution path.
Hardware Troubleshooting
Playbooks
/
Hardware Troubleshooting
Hardware Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
User reports a hardware issue (external monitor not detecting, Bluetooth keyboard won't pair, Zoom is choppy, audio drops).
Instructions
#Lookup Users on the requester to identify the user.
#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Symptom (peripheral / display / audio / network / performance)
When it started
What they've already tried
#Get Device Details (Kandji) and #Get Device Parameters to pull current state.
#Kandji Get Device Library Items Status to confirm required drivers/profiles are installed.
#Search Knowledge Base for the symptom + device model for any known internal fixes.
If no KB hit: #Web Research vendor docs (apple.com, Microsoft Learn, Dell, Logitech) for the specific symptom.
Walk the user through fixes step-by-step via #Send Direct Message:
For peripherals → reset / re-pair / reinstall driver
For display → NVRAM reset, check cable, try alternate port
For audio/video → reset Core Audio / Windows audio service via Kandji script
For performance → free up RAM, check Activity Monitor / Task Manager
After each step, ask "did that fix it?" via #Send Direct Message.
If fixed → #Resolve Request.
If hardware-failure signature detected → kick off IT-15 RMA & Repair flow.
If still unresolved after exhausting steps → #Escalate Request to a human IT technician.
#Leave Internal Note capturing the diagnosis trail and resolution path.
Lost Device → Remote Lock
Playbooks
/
Lost Device → Remote Lock
Lost Device → Remote Lock
Created by

Console Team
Published
IT
Okta
Kandji
Linear
Conditions
User reports a lost or stolen device ("left MacBook at airport", "phone with corporate apps stolen").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Which device
Where it was last seen
When
Whether it might be recoverable or is confirmed lost/stolen
Whether they want a replacement
#Get Device Details to confirm device state.
Execute immediate containment in parallel:
#Enable Lost Mode (Kandji) with a custom message and contact phone.
#Play Lost Mode Sound (Kandji) to help recovery attempts.
#Device Lock (Kandji) with a 6-digit PIN.
#Revoke All User Sessions (Okta) to invalidate any active sessions.
If the user indicated the device is confirmed stolen:
#Custom Kandji Remote Wipe action with selective wipe.
#Reset User Factors (Custom) to invalidate any device-bound factors.
#Create Linear Issue in the security project with severity High, including device serial, last-seen location, user, timestamp.
#Send Channel Message to
#securitywith the incident summary and Linear link.#Send Channel Message to
#it-alertswith the device + user.If replacement requested → trigger IT-14 New Device Order by creating a follow-up request.
#Send Direct Message to the requester with:
Confirmation of containment actions taken
Replacement order status (if applicable)
Police report instructions (if stolen)
Insurance claim instructions
schedule_action wake at 7 days to check if the device was recovered.
#Leave Internal Note capturing all actions and timestamps.
Lost Device → Remote Lock
Playbooks
/
Lost Device → Remote Lock
Lost Device → Remote Lock
Created by

Console Team
Published
IT
Okta
Kandji
Linear
Conditions
User reports a lost or stolen device ("left MacBook at airport", "phone with corporate apps stolen").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Which device
Where it was last seen
When
Whether it might be recoverable or is confirmed lost/stolen
Whether they want a replacement
#Get Device Details to confirm device state.
Execute immediate containment in parallel:
#Enable Lost Mode (Kandji) with a custom message and contact phone.
#Play Lost Mode Sound (Kandji) to help recovery attempts.
#Device Lock (Kandji) with a 6-digit PIN.
#Revoke All User Sessions (Okta) to invalidate any active sessions.
If the user indicated the device is confirmed stolen:
#Custom Kandji Remote Wipe action with selective wipe.
#Reset User Factors (Custom) to invalidate any device-bound factors.
#Create Linear Issue in the security project with severity High, including device serial, last-seen location, user, timestamp.
#Send Channel Message to
#securitywith the incident summary and Linear link.#Send Channel Message to
#it-alertswith the device + user.If replacement requested → trigger IT-14 New Device Order by creating a follow-up request.
#Send Direct Message to the requester with:
Confirmation of containment actions taken
Replacement order status (if applicable)
Police report instructions (if stolen)
Insurance claim instructions
schedule_action wake at 7 days to check if the device was recovered.
#Leave Internal Note capturing all actions and timestamps.
Lost Device → Remote Lock
Playbooks
/
Lost Device → Remote Lock
Lost Device → Remote Lock
Created by

Console Team
Published
IT
Okta
Kandji
Linear
Conditions
User reports a lost or stolen device ("left MacBook at airport", "phone with corporate apps stolen").
Instructions
#Lookup Users on the requester with
includeManager.#List Devices (Kandji) filtered by
assignedUserEmailto find their device(s).#Trigger Form to collect:
Which device
Where it was last seen
When
Whether it might be recoverable or is confirmed lost/stolen
Whether they want a replacement
#Get Device Details to confirm device state.
Execute immediate containment in parallel:
#Enable Lost Mode (Kandji) with a custom message and contact phone.
#Play Lost Mode Sound (Kandji) to help recovery attempts.
#Device Lock (Kandji) with a 6-digit PIN.
#Revoke All User Sessions (Okta) to invalidate any active sessions.
If the user indicated the device is confirmed stolen:
#Custom Kandji Remote Wipe action with selective wipe.
#Reset User Factors (Custom) to invalidate any device-bound factors.
#Create Linear Issue in the security project with severity High, including device serial, last-seen location, user, timestamp.
#Send Channel Message to
#securitywith the incident summary and Linear link.#Send Channel Message to
#it-alertswith the device + user.If replacement requested → trigger IT-14 New Device Order by creating a follow-up request.
#Send Direct Message to the requester with:
Confirmation of containment actions taken
Replacement order status (if applicable)
Police report instructions (if stolen)
Insurance claim instructions
schedule_action wake at 7 days to check if the device was recovered.
#Leave Internal Note capturing all actions and timestamps.
RMA & Repair
Playbooks
/
RMA & Repair
RMA & Repair
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+3
Conditions
User reports a device needing repair ("laptop won't power on", "screen cracked", "keyboard sticking", "battery swelling").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) filtered by
assignedUserEmail.#Trigger Form to collect:
Which device
Symptom description
Severity (can't work at all / partial use / cosmetic)
Whether they need a loaner immediately
#Get Device Details to confirm device, serial number, purchase date, warranty status.
Determine RMA path based on vendor:
Apple → #custom Apple Business RMA Create with serial and symptom.
Dell/Lenovo → #custom Dell ProSupport RMA or Lenovo Warranty Service.
Capture the RMA case number and shipping label.
If user needs a loaner (severity = can't work):
#Custom BlueTally Reserve Loaner with matching model.
#Custom ComputerCare Ship Loaner with overnight shipping.
Capture loaner tracking number.
#Send Direct Message to the user with RMA case, shipping label, loaner tracking, send-in instructions, expected turnaround.
schedule_action daily wake to:
#Send Direct Message if status changed.
On repair completion + return:
#Get Device Details to confirm repaired device is back online in Kandji.
#Custom ComputerCare Return Loaner with return shipping label.
#Send Direct Message with loaner return instructions.
#Leave Internal Note capturing RMA case, loaner ID, dates.
#Resolve Request after loaner return.
RMA & Repair
Playbooks
/
RMA & Repair
RMA & Repair
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+3
Conditions
User reports a device needing repair ("laptop won't power on", "screen cracked", "keyboard sticking", "battery swelling").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) filtered by
assignedUserEmail.#Trigger Form to collect:
Which device
Symptom description
Severity (can't work at all / partial use / cosmetic)
Whether they need a loaner immediately
#Get Device Details to confirm device, serial number, purchase date, warranty status.
Determine RMA path based on vendor:
Apple → #custom Apple Business RMA Create with serial and symptom.
Dell/Lenovo → #custom Dell ProSupport RMA or Lenovo Warranty Service.
Capture the RMA case number and shipping label.
If user needs a loaner (severity = can't work):
#Custom BlueTally Reserve Loaner with matching model.
#Custom ComputerCare Ship Loaner with overnight shipping.
Capture loaner tracking number.
#Send Direct Message to the user with RMA case, shipping label, loaner tracking, send-in instructions, expected turnaround.
schedule_action daily wake to:
#Send Direct Message if status changed.
On repair completion + return:
#Get Device Details to confirm repaired device is back online in Kandji.
#Custom ComputerCare Return Loaner with return shipping label.
#Send Direct Message with loaner return instructions.
#Leave Internal Note capturing RMA case, loaner ID, dates.
#Resolve Request after loaner return.
RMA & Repair
Playbooks
/
RMA & Repair
RMA & Repair
Created by

Console Team
Published
IT
Kandji
Apple Business Manager
+3
Conditions
User reports a device needing repair ("laptop won't power on", "screen cracked", "keyboard sticking", "battery swelling").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) filtered by
assignedUserEmail.#Trigger Form to collect:
Which device
Symptom description
Severity (can't work at all / partial use / cosmetic)
Whether they need a loaner immediately
#Get Device Details to confirm device, serial number, purchase date, warranty status.
Determine RMA path based on vendor:
Apple → #custom Apple Business RMA Create with serial and symptom.
Dell/Lenovo → #custom Dell ProSupport RMA or Lenovo Warranty Service.
Capture the RMA case number and shipping label.
If user needs a loaner (severity = can't work):
#Custom BlueTally Reserve Loaner with matching model.
#Custom ComputerCare Ship Loaner with overnight shipping.
Capture loaner tracking number.
#Send Direct Message to the user with RMA case, shipping label, loaner tracking, send-in instructions, expected turnaround.
schedule_action daily wake to:
#Send Direct Message if status changed.
On repair completion + return:
#Get Device Details to confirm repaired device is back online in Kandji.
#Custom ComputerCare Return Loaner with return shipping label.
#Send Direct Message with loaner return instructions.
#Leave Internal Note capturing RMA case, loaner ID, dates.
#Resolve Request after loaner return.
Asset / Inventory Sync
Playbooks
/
Asset / Inventory Sync
Asset / Inventory Sync
Created by

Console Team
Published
IT
Kandji
Jira
Linear
+2
Conditions
Scheduled — daily incremental diff at 6:00 AM, full reconciliation quarterly on the 1st at 6:00 AM
Instructions
Pull all data sources in parallel:
#List Devices (Kandji) for enrolled devices.
#Custom Intune List Devices for Windows enrolled devices.
#Custom Jira Assets Query for the asset register.
#Search Graph for the HR roster from the HR ingest.
Build a unified view by serial number and assigned user.
Compute mismatches:
Lost-not-recovered: marked lost in any system but still active elsewhere.
Retired-but-active: marked retired in asset register but checking in to Kandji/Intune.
Employee-without-device: active employee in HR but no device assigned.
Device-without-owner: active device but unassigned or owner is offboarded.
Owner-mismatch: different owner in Kandji vs Jira Assets.
For each mismatch:
Determine the asset owner (IT team member responsible).
#Send Direct Message to the asset owner with the mismatch, proposed fix, and a
#Trigger Form to approve / modify / dismiss.
schedule_action wake at 7 days for each mismatch to check resolution.
On wake: if mismatch still exists, #Create Linear Issue for IT to resolve.
After full daily reconciliation:
#Send Channel Message to #it-asset-ops with totals and trend.
Quarterly run also produces a Linear summary issue with trend data via #Run Query.
Asset / Inventory Sync
Playbooks
/
Asset / Inventory Sync
Asset / Inventory Sync
Created by

Console Team
Published
IT
Kandji
Jira
Linear
+2
Conditions
Scheduled — daily incremental diff at 6:00 AM, full reconciliation quarterly on the 1st at 6:00 AM
Instructions
Pull all data sources in parallel:
#List Devices (Kandji) for enrolled devices.
#Custom Intune List Devices for Windows enrolled devices.
#Custom Jira Assets Query for the asset register.
#Search Graph for the HR roster from the HR ingest.
Build a unified view by serial number and assigned user.
Compute mismatches:
Lost-not-recovered: marked lost in any system but still active elsewhere.
Retired-but-active: marked retired in asset register but checking in to Kandji/Intune.
Employee-without-device: active employee in HR but no device assigned.
Device-without-owner: active device but unassigned or owner is offboarded.
Owner-mismatch: different owner in Kandji vs Jira Assets.
For each mismatch:
Determine the asset owner (IT team member responsible).
#Send Direct Message to the asset owner with the mismatch, proposed fix, and a
#Trigger Form to approve / modify / dismiss.
schedule_action wake at 7 days for each mismatch to check resolution.
On wake: if mismatch still exists, #Create Linear Issue for IT to resolve.
After full daily reconciliation:
#Send Channel Message to #it-asset-ops with totals and trend.
Quarterly run also produces a Linear summary issue with trend data via #Run Query.
Asset / Inventory Sync
Playbooks
/
Asset / Inventory Sync
Asset / Inventory Sync
Created by

Console Team
Published
IT
Kandji
Jira
Linear
+2
Conditions
Scheduled — daily incremental diff at 6:00 AM, full reconciliation quarterly on the 1st at 6:00 AM
Instructions
Pull all data sources in parallel:
#List Devices (Kandji) for enrolled devices.
#Custom Intune List Devices for Windows enrolled devices.
#Custom Jira Assets Query for the asset register.
#Search Graph for the HR roster from the HR ingest.
Build a unified view by serial number and assigned user.
Compute mismatches:
Lost-not-recovered: marked lost in any system but still active elsewhere.
Retired-but-active: marked retired in asset register but checking in to Kandji/Intune.
Employee-without-device: active employee in HR but no device assigned.
Device-without-owner: active device but unassigned or owner is offboarded.
Owner-mismatch: different owner in Kandji vs Jira Assets.
For each mismatch:
Determine the asset owner (IT team member responsible).
#Send Direct Message to the asset owner with the mismatch, proposed fix, and a
#Trigger Form to approve / modify / dismiss.
schedule_action wake at 7 days for each mismatch to check resolution.
On wake: if mismatch still exists, #Create Linear Issue for IT to resolve.
After full daily reconciliation:
#Send Channel Message to #it-asset-ops with totals and trend.
Quarterly run also produces a Linear summary issue with trend data via #Run Query.
Web-Sourced Troubleshooting
Playbooks
/
Web-Sourced Troubleshooting
Web-Sourced Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
Requester reports an issue with a vendor SaaS or OS ("Xcode failing on macOS 15", "Office keeps prompting for activation", "Chrome extension X not working").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) to get OS version and model.
#Trigger Form to collect:
Application or service
Exact error message
When it started
What they've tried
#Search Knowledge Base first for the symptom + application.
If no KB hit or stale: #Web Research with a focused query like
{{app}} {{error}} {{os_version}}targeting vendor docs.Synthesize the top fixes from web + KB into 3–5 steps.
Walk the user through them in #Send Direct Message, asking "did that work?" after each.
If a Kandji-side fix is needed: #Create Kandji Custom Script or custom Kandji Reinstall Library Item.
On resolution → #Resolve Request and offer to save the fix back into a new KB article.
If unresolved → #Escalate Request with the full diagnostic trail in #Leave Internal Note.
Web-Sourced Troubleshooting
Playbooks
/
Web-Sourced Troubleshooting
Web-Sourced Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
Requester reports an issue with a vendor SaaS or OS ("Xcode failing on macOS 15", "Office keeps prompting for activation", "Chrome extension X not working").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) to get OS version and model.
#Trigger Form to collect:
Application or service
Exact error message
When it started
What they've tried
#Search Knowledge Base first for the symptom + application.
If no KB hit or stale: #Web Research with a focused query like
{{app}} {{error}} {{os_version}}targeting vendor docs.Synthesize the top fixes from web + KB into 3–5 steps.
Walk the user through them in #Send Direct Message, asking "did that work?" after each.
If a Kandji-side fix is needed: #Create Kandji Custom Script or custom Kandji Reinstall Library Item.
On resolution → #Resolve Request and offer to save the fix back into a new KB article.
If unresolved → #Escalate Request with the full diagnostic trail in #Leave Internal Note.
Web-Sourced Troubleshooting
Playbooks
/
Web-Sourced Troubleshooting
Web-Sourced Troubleshooting
Created by

Console Team
Published
IT
Kandji
Conditions
Requester reports an issue with a vendor SaaS or OS ("Xcode failing on macOS 15", "Office keeps prompting for activation", "Chrome extension X not working").
Instructions
#Lookup Users on the requester.
#List Devices (Kandji) to get OS version and model.
#Trigger Form to collect:
Application or service
Exact error message
When it started
What they've tried
#Search Knowledge Base first for the symptom + application.
If no KB hit or stale: #Web Research with a focused query like
{{app}} {{error}} {{os_version}}targeting vendor docs.Synthesize the top fixes from web + KB into 3–5 steps.
Walk the user through them in #Send Direct Message, asking "did that work?" after each.
If a Kandji-side fix is needed: #Create Kandji Custom Script or custom Kandji Reinstall Library Item.
On resolution → #Resolve Request and offer to save the fix back into a new KB article.
If unresolved → #Escalate Request with the full diagnostic trail in #Leave Internal Note.
Outage Detection & Bulk Tagging
Playbooks
/
Outage Detection & Bulk Tagging
Outage Detection & Bulk Tagging
Created by

Console Team
Published
IT
Okta
Slack
GitHub
Conditions
Detection — PagerDuty webhook for major SaaS dependency (Slack, Okta, Google, GitHub) OR scheduled status-page poll every 5 minutes.
Instructions
On trigger, identify the affected service from the alert payload.
#Web Research the vendor's status page to confirm and get expected resolution time.
If unconfirmed → wait 5 minutes and re-check; do not alert on noise.
On confirmation:
#Send Channel Message to
#it-statuswith: service, scope, vendor status page link, expected resolution.#Send Channel Message to
#all-companywith a brief user-facing message.
#Search Requests for open requests in the last 2 hours mentioning the affected service.
For each matching request:
#Leave Internal Note tagging it as related to the outage.
Update the category to
outage-{{service}}via custom action.#Send Direct Message to the requester: "This looks related to an active {{service}} outage. We'll update you when resolved."
schedule_action wake every 15 minutes to:
Re-check the status page.
#Send Channel Message updates to
#it-statuson changes.
On confirmed resolution:
#Send Channel Message to
#it-statusand#all-companywith the all-clear.For each tagged request, #Send Direct Message to the requester asking if their issue resolved.
#Resolve Request for any request the user confirms is fixed.
#Create Linear Issue post-outage for a retro doc with duration, impact, tagged-request count.
Outage Detection & Bulk Tagging
Playbooks
/
Outage Detection & Bulk Tagging
Outage Detection & Bulk Tagging
Created by

Console Team
Published
IT
Okta
Slack
GitHub
Conditions
Detection — PagerDuty webhook for major SaaS dependency (Slack, Okta, Google, GitHub) OR scheduled status-page poll every 5 minutes.
Instructions
On trigger, identify the affected service from the alert payload.
#Web Research the vendor's status page to confirm and get expected resolution time.
If unconfirmed → wait 5 minutes and re-check; do not alert on noise.
On confirmation:
#Send Channel Message to
#it-statuswith: service, scope, vendor status page link, expected resolution.#Send Channel Message to
#all-companywith a brief user-facing message.
#Search Requests for open requests in the last 2 hours mentioning the affected service.
For each matching request:
#Leave Internal Note tagging it as related to the outage.
Update the category to
outage-{{service}}via custom action.#Send Direct Message to the requester: "This looks related to an active {{service}} outage. We'll update you when resolved."
schedule_action wake every 15 minutes to:
Re-check the status page.
#Send Channel Message updates to
#it-statuson changes.
On confirmed resolution:
#Send Channel Message to
#it-statusand#all-companywith the all-clear.For each tagged request, #Send Direct Message to the requester asking if their issue resolved.
#Resolve Request for any request the user confirms is fixed.
#Create Linear Issue post-outage for a retro doc with duration, impact, tagged-request count.
Outage Detection & Bulk Tagging
Playbooks
/
Outage Detection & Bulk Tagging
Outage Detection & Bulk Tagging
Created by

Console Team
Published
IT
Okta
Slack
GitHub
Conditions
Detection — PagerDuty webhook for major SaaS dependency (Slack, Okta, Google, GitHub) OR scheduled status-page poll every 5 minutes.
Instructions
On trigger, identify the affected service from the alert payload.
#Web Research the vendor's status page to confirm and get expected resolution time.
If unconfirmed → wait 5 minutes and re-check; do not alert on noise.
On confirmation:
#Send Channel Message to
#it-statuswith: service, scope, vendor status page link, expected resolution.#Send Channel Message to
#all-companywith a brief user-facing message.
#Search Requests for open requests in the last 2 hours mentioning the affected service.
For each matching request:
#Leave Internal Note tagging it as related to the outage.
Update the category to
outage-{{service}}via custom action.#Send Direct Message to the requester: "This looks related to an active {{service}} outage. We'll update you when resolved."
schedule_action wake every 15 minutes to:
Re-check the status page.
#Send Channel Message updates to
#it-statuson changes.
On confirmed resolution:
#Send Channel Message to
#it-statusand#all-companywith the all-clear.For each tagged request, #Send Direct Message to the requester asking if their issue resolved.
#Resolve Request for any request the user confirms is fixed.
#Create Linear Issue post-outage for a retro doc with duration, impact, tagged-request count.
VIP Fast-Track
Playbooks
/
VIP Fast-Track
VIP Fast-Track
Created by

Console Team
Published
IT
Okta
PagerDuty
Conditions
Console Trigger — REQUEST_STARTED
Instructions
#Lookup Users on the requester with
includeGroupsandincludeManager.Determine VIP status — requester is VIP if any of:
In the
vipOkta group (execs, board).Title matches
^(CEO|CFO|CTO|COO|VP|SVP|Chief).In active on-call rotation via #Get PagerDuty Oncall Users.
In
customer-facing-activegroup (CSMs in an active meeting).
If not VIP → exit without modification (let normal routing apply).
If VIP:
#Escalate Request with priority
URGENTand a sub-15-minute SLA tag.#Custom PagerDuty Page to the IT on-call engineer and backup.
#Reroute Request to a private VIP-only channel.
#Send Channel Message to
#it-vipwith the request link, requester title, underlying ask.#Assign User to the request (the IT on-call engineer).
#Send Direct Message to the requester acknowledging fast-track and giving them the on-call engineer's name + ETA.
#Leave Internal Note capturing VIP determination reason and on-call assignment.
Continue handling the underlying request — do NOT resolve here; the on-call engineer takes over.
VIP Fast-Track
Playbooks
/
VIP Fast-Track
VIP Fast-Track
Created by

Console Team
Published
IT
Okta
PagerDuty
Conditions
Console Trigger — REQUEST_STARTED
Instructions
#Lookup Users on the requester with
includeGroupsandincludeManager.Determine VIP status — requester is VIP if any of:
In the
vipOkta group (execs, board).Title matches
^(CEO|CFO|CTO|COO|VP|SVP|Chief).In active on-call rotation via #Get PagerDuty Oncall Users.
In
customer-facing-activegroup (CSMs in an active meeting).
If not VIP → exit without modification (let normal routing apply).
If VIP:
#Escalate Request with priority
URGENTand a sub-15-minute SLA tag.#Custom PagerDuty Page to the IT on-call engineer and backup.
#Reroute Request to a private VIP-only channel.
#Send Channel Message to
#it-vipwith the request link, requester title, underlying ask.#Assign User to the request (the IT on-call engineer).
#Send Direct Message to the requester acknowledging fast-track and giving them the on-call engineer's name + ETA.
#Leave Internal Note capturing VIP determination reason and on-call assignment.
Continue handling the underlying request — do NOT resolve here; the on-call engineer takes over.
VIP Fast-Track
Playbooks
/
VIP Fast-Track
VIP Fast-Track
Created by

Console Team
Published
IT
Okta
PagerDuty
Conditions
Console Trigger — REQUEST_STARTED
Instructions
#Lookup Users on the requester with
includeGroupsandincludeManager.Determine VIP status — requester is VIP if any of:
In the
vipOkta group (execs, board).Title matches
^(CEO|CFO|CTO|COO|VP|SVP|Chief).In active on-call rotation via #Get PagerDuty Oncall Users.
In
customer-facing-activegroup (CSMs in an active meeting).
If not VIP → exit without modification (let normal routing apply).
If VIP:
#Escalate Request with priority
URGENTand a sub-15-minute SLA tag.#Custom PagerDuty Page to the IT on-call engineer and backup.
#Reroute Request to a private VIP-only channel.
#Send Channel Message to
#it-vipwith the request link, requester title, underlying ask.#Assign User to the request (the IT on-call engineer).
#Send Direct Message to the requester acknowledging fast-track and giving them the on-call engineer's name + ETA.
#Leave Internal Note capturing VIP determination reason and on-call assignment.
Continue handling the underlying request — do NOT resolve here; the on-call engineer takes over.
Time Off & Leave Requests
Playbooks
/
Time Off & Leave Requests
Time Off & Leave Requests
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+2
Conditions
Requester asks for PTO, sick day, bereavement, jury duty, or other leave.
Instructions
Parse start date, end date, leave type (PTO / sick / bereavement / jury / personal), and reason if provided.
#Lookup Users on the requester with
includeManager.#Custom Workday Get PTO Balance (or HiBob/UKG equivalent) for the requester, broken down by leave bucket.
Validate the request:
Sufficient balance for PTO? If not, #Send Direct Message with the shortfall and ask to adjust dates or take unpaid.
Within blackout dates (#custom Workday Check Blackout Dates action)? If yes, surface the conflict and ask the user to choose a new date.
Overlap with team's max-out-at-once threshold? #Custom Workday Get Team PTO Calendar action. If exceeded, flag for manager.
Branch on leave type:
PTO / personal → #Request Approval from manager.
Sick (≤3 days) → auto-approve, no approval needed.
Sick (>3 days) → auto-approve but custom Workday Trigger STD Eligibility Check.
Bereavement → auto-approve up to policy limit (e.g. 5 days); over that, manager approval.
Jury duty → auto-approve with proof-of-summons upload via #Trigger Form.
On approval:
#Custom Workday Submit Time Off with the dates and type.
#Custom Google Calendar Block Time on the requester's calendar with the leave label.
#Custom Slack Set Status to "On PTO" for the leave window.
#Out Of Office to set an auto-reply for the leave window (offer to compose; user can edit).
#Send Direct Message to the requester confirming with dates, remaining balance, and out-of-office status.
#Send Direct Message to the manager confirming the approved leave so they can plan coverage.
If leave is >5 consecutive days, schedule_action wake 2 days before the user returns to send a "welcome back" prep with their unread Slack threads and the team's status updates.
#Leave Internal Note capturing dates, type, approval path, balance impact.
Time Off & Leave Requests
Playbooks
/
Time Off & Leave Requests
Time Off & Leave Requests
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+2
Conditions
Requester asks for PTO, sick day, bereavement, jury duty, or other leave.
Instructions
Parse start date, end date, leave type (PTO / sick / bereavement / jury / personal), and reason if provided.
#Lookup Users on the requester with
includeManager.#Custom Workday Get PTO Balance (or HiBob/UKG equivalent) for the requester, broken down by leave bucket.
Validate the request:
Sufficient balance for PTO? If not, #Send Direct Message with the shortfall and ask to adjust dates or take unpaid.
Within blackout dates (#custom Workday Check Blackout Dates action)? If yes, surface the conflict and ask the user to choose a new date.
Overlap with team's max-out-at-once threshold? #Custom Workday Get Team PTO Calendar action. If exceeded, flag for manager.
Branch on leave type:
PTO / personal → #Request Approval from manager.
Sick (≤3 days) → auto-approve, no approval needed.
Sick (>3 days) → auto-approve but custom Workday Trigger STD Eligibility Check.
Bereavement → auto-approve up to policy limit (e.g. 5 days); over that, manager approval.
Jury duty → auto-approve with proof-of-summons upload via #Trigger Form.
On approval:
#Custom Workday Submit Time Off with the dates and type.
#Custom Google Calendar Block Time on the requester's calendar with the leave label.
#Custom Slack Set Status to "On PTO" for the leave window.
#Out Of Office to set an auto-reply for the leave window (offer to compose; user can edit).
#Send Direct Message to the requester confirming with dates, remaining balance, and out-of-office status.
#Send Direct Message to the manager confirming the approved leave so they can plan coverage.
If leave is >5 consecutive days, schedule_action wake 2 days before the user returns to send a "welcome back" prep with their unread Slack threads and the team's status updates.
#Leave Internal Note capturing dates, type, approval path, balance impact.
Time Off & Leave Requests
Playbooks
/
Time Off & Leave Requests
Time Off & Leave Requests
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+2
Conditions
Requester asks for PTO, sick day, bereavement, jury duty, or other leave.
Instructions
Parse start date, end date, leave type (PTO / sick / bereavement / jury / personal), and reason if provided.
#Lookup Users on the requester with
includeManager.#Custom Workday Get PTO Balance (or HiBob/UKG equivalent) for the requester, broken down by leave bucket.
Validate the request:
Sufficient balance for PTO? If not, #Send Direct Message with the shortfall and ask to adjust dates or take unpaid.
Within blackout dates (#custom Workday Check Blackout Dates action)? If yes, surface the conflict and ask the user to choose a new date.
Overlap with team's max-out-at-once threshold? #Custom Workday Get Team PTO Calendar action. If exceeded, flag for manager.
Branch on leave type:
PTO / personal → #Request Approval from manager.
Sick (≤3 days) → auto-approve, no approval needed.
Sick (>3 days) → auto-approve but custom Workday Trigger STD Eligibility Check.
Bereavement → auto-approve up to policy limit (e.g. 5 days); over that, manager approval.
Jury duty → auto-approve with proof-of-summons upload via #Trigger Form.
On approval:
#Custom Workday Submit Time Off with the dates and type.
#Custom Google Calendar Block Time on the requester's calendar with the leave label.
#Custom Slack Set Status to "On PTO" for the leave window.
#Out Of Office to set an auto-reply for the leave window (offer to compose; user can edit).
#Send Direct Message to the requester confirming with dates, remaining balance, and out-of-office status.
#Send Direct Message to the manager confirming the approved leave so they can plan coverage.
If leave is >5 consecutive days, schedule_action wake 2 days before the user returns to send a "welcome back" prep with their unread Slack threads and the team's status updates.
#Leave Internal Note capturing dates, type, approval path, balance impact.
Parental Leave Intake
Playbooks
/
Parental Leave Intake
Parental Leave Intake
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+3
Conditions
Requester announces upcoming parental leave (birth / adoption / foster).
Instructions
#Trigger Form to collect:
Leave type (birth-mother / birth-partner / adoption / foster)
Expected leave start date (or birth/placement date)
Expected duration (auto-suggest based on policy + tenure)
Whether they'll use FMLA (US) / STD / company top-up
Manager email
Backup contact info during leave (personal email)
#Lookup Users on the requester with
includeManager.#Custom Workday Get Parental Leave Policy to surface entitlement based on tenure and location.
#Custom Workday Get PTO Balance to factor in any pre-leave PTO they want to use.
Generate paperwork:
#Custom DocuSign Send FMLA Request with prefilled fields.
#Custom DocuSign Send STD Application if applicable.
#Custom DocuSign Send Parental Leave Plan company-specific form.
Coordinate manager handoff:
#Send Direct Message to the manager with: leave dates, coverage planning checklist, hand-off doc template.
#Custom Google Calendar Block Time on requester's calendar for the leave window.
#Custom Slack Set Status to "On parental leave - back {{returnDate}}" for the leave window (scheduled).
Pre-leave check-in:
schedule_action wake 14 days before leave start to #Send Direct Message to requester: "Two weeks until leave starts. Anything we still need to wrap up?"
During leave:
#Custom Pause Slack Notifications during leave.
#Custom Pause Lattice Activity for the user.
#Out Of Office to set auto-reply for the leave window with the backup contact.
Return-from-leave 1:1:
#Custom Google Calendar Create Event for a 60-min welcome-back 1:1 with manager on the return date.
schedule_action wake 3 days before return to #Send Direct Message: "Coming back on {{date}} — anything we should prepare for you?"
Coordinate benefits:
#Send Email with QLE benefits enrollment info (30-day window for adding dependents).
#Custom Trigger Benefits QLE for adding the child to coverage.
#Send Direct Message to the requester confirming everything is set up.
#Leave Internal Note capturing dates, paperwork status, manager handoff confirmation.
Parental Leave Intake
Playbooks
/
Parental Leave Intake
Parental Leave Intake
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+3
Conditions
Requester announces upcoming parental leave (birth / adoption / foster).
Instructions
#Trigger Form to collect:
Leave type (birth-mother / birth-partner / adoption / foster)
Expected leave start date (or birth/placement date)
Expected duration (auto-suggest based on policy + tenure)
Whether they'll use FMLA (US) / STD / company top-up
Manager email
Backup contact info during leave (personal email)
#Lookup Users on the requester with
includeManager.#Custom Workday Get Parental Leave Policy to surface entitlement based on tenure and location.
#Custom Workday Get PTO Balance to factor in any pre-leave PTO they want to use.
Generate paperwork:
#Custom DocuSign Send FMLA Request with prefilled fields.
#Custom DocuSign Send STD Application if applicable.
#Custom DocuSign Send Parental Leave Plan company-specific form.
Coordinate manager handoff:
#Send Direct Message to the manager with: leave dates, coverage planning checklist, hand-off doc template.
#Custom Google Calendar Block Time on requester's calendar for the leave window.
#Custom Slack Set Status to "On parental leave - back {{returnDate}}" for the leave window (scheduled).
Pre-leave check-in:
schedule_action wake 14 days before leave start to #Send Direct Message to requester: "Two weeks until leave starts. Anything we still need to wrap up?"
During leave:
#Custom Pause Slack Notifications during leave.
#Custom Pause Lattice Activity for the user.
#Out Of Office to set auto-reply for the leave window with the backup contact.
Return-from-leave 1:1:
#Custom Google Calendar Create Event for a 60-min welcome-back 1:1 with manager on the return date.
schedule_action wake 3 days before return to #Send Direct Message: "Coming back on {{date}} — anything we should prepare for you?"
Coordinate benefits:
#Send Email with QLE benefits enrollment info (30-day window for adding dependents).
#Custom Trigger Benefits QLE for adding the child to coverage.
#Send Direct Message to the requester confirming everything is set up.
#Leave Internal Note capturing dates, paperwork status, manager handoff confirmation.
Parental Leave Intake
Playbooks
/
Parental Leave Intake
Parental Leave Intake
Created by

Console Team
Published
HR
Google Calendar
Slack
Workday
+3
Conditions
Requester announces upcoming parental leave (birth / adoption / foster).
Instructions
#Trigger Form to collect:
Leave type (birth-mother / birth-partner / adoption / foster)
Expected leave start date (or birth/placement date)
Expected duration (auto-suggest based on policy + tenure)
Whether they'll use FMLA (US) / STD / company top-up
Manager email
Backup contact info during leave (personal email)
#Lookup Users on the requester with
includeManager.#Custom Workday Get Parental Leave Policy to surface entitlement based on tenure and location.
#Custom Workday Get PTO Balance to factor in any pre-leave PTO they want to use.
Generate paperwork:
#Custom DocuSign Send FMLA Request with prefilled fields.
#Custom DocuSign Send STD Application if applicable.
#Custom DocuSign Send Parental Leave Plan company-specific form.
Coordinate manager handoff:
#Send Direct Message to the manager with: leave dates, coverage planning checklist, hand-off doc template.
#Custom Google Calendar Block Time on requester's calendar for the leave window.
#Custom Slack Set Status to "On parental leave - back {{returnDate}}" for the leave window (scheduled).
Pre-leave check-in:
schedule_action wake 14 days before leave start to #Send Direct Message to requester: "Two weeks until leave starts. Anything we still need to wrap up?"
During leave:
#Custom Pause Slack Notifications during leave.
#Custom Pause Lattice Activity for the user.
#Out Of Office to set auto-reply for the leave window with the backup contact.
Return-from-leave 1:1:
#Custom Google Calendar Create Event for a 60-min welcome-back 1:1 with manager on the return date.
schedule_action wake 3 days before return to #Send Direct Message: "Coming back on {{date}} — anything we should prepare for you?"
Coordinate benefits:
#Send Email with QLE benefits enrollment info (30-day window for adding dependents).
#Custom Trigger Benefits QLE for adding the child to coverage.
#Send Direct Message to the requester confirming everything is set up.
#Leave Internal Note capturing dates, paperwork status, manager handoff confirmation.
HR Policy & Benefits Q&A
Playbooks
/
HR Policy & Benefits Q&A
HR Policy & Benefits Q&A
Created by

Console Team
Published
HR
Conditions
Requester asks a benefits / handbook / leave / pay / policy question.
Instructions
#Lookup Users on the requester to get
location(for region-specific policies),department, andtenure.#Search Knowledge Base with the user's question as the query.
For multi-region benefits content (parental leave, holidays, healthcare), filter to the requester's
location. If multiple regions match, surface labeled variants.#Expand Knowledge Base Article for the top hit if more depth is needed.
Compose the answer in #Send Direct Message:
Direct answer first (e.g. "You accrue 1.66 PTO days per month.")
Personalized context if available (e.g. "Based on your tenure, you're eligible for...").
Quoted source paragraph from the KB.
Source link to the policy doc.
Ask if the answer resolved their question via a follow-up message.
If user confirms → #Resolve Request.
If user has follow-up questions or the policy is ambiguous:
For simple clarifications, loop back to step 2.
For complex / personal cases, #Prompt for Handoff to the benefits coordinator or HRBP based on topic.
If no relevant KB hit at all:
#Send Direct Message explaining the limitation and #Prompt for Handoff to HR.
#Leave Internal Note capturing the KB articles surfaced and resolution path.
HR Policy & Benefits Q&A
Playbooks
/
HR Policy & Benefits Q&A
HR Policy & Benefits Q&A
Created by

Console Team
Published
HR
Conditions
Requester asks a benefits / handbook / leave / pay / policy question.
Instructions
#Lookup Users on the requester to get
location(for region-specific policies),department, andtenure.#Search Knowledge Base with the user's question as the query.
For multi-region benefits content (parental leave, holidays, healthcare), filter to the requester's
location. If multiple regions match, surface labeled variants.#Expand Knowledge Base Article for the top hit if more depth is needed.
Compose the answer in #Send Direct Message:
Direct answer first (e.g. "You accrue 1.66 PTO days per month.")
Personalized context if available (e.g. "Based on your tenure, you're eligible for...").
Quoted source paragraph from the KB.
Source link to the policy doc.
Ask if the answer resolved their question via a follow-up message.
If user confirms → #Resolve Request.
If user has follow-up questions or the policy is ambiguous:
For simple clarifications, loop back to step 2.
For complex / personal cases, #Prompt for Handoff to the benefits coordinator or HRBP based on topic.
If no relevant KB hit at all:
#Send Direct Message explaining the limitation and #Prompt for Handoff to HR.
#Leave Internal Note capturing the KB articles surfaced and resolution path.
HR Policy & Benefits Q&A
Playbooks
/
HR Policy & Benefits Q&A
HR Policy & Benefits Q&A
Created by

Console Team
Published
HR
Conditions
Requester asks a benefits / handbook / leave / pay / policy question.
Instructions
#Lookup Users on the requester to get
location(for region-specific policies),department, andtenure.#Search Knowledge Base with the user's question as the query.
For multi-region benefits content (parental leave, holidays, healthcare), filter to the requester's
location. If multiple regions match, surface labeled variants.#Expand Knowledge Base Article for the top hit if more depth is needed.
Compose the answer in #Send Direct Message:
Direct answer first (e.g. "You accrue 1.66 PTO days per month.")
Personalized context if available (e.g. "Based on your tenure, you're eligible for...").
Quoted source paragraph from the KB.
Source link to the policy doc.
Ask if the answer resolved their question via a follow-up message.
If user confirms → #Resolve Request.
If user has follow-up questions or the policy is ambiguous:
For simple clarifications, loop back to step 2.
For complex / personal cases, #Prompt for Handoff to the benefits coordinator or HRBP based on topic.
If no relevant KB hit at all:
#Send Direct Message explaining the limitation and #Prompt for Handoff to HR.
#Leave Internal Note capturing the KB articles surfaced and resolution path.
Employee Data Updates
Playbooks
/
Employee Data Updates
Employee Data Updates
Created by

Console Team
Published
HR
Okta
Slack
Workday
+1
Conditions
Requester wants to update personal info (home address, emergency contact, phone number, marital status, dependents).
Instructions
Parse the update type from the request.
#Lookup Users on the requester.
#Trigger Form to collect the specific new values, depending on update type:
Address → street, city, state, zip, country, effective date
Emergency contact → name, relationship, phone, email
Phone → new number
Marital status → status, effective date, spouse info if adding to benefits
Dependents → name, DOB, SSN (if applicable), relationship
Validate inputs:
Address → custom Validate Address (USPS/Smarty) action.
Phone → format check.
SSN → format check (no Luhn-style validation; just digit count).
Write to HRIS via #custom Workday Update Worker (or HiBob/Rippling equivalent) with the new values.
Propagate downstream changes:
Address change → #custom Workday Trigger Payroll Tax Recalc (state taxes may change). Also #Update Okta User Profile (Custom) with new address fields. Also #custom Update Badge System Address for office access.
Emergency contact → no further sync needed beyond HRIS.
Phone → #Update Okta User Profile (Custom) with the new phone. #Custom Update Slack Profile Phone.
Marital status / dependents → #custom Trigger Benefits Qualifying Life Event to open a window for benefits enrollment changes; #Send Email with QLE enrollment instructions.
#Send Direct Message to the requester confirming what was updated, in which systems, and any downstream effects (e.g. "Your address change triggered a payroll tax recalc; you'll see this on your next paystub.").
If marital / dependents change: #Send Email with QLE benefits enrollment link and 30-day deadline.
#Leave Internal Note capturing fields changed and systems synced.
Employee Data Updates
Playbooks
/
Employee Data Updates
Employee Data Updates
Created by

Console Team
Published
HR
Okta
Slack
Workday
+1
Conditions
Requester wants to update personal info (home address, emergency contact, phone number, marital status, dependents).
Instructions
Parse the update type from the request.
#Lookup Users on the requester.
#Trigger Form to collect the specific new values, depending on update type:
Address → street, city, state, zip, country, effective date
Emergency contact → name, relationship, phone, email
Phone → new number
Marital status → status, effective date, spouse info if adding to benefits
Dependents → name, DOB, SSN (if applicable), relationship
Validate inputs:
Address → custom Validate Address (USPS/Smarty) action.
Phone → format check.
SSN → format check (no Luhn-style validation; just digit count).
Write to HRIS via #custom Workday Update Worker (or HiBob/Rippling equivalent) with the new values.
Propagate downstream changes:
Address change → #custom Workday Trigger Payroll Tax Recalc (state taxes may change). Also #Update Okta User Profile (Custom) with new address fields. Also #custom Update Badge System Address for office access.
Emergency contact → no further sync needed beyond HRIS.
Phone → #Update Okta User Profile (Custom) with the new phone. #Custom Update Slack Profile Phone.
Marital status / dependents → #custom Trigger Benefits Qualifying Life Event to open a window for benefits enrollment changes; #Send Email with QLE enrollment instructions.
#Send Direct Message to the requester confirming what was updated, in which systems, and any downstream effects (e.g. "Your address change triggered a payroll tax recalc; you'll see this on your next paystub.").
If marital / dependents change: #Send Email with QLE benefits enrollment link and 30-day deadline.
#Leave Internal Note capturing fields changed and systems synced.
Employee Data Updates
Playbooks
/
Employee Data Updates
Employee Data Updates
Created by

Console Team
Published
HR
Okta
Slack
Workday
+1
Conditions
Requester wants to update personal info (home address, emergency contact, phone number, marital status, dependents).
Instructions
Parse the update type from the request.
#Lookup Users on the requester.
#Trigger Form to collect the specific new values, depending on update type:
Address → street, city, state, zip, country, effective date
Emergency contact → name, relationship, phone, email
Phone → new number
Marital status → status, effective date, spouse info if adding to benefits
Dependents → name, DOB, SSN (if applicable), relationship
Validate inputs:
Address → custom Validate Address (USPS/Smarty) action.
Phone → format check.
SSN → format check (no Luhn-style validation; just digit count).
Write to HRIS via #custom Workday Update Worker (or HiBob/Rippling equivalent) with the new values.
Propagate downstream changes:
Address change → #custom Workday Trigger Payroll Tax Recalc (state taxes may change). Also #Update Okta User Profile (Custom) with new address fields. Also #custom Update Badge System Address for office access.
Emergency contact → no further sync needed beyond HRIS.
Phone → #Update Okta User Profile (Custom) with the new phone. #Custom Update Slack Profile Phone.
Marital status / dependents → #custom Trigger Benefits Qualifying Life Event to open a window for benefits enrollment changes; #Send Email with QLE enrollment instructions.
#Send Direct Message to the requester confirming what was updated, in which systems, and any downstream effects (e.g. "Your address change triggered a payroll tax recalc; you'll see this on your next paystub.").
If marital / dependents change: #Send Email with QLE benefits enrollment link and 30-day deadline.
#Leave Internal Note capturing fields changed and systems synced.
Role & Manager Changes
Playbooks
/
Role & Manager Changes
Role & Manager Changes
Created by

Console Team
Published
HR
Okta
Slack
Workday
Conditions
Internal transfer, promotion, reporting line change, or department change.
Instructions
#Trigger Form to collect:
Employee being changed
New role / title
New manager
New department / team
Effective date
Comp change (yes/no, new amount, new band)
Justification
#Lookup Users on the affected employee with
includeManagerandincludeGroups.#Lookup Users on the requester (assume manager initiating) to validate authority.
#Lookup Users on the new manager to confirm valid Okta record.
Approval chain:
#Request Approval from current manager (skip if they initiated).
#Request Approval from new manager.
#Request Approval from HRBP for the new department.
If comp change: #Request Approval from finance.
On full approval, execute changes on effective date (use schedule_action if effective date is in the future):
#Custom Workday Update Worker with new title, manager, department, comp band,
comp amount.
#Update Okta User Department for the new department.
#Custom Okta Update Manager to set the manager field.
For each group the employee was in: if it's role-based, #Remove from Group; if it's tenure-based, keep. Re-add to the new role's groups via #Add to Group.
#Update Usergroup (Slack) to add to the new team usergroup and remove from old.
#Custom Update Access Policies for any policies where manager-is-approver — the new manager becomes approver going forward.
For department-specific tooling: provision new (e.g. Sales tools if moving to Sales) and revoke old.
#Add Users To Channel for the new team's Slack channels; #Remove User From Channel for old team channels (with grace period of 30 days for handoff).
#Send Direct Message to the employee confirming all changes.
#Send Direct Message to both old and new managers explaining the transition.
#Send Channel Message to
#org-changesannouncing the move.#Leave Internal Note capturing all changes and approval trail.
Role & Manager Changes
Playbooks
/
Role & Manager Changes
Role & Manager Changes
Created by

Console Team
Published
HR
Okta
Slack
Workday
Conditions
Internal transfer, promotion, reporting line change, or department change.
Instructions
#Trigger Form to collect:
Employee being changed
New role / title
New manager
New department / team
Effective date
Comp change (yes/no, new amount, new band)
Justification
#Lookup Users on the affected employee with
includeManagerandincludeGroups.#Lookup Users on the requester (assume manager initiating) to validate authority.
#Lookup Users on the new manager to confirm valid Okta record.
Approval chain:
#Request Approval from current manager (skip if they initiated).
#Request Approval from new manager.
#Request Approval from HRBP for the new department.
If comp change: #Request Approval from finance.
On full approval, execute changes on effective date (use schedule_action if effective date is in the future):
#Custom Workday Update Worker with new title, manager, department, comp band,
comp amount.
#Update Okta User Department for the new department.
#Custom Okta Update Manager to set the manager field.
For each group the employee was in: if it's role-based, #Remove from Group; if it's tenure-based, keep. Re-add to the new role's groups via #Add to Group.
#Update Usergroup (Slack) to add to the new team usergroup and remove from old.
#Custom Update Access Policies for any policies where manager-is-approver — the new manager becomes approver going forward.
For department-specific tooling: provision new (e.g. Sales tools if moving to Sales) and revoke old.
#Add Users To Channel for the new team's Slack channels; #Remove User From Channel for old team channels (with grace period of 30 days for handoff).
#Send Direct Message to the employee confirming all changes.
#Send Direct Message to both old and new managers explaining the transition.
#Send Channel Message to
#org-changesannouncing the move.#Leave Internal Note capturing all changes and approval trail.
Role & Manager Changes
Playbooks
/
Role & Manager Changes
Role & Manager Changes
Created by

Console Team
Published
HR
Okta
Slack
Workday
Conditions
Internal transfer, promotion, reporting line change, or department change.
Instructions
#Trigger Form to collect:
Employee being changed
New role / title
New manager
New department / team
Effective date
Comp change (yes/no, new amount, new band)
Justification
#Lookup Users on the affected employee with
includeManagerandincludeGroups.#Lookup Users on the requester (assume manager initiating) to validate authority.
#Lookup Users on the new manager to confirm valid Okta record.
Approval chain:
#Request Approval from current manager (skip if they initiated).
#Request Approval from new manager.
#Request Approval from HRBP for the new department.
If comp change: #Request Approval from finance.
On full approval, execute changes on effective date (use schedule_action if effective date is in the future):
#Custom Workday Update Worker with new title, manager, department, comp band,
comp amount.
#Update Okta User Department for the new department.
#Custom Okta Update Manager to set the manager field.
For each group the employee was in: if it's role-based, #Remove from Group; if it's tenure-based, keep. Re-add to the new role's groups via #Add to Group.
#Update Usergroup (Slack) to add to the new team usergroup and remove from old.
#Custom Update Access Policies for any policies where manager-is-approver — the new manager becomes approver going forward.
For department-specific tooling: provision new (e.g. Sales tools if moving to Sales) and revoke old.
#Add Users To Channel for the new team's Slack channels; #Remove User From Channel for old team channels (with grace period of 30 days for handoff).
#Send Direct Message to the employee confirming all changes.
#Send Direct Message to both old and new managers explaining the transition.
#Send Channel Message to
#org-changesannouncing the move.#Leave Internal Note capturing all changes and approval trail.
Compensation Requests
Playbooks
/
Compensation Requests
Compensation Requests
Created by

Console Team
Published
HR
Workday
+1
Conditions
Manager submits an off-cycle merit, market adjustment, sign-on bonus, retention bonus, or promotion comp request.
Instructions
#Trigger Form to collect:
Employee being adjusted
Adjustment type (merit / market / sign-on / retention / promotion)
Current comp (auto-fill from Workday)
Proposed new comp
Justification (free text)
Market data attachment (if market adjustment)
Effective date
#Lookup Users on the employee and the requesting manager.
#Custom Workday Get Comp Band for the employee's role and level to check if the proposed comp falls within band.
#Custom Workday Get Compa-Ratio to show current and proposed compa-ratio.
Validate request:
In-band → standard approval path.
Above band → require additional VP approval.
Outside policy window (e.g. off-cycle merit when only quarterly cycles allowed) → require HRBP exception approval.
Approval chain:
#Request Approval from manager's manager (skip-level).
#Request Approval from HRBP with justification + market data attached.
#Request Approval from finance with budget impact calculation.
If above band → #Request Approval from the VP/Chief.
On full approval, on effective date:
#Custom Workday Submit Comp Change with new comp, type, effective date.
#Custom Workday Trigger Payroll Update for next pay cycle.
If sign-on or retention bonus, custom Workday Schedule Bonus Payment.
#Send Direct Message to the employee with a comp letter or update notification — composed from a template.
#Send Direct Message to the manager confirming the change and the next paystub the employee will see.
#Send Channel Message to
#hrbp-compfor tracking.#Leave Internal Note capturing approval trail, justification, market data.
Compensation Requests
Playbooks
/
Compensation Requests
Compensation Requests
Created by

Console Team
Published
HR
Workday
+1
Conditions
Manager submits an off-cycle merit, market adjustment, sign-on bonus, retention bonus, or promotion comp request.
Instructions
#Trigger Form to collect:
Employee being adjusted
Adjustment type (merit / market / sign-on / retention / promotion)
Current comp (auto-fill from Workday)
Proposed new comp
Justification (free text)
Market data attachment (if market adjustment)
Effective date
#Lookup Users on the employee and the requesting manager.
#Custom Workday Get Comp Band for the employee's role and level to check if the proposed comp falls within band.
#Custom Workday Get Compa-Ratio to show current and proposed compa-ratio.
Validate request:
In-band → standard approval path.
Above band → require additional VP approval.
Outside policy window (e.g. off-cycle merit when only quarterly cycles allowed) → require HRBP exception approval.
Approval chain:
#Request Approval from manager's manager (skip-level).
#Request Approval from HRBP with justification + market data attached.
#Request Approval from finance with budget impact calculation.
If above band → #Request Approval from the VP/Chief.
On full approval, on effective date:
#Custom Workday Submit Comp Change with new comp, type, effective date.
#Custom Workday Trigger Payroll Update for next pay cycle.
If sign-on or retention bonus, custom Workday Schedule Bonus Payment.
#Send Direct Message to the employee with a comp letter or update notification — composed from a template.
#Send Direct Message to the manager confirming the change and the next paystub the employee will see.
#Send Channel Message to
#hrbp-compfor tracking.#Leave Internal Note capturing approval trail, justification, market data.
Compensation Requests
Playbooks
/
Compensation Requests
Compensation Requests
Created by

Console Team
Published
HR
Workday
+1
Conditions
Manager submits an off-cycle merit, market adjustment, sign-on bonus, retention bonus, or promotion comp request.
Instructions
#Trigger Form to collect:
Employee being adjusted
Adjustment type (merit / market / sign-on / retention / promotion)
Current comp (auto-fill from Workday)
Proposed new comp
Justification (free text)
Market data attachment (if market adjustment)
Effective date
#Lookup Users on the employee and the requesting manager.
#Custom Workday Get Comp Band for the employee's role and level to check if the proposed comp falls within band.
#Custom Workday Get Compa-Ratio to show current and proposed compa-ratio.
Validate request:
In-band → standard approval path.
Above band → require additional VP approval.
Outside policy window (e.g. off-cycle merit when only quarterly cycles allowed) → require HRBP exception approval.
Approval chain:
#Request Approval from manager's manager (skip-level).
#Request Approval from HRBP with justification + market data attached.
#Request Approval from finance with budget impact calculation.
If above band → #Request Approval from the VP/Chief.
On full approval, on effective date:
#Custom Workday Submit Comp Change with new comp, type, effective date.
#Custom Workday Trigger Payroll Update for next pay cycle.
If sign-on or retention bonus, custom Workday Schedule Bonus Payment.
#Send Direct Message to the employee with a comp letter or update notification — composed from a template.
#Send Direct Message to the manager confirming the change and the next paystub the employee will see.
#Send Channel Message to
#hrbp-compfor tracking.#Leave Internal Note capturing approval trail, justification, market data.
Employment Verification
Playbooks
/
Employment Verification
Employment Verification
Created by

Console Team
Published
HR
Workday
DocuSign
Conditions
Requester needs an employment or income verification letter ("for my mortgage", "for my landlord", "for the visa lawyer").
Instructions
#Trigger Form to collect:
Purpose (mortgage / rental / visa / loan / other)
Verifying party name, email, fax
What to include (employment only / employment + salary / employment + salary + bonus)
Any specific format required by the verifier
Delivery preference (email to verifier directly, or email to requester)
#Lookup Users on the requester.
#Custom Workday Get Employment Data to pull: hire date, current title, current comp, employment status (FT/PT), location, manager.
If the request includes bonus / commission detail, #custom Workday Get YTD Compensation for the relevant breakdown.
Generate the letter:
#Custom Generate Verification Letter From Template action picks the right template based on purpose (mortgage / visa / rental).
Merge the Workday data into the template.
Route for signature:
#Custom DocuSign Send to HR Signer with the company's authorized signer (HRBP).
schedule_action wake at 24h; if unsigned, #Send Direct Message reminder to the signer.
On signature:
If delivery is "to verifier" → #custom Send Letter to Verifier action (email or fax based on form input).
If delivery is "to requester" → #Send Email to
$requester.emailwith the signed letter attached.
#Send Direct Message to the requester confirming delivery method, date sent, and verifier contact.
#Leave Internal Note capturing purpose, verifier, data included, delivery confirmation.
Employment Verification
Playbooks
/
Employment Verification
Employment Verification
Created by

Console Team
Published
HR
Workday
DocuSign
Conditions
Requester needs an employment or income verification letter ("for my mortgage", "for my landlord", "for the visa lawyer").
Instructions
#Trigger Form to collect:
Purpose (mortgage / rental / visa / loan / other)
Verifying party name, email, fax
What to include (employment only / employment + salary / employment + salary + bonus)
Any specific format required by the verifier
Delivery preference (email to verifier directly, or email to requester)
#Lookup Users on the requester.
#Custom Workday Get Employment Data to pull: hire date, current title, current comp, employment status (FT/PT), location, manager.
If the request includes bonus / commission detail, #custom Workday Get YTD Compensation for the relevant breakdown.
Generate the letter:
#Custom Generate Verification Letter From Template action picks the right template based on purpose (mortgage / visa / rental).
Merge the Workday data into the template.
Route for signature:
#Custom DocuSign Send to HR Signer with the company's authorized signer (HRBP).
schedule_action wake at 24h; if unsigned, #Send Direct Message reminder to the signer.
On signature:
If delivery is "to verifier" → #custom Send Letter to Verifier action (email or fax based on form input).
If delivery is "to requester" → #Send Email to
$requester.emailwith the signed letter attached.
#Send Direct Message to the requester confirming delivery method, date sent, and verifier contact.
#Leave Internal Note capturing purpose, verifier, data included, delivery confirmation.
Employment Verification
Playbooks
/
Employment Verification
Employment Verification
Created by

Console Team
Published
HR
Workday
DocuSign
Conditions
Requester needs an employment or income verification letter ("for my mortgage", "for my landlord", "for the visa lawyer").
Instructions
#Trigger Form to collect:
Purpose (mortgage / rental / visa / loan / other)
Verifying party name, email, fax
What to include (employment only / employment + salary / employment + salary + bonus)
Any specific format required by the verifier
Delivery preference (email to verifier directly, or email to requester)
#Lookup Users on the requester.
#Custom Workday Get Employment Data to pull: hire date, current title, current comp, employment status (FT/PT), location, manager.
If the request includes bonus / commission detail, #custom Workday Get YTD Compensation for the relevant breakdown.
Generate the letter:
#Custom Generate Verification Letter From Template action picks the right template based on purpose (mortgage / visa / rental).
Merge the Workday data into the template.
Route for signature:
#Custom DocuSign Send to HR Signer with the company's authorized signer (HRBP).
schedule_action wake at 24h; if unsigned, #Send Direct Message reminder to the signer.
On signature:
If delivery is "to verifier" → #custom Send Letter to Verifier action (email or fax based on form input).
If delivery is "to requester" → #Send Email to
$requester.emailwith the signed letter attached.
#Send Direct Message to the requester confirming delivery method, date sent, and verifier contact.
#Leave Internal Note capturing purpose, verifier, data included, delivery confirmation.
Performance & Feedback Routing
Playbooks
/
Performance & Feedback Routing
Performance & Feedback Routing
Created by

Console Team
Published
HR
Lattice
+2
Conditions
Requester submits review feedback, peer feedback, praise, or asks for peer reviewers.
Instructions
Parse submission type:
Review submission (for a current cycle)
Peer feedback (unstructured / between cycles)
Praise / kudos
Request for peer reviewers
360 feedback submission
#Lookup Users on the requester and the target user being reviewed.
Branch on submission type:
Review submission:
#Custom Lattice Get Active Cycle to confirm a cycle is open.
#Custom Lattice Submit Review with the content.
#Send Direct Message confirming submission and deadline.
Peer feedback:
#Custom Lattice Submit Peer Feedback to the target user's manager and the target if shared.
#Send Direct Message to target's manager flagging new feedback.
Praise / kudos:
#Custom Lattice Submit Praise AND #Send Channel Message to
#kudosor the target's team channel.#Custom Bonusly Send Recognition if the praise warrants points.
Request peer reviewers:
#Lookup Users for suggested reviewers based on org chart (same team, cross-functional collaborators from calendar history via custom action).
#Send Direct Message to requester with suggested list to confirm.
On confirm: custom Lattice Add Peer Reviewers to the requester's review.
360 feedback:
#Custom Culture Amp Submit 360 for the target user.
For all paths: schedule_action wakes at cycle deadlines (e.g. 7 days, 3 days, 1 day before) to remind stragglers via #Send Direct Message if their submissions are incomplete.
#Send Direct Message to the requester confirming receipt and any next steps.
#Leave Internal Note capturing submission type, target, action taken.
Performance & Feedback Routing
Playbooks
/
Performance & Feedback Routing
Performance & Feedback Routing
Created by

Console Team
Published
HR
Lattice
+2
Conditions
Requester submits review feedback, peer feedback, praise, or asks for peer reviewers.
Instructions
Parse submission type:
Review submission (for a current cycle)
Peer feedback (unstructured / between cycles)
Praise / kudos
Request for peer reviewers
360 feedback submission
#Lookup Users on the requester and the target user being reviewed.
Branch on submission type:
Review submission:
#Custom Lattice Get Active Cycle to confirm a cycle is open.
#Custom Lattice Submit Review with the content.
#Send Direct Message confirming submission and deadline.
Peer feedback:
#Custom Lattice Submit Peer Feedback to the target user's manager and the target if shared.
#Send Direct Message to target's manager flagging new feedback.
Praise / kudos:
#Custom Lattice Submit Praise AND #Send Channel Message to
#kudosor the target's team channel.#Custom Bonusly Send Recognition if the praise warrants points.
Request peer reviewers:
#Lookup Users for suggested reviewers based on org chart (same team, cross-functional collaborators from calendar history via custom action).
#Send Direct Message to requester with suggested list to confirm.
On confirm: custom Lattice Add Peer Reviewers to the requester's review.
360 feedback:
#Custom Culture Amp Submit 360 for the target user.
For all paths: schedule_action wakes at cycle deadlines (e.g. 7 days, 3 days, 1 day before) to remind stragglers via #Send Direct Message if their submissions are incomplete.
#Send Direct Message to the requester confirming receipt and any next steps.
#Leave Internal Note capturing submission type, target, action taken.
Performance & Feedback Routing
Playbooks
/
Performance & Feedback Routing
Performance & Feedback Routing
Created by

Console Team
Published
HR
Lattice
+2
Conditions
Requester submits review feedback, peer feedback, praise, or asks for peer reviewers.
Instructions
Parse submission type:
Review submission (for a current cycle)
Peer feedback (unstructured / between cycles)
Praise / kudos
Request for peer reviewers
360 feedback submission
#Lookup Users on the requester and the target user being reviewed.
Branch on submission type:
Review submission:
#Custom Lattice Get Active Cycle to confirm a cycle is open.
#Custom Lattice Submit Review with the content.
#Send Direct Message confirming submission and deadline.
Peer feedback:
#Custom Lattice Submit Peer Feedback to the target user's manager and the target if shared.
#Send Direct Message to target's manager flagging new feedback.
Praise / kudos:
#Custom Lattice Submit Praise AND #Send Channel Message to
#kudosor the target's team channel.#Custom Bonusly Send Recognition if the praise warrants points.
Request peer reviewers:
#Lookup Users for suggested reviewers based on org chart (same team, cross-functional collaborators from calendar history via custom action).
#Send Direct Message to requester with suggested list to confirm.
On confirm: custom Lattice Add Peer Reviewers to the requester's review.
360 feedback:
#Custom Culture Amp Submit 360 for the target user.
For all paths: schedule_action wakes at cycle deadlines (e.g. 7 days, 3 days, 1 day before) to remind stragglers via #Send Direct Message if their submissions are incomplete.
#Send Direct Message to the requester confirming receipt and any next steps.
#Leave Internal Note capturing submission type, target, action taken.
Weekly HR Digest
Playbooks
/
Weekly HR Digest
Weekly HR Digest
Created by

Console Team
Published
HR
Workday
Linear
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
Pull data sources in parallel:
#Custom Workday Query New Hires for hires starting this week.
#Custom Workday Query Anniversaries for tenure anniversaries (1/3/5/10 year) this week.
#Custom Workday Query Birthdays for birthdays this week.
#Run Query with measurement
REQUEST_COUNTfiltered to PTO/leave categories for the previous 7 days, grouped by category.#Custom Workday Query Open Headcount for current open requisitions.
Pick the policy reminder of the week from a rotating list (KB articles tagged
weekly-reminder).For new hires:
For each, #Lookup Users to get profile data and team.
Compose intro: name, title, team, location, fun fact (from intake form).
For anniversaries and birthdays:
Sort by date this week.
Group by team for readability.
Compose the digest markdown with sections:
This week's new hires (with photos if available)
Anniversaries
Birthdays
Policy reminder
PTO summary chart (insight URL)
Open headcount status
#Send Channel Message to
#peoplewith the composed digest.#Leave Internal Note in an internal Linear weekly issue capturing the digest contents for audit.
Weekly HR Digest
Playbooks
/
Weekly HR Digest
Weekly HR Digest
Created by

Console Team
Published
HR
Workday
Linear
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
Pull data sources in parallel:
#Custom Workday Query New Hires for hires starting this week.
#Custom Workday Query Anniversaries for tenure anniversaries (1/3/5/10 year) this week.
#Custom Workday Query Birthdays for birthdays this week.
#Run Query with measurement
REQUEST_COUNTfiltered to PTO/leave categories for the previous 7 days, grouped by category.#Custom Workday Query Open Headcount for current open requisitions.
Pick the policy reminder of the week from a rotating list (KB articles tagged
weekly-reminder).For new hires:
For each, #Lookup Users to get profile data and team.
Compose intro: name, title, team, location, fun fact (from intake form).
For anniversaries and birthdays:
Sort by date this week.
Group by team for readability.
Compose the digest markdown with sections:
This week's new hires (with photos if available)
Anniversaries
Birthdays
Policy reminder
PTO summary chart (insight URL)
Open headcount status
#Send Channel Message to
#peoplewith the composed digest.#Leave Internal Note in an internal Linear weekly issue capturing the digest contents for audit.
Weekly HR Digest
Playbooks
/
Weekly HR Digest
Weekly HR Digest
Created by

Console Team
Published
HR
Workday
Linear
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
Pull data sources in parallel:
#Custom Workday Query New Hires for hires starting this week.
#Custom Workday Query Anniversaries for tenure anniversaries (1/3/5/10 year) this week.
#Custom Workday Query Birthdays for birthdays this week.
#Run Query with measurement
REQUEST_COUNTfiltered to PTO/leave categories for the previous 7 days, grouped by category.#Custom Workday Query Open Headcount for current open requisitions.
Pick the policy reminder of the week from a rotating list (KB articles tagged
weekly-reminder).For new hires:
For each, #Lookup Users to get profile data and team.
Compose intro: name, title, team, location, fun fact (from intake form).
For anniversaries and birthdays:
Sort by date this week.
Group by team for readability.
Compose the digest markdown with sections:
This week's new hires (with photos if available)
Anniversaries
Birthdays
Policy reminder
PTO summary chart (insight URL)
Open headcount status
#Send Channel Message to
#peoplewith the composed digest.#Leave Internal Note in an internal Linear weekly issue capturing the digest contents for audit.
Open Enrollment & Benefits Changes
Playbooks
/
Open Enrollment & Benefits Changes
Open Enrollment & Benefits Changes
Created by

Console Team
Published
HR
Workday
Gusto
Justworks
Conditions
Scheduled — Annual open enrollment window (typically November 1 kickoff, weekly reminders, closes November 30)
Instructions
On kickoff date:
#Custom Workday Get Eligible Employees for benefits enrollment.
For each, #Lookup Users with
includeDirectReportsto identify those with dependents in HRIS.
For each eligible employee:
#Custom Generate Personalized Plan Comparison action that pulls current elections + new plan options + cost deltas.
#Send Email to
$employee.emailwith the comparison and a deep link to the enrollment portal.#Send Direct Message with a TL;DR and the deadline.
schedule_action wakes at week 1, 2, 3 (3 reminders) for non-completers:
#Custom Workday Get Enrollment Status to identify who hasn't enrolled.
#Send Direct Message with increasing urgency: "Open enrollment closes in {{X}} days. You haven't made elections yet. Default coverage will continue if you don't act."
Final week (3 days before close):
#Send Channel Message to
#all-handswith a final reminder.For non-completers: #Send Direct Message to their manager flagging the employee.
After close:
#Custom Workday Submit Enrollment Batch to push elections to carriers (Gusto / Justworks / direct carrier portal).
#Custom Get Enrollment Confirmations from carriers.
For each: #Send Email confirming enrollment with plan details, effective date, ID card delivery.
#Send Channel Message to
#peoplepost-close summary: enrollment rate, plan distribution, common changes.#Leave Internal Note in an internal tracking issue with the cohort completion data.
Open Enrollment & Benefits Changes
Playbooks
/
Open Enrollment & Benefits Changes
Open Enrollment & Benefits Changes
Created by

Console Team
Published
HR
Workday
Gusto
Justworks
Conditions
Scheduled — Annual open enrollment window (typically November 1 kickoff, weekly reminders, closes November 30)
Instructions
On kickoff date:
#Custom Workday Get Eligible Employees for benefits enrollment.
For each, #Lookup Users with
includeDirectReportsto identify those with dependents in HRIS.
For each eligible employee:
#Custom Generate Personalized Plan Comparison action that pulls current elections + new plan options + cost deltas.
#Send Email to
$employee.emailwith the comparison and a deep link to the enrollment portal.#Send Direct Message with a TL;DR and the deadline.
schedule_action wakes at week 1, 2, 3 (3 reminders) for non-completers:
#Custom Workday Get Enrollment Status to identify who hasn't enrolled.
#Send Direct Message with increasing urgency: "Open enrollment closes in {{X}} days. You haven't made elections yet. Default coverage will continue if you don't act."
Final week (3 days before close):
#Send Channel Message to
#all-handswith a final reminder.For non-completers: #Send Direct Message to their manager flagging the employee.
After close:
#Custom Workday Submit Enrollment Batch to push elections to carriers (Gusto / Justworks / direct carrier portal).
#Custom Get Enrollment Confirmations from carriers.
For each: #Send Email confirming enrollment with plan details, effective date, ID card delivery.
#Send Channel Message to
#peoplepost-close summary: enrollment rate, plan distribution, common changes.#Leave Internal Note in an internal tracking issue with the cohort completion data.
Open Enrollment & Benefits Changes
Playbooks
/
Open Enrollment & Benefits Changes
Open Enrollment & Benefits Changes
Created by

Console Team
Published
HR
Workday
Gusto
Justworks
Conditions
Scheduled — Annual open enrollment window (typically November 1 kickoff, weekly reminders, closes November 30)
Instructions
On kickoff date:
#Custom Workday Get Eligible Employees for benefits enrollment.
For each, #Lookup Users with
includeDirectReportsto identify those with dependents in HRIS.
For each eligible employee:
#Custom Generate Personalized Plan Comparison action that pulls current elections + new plan options + cost deltas.
#Send Email to
$employee.emailwith the comparison and a deep link to the enrollment portal.#Send Direct Message with a TL;DR and the deadline.
schedule_action wakes at week 1, 2, 3 (3 reminders) for non-completers:
#Custom Workday Get Enrollment Status to identify who hasn't enrolled.
#Send Direct Message with increasing urgency: "Open enrollment closes in {{X}} days. You haven't made elections yet. Default coverage will continue if you don't act."
Final week (3 days before close):
#Send Channel Message to
#all-handswith a final reminder.For non-completers: #Send Direct Message to their manager flagging the employee.
After close:
#Custom Workday Submit Enrollment Batch to push elections to carriers (Gusto / Justworks / direct carrier portal).
#Custom Get Enrollment Confirmations from carriers.
For each: #Send Email confirming enrollment with plan details, effective date, ID card delivery.
#Send Channel Message to
#peoplepost-close summary: enrollment rate, plan distribution, common changes.#Leave Internal Note in an internal tracking issue with the cohort completion data.
Manager Change Cascade
Playbooks
/
Manager Change Cascade
Manager Change Cascade
Created by

Console Team
Published
HR
Okta
Google Calendar
Slack
+1
Conditions
Webhook — worker.manager_changed from HRIS Variables: $employee.email, $oldManagerEmail, $newManagerEmail, $effectiveDate
Instructions
#Lookup Users on the employee, old manager, and new manager with
includeGroups.If
$effectiveDateis in the future, schedule_action wake on that date and exit; otherwise proceed.Update identity systems:
#Update Okta User Profile (Custom) to set
managerto$newManagerEmail.#Custom HRIS Confirm Manager Update (idempotent confirmation that the webhook reflected).
Slack usergroup sync:
For each Slack usergroup the old manager owns that the employee is in: #Remove Usergroup Users if it's a direct-reports-only group.
#Update Usergroup to add the employee to the new manager's direct-reports usergroup.
Access policy cascade:
#Custom List Policies Where Manager Is Approver for the employee.
For each: #custom Update Policy Approver to point at the new manager going forward (existing pending approvals keep old approver unless re-routed).
Calendar / 1:1 cascade:
#Custom Google Calendar Find Recurring 1:1 between employee and old manager.
#Send Direct Message to both managers suggesting the new 1:1 cadence; offer to auto-create the new 1:1 via custom Google Calendar Create Recurring.
Org chart update via custom Update People Directory Manager.
#Send Direct Message to the employee, old manager, and new manager with a transition summary (when the change took effect, what got rerouted, what 1:1s changed).
#Send Channel Message to
#org-changeswith the change.#Leave Internal Note capturing all downstream syncs.
Manager Change Cascade
Playbooks
/
Manager Change Cascade
Manager Change Cascade
Created by

Console Team
Published
HR
Okta
Google Calendar
Slack
+1
Conditions
Webhook — worker.manager_changed from HRIS Variables: $employee.email, $oldManagerEmail, $newManagerEmail, $effectiveDate
Instructions
#Lookup Users on the employee, old manager, and new manager with
includeGroups.If
$effectiveDateis in the future, schedule_action wake on that date and exit; otherwise proceed.Update identity systems:
#Update Okta User Profile (Custom) to set
managerto$newManagerEmail.#Custom HRIS Confirm Manager Update (idempotent confirmation that the webhook reflected).
Slack usergroup sync:
For each Slack usergroup the old manager owns that the employee is in: #Remove Usergroup Users if it's a direct-reports-only group.
#Update Usergroup to add the employee to the new manager's direct-reports usergroup.
Access policy cascade:
#Custom List Policies Where Manager Is Approver for the employee.
For each: #custom Update Policy Approver to point at the new manager going forward (existing pending approvals keep old approver unless re-routed).
Calendar / 1:1 cascade:
#Custom Google Calendar Find Recurring 1:1 between employee and old manager.
#Send Direct Message to both managers suggesting the new 1:1 cadence; offer to auto-create the new 1:1 via custom Google Calendar Create Recurring.
Org chart update via custom Update People Directory Manager.
#Send Direct Message to the employee, old manager, and new manager with a transition summary (when the change took effect, what got rerouted, what 1:1s changed).
#Send Channel Message to
#org-changeswith the change.#Leave Internal Note capturing all downstream syncs.
Manager Change Cascade
Playbooks
/
Manager Change Cascade
Manager Change Cascade
Created by

Console Team
Published
HR
Okta
Google Calendar
Slack
+1
Conditions
Webhook — worker.manager_changed from HRIS Variables: $employee.email, $oldManagerEmail, $newManagerEmail, $effectiveDate
Instructions
#Lookup Users on the employee, old manager, and new manager with
includeGroups.If
$effectiveDateis in the future, schedule_action wake on that date and exit; otherwise proceed.Update identity systems:
#Update Okta User Profile (Custom) to set
managerto$newManagerEmail.#Custom HRIS Confirm Manager Update (idempotent confirmation that the webhook reflected).
Slack usergroup sync:
For each Slack usergroup the old manager owns that the employee is in: #Remove Usergroup Users if it's a direct-reports-only group.
#Update Usergroup to add the employee to the new manager's direct-reports usergroup.
Access policy cascade:
#Custom List Policies Where Manager Is Approver for the employee.
For each: #custom Update Policy Approver to point at the new manager going forward (existing pending approvals keep old approver unless re-routed).
Calendar / 1:1 cascade:
#Custom Google Calendar Find Recurring 1:1 between employee and old manager.
#Send Direct Message to both managers suggesting the new 1:1 cadence; offer to auto-create the new 1:1 via custom Google Calendar Create Recurring.
Org chart update via custom Update People Directory Manager.
#Send Direct Message to the employee, old manager, and new manager with a transition summary (when the change took effect, what got rerouted, what 1:1s changed).
#Send Channel Message to
#org-changeswith the change.#Leave Internal Note capturing all downstream syncs.
30/60/90-Day Check-Ins
Playbooks
/
30/60/90-Day Check-Ins
30/60/90-Day Check-Ins
Created by

Console Team
Published
HR
Okta
Google Calendar
Google Docs
+8
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
When HR marks an employee as terminated in the HRIS system.
#Custom Workday Query Hires for employees at exactly day 30, day 60, and day 90 from their start date.
For each matching employee:
#Lookup Users with includeManager.
Resolve HRBP via custom Get HRBP for Department.
Create the check-in calendar event:
#Custom Google Calendar Create Event for a 30-min check-in between employee, manager, and HRBP at the next available common slot within 7 days.
Title: "{{Day-30/60/90}} Check-in - {{employee.name}}".
Pre-fill the agenda by pulling signals:
#Custom Lattice Get Engagement Score for the employee (if Lattice is used).
#Search Okta System Log Custom for login activity (proxy for engagement).
#Custom Slack Get User Activity for message volume in team channels.
#Custom Workday Get Goals Progress if goals are tracked.
Generate the agenda doc:
#Custom Generate Check-in Agenda writes a Google Doc with prefilled engagement signals, suggested questions, and free-text sections.
Attach the doc to the calendar event.
Flag off-track signals:
If engagement score dropped, login activity is low, or no goals set:
#Send Channel Message to #hrbp-alerts with: employee, day milestone, signal that's off, manager.
#Send Direct Message to the manager and HRBP with: calendar invite link, agenda doc link, the flagged signals (if any).
#Send Direct Message to the employee with: "You've got a {{day-X}} check-in coming up with {{manager}} and {{hrbp}}. Anything specific you want to discuss? Add to the agenda doc."
schedule_action wake 1 day after the check-in date to follow up: #Send Direct Message to manager + HRBP: "How did it go? Anything we should escalate or change?"
#Leave Internal Note in the employee's internal HR record.
30/60/90-Day Check-Ins
Playbooks
/
30/60/90-Day Check-Ins
30/60/90-Day Check-Ins
Created by

Console Team
Published
HR
Okta
Google Calendar
Google Docs
+8
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
When HR marks an employee as terminated in the HRIS system.
#Custom Workday Query Hires for employees at exactly day 30, day 60, and day 90 from their start date.
For each matching employee:
#Lookup Users with includeManager.
Resolve HRBP via custom Get HRBP for Department.
Create the check-in calendar event:
#Custom Google Calendar Create Event for a 30-min check-in between employee, manager, and HRBP at the next available common slot within 7 days.
Title: "{{Day-30/60/90}} Check-in - {{employee.name}}".
Pre-fill the agenda by pulling signals:
#Custom Lattice Get Engagement Score for the employee (if Lattice is used).
#Search Okta System Log Custom for login activity (proxy for engagement).
#Custom Slack Get User Activity for message volume in team channels.
#Custom Workday Get Goals Progress if goals are tracked.
Generate the agenda doc:
#Custom Generate Check-in Agenda writes a Google Doc with prefilled engagement signals, suggested questions, and free-text sections.
Attach the doc to the calendar event.
Flag off-track signals:
If engagement score dropped, login activity is low, or no goals set:
#Send Channel Message to #hrbp-alerts with: employee, day milestone, signal that's off, manager.
#Send Direct Message to the manager and HRBP with: calendar invite link, agenda doc link, the flagged signals (if any).
#Send Direct Message to the employee with: "You've got a {{day-X}} check-in coming up with {{manager}} and {{hrbp}}. Anything specific you want to discuss? Add to the agenda doc."
schedule_action wake 1 day after the check-in date to follow up: #Send Direct Message to manager + HRBP: "How did it go? Anything we should escalate or change?"
#Leave Internal Note in the employee's internal HR record.
30/60/90-Day Check-Ins
Playbooks
/
30/60/90-Day Check-Ins
30/60/90-Day Check-Ins
Created by

Console Team
Published
HR
Okta
Google Calendar
Google Docs
+8
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
When HR marks an employee as terminated in the HRIS system.
#Custom Workday Query Hires for employees at exactly day 30, day 60, and day 90 from their start date.
For each matching employee:
#Lookup Users with includeManager.
Resolve HRBP via custom Get HRBP for Department.
Create the check-in calendar event:
#Custom Google Calendar Create Event for a 30-min check-in between employee, manager, and HRBP at the next available common slot within 7 days.
Title: "{{Day-30/60/90}} Check-in - {{employee.name}}".
Pre-fill the agenda by pulling signals:
#Custom Lattice Get Engagement Score for the employee (if Lattice is used).
#Search Okta System Log Custom for login activity (proxy for engagement).
#Custom Slack Get User Activity for message volume in team channels.
#Custom Workday Get Goals Progress if goals are tracked.
Generate the agenda doc:
#Custom Generate Check-in Agenda writes a Google Doc with prefilled engagement signals, suggested questions, and free-text sections.
Attach the doc to the calendar event.
Flag off-track signals:
If engagement score dropped, login activity is low, or no goals set:
#Send Channel Message to #hrbp-alerts with: employee, day milestone, signal that's off, manager.
#Send Direct Message to the manager and HRBP with: calendar invite link, agenda doc link, the flagged signals (if any).
#Send Direct Message to the employee with: "You've got a {{day-X}} check-in coming up with {{manager}} and {{hrbp}}. Anything specific you want to discuss? Add to the agenda doc."
schedule_action wake 1 day after the check-in date to follow up: #Send Direct Message to manager + HRBP: "How did it go? Anything we should escalate or change?"
#Leave Internal Note in the employee's internal HR record.
Milestone Moments
Playbooks
/
Milestone Moments
Milestone Moments
Created by

Console Team
Published
HR
Workday
Ramp
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
#Custom Workday Query Today's Anniversaries for tenure anniversaries today (1/3/5/10 year).
#Custom Workday Query Today's Birthdays for birthdays today.
#Custom Workday Query Today's Major Milestones for promotions, parental return, etc.
For each anniversary:
#Lookup Users with
includeManager.Pick a personalized message template (1-year vs 5-year vs 10-year).
#Send Channel Message to
#anniversarieswith a celebration message including tenure, role evolution (if available from Workday history).
For tenure milestones (1/3/5/10 year):
#Custom Bonusly Send Tenure Recognition with the matching point amount.
For 5+ year tenure, #custom Send Tenure Gift via Ramp.
#Send Direct Message to each manager nudging recognition: "{{report.name}} hits {{tenure}} years today — drop a note in {{team-channel}}?"
For birthdays:
#Send Direct Message to the employee (private) with a birthday greeting.
If the employee has opted in to public birthdays (check HRIS field): #Send Channel Message to their team channel.
For major milestones (e.g. parental return, promotion announcement):
#Custom Get Milestone Detail to compose the right message.
#Send Channel Message to the appropriate channel.
#Leave Internal Note for audit.
Milestone Moments
Playbooks
/
Milestone Moments
Milestone Moments
Created by

Console Team
Published
HR
Workday
Ramp
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
#Custom Workday Query Today's Anniversaries for tenure anniversaries today (1/3/5/10 year).
#Custom Workday Query Today's Birthdays for birthdays today.
#Custom Workday Query Today's Major Milestones for promotions, parental return, etc.
For each anniversary:
#Lookup Users with
includeManager.Pick a personalized message template (1-year vs 5-year vs 10-year).
#Send Channel Message to
#anniversarieswith a celebration message including tenure, role evolution (if available from Workday history).
For tenure milestones (1/3/5/10 year):
#Custom Bonusly Send Tenure Recognition with the matching point amount.
For 5+ year tenure, #custom Send Tenure Gift via Ramp.
#Send Direct Message to each manager nudging recognition: "{{report.name}} hits {{tenure}} years today — drop a note in {{team-channel}}?"
For birthdays:
#Send Direct Message to the employee (private) with a birthday greeting.
If the employee has opted in to public birthdays (check HRIS field): #Send Channel Message to their team channel.
For major milestones (e.g. parental return, promotion announcement):
#Custom Get Milestone Detail to compose the right message.
#Send Channel Message to the appropriate channel.
#Leave Internal Note for audit.
Milestone Moments
Playbooks
/
Milestone Moments
Milestone Moments
Created by

Console Team
Published
HR
Workday
Ramp
Conditions
Scheduled — every day at 8:00 AM America/Chicago
Instructions
#Custom Workday Query Today's Anniversaries for tenure anniversaries today (1/3/5/10 year).
#Custom Workday Query Today's Birthdays for birthdays today.
#Custom Workday Query Today's Major Milestones for promotions, parental return, etc.
For each anniversary:
#Lookup Users with
includeManager.Pick a personalized message template (1-year vs 5-year vs 10-year).
#Send Channel Message to
#anniversarieswith a celebration message including tenure, role evolution (if available from Workday history).
For tenure milestones (1/3/5/10 year):
#Custom Bonusly Send Tenure Recognition with the matching point amount.
For 5+ year tenure, #custom Send Tenure Gift via Ramp.
#Send Direct Message to each manager nudging recognition: "{{report.name}} hits {{tenure}} years today — drop a note in {{team-channel}}?"
For birthdays:
#Send Direct Message to the employee (private) with a birthday greeting.
If the employee has opted in to public birthdays (check HRIS field): #Send Channel Message to their team channel.
For major milestones (e.g. parental return, promotion announcement):
#Custom Get Milestone Detail to compose the right message.
#Send Channel Message to the appropriate channel.
#Leave Internal Note for audit.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
HR
Google Calendar
Workday
Rippling
+3
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.terminationType (voluntary / involuntary), $employee.personalEmail
Instructions
#Lookup Users on
$employee.emailwithincludeManagerandincludeGroups.Branch on
$employee.terminationType:Voluntary → run full sequence below.
Involuntary → skip exit interview, accelerate Drive transfer and document delivery to same day. Coordinate with security via #Send Channel Message to
#hr-security-sync.
Schedule exit interview:
#Custom Calendly Send Booking Link for a 45-min exit interview with HRBP, due before
$employee.terminationDate.#Send Direct Message to
$employee.emailwith the link and context.
File and calendar transition:
#Transfer Drive Files ownership to
$employee.managerEmail.#Custom Google Calendar Transfer Events for any recurring meetings owned by the employee to the manager.
#Out Of Office to set a custom auto-reply: "I'm no longer with the company. For {{team}} matters please contact {{manager.email}}."
Final paystub and payroll:
#Custom Workday/Rippling/Gusto Generate Final Paystub with last day worked and any PTO payout.
#Custom Workday Trigger Final Pay Recalc for unused PTO conversion and severance (if applicable).
#Send Email to
$employee.personalEmailwith the final paystub and benefits continuation info (COBRA).
Directory cleanup:
#Custom Update People Directory Remove to remove from the internal org chart.
#Custom Update Org Chart Reassign Reports to move any direct reports to the manager temporarily.
Separation paperwork:
#Custom DocuSign Send Separation Agreement with the appropriate template (voluntary / involuntary).
schedule_action wake at 7 days to check signature status; #Send Email reminder if unsigned.
Knowledge transfer:
#Send Direct Message to the manager: a checklist (project handoff doc, vendor relationships, ongoing commitments) with a #Trigger Form to confirm completion.
Recognition (voluntary only):
#Send Channel Message to
#farewells(or the team channel) on the termination date with a thank-you note from the manager.
#Leave Internal Note capturing all handoff details, final pay status, signature status.
#Create Linear Issue in the HR-Audit project documenting the offboarding for compliance.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
HR
Google Calendar
Workday
Rippling
+3
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.terminationType (voluntary / involuntary), $employee.personalEmail
Instructions
#Lookup Users on
$employee.emailwithincludeManagerandincludeGroups.Branch on
$employee.terminationType:Voluntary → run full sequence below.
Involuntary → skip exit interview, accelerate Drive transfer and document delivery to same day. Coordinate with security via #Send Channel Message to
#hr-security-sync.
Schedule exit interview:
#Custom Calendly Send Booking Link for a 45-min exit interview with HRBP, due before
$employee.terminationDate.#Send Direct Message to
$employee.emailwith the link and context.
File and calendar transition:
#Transfer Drive Files ownership to
$employee.managerEmail.#Custom Google Calendar Transfer Events for any recurring meetings owned by the employee to the manager.
#Out Of Office to set a custom auto-reply: "I'm no longer with the company. For {{team}} matters please contact {{manager.email}}."
Final paystub and payroll:
#Custom Workday/Rippling/Gusto Generate Final Paystub with last day worked and any PTO payout.
#Custom Workday Trigger Final Pay Recalc for unused PTO conversion and severance (if applicable).
#Send Email to
$employee.personalEmailwith the final paystub and benefits continuation info (COBRA).
Directory cleanup:
#Custom Update People Directory Remove to remove from the internal org chart.
#Custom Update Org Chart Reassign Reports to move any direct reports to the manager temporarily.
Separation paperwork:
#Custom DocuSign Send Separation Agreement with the appropriate template (voluntary / involuntary).
schedule_action wake at 7 days to check signature status; #Send Email reminder if unsigned.
Knowledge transfer:
#Send Direct Message to the manager: a checklist (project handoff doc, vendor relationships, ongoing commitments) with a #Trigger Form to confirm completion.
Recognition (voluntary only):
#Send Channel Message to
#farewells(or the team channel) on the termination date with a thank-you note from the manager.
#Leave Internal Note capturing all handoff details, final pay status, signature status.
#Create Linear Issue in the HR-Audit project documenting the offboarding for compliance.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
HR
Google Calendar
Workday
Rippling
+3
Conditions
Webhook — worker.terminated Variables: $employee.email, $employee.managerEmail, $employee.terminationDate, $employee.terminationType (voluntary / involuntary), $employee.personalEmail
Instructions
#Lookup Users on
$employee.emailwithincludeManagerandincludeGroups.Branch on
$employee.terminationType:Voluntary → run full sequence below.
Involuntary → skip exit interview, accelerate Drive transfer and document delivery to same day. Coordinate with security via #Send Channel Message to
#hr-security-sync.
Schedule exit interview:
#Custom Calendly Send Booking Link for a 45-min exit interview with HRBP, due before
$employee.terminationDate.#Send Direct Message to
$employee.emailwith the link and context.
File and calendar transition:
#Transfer Drive Files ownership to
$employee.managerEmail.#Custom Google Calendar Transfer Events for any recurring meetings owned by the employee to the manager.
#Out Of Office to set a custom auto-reply: "I'm no longer with the company. For {{team}} matters please contact {{manager.email}}."
Final paystub and payroll:
#Custom Workday/Rippling/Gusto Generate Final Paystub with last day worked and any PTO payout.
#Custom Workday Trigger Final Pay Recalc for unused PTO conversion and severance (if applicable).
#Send Email to
$employee.personalEmailwith the final paystub and benefits continuation info (COBRA).
Directory cleanup:
#Custom Update People Directory Remove to remove from the internal org chart.
#Custom Update Org Chart Reassign Reports to move any direct reports to the manager temporarily.
Separation paperwork:
#Custom DocuSign Send Separation Agreement with the appropriate template (voluntary / involuntary).
schedule_action wake at 7 days to check signature status; #Send Email reminder if unsigned.
Knowledge transfer:
#Send Direct Message to the manager: a checklist (project handoff doc, vendor relationships, ongoing commitments) with a #Trigger Form to confirm completion.
Recognition (voluntary only):
#Send Channel Message to
#farewells(or the team channel) on the termination date with a thank-you note from the manager.
#Leave Internal Note capturing all handoff details, final pay status, signature status.
#Create Linear Issue in the HR-Audit project documenting the offboarding for compliance.
Mandatory Training Assignment
Playbooks
/
Mandatory Training Assignment
Mandatory Training Assignment
Created by

Console Team
Published
HR
Workday
Vanta
Conditions
Scheduled — every day at 10:00 AM America/Chicago (also triggered from HR-1 for new hires)
Instructions
Determine which employees need assignment:
For new hires: passed in from HR-1.
For cadence-based: #Custom Workday Query Workers with
last_training_completion < {{cadence}}(annual / biannual).For role changes: from HR-6.
For each employee:
#Lookup Users with
includeManageranddepartment.Determine required modules based on role:
All employees → security awareness, harassment prevention, code of conduct, GDPR awareness.
Engineering → secure coding, OWASP top 10.
Finance → SOX awareness, anti-fraud.
Sales → MAP-compliant selling, customer data handling.
Managers → manager training, performance feedback, anti-harassment leader training.
#Custom LearnUpon Assign Modules with the matching module IDs and a 30-day completion deadline.
#Send Direct Message to the employee with: list of assigned modules, total estimated time, deadline, LearnUpon link.
schedule_action wakes at day 7, 14, 21, 30, 60, 90:
On each wake, #custom LearnUpon Get Completion Status for the employee.
If incomplete:
Day 7, 14, 21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee: "Overdue."
Day 60 → #Send Channel Message to
#hrbpwith the employee.Day 90 → #Send Direct Message to HRBP + employee's skip-level manager; flag in HRIS.
On completion:
#Custom Vanta Upload Evidence with the completion certificate.
#Send Direct Message to the employee with a thank-you.
#Leave Internal Note capturing module completion dates.
Quarterly: #Send Channel Message to
#compliancewith org-wide completion stats via #Run Query.
Mandatory Training Assignment
Playbooks
/
Mandatory Training Assignment
Mandatory Training Assignment
Created by

Console Team
Published
HR
Workday
Vanta
Conditions
Scheduled — every day at 10:00 AM America/Chicago (also triggered from HR-1 for new hires)
Instructions
Determine which employees need assignment:
For new hires: passed in from HR-1.
For cadence-based: #Custom Workday Query Workers with
last_training_completion < {{cadence}}(annual / biannual).For role changes: from HR-6.
For each employee:
#Lookup Users with
includeManageranddepartment.Determine required modules based on role:
All employees → security awareness, harassment prevention, code of conduct, GDPR awareness.
Engineering → secure coding, OWASP top 10.
Finance → SOX awareness, anti-fraud.
Sales → MAP-compliant selling, customer data handling.
Managers → manager training, performance feedback, anti-harassment leader training.
#Custom LearnUpon Assign Modules with the matching module IDs and a 30-day completion deadline.
#Send Direct Message to the employee with: list of assigned modules, total estimated time, deadline, LearnUpon link.
schedule_action wakes at day 7, 14, 21, 30, 60, 90:
On each wake, #custom LearnUpon Get Completion Status for the employee.
If incomplete:
Day 7, 14, 21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee: "Overdue."
Day 60 → #Send Channel Message to
#hrbpwith the employee.Day 90 → #Send Direct Message to HRBP + employee's skip-level manager; flag in HRIS.
On completion:
#Custom Vanta Upload Evidence with the completion certificate.
#Send Direct Message to the employee with a thank-you.
#Leave Internal Note capturing module completion dates.
Quarterly: #Send Channel Message to
#compliancewith org-wide completion stats via #Run Query.
Mandatory Training Assignment
Playbooks
/
Mandatory Training Assignment
Mandatory Training Assignment
Created by

Console Team
Published
HR
Workday
Vanta
Conditions
Scheduled — every day at 10:00 AM America/Chicago (also triggered from HR-1 for new hires)
Instructions
Determine which employees need assignment:
For new hires: passed in from HR-1.
For cadence-based: #Custom Workday Query Workers with
last_training_completion < {{cadence}}(annual / biannual).For role changes: from HR-6.
For each employee:
#Lookup Users with
includeManageranddepartment.Determine required modules based on role:
All employees → security awareness, harassment prevention, code of conduct, GDPR awareness.
Engineering → secure coding, OWASP top 10.
Finance → SOX awareness, anti-fraud.
Sales → MAP-compliant selling, customer data handling.
Managers → manager training, performance feedback, anti-harassment leader training.
#Custom LearnUpon Assign Modules with the matching module IDs and a 30-day completion deadline.
#Send Direct Message to the employee with: list of assigned modules, total estimated time, deadline, LearnUpon link.
schedule_action wakes at day 7, 14, 21, 30, 60, 90:
On each wake, #custom LearnUpon Get Completion Status for the employee.
If incomplete:
Day 7, 14, 21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee: "Overdue."
Day 60 → #Send Channel Message to
#hrbpwith the employee.Day 90 → #Send Direct Message to HRBP + employee's skip-level manager; flag in HRIS.
On completion:
#Custom Vanta Upload Evidence with the completion certificate.
#Send Direct Message to the employee with a thank-you.
#Leave Internal Note capturing module completion dates.
Quarterly: #Send Channel Message to
#compliancewith org-wide completion stats via #Run Query.
Performance Review Cycle Kickoff
Playbooks
/
Performance Review Cycle Kickoff
Performance Review Cycle Kickoff
Created by

Console Team
Published
HR
Google Calendar
Lattice
Workday
Conditions
Scheduled — on cycle start date (e.g. Q1 cycle on Jan 5, Q3 on Jul 5)
Instructions
#Custom Lattice Create Cycle with cycle name, start date, end date, review components.
#Custom Workday Query All Workers with active status to get the population.
For each employee:
#Lookup Users with
includeManager.#Custom Workday Get Active Goals to seed Lattice goals.
#Custom Lattice Populate Reviewee with goals + suggested peer reviewers (based on org chart + calendar collaborators from a custom Google Calendar query).
Set deadlines:
#Custom Lattice Set Cycle Deadlines for self-review, peer-review, manager-review, calibration, delivery.
#Send Channel Message to
#all-handsannouncing cycle kickoff with overview and deadlines.#Send Direct Message to each employee with: their assignments, deadlines, link to Lattice.
#Send Direct Message to each manager with: their direct reports' reviews, calibration schedule, peer-review prompts.
schedule_action wakes at 14, 7, 3, 1 days before each deadline:
On each wake, custom Lattice Get Incomplete Reviews for the deadline window.
#Send Direct Message to each non-submitter with increasing urgency.
At each deadline:
#Custom Lattice Get Overdue Reviewers for the deadline.
#Send Channel Message to skip-level managers tagging their reports who are overdue.
#Send Channel Message to
#hrbppost-cycle stats with completion rate via #Run Query.#Leave Internal Note capturing cycle config and key dates.
Performance Review Cycle Kickoff
Playbooks
/
Performance Review Cycle Kickoff
Performance Review Cycle Kickoff
Created by

Console Team
Published
HR
Google Calendar
Lattice
Workday
Conditions
Scheduled — on cycle start date (e.g. Q1 cycle on Jan 5, Q3 on Jul 5)
Instructions
#Custom Lattice Create Cycle with cycle name, start date, end date, review components.
#Custom Workday Query All Workers with active status to get the population.
For each employee:
#Lookup Users with
includeManager.#Custom Workday Get Active Goals to seed Lattice goals.
#Custom Lattice Populate Reviewee with goals + suggested peer reviewers (based on org chart + calendar collaborators from a custom Google Calendar query).
Set deadlines:
#Custom Lattice Set Cycle Deadlines for self-review, peer-review, manager-review, calibration, delivery.
#Send Channel Message to
#all-handsannouncing cycle kickoff with overview and deadlines.#Send Direct Message to each employee with: their assignments, deadlines, link to Lattice.
#Send Direct Message to each manager with: their direct reports' reviews, calibration schedule, peer-review prompts.
schedule_action wakes at 14, 7, 3, 1 days before each deadline:
On each wake, custom Lattice Get Incomplete Reviews for the deadline window.
#Send Direct Message to each non-submitter with increasing urgency.
At each deadline:
#Custom Lattice Get Overdue Reviewers for the deadline.
#Send Channel Message to skip-level managers tagging their reports who are overdue.
#Send Channel Message to
#hrbppost-cycle stats with completion rate via #Run Query.#Leave Internal Note capturing cycle config and key dates.
Performance Review Cycle Kickoff
Playbooks
/
Performance Review Cycle Kickoff
Performance Review Cycle Kickoff
Created by

Console Team
Published
HR
Google Calendar
Lattice
Workday
Conditions
Scheduled — on cycle start date (e.g. Q1 cycle on Jan 5, Q3 on Jul 5)
Instructions
#Custom Lattice Create Cycle with cycle name, start date, end date, review components.
#Custom Workday Query All Workers with active status to get the population.
For each employee:
#Lookup Users with
includeManager.#Custom Workday Get Active Goals to seed Lattice goals.
#Custom Lattice Populate Reviewee with goals + suggested peer reviewers (based on org chart + calendar collaborators from a custom Google Calendar query).
Set deadlines:
#Custom Lattice Set Cycle Deadlines for self-review, peer-review, manager-review, calibration, delivery.
#Send Channel Message to
#all-handsannouncing cycle kickoff with overview and deadlines.#Send Direct Message to each employee with: their assignments, deadlines, link to Lattice.
#Send Direct Message to each manager with: their direct reports' reviews, calibration schedule, peer-review prompts.
schedule_action wakes at 14, 7, 3, 1 days before each deadline:
On each wake, custom Lattice Get Incomplete Reviews for the deadline window.
#Send Direct Message to each non-submitter with increasing urgency.
At each deadline:
#Custom Lattice Get Overdue Reviewers for the deadline.
#Send Channel Message to skip-level managers tagging their reports who are overdue.
#Send Channel Message to
#hrbppost-cycle stats with completion rate via #Run Query.#Leave Internal Note capturing cycle config and key dates.
Engagement & Pulse Surveys
Playbooks
/
Engagement & Pulse Surveys
Engagement & Pulse Surveys
Created by

Console Team
Published
HR
Workday
Conditions
Scheduled — quarterly eNPS (every 90 days) or monthly pulse (1st of each month)
Instructions
Determine survey type and target cohort:
eNPS → all employees with tenure >30 days.
Pulse → specific team or all employees with tenure >90 days.
Targeted pulse → custom criteria from a stored config.
#Custom Workday Query Workers with filters (tenure, team, location) to get the cohort.
#Custom Culture Amp Create Survey Run with the survey template and cohort.
For each cohort member:
#Send Direct Message with the survey link, time estimate, anonymity statement, deadline.
schedule_action wakes at day 3, 7, 10 (close at day 14):
#Custom Culture Amp Get Response Status to identify non-respondents.
#Send Direct Message reminder (skip those who completed).
At close:
For each manager: #Send Direct Message with their team's private results (min 5 respondents for anonymity).
For HRBP: full org cut.
Flag concerning drops:
For any team with a score drop >10% week-over-week or compared to last cycle, #Send Channel Message to
#hrbp-alertswith the team and the drop.#Custom Generate Drop Analysis with possible signals (recent changes, attrition, etc.) attached to the alert.
Post org-wide summary:
#Send Channel Message to
#peoplewith high-level trends (no team-level data) and a link to the leadership deck.
#Leave Internal Note capturing run dates, response rate, key shifts.
Engagement & Pulse Surveys
Playbooks
/
Engagement & Pulse Surveys
Engagement & Pulse Surveys
Created by

Console Team
Published
HR
Workday
Conditions
Scheduled — quarterly eNPS (every 90 days) or monthly pulse (1st of each month)
Instructions
Determine survey type and target cohort:
eNPS → all employees with tenure >30 days.
Pulse → specific team or all employees with tenure >90 days.
Targeted pulse → custom criteria from a stored config.
#Custom Workday Query Workers with filters (tenure, team, location) to get the cohort.
#Custom Culture Amp Create Survey Run with the survey template and cohort.
For each cohort member:
#Send Direct Message with the survey link, time estimate, anonymity statement, deadline.
schedule_action wakes at day 3, 7, 10 (close at day 14):
#Custom Culture Amp Get Response Status to identify non-respondents.
#Send Direct Message reminder (skip those who completed).
At close:
For each manager: #Send Direct Message with their team's private results (min 5 respondents for anonymity).
For HRBP: full org cut.
Flag concerning drops:
For any team with a score drop >10% week-over-week or compared to last cycle, #Send Channel Message to
#hrbp-alertswith the team and the drop.#Custom Generate Drop Analysis with possible signals (recent changes, attrition, etc.) attached to the alert.
Post org-wide summary:
#Send Channel Message to
#peoplewith high-level trends (no team-level data) and a link to the leadership deck.
#Leave Internal Note capturing run dates, response rate, key shifts.
Engagement & Pulse Surveys
Playbooks
/
Engagement & Pulse Surveys
Engagement & Pulse Surveys
Created by

Console Team
Published
HR
Workday
Conditions
Scheduled — quarterly eNPS (every 90 days) or monthly pulse (1st of each month)
Instructions
Determine survey type and target cohort:
eNPS → all employees with tenure >30 days.
Pulse → specific team or all employees with tenure >90 days.
Targeted pulse → custom criteria from a stored config.
#Custom Workday Query Workers with filters (tenure, team, location) to get the cohort.
#Custom Culture Amp Create Survey Run with the survey template and cohort.
For each cohort member:
#Send Direct Message with the survey link, time estimate, anonymity statement, deadline.
schedule_action wakes at day 3, 7, 10 (close at day 14):
#Custom Culture Amp Get Response Status to identify non-respondents.
#Send Direct Message reminder (skip those who completed).
At close:
For each manager: #Send Direct Message with their team's private results (min 5 respondents for anonymity).
For HRBP: full org cut.
Flag concerning drops:
For any team with a score drop >10% week-over-week or compared to last cycle, #Send Channel Message to
#hrbp-alertswith the team and the drop.#Custom Generate Drop Analysis with possible signals (recent changes, attrition, etc.) attached to the alert.
Post org-wide summary:
#Send Channel Message to
#peoplewith high-level trends (no team-level data) and a link to the leadership deck.
#Leave Internal Note capturing run dates, response rate, key shifts.
Address & Name Change
Playbooks
/
Address & Name Change
Address & Name Change
Created by

Console Team
Published
HR
Okta
Slack
Workday
+2
Conditions
Requester asks to update their legal name (post-marriage, post-correction) or address.
Instructions
Parse the change type (legal name / preferred name / address / both).
#Lookup Users on the requester.
#Trigger Form to collect:
For legal name change: new legal first/middle/last, documentation (marriage cert / court order upload).
For address: new street, city, state, zip, country, effective date.
Whether to also update preferred name (yes/no).
Reason (helps with audit trail).
Validate the documentation:
For legal name change → custom Validate Name Change Docs (HR review required for first-pass).
#Request Approval from HRBP for legal name change.
Execute changes on effective date (use schedule_action if future):
#Custom Workday Update Worker with new fields.
#Update Okta User Profile (Custom) to update name fields, login email if name-based.
For legal name change with new login email:
#Create User Alias (Google) for the old email to forward to the new.
For address change:
#Custom Update Shipping Address in asset DB for any future device shipments.
#Send Direct Message to the requester with a checklist of what changed where, and what they need to do themselves (e.g. "Update your I-9, update your Slack avatar, update your title at events").
#Send Channel Message to
#org-changesfor the legal name change announcement (only if requester opts in).#Leave Internal Note capturing the change, documentation, approval trail.
Address & Name Change
Playbooks
/
Address & Name Change
Address & Name Change
Created by

Console Team
Published
HR
Okta
Slack
Workday
+2
Conditions
Requester asks to update their legal name (post-marriage, post-correction) or address.
Instructions
Parse the change type (legal name / preferred name / address / both).
#Lookup Users on the requester.
#Trigger Form to collect:
For legal name change: new legal first/middle/last, documentation (marriage cert / court order upload).
For address: new street, city, state, zip, country, effective date.
Whether to also update preferred name (yes/no).
Reason (helps with audit trail).
Validate the documentation:
For legal name change → custom Validate Name Change Docs (HR review required for first-pass).
#Request Approval from HRBP for legal name change.
Execute changes on effective date (use schedule_action if future):
#Custom Workday Update Worker with new fields.
#Update Okta User Profile (Custom) to update name fields, login email if name-based.
For legal name change with new login email:
#Create User Alias (Google) for the old email to forward to the new.
For address change:
#Custom Update Shipping Address in asset DB for any future device shipments.
#Send Direct Message to the requester with a checklist of what changed where, and what they need to do themselves (e.g. "Update your I-9, update your Slack avatar, update your title at events").
#Send Channel Message to
#org-changesfor the legal name change announcement (only if requester opts in).#Leave Internal Note capturing the change, documentation, approval trail.
Address & Name Change
Playbooks
/
Address & Name Change
Address & Name Change
Created by

Console Team
Published
HR
Okta
Slack
Workday
+2
Conditions
Requester asks to update their legal name (post-marriage, post-correction) or address.
Instructions
Parse the change type (legal name / preferred name / address / both).
#Lookup Users on the requester.
#Trigger Form to collect:
For legal name change: new legal first/middle/last, documentation (marriage cert / court order upload).
For address: new street, city, state, zip, country, effective date.
Whether to also update preferred name (yes/no).
Reason (helps with audit trail).
Validate the documentation:
For legal name change → custom Validate Name Change Docs (HR review required for first-pass).
#Request Approval from HRBP for legal name change.
Execute changes on effective date (use schedule_action if future):
#Custom Workday Update Worker with new fields.
#Update Okta User Profile (Custom) to update name fields, login email if name-based.
For legal name change with new login email:
#Create User Alias (Google) for the old email to forward to the new.
For address change:
#Custom Update Shipping Address in asset DB for any future device shipments.
#Send Direct Message to the requester with a checklist of what changed where, and what they need to do themselves (e.g. "Update your I-9, update your Slack avatar, update your title at events").
#Send Channel Message to
#org-changesfor the legal name change announcement (only if requester opts in).#Leave Internal Note capturing the change, documentation, approval trail.
I-9 / Right-to-Work
Playbooks
/
I-9 / Right-to-Work
I-9 / Right-to-Work
Created by

Console Team
Published
HR
Workday
Vanta
Linear
+1
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
#Custom Workday Query New Hires for hires at exactly day 1, day 2, and day 3 from their start date, in US locations.
For each new hire:
#Custom Workday Get I-9 Status to check if I-9 is verified.
Skip if already verified.
Day 1:
#Send Direct Message to the new hire with: I-9 deadline explanation (day 3 federal requirement), DocuSign upload link, what documents are acceptable, where to find the doc list.
#Custom DocuSign Send I-9 Section 1 if not yet sent.
Day 2:
If still unverified, #Send Direct Message with a more urgent reminder.
#Send Direct Message to the new hire's manager flagging the upcoming deadline.
Day 3 (deadline day):
If still unverified:
#Send Channel Message to
#hrbpwith employee name, manager, and deadline status.#Send Direct Message to HRBP for direct intervention.
#Custom DocuSign Send I-9 Section 2 to HRBP for in-person verification scheduling.
On completion:
#Custom Workday Mark I-9 Verified with the docs reviewed and dates.
#Custom Vanta Upload Evidence for compliance audit trail.
#Send Direct Message to the new hire confirming.
If not completed by day 3:
#Create Linear Issue in the HR-Compliance project with severity High for HRBP to handle.
#Send Channel Message to
#hr-complianceflagging the audit risk.
#Leave Internal Note capturing dates, escalation path, completion.
I-9 / Right-to-Work
Playbooks
/
I-9 / Right-to-Work
I-9 / Right-to-Work
Created by

Console Team
Published
HR
Workday
Vanta
Linear
+1
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
#Custom Workday Query New Hires for hires at exactly day 1, day 2, and day 3 from their start date, in US locations.
For each new hire:
#Custom Workday Get I-9 Status to check if I-9 is verified.
Skip if already verified.
Day 1:
#Send Direct Message to the new hire with: I-9 deadline explanation (day 3 federal requirement), DocuSign upload link, what documents are acceptable, where to find the doc list.
#Custom DocuSign Send I-9 Section 1 if not yet sent.
Day 2:
If still unverified, #Send Direct Message with a more urgent reminder.
#Send Direct Message to the new hire's manager flagging the upcoming deadline.
Day 3 (deadline day):
If still unverified:
#Send Channel Message to
#hrbpwith employee name, manager, and deadline status.#Send Direct Message to HRBP for direct intervention.
#Custom DocuSign Send I-9 Section 2 to HRBP for in-person verification scheduling.
On completion:
#Custom Workday Mark I-9 Verified with the docs reviewed and dates.
#Custom Vanta Upload Evidence for compliance audit trail.
#Send Direct Message to the new hire confirming.
If not completed by day 3:
#Create Linear Issue in the HR-Compliance project with severity High for HRBP to handle.
#Send Channel Message to
#hr-complianceflagging the audit risk.
#Leave Internal Note capturing dates, escalation path, completion.
I-9 / Right-to-Work
Playbooks
/
I-9 / Right-to-Work
I-9 / Right-to-Work
Created by

Console Team
Published
HR
Workday
Vanta
Linear
+1
Conditions
Scheduled — every day at 9:00 AM America/Chicago
Instructions
#Custom Workday Query New Hires for hires at exactly day 1, day 2, and day 3 from their start date, in US locations.
For each new hire:
#Custom Workday Get I-9 Status to check if I-9 is verified.
Skip if already verified.
Day 1:
#Send Direct Message to the new hire with: I-9 deadline explanation (day 3 federal requirement), DocuSign upload link, what documents are acceptable, where to find the doc list.
#Custom DocuSign Send I-9 Section 1 if not yet sent.
Day 2:
If still unverified, #Send Direct Message with a more urgent reminder.
#Send Direct Message to the new hire's manager flagging the upcoming deadline.
Day 3 (deadline day):
If still unverified:
#Send Channel Message to
#hrbpwith employee name, manager, and deadline status.#Send Direct Message to HRBP for direct intervention.
#Custom DocuSign Send I-9 Section 2 to HRBP for in-person verification scheduling.
On completion:
#Custom Workday Mark I-9 Verified with the docs reviewed and dates.
#Custom Vanta Upload Evidence for compliance audit trail.
#Send Direct Message to the new hire confirming.
If not completed by day 3:
#Create Linear Issue in the HR-Compliance project with severity High for HRBP to handle.
#Send Channel Message to
#hr-complianceflagging the audit risk.
#Leave Internal Note capturing dates, escalation path, completion.
New-Hire Handoff
Playbooks
/
New-Hire Handoff
New-Hire Handoff
Created by

Console Team
Published
HR
Workday

Greenhouse
Ashby
Conditions
Webhook — candidate.hired from Greenhouse/Ashby Variables: $application.id, $candidate.id, $candidate.email, $application.jobId, $application.offerSignedAt
Instructions
#Get Application Details from Ashby (or Greenhouse equivalent) with
$application.id.#Get Candidate Details from Ashby with
$candidate.idfor full record.#Custom Ashby Get Offer Letter to retrieve the signed offer PDF.
Map fields from ATS to HRIS schema:
Personal info (name, email, phone, address)
Role (title, department, level, manager)
Comp (base salary, bonus, equity)
Start date
Location (office / remote)
Employment type (FT/PT/contract)
Validate the mapping:
Manager email exists in Workday via custom Workday Lookup Worker.
Title matches a valid job profile via custom Workday Get Job Profile.
Comp falls within band via custom Workday Get Comp Band.
If validation fails → #Send Channel Message to
#hrbpwith the issue; do not create the Workday record yet.On valid mapping:
#Custom Workday Create Worker with the mapped fields. Capture the new
workerId.#Custom Workday Attach Offer Letter to the worker record with the PDF from step 3.
#Custom Ashby Mark Hired Synced to update the ATS-side status.
Trigger downstream:
Fire HR-1: New Hire Onboarding (people side) via custom Run Playbook action with the new worker payload.
Fire IT-1: New Hire Provisioning via custom Run Playbook action.
#Send Direct Message to the hiring manager confirming the handoff and the start date.
#Send Channel Message to
#hr-opswith the new hire summary.#Leave Internal Note capturing the source application ID, Workday worker ID, downstream playbooks fired.
New-Hire Handoff
Playbooks
/
New-Hire Handoff
New-Hire Handoff
Created by

Console Team
Published
HR
Workday

Greenhouse
Ashby
Conditions
Webhook — candidate.hired from Greenhouse/Ashby Variables: $application.id, $candidate.id, $candidate.email, $application.jobId, $application.offerSignedAt
Instructions
#Get Application Details from Ashby (or Greenhouse equivalent) with
$application.id.#Get Candidate Details from Ashby with
$candidate.idfor full record.#Custom Ashby Get Offer Letter to retrieve the signed offer PDF.
Map fields from ATS to HRIS schema:
Personal info (name, email, phone, address)
Role (title, department, level, manager)
Comp (base salary, bonus, equity)
Start date
Location (office / remote)
Employment type (FT/PT/contract)
Validate the mapping:
Manager email exists in Workday via custom Workday Lookup Worker.
Title matches a valid job profile via custom Workday Get Job Profile.
Comp falls within band via custom Workday Get Comp Band.
If validation fails → #Send Channel Message to
#hrbpwith the issue; do not create the Workday record yet.On valid mapping:
#Custom Workday Create Worker with the mapped fields. Capture the new
workerId.#Custom Workday Attach Offer Letter to the worker record with the PDF from step 3.
#Custom Ashby Mark Hired Synced to update the ATS-side status.
Trigger downstream:
Fire HR-1: New Hire Onboarding (people side) via custom Run Playbook action with the new worker payload.
Fire IT-1: New Hire Provisioning via custom Run Playbook action.
#Send Direct Message to the hiring manager confirming the handoff and the start date.
#Send Channel Message to
#hr-opswith the new hire summary.#Leave Internal Note capturing the source application ID, Workday worker ID, downstream playbooks fired.
New-Hire Handoff
Playbooks
/
New-Hire Handoff
New-Hire Handoff
Created by

Console Team
Published
HR
Workday

Greenhouse
Ashby
Conditions
Webhook — candidate.hired from Greenhouse/Ashby Variables: $application.id, $candidate.id, $candidate.email, $application.jobId, $application.offerSignedAt
Instructions
#Get Application Details from Ashby (or Greenhouse equivalent) with
$application.id.#Get Candidate Details from Ashby with
$candidate.idfor full record.#Custom Ashby Get Offer Letter to retrieve the signed offer PDF.
Map fields from ATS to HRIS schema:
Personal info (name, email, phone, address)
Role (title, department, level, manager)
Comp (base salary, bonus, equity)
Start date
Location (office / remote)
Employment type (FT/PT/contract)
Validate the mapping:
Manager email exists in Workday via custom Workday Lookup Worker.
Title matches a valid job profile via custom Workday Get Job Profile.
Comp falls within band via custom Workday Get Comp Band.
If validation fails → #Send Channel Message to
#hrbpwith the issue; do not create the Workday record yet.On valid mapping:
#Custom Workday Create Worker with the mapped fields. Capture the new
workerId.#Custom Workday Attach Offer Letter to the worker record with the PDF from step 3.
#Custom Ashby Mark Hired Synced to update the ATS-side status.
Trigger downstream:
Fire HR-1: New Hire Onboarding (people side) via custom Run Playbook action with the new worker payload.
Fire IT-1: New Hire Provisioning via custom Run Playbook action.
#Send Direct Message to the hiring manager confirming the handoff and the start date.
#Send Channel Message to
#hr-opswith the new hire summary.#Leave Internal Note capturing the source application ID, Workday worker ID, downstream playbooks fired.
Onboarding Stall Detection
Playbooks
/
Onboarding Stall Detection
Onboarding Stall Detection
Created by

Console Team
Published
HR
Okta
Slack
+1
Conditions
Scheduled — every day at 10:00 AM America/Chicago
Instructions
#Custom Workday Query Hires for employees at exactly day 5 from their start date.
For each:
#Lookup Users with
includeManager.Resolve HRBP via #custom Get HRBP for Department.
Check core tool activation:
#Search Okta User by Email + #Search Okta System Log Custom for
user.session.startevents in the last 5 days.#Custom Google Workspace Get Last Login for email activity.
#Custom Slack Get User Activity for any message/login activity.
Determine stall status:
Activated all three → no action.
Missing one or more → flag as stalled.
For stalled hires:
#Send Direct Message to HRBP and manager: "{{employee.name}} hasn't activated {{missing tools}} by day 5. Want me to follow up with them or escalate?"
Include a #Trigger Form with options: "I'll reach out" / "Console reach out" / "Escalate to HRBP" / "Dismiss (known reason)".
On response:
I'll reach out → no further action; HRBP/manager handles.
Console reach out → #Send Direct Message to the new hire on the manager's behalf: "Hey, just checking in on your first week. Anything blocking your setup? I noticed you haven't logged into {{tool}} yet."
Escalate to HRBP → #Send Channel Message to
#hrbp-alerts.Dismiss → log reason and exit.
schedule_action wake at day 7 to re-check activation if "Console reach out" was chosen.
On wake: if still stalled, escalate to HRBP regardless.
#Leave Internal Note capturing the stall pattern and resolution.
Onboarding Stall Detection
Playbooks
/
Onboarding Stall Detection
Onboarding Stall Detection
Created by

Console Team
Published
HR
Okta
Slack
+1
Conditions
Scheduled — every day at 10:00 AM America/Chicago
Instructions
#Custom Workday Query Hires for employees at exactly day 5 from their start date.
For each:
#Lookup Users with
includeManager.Resolve HRBP via #custom Get HRBP for Department.
Check core tool activation:
#Search Okta User by Email + #Search Okta System Log Custom for
user.session.startevents in the last 5 days.#Custom Google Workspace Get Last Login for email activity.
#Custom Slack Get User Activity for any message/login activity.
Determine stall status:
Activated all three → no action.
Missing one or more → flag as stalled.
For stalled hires:
#Send Direct Message to HRBP and manager: "{{employee.name}} hasn't activated {{missing tools}} by day 5. Want me to follow up with them or escalate?"
Include a #Trigger Form with options: "I'll reach out" / "Console reach out" / "Escalate to HRBP" / "Dismiss (known reason)".
On response:
I'll reach out → no further action; HRBP/manager handles.
Console reach out → #Send Direct Message to the new hire on the manager's behalf: "Hey, just checking in on your first week. Anything blocking your setup? I noticed you haven't logged into {{tool}} yet."
Escalate to HRBP → #Send Channel Message to
#hrbp-alerts.Dismiss → log reason and exit.
schedule_action wake at day 7 to re-check activation if "Console reach out" was chosen.
On wake: if still stalled, escalate to HRBP regardless.
#Leave Internal Note capturing the stall pattern and resolution.
Onboarding Stall Detection
Playbooks
/
Onboarding Stall Detection
Onboarding Stall Detection
Created by

Console Team
Published
HR
Okta
Slack
+1
Conditions
Scheduled — every day at 10:00 AM America/Chicago
Instructions
#Custom Workday Query Hires for employees at exactly day 5 from their start date.
For each:
#Lookup Users with
includeManager.Resolve HRBP via #custom Get HRBP for Department.
Check core tool activation:
#Search Okta User by Email + #Search Okta System Log Custom for
user.session.startevents in the last 5 days.#Custom Google Workspace Get Last Login for email activity.
#Custom Slack Get User Activity for any message/login activity.
Determine stall status:
Activated all three → no action.
Missing one or more → flag as stalled.
For stalled hires:
#Send Direct Message to HRBP and manager: "{{employee.name}} hasn't activated {{missing tools}} by day 5. Want me to follow up with them or escalate?"
Include a #Trigger Form with options: "I'll reach out" / "Console reach out" / "Escalate to HRBP" / "Dismiss (known reason)".
On response:
I'll reach out → no further action; HRBP/manager handles.
Console reach out → #Send Direct Message to the new hire on the manager's behalf: "Hey, just checking in on your first week. Anything blocking your setup? I noticed you haven't logged into {{tool}} yet."
Escalate to HRBP → #Send Channel Message to
#hrbp-alerts.Dismiss → log reason and exit.
schedule_action wake at day 7 to re-check activation if "Console reach out" was chosen.
On wake: if still stalled, escalate to HRBP regardless.
#Leave Internal Note capturing the stall pattern and resolution.
User Access Reviews (UAR)
Playbooks
/
User Access Reviews (UAR)
User Access Reviews (UAR)
Created by

Console Team
Published
Security
Okta
Vanta
Linear
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 6:00 AM America/Chicago
Instructions
Determine the scope:
#Custom Vanta Get In-Scope Apps for SOX, SOC2, ISO 27001 controls.
#Custom Get Critical App List for any internal-classified critical apps not in Vanta.
For each in-scope app:
#Lookup Apps to resolve the app catalog entry.
#Lookup Groups filtered to that app to find all entitlement groups.
For each entitlement group: #Get Group Members to enumerate users.
Build the review matrix:
Group users by their direct manager.
For each manager, compile their team's access across all in-scope apps.
For each app, identify the app owner via custom Get App Owner.
Send manager attestations:
For each manager, #Lookup Users with
includeSlackId.#Send Direct Message with a summary: "You have {{N}} reports with access to {{M}} in-scope apps. Please review and attest by {{deadline}}."
Include a #Trigger Form per report with rows for each app/entitlement: "Keep / Modify / Revoke".
Send app-owner attestations:
For each app owner, #Send Direct Message with the full list of users on their app.
Include a #Trigger Form to attest the user set is correct.
schedule_action wakes at 7, 10, 13 days for non-completers:
On each wake, #custom Get UAR Completion Status to identify outstanding reviewers.
#Send Direct Message reminders with escalating urgency.
Day 14: #Send Channel Message to the reviewer's skip-level manager.
At deadline + 1 day, execute revocations:
For each "Revoke" response: #Remove from Group (Okta) or call the app-specific revoke action.
For each unattested user (no response): #Send Direct Message to user warning of impending revocation; revoke at deadline + 7 days if still unattested.
#Custom Vanta Upload Evidence with the full attestation log, decisions, and revocation timestamps.
#Send Channel Message to
#securitywith cycle summary: review rate, revoke count, app coverage.#Create Linear Issue in the Security-Audit project for the cycle's evidence package.
#Leave Internal Note capturing cycle dates and stats.
User Access Reviews (UAR)
Playbooks
/
User Access Reviews (UAR)
User Access Reviews (UAR)
Created by

Console Team
Published
Security
Okta
Vanta
Linear
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 6:00 AM America/Chicago
Instructions
Determine the scope:
#Custom Vanta Get In-Scope Apps for SOX, SOC2, ISO 27001 controls.
#Custom Get Critical App List for any internal-classified critical apps not in Vanta.
For each in-scope app:
#Lookup Apps to resolve the app catalog entry.
#Lookup Groups filtered to that app to find all entitlement groups.
For each entitlement group: #Get Group Members to enumerate users.
Build the review matrix:
Group users by their direct manager.
For each manager, compile their team's access across all in-scope apps.
For each app, identify the app owner via custom Get App Owner.
Send manager attestations:
For each manager, #Lookup Users with
includeSlackId.#Send Direct Message with a summary: "You have {{N}} reports with access to {{M}} in-scope apps. Please review and attest by {{deadline}}."
Include a #Trigger Form per report with rows for each app/entitlement: "Keep / Modify / Revoke".
Send app-owner attestations:
For each app owner, #Send Direct Message with the full list of users on their app.
Include a #Trigger Form to attest the user set is correct.
schedule_action wakes at 7, 10, 13 days for non-completers:
On each wake, #custom Get UAR Completion Status to identify outstanding reviewers.
#Send Direct Message reminders with escalating urgency.
Day 14: #Send Channel Message to the reviewer's skip-level manager.
At deadline + 1 day, execute revocations:
For each "Revoke" response: #Remove from Group (Okta) or call the app-specific revoke action.
For each unattested user (no response): #Send Direct Message to user warning of impending revocation; revoke at deadline + 7 days if still unattested.
#Custom Vanta Upload Evidence with the full attestation log, decisions, and revocation timestamps.
#Send Channel Message to
#securitywith cycle summary: review rate, revoke count, app coverage.#Create Linear Issue in the Security-Audit project for the cycle's evidence package.
#Leave Internal Note capturing cycle dates and stats.
User Access Reviews (UAR)
Playbooks
/
User Access Reviews (UAR)
User Access Reviews (UAR)
Created by

Console Team
Published
Security
Okta
Vanta
Linear
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 6:00 AM America/Chicago
Instructions
Determine the scope:
#Custom Vanta Get In-Scope Apps for SOX, SOC2, ISO 27001 controls.
#Custom Get Critical App List for any internal-classified critical apps not in Vanta.
For each in-scope app:
#Lookup Apps to resolve the app catalog entry.
#Lookup Groups filtered to that app to find all entitlement groups.
For each entitlement group: #Get Group Members to enumerate users.
Build the review matrix:
Group users by their direct manager.
For each manager, compile their team's access across all in-scope apps.
For each app, identify the app owner via custom Get App Owner.
Send manager attestations:
For each manager, #Lookup Users with
includeSlackId.#Send Direct Message with a summary: "You have {{N}} reports with access to {{M}} in-scope apps. Please review and attest by {{deadline}}."
Include a #Trigger Form per report with rows for each app/entitlement: "Keep / Modify / Revoke".
Send app-owner attestations:
For each app owner, #Send Direct Message with the full list of users on their app.
Include a #Trigger Form to attest the user set is correct.
schedule_action wakes at 7, 10, 13 days for non-completers:
On each wake, #custom Get UAR Completion Status to identify outstanding reviewers.
#Send Direct Message reminders with escalating urgency.
Day 14: #Send Channel Message to the reviewer's skip-level manager.
At deadline + 1 day, execute revocations:
For each "Revoke" response: #Remove from Group (Okta) or call the app-specific revoke action.
For each unattested user (no response): #Send Direct Message to user warning of impending revocation; revoke at deadline + 7 days if still unattested.
#Custom Vanta Upload Evidence with the full attestation log, decisions, and revocation timestamps.
#Send Channel Message to
#securitywith cycle summary: review rate, revoke count, app coverage.#Create Linear Issue in the Security-Audit project for the cycle's evidence package.
#Leave Internal Note capturing cycle dates and stats.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Kandji
Conditions
Webhook — worker.terminated (parallel to IT-2 and HR-2) Variables: $employee.email, $employee.terminationDate, $employee.terminationType
Instructions
#Lookup Users on
$employee.emailwithincludeGroups,includeApps,includeManager.Immediate containment (executes regardless of termination type):
#Search Okta User by Email to resolve user ID.
#Reset User Factors (Custom) to invalidate device-bound factors.
#Custom Okta Suspend User (don't deactivate yet — let IT-2 handle full deactivation).
SSO-managed app revocations:
For each app in the user's
appslist that is Okta-managed: #Remove from Group for the entitlement group.
Non-SSO app coordination:
#Custom Get Non-SSO Apps for User from the SaaS inventory ingest.
For each non-SSO app: #Lookup Users for the app owner with
includeSlackId.#Send Direct Message to each app owner: "{{employee.name}} was terminated. Please revoke their access and confirm." with a #Trigger Form "Revoked / Already gone / Need help".
schedule_action wake at 24h to check app-owner responses:
For "Revoked" → log and exit.
For "Need help" → #Send Direct Message to security on-call to assist.
For no response → escalate to the app owner's manager via #Send Direct Message.
Force re-check at day 3 and day 7:
schedule_action wakes to re-query each non-SSO app's user list.
For any app where the user still appears: #Send Channel Message to
#securitywith the gap.
Mailbox sweep:
#Custom Google Workspace Forward to Manager for the employee's email for 30 days.
#Custom Google Workspace Audit Recent Activity to capture any post-termination activity (potential data exfil signal).
Device confirmation:
#List Devices (Kandji) by
assignedUserEmail.Confirm all are locked/wiped via IT-2 (custom Get Device Lock Status).
Final closure:
#Custom Generate Offboarding Audit Report with: all revoked apps, timestamps, app-owner confirmations, mailbox forwarding setup, device status.
#Custom Vanta Upload Evidence with the report.
#Send Channel Message to
#securityconfirming closure with the report link.#Create Linear Issue in the Security-Audit project with the full chain.
#Leave Internal Note capturing all actions and confirmation status.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Kandji
Conditions
Webhook — worker.terminated (parallel to IT-2 and HR-2) Variables: $employee.email, $employee.terminationDate, $employee.terminationType
Instructions
#Lookup Users on
$employee.emailwithincludeGroups,includeApps,includeManager.Immediate containment (executes regardless of termination type):
#Search Okta User by Email to resolve user ID.
#Reset User Factors (Custom) to invalidate device-bound factors.
#Custom Okta Suspend User (don't deactivate yet — let IT-2 handle full deactivation).
SSO-managed app revocations:
For each app in the user's
appslist that is Okta-managed: #Remove from Group for the entitlement group.
Non-SSO app coordination:
#Custom Get Non-SSO Apps for User from the SaaS inventory ingest.
For each non-SSO app: #Lookup Users for the app owner with
includeSlackId.#Send Direct Message to each app owner: "{{employee.name}} was terminated. Please revoke their access and confirm." with a #Trigger Form "Revoked / Already gone / Need help".
schedule_action wake at 24h to check app-owner responses:
For "Revoked" → log and exit.
For "Need help" → #Send Direct Message to security on-call to assist.
For no response → escalate to the app owner's manager via #Send Direct Message.
Force re-check at day 3 and day 7:
schedule_action wakes to re-query each non-SSO app's user list.
For any app where the user still appears: #Send Channel Message to
#securitywith the gap.
Mailbox sweep:
#Custom Google Workspace Forward to Manager for the employee's email for 30 days.
#Custom Google Workspace Audit Recent Activity to capture any post-termination activity (potential data exfil signal).
Device confirmation:
#List Devices (Kandji) by
assignedUserEmail.Confirm all are locked/wiped via IT-2 (custom Get Device Lock Status).
Final closure:
#Custom Generate Offboarding Audit Report with: all revoked apps, timestamps, app-owner confirmations, mailbox forwarding setup, device status.
#Custom Vanta Upload Evidence with the report.
#Send Channel Message to
#securityconfirming closure with the report link.#Create Linear Issue in the Security-Audit project with the full chain.
#Leave Internal Note capturing all actions and confirmation status.
Employee Offboarding
Playbooks
/
Employee Offboarding
Employee Offboarding
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Kandji
Conditions
Webhook — worker.terminated (parallel to IT-2 and HR-2) Variables: $employee.email, $employee.terminationDate, $employee.terminationType
Instructions
#Lookup Users on
$employee.emailwithincludeGroups,includeApps,includeManager.Immediate containment (executes regardless of termination type):
#Search Okta User by Email to resolve user ID.
#Reset User Factors (Custom) to invalidate device-bound factors.
#Custom Okta Suspend User (don't deactivate yet — let IT-2 handle full deactivation).
SSO-managed app revocations:
For each app in the user's
appslist that is Okta-managed: #Remove from Group for the entitlement group.
Non-SSO app coordination:
#Custom Get Non-SSO Apps for User from the SaaS inventory ingest.
For each non-SSO app: #Lookup Users for the app owner with
includeSlackId.#Send Direct Message to each app owner: "{{employee.name}} was terminated. Please revoke their access and confirm." with a #Trigger Form "Revoked / Already gone / Need help".
schedule_action wake at 24h to check app-owner responses:
For "Revoked" → log and exit.
For "Need help" → #Send Direct Message to security on-call to assist.
For no response → escalate to the app owner's manager via #Send Direct Message.
Force re-check at day 3 and day 7:
schedule_action wakes to re-query each non-SSO app's user list.
For any app where the user still appears: #Send Channel Message to
#securitywith the gap.
Mailbox sweep:
#Custom Google Workspace Forward to Manager for the employee's email for 30 days.
#Custom Google Workspace Audit Recent Activity to capture any post-termination activity (potential data exfil signal).
Device confirmation:
#List Devices (Kandji) by
assignedUserEmail.Confirm all are locked/wiped via IT-2 (custom Get Device Lock Status).
Final closure:
#Custom Generate Offboarding Audit Report with: all revoked apps, timestamps, app-owner confirmations, mailbox forwarding setup, device status.
#Custom Vanta Upload Evidence with the report.
#Send Channel Message to
#securityconfirming closure with the report link.#Create Linear Issue in the Security-Audit project with the full chain.
#Leave Internal Note capturing all actions and confirmation status.
Security Alert Triage & Context
Playbooks
/
Security Alert Triage & Context
Security Alert Triage & Context
Created by

Console Team
Published
Security
Okta
Kandji
CrowdStrike
+4
Conditions
Integration Webhook — CrowdStrike alert (also SentinelOne, SIEM if connected) Variables: $alert.id, $alert.severity, $alert.deviceId, $alert.userEmail, $alert.detectionTime, $alert.indicators
Instructions
Filter by severity:
Low → just log to
#soc-low-priorityand exit.Medium / High / Critical → continue enrichment.
Device context:
#CrowdStrike Get Host Details for
$alert.deviceId.#List Devices (Kandji) by serial number to cross-ref MDM enrollment.
#Get Device Details (Kandji) for compliance posture (encryption, OS version, profiles).
User context:
#Lookup Users on
$alert.userEmailwithincludeManager,includeGroups,includeApps.#Search Okta System Log Custom for the last 24h of login events for this user.
#Get User Profile (Okta) for current state.
Activity context:
#Custom Google Workspace Get Recent Activity for the user (last 24h).
#CrowdStrike Query Device Alerts for other recent alerts on the same host.
#CrowdStrike Get Device Login History for the host.
Indicator enrichment:
For each indicator in
$alert.indicators(hash, IP, domain):
Assemble the enriched alert payload:
User: name, title, department, manager, recent logins, recent activity.
Device: hostname, OS, compliance state, owner, other recent alerts.
Indicators: verdicts from threat intel.
Suggested action based on rules (e.g. "User on PIP + suspicious file = high concern").
#Send Channel Message to
#soc-triagewith the enriched alert as a structured message + thread for analyst notes.Severity-based routing:
Critical → custom PagerDuty Page the on-call security engineer.
High → #Send Direct Message to security on-call.
Medium → leave in
#soc-triagefor next-shift triage.
If indicators have high-confidence malicious verdicts → fire Sec-5: Incident Response Orchestration for auto-containment.
#Leave Internal Note in the alert's tracking issue capturing enrichment data.
Security Alert Triage & Context
Playbooks
/
Security Alert Triage & Context
Security Alert Triage & Context
Created by

Console Team
Published
Security
Okta
Kandji
CrowdStrike
+4
Conditions
Integration Webhook — CrowdStrike alert (also SentinelOne, SIEM if connected) Variables: $alert.id, $alert.severity, $alert.deviceId, $alert.userEmail, $alert.detectionTime, $alert.indicators
Instructions
Filter by severity:
Low → just log to
#soc-low-priorityand exit.Medium / High / Critical → continue enrichment.
Device context:
#CrowdStrike Get Host Details for
$alert.deviceId.#List Devices (Kandji) by serial number to cross-ref MDM enrollment.
#Get Device Details (Kandji) for compliance posture (encryption, OS version, profiles).
User context:
#Lookup Users on
$alert.userEmailwithincludeManager,includeGroups,includeApps.#Search Okta System Log Custom for the last 24h of login events for this user.
#Get User Profile (Okta) for current state.
Activity context:
#Custom Google Workspace Get Recent Activity for the user (last 24h).
#CrowdStrike Query Device Alerts for other recent alerts on the same host.
#CrowdStrike Get Device Login History for the host.
Indicator enrichment:
For each indicator in
$alert.indicators(hash, IP, domain):
Assemble the enriched alert payload:
User: name, title, department, manager, recent logins, recent activity.
Device: hostname, OS, compliance state, owner, other recent alerts.
Indicators: verdicts from threat intel.
Suggested action based on rules (e.g. "User on PIP + suspicious file = high concern").
#Send Channel Message to
#soc-triagewith the enriched alert as a structured message + thread for analyst notes.Severity-based routing:
Critical → custom PagerDuty Page the on-call security engineer.
High → #Send Direct Message to security on-call.
Medium → leave in
#soc-triagefor next-shift triage.
If indicators have high-confidence malicious verdicts → fire Sec-5: Incident Response Orchestration for auto-containment.
#Leave Internal Note in the alert's tracking issue capturing enrichment data.
Security Alert Triage & Context
Playbooks
/
Security Alert Triage & Context
Security Alert Triage & Context
Created by

Console Team
Published
Security
Okta
Kandji
CrowdStrike
+4
Conditions
Integration Webhook — CrowdStrike alert (also SentinelOne, SIEM if connected) Variables: $alert.id, $alert.severity, $alert.deviceId, $alert.userEmail, $alert.detectionTime, $alert.indicators
Instructions
Filter by severity:
Low → just log to
#soc-low-priorityand exit.Medium / High / Critical → continue enrichment.
Device context:
#CrowdStrike Get Host Details for
$alert.deviceId.#List Devices (Kandji) by serial number to cross-ref MDM enrollment.
#Get Device Details (Kandji) for compliance posture (encryption, OS version, profiles).
User context:
#Lookup Users on
$alert.userEmailwithincludeManager,includeGroups,includeApps.#Search Okta System Log Custom for the last 24h of login events for this user.
#Get User Profile (Okta) for current state.
Activity context:
#Custom Google Workspace Get Recent Activity for the user (last 24h).
#CrowdStrike Query Device Alerts for other recent alerts on the same host.
#CrowdStrike Get Device Login History for the host.
Indicator enrichment:
For each indicator in
$alert.indicators(hash, IP, domain):
Assemble the enriched alert payload:
User: name, title, department, manager, recent logins, recent activity.
Device: hostname, OS, compliance state, owner, other recent alerts.
Indicators: verdicts from threat intel.
Suggested action based on rules (e.g. "User on PIP + suspicious file = high concern").
#Send Channel Message to
#soc-triagewith the enriched alert as a structured message + thread for analyst notes.Severity-based routing:
Critical → custom PagerDuty Page the on-call security engineer.
High → #Send Direct Message to security on-call.
Medium → leave in
#soc-triagefor next-shift triage.
If indicators have high-confidence malicious verdicts → fire Sec-5: Incident Response Orchestration for auto-containment.
#Leave Internal Note in the alert's tracking issue capturing enrichment data.
Incident Response Orchestration
Playbooks
/
Incident Response Orchestration
Incident Response Orchestration
Created by

Console Team
Published
Security
Okta
Slack
+5
Conditions
Integration Webhook — CrowdStrike high-severity event OR manual escalation from Sec-4 Variables: $incident.id, $incident.severity, $incident.deviceId, $incident.userEmail, $incident.type
Instructions
Immediate containment (parallel actions):
#Custom CrowdStrike Network Contain Host for
$incident.deviceIdto isolate it from the network.#Revoke All User Sessions (Okta) for
$incident.userEmail.#Reset User Factors (Custom) if credential compromise is suspected.
#Device Lock (Kandji) as a secondary containment.
Create incident war room:
#Create Channel (Slack) named
#ir-{{incident.id}}-{{shortType}}.Add Users To Channel:
Security on-call (from PagerDuty).
Security lead.
The affected user's manager (read-only / observer).
On-call IT engineer (for device-related actions).
Page on-call:
#Custom PagerDuty Page with severity, incident summary, war-room channel link.
Post initial status:
#Send Channel Message to the war-room channel with the full enriched payload from Sec-4 (re-run enrichment if not already done).
#Send Channel Message to
#securitywith a brief notice and war-room link.
Run containment runbook:
#Search Knowledge Base for the runbook matching
$incident.type(e.g. "ransomware", "phishing-success", "lateral-movement").For each runbook step:
Present in the war-room channel via #Send Channel Message with the step number and required action.
For automatable steps (e.g. "block hash on EDR" → #Blocklist SHA256 Hash), execute and post outcome.
For human-required steps, wait for the analyst to acknowledge via thread reply.
Evidence collection:
#Custom CrowdStrike RTR Get Forensic Bundle for the affected host.
#Search Okta System Log Custom for a wider window (last 7 days) for the affected user.
#Custom Google Workspace Export Mailbox for the user (if mailbox compromise suspected).
Store all artifacts in a custom Upload to Evidence S3 bucket.
Stakeholder updates:
schedule_action wakes every 30 minutes during active incident.
On each wake, #Send Channel Message status update to
#securityand (if Sev1) to the executive Slack channel.
Resolution:
When the war room declares resolved (via custom IR Mark Resolved form):
#Send Channel Message to all stakeholder channels with the all-clear.
#Send Direct Message to the affected user (if applicable) with the resolution and next steps.
Post-incident:
#Create Linear Issue in the Security-IR project for the retro.
#Custom Generate Incident Timeline action that builds a chronological doc from all war-room messages and actions taken.
#Custom Vanta Upload Incident Evidence for compliance.
#Leave Internal Note capturing the full timeline and decisions.
Incident Response Orchestration
Playbooks
/
Incident Response Orchestration
Incident Response Orchestration
Created by

Console Team
Published
Security
Okta
Slack
+5
Conditions
Integration Webhook — CrowdStrike high-severity event OR manual escalation from Sec-4 Variables: $incident.id, $incident.severity, $incident.deviceId, $incident.userEmail, $incident.type
Instructions
Immediate containment (parallel actions):
#Custom CrowdStrike Network Contain Host for
$incident.deviceIdto isolate it from the network.#Revoke All User Sessions (Okta) for
$incident.userEmail.#Reset User Factors (Custom) if credential compromise is suspected.
#Device Lock (Kandji) as a secondary containment.
Create incident war room:
#Create Channel (Slack) named
#ir-{{incident.id}}-{{shortType}}.Add Users To Channel:
Security on-call (from PagerDuty).
Security lead.
The affected user's manager (read-only / observer).
On-call IT engineer (for device-related actions).
Page on-call:
#Custom PagerDuty Page with severity, incident summary, war-room channel link.
Post initial status:
#Send Channel Message to the war-room channel with the full enriched payload from Sec-4 (re-run enrichment if not already done).
#Send Channel Message to
#securitywith a brief notice and war-room link.
Run containment runbook:
#Search Knowledge Base for the runbook matching
$incident.type(e.g. "ransomware", "phishing-success", "lateral-movement").For each runbook step:
Present in the war-room channel via #Send Channel Message with the step number and required action.
For automatable steps (e.g. "block hash on EDR" → #Blocklist SHA256 Hash), execute and post outcome.
For human-required steps, wait for the analyst to acknowledge via thread reply.
Evidence collection:
#Custom CrowdStrike RTR Get Forensic Bundle for the affected host.
#Search Okta System Log Custom for a wider window (last 7 days) for the affected user.
#Custom Google Workspace Export Mailbox for the user (if mailbox compromise suspected).
Store all artifacts in a custom Upload to Evidence S3 bucket.
Stakeholder updates:
schedule_action wakes every 30 minutes during active incident.
On each wake, #Send Channel Message status update to
#securityand (if Sev1) to the executive Slack channel.
Resolution:
When the war room declares resolved (via custom IR Mark Resolved form):
#Send Channel Message to all stakeholder channels with the all-clear.
#Send Direct Message to the affected user (if applicable) with the resolution and next steps.
Post-incident:
#Create Linear Issue in the Security-IR project for the retro.
#Custom Generate Incident Timeline action that builds a chronological doc from all war-room messages and actions taken.
#Custom Vanta Upload Incident Evidence for compliance.
#Leave Internal Note capturing the full timeline and decisions.
Incident Response Orchestration
Playbooks
/
Incident Response Orchestration
Incident Response Orchestration
Created by

Console Team
Published
Security
Okta
Slack
+5
Conditions
Integration Webhook — CrowdStrike high-severity event OR manual escalation from Sec-4 Variables: $incident.id, $incident.severity, $incident.deviceId, $incident.userEmail, $incident.type
Instructions
Immediate containment (parallel actions):
#Custom CrowdStrike Network Contain Host for
$incident.deviceIdto isolate it from the network.#Revoke All User Sessions (Okta) for
$incident.userEmail.#Reset User Factors (Custom) if credential compromise is suspected.
#Device Lock (Kandji) as a secondary containment.
Create incident war room:
#Create Channel (Slack) named
#ir-{{incident.id}}-{{shortType}}.Add Users To Channel:
Security on-call (from PagerDuty).
Security lead.
The affected user's manager (read-only / observer).
On-call IT engineer (for device-related actions).
Page on-call:
#Custom PagerDuty Page with severity, incident summary, war-room channel link.
Post initial status:
#Send Channel Message to the war-room channel with the full enriched payload from Sec-4 (re-run enrichment if not already done).
#Send Channel Message to
#securitywith a brief notice and war-room link.
Run containment runbook:
#Search Knowledge Base for the runbook matching
$incident.type(e.g. "ransomware", "phishing-success", "lateral-movement").For each runbook step:
Present in the war-room channel via #Send Channel Message with the step number and required action.
For automatable steps (e.g. "block hash on EDR" → #Blocklist SHA256 Hash), execute and post outcome.
For human-required steps, wait for the analyst to acknowledge via thread reply.
Evidence collection:
#Custom CrowdStrike RTR Get Forensic Bundle for the affected host.
#Search Okta System Log Custom for a wider window (last 7 days) for the affected user.
#Custom Google Workspace Export Mailbox for the user (if mailbox compromise suspected).
Store all artifacts in a custom Upload to Evidence S3 bucket.
Stakeholder updates:
schedule_action wakes every 30 minutes during active incident.
On each wake, #Send Channel Message status update to
#securityand (if Sev1) to the executive Slack channel.
Resolution:
When the war room declares resolved (via custom IR Mark Resolved form):
#Send Channel Message to all stakeholder channels with the all-clear.
#Send Direct Message to the affected user (if applicable) with the resolution and next steps.
Post-incident:
#Create Linear Issue in the Security-IR project for the retro.
#Custom Generate Incident Timeline action that builds a chronological doc from all war-room messages and actions taken.
#Custom Vanta Upload Incident Evidence for compliance.
#Leave Internal Note capturing the full timeline and decisions.
Phishing & Suspicious Email Triage
Playbooks
/
Phishing & Suspicious Email Triage
Phishing & Suspicious Email Triage
Created by

Console Team
Published
Security
Slack
CrowdStrike
+4
Conditions
User reports a suspicious email via Slack, the report-phish button, or forwarding to phish@.
Instructions
Parse the report:
If forwarded as
.eml: extract via custom Parse Email Headers.If Slack-reported: collect the email subject, sender, body screenshot, full headers if available.
#Lookup Users on the reporter.
#Trigger Form if details are incomplete to collect:
Full sender address
Subject line
Any links clicked? (yes/no)
Any attachments opened? (yes/no)
Any credentials entered? (yes/no)
Indicator extraction:
#Custom Extract URLs from Email Body.
#Custom Extract Attachment Hashes.
#Custom Extract Sender Domain and SPF/DKIM/DMARC.
Enrichment:
For each URL: custom VirusTotal URL Lookup, custom URLscan Submit, custom Get Domain Age.
For each attachment hash: custom VirusTotal Hash Lookup, custom CrowdStrike Falcon Sandbox Submit (and #Get CrowdStrike Falcon Sandbox Status + #Get CrowdStrike Falcon Sandbox Summary Report).
For sender: #custom Check Sender Reputation.
Verdict logic:
High-confidence malicious (multiple AV hits, known-bad domain, sandbox detection) → Malicious.
Suspicious but inconclusive → Suspicious, escalate to analyst.
Looks legit (known sender, clean indicators) → Benign.
Branch on verdict:
Malicious:
#Custom Google Workspace Search and Purge for the email subject + sender across all mailboxes.
#Custom Google Workspace Quarantine Future with sender domain + indicators.
If user clicked or entered creds: fire Sec-11 (Compromised Credential Response) for the user.
#Send Direct Message to the reporter: thanks, confirmation that it was malicious, and what got purged.
#Send Channel Message to
#securitywith the IOC bundle and verdict.#Send Channel Message to
#all-companyif widespread (>10 recipients) with a generic warning.
Suspicious:
#Send Channel Message to
#soc-triagewith the enriched bundle for analyst review.#Send Direct Message to the reporter: "Thanks, this is being reviewed by security."
#Escalate Request to the security team.
Benign:
#Send Direct Message to the reporter: "Looks legitimate based on our checks. If you're unsure, here's why...". Include the source reputation.
#Leave Internal Note capturing indicators, verdict, actions taken.
Phishing & Suspicious Email Triage
Playbooks
/
Phishing & Suspicious Email Triage
Phishing & Suspicious Email Triage
Created by

Console Team
Published
Security
Slack
CrowdStrike
+4
Conditions
User reports a suspicious email via Slack, the report-phish button, or forwarding to phish@.
Instructions
Parse the report:
If forwarded as
.eml: extract via custom Parse Email Headers.If Slack-reported: collect the email subject, sender, body screenshot, full headers if available.
#Lookup Users on the reporter.
#Trigger Form if details are incomplete to collect:
Full sender address
Subject line
Any links clicked? (yes/no)
Any attachments opened? (yes/no)
Any credentials entered? (yes/no)
Indicator extraction:
#Custom Extract URLs from Email Body.
#Custom Extract Attachment Hashes.
#Custom Extract Sender Domain and SPF/DKIM/DMARC.
Enrichment:
For each URL: custom VirusTotal URL Lookup, custom URLscan Submit, custom Get Domain Age.
For each attachment hash: custom VirusTotal Hash Lookup, custom CrowdStrike Falcon Sandbox Submit (and #Get CrowdStrike Falcon Sandbox Status + #Get CrowdStrike Falcon Sandbox Summary Report).
For sender: #custom Check Sender Reputation.
Verdict logic:
High-confidence malicious (multiple AV hits, known-bad domain, sandbox detection) → Malicious.
Suspicious but inconclusive → Suspicious, escalate to analyst.
Looks legit (known sender, clean indicators) → Benign.
Branch on verdict:
Malicious:
#Custom Google Workspace Search and Purge for the email subject + sender across all mailboxes.
#Custom Google Workspace Quarantine Future with sender domain + indicators.
If user clicked or entered creds: fire Sec-11 (Compromised Credential Response) for the user.
#Send Direct Message to the reporter: thanks, confirmation that it was malicious, and what got purged.
#Send Channel Message to
#securitywith the IOC bundle and verdict.#Send Channel Message to
#all-companyif widespread (>10 recipients) with a generic warning.
Suspicious:
#Send Channel Message to
#soc-triagewith the enriched bundle for analyst review.#Send Direct Message to the reporter: "Thanks, this is being reviewed by security."
#Escalate Request to the security team.
Benign:
#Send Direct Message to the reporter: "Looks legitimate based on our checks. If you're unsure, here's why...". Include the source reputation.
#Leave Internal Note capturing indicators, verdict, actions taken.
Phishing & Suspicious Email Triage
Playbooks
/
Phishing & Suspicious Email Triage
Phishing & Suspicious Email Triage
Created by

Console Team
Published
Security
Slack
CrowdStrike
+4
Conditions
User reports a suspicious email via Slack, the report-phish button, or forwarding to phish@.
Instructions
Parse the report:
If forwarded as
.eml: extract via custom Parse Email Headers.If Slack-reported: collect the email subject, sender, body screenshot, full headers if available.
#Lookup Users on the reporter.
#Trigger Form if details are incomplete to collect:
Full sender address
Subject line
Any links clicked? (yes/no)
Any attachments opened? (yes/no)
Any credentials entered? (yes/no)
Indicator extraction:
#Custom Extract URLs from Email Body.
#Custom Extract Attachment Hashes.
#Custom Extract Sender Domain and SPF/DKIM/DMARC.
Enrichment:
For each URL: custom VirusTotal URL Lookup, custom URLscan Submit, custom Get Domain Age.
For each attachment hash: custom VirusTotal Hash Lookup, custom CrowdStrike Falcon Sandbox Submit (and #Get CrowdStrike Falcon Sandbox Status + #Get CrowdStrike Falcon Sandbox Summary Report).
For sender: #custom Check Sender Reputation.
Verdict logic:
High-confidence malicious (multiple AV hits, known-bad domain, sandbox detection) → Malicious.
Suspicious but inconclusive → Suspicious, escalate to analyst.
Looks legit (known sender, clean indicators) → Benign.
Branch on verdict:
Malicious:
#Custom Google Workspace Search and Purge for the email subject + sender across all mailboxes.
#Custom Google Workspace Quarantine Future with sender domain + indicators.
If user clicked or entered creds: fire Sec-11 (Compromised Credential Response) for the user.
#Send Direct Message to the reporter: thanks, confirmation that it was malicious, and what got purged.
#Send Channel Message to
#securitywith the IOC bundle and verdict.#Send Channel Message to
#all-companyif widespread (>10 recipients) with a generic warning.
Suspicious:
#Send Channel Message to
#soc-triagewith the enriched bundle for analyst review.#Send Direct Message to the reporter: "Thanks, this is being reviewed by security."
#Escalate Request to the security team.
Benign:
#Send Direct Message to the reporter: "Looks legitimate based on our checks. If you're unsure, here's why...". Include the source reputation.
#Leave Internal Note capturing indicators, verdict, actions taken.
Restricted-Country Access Control
Playbooks
/
Restricted-Country Access Control
Restricted-Country Access Control
Created by

Console Team
Published
Security
Okta
Vanta
+1
Conditions
Detection — scheduled Okta system log poll every 5 minutes
Instructions
#Custom Get Restricted Country List from the security policy (e.g. OFAC list + internal exclusions).
#Search Okta System Log Custom with filter for
eventType eq "user.session.start"ANDclient.geographicalContext.country in restricted-listfor the last 5 minutes.For each matching login:
#Lookup Users on the user email with
includeManager,includeGroups.Check exemptions: #custom Get Travel Authorization for an active travel-from-country exemption.
If exempt → log and exit for this user.
#Send Direct Message to the user immediately:
"We detected a login from {{country}} at {{time}} from IP {{ip}}. Was this you?"
#Trigger Form with options: "Yes, I'm traveling" / "Yes, VPN" / "No, not me".
schedule_action wake at 30 minutes for response.
Branch on response:
Yes, traveling:
#Request Approval from security for time-boxed allowance with duration.
On approval: #custom Okta Create Network Zone Exception for the user + country window.
#Send Direct Message confirming with expiry.
schedule_action wake at TTL to remove the exception.
Yes, VPN:
Verify against known corporate VPN egress IPs via custom Check VPN Egress.
If matches → no action, log only.
If doesn't match → treat as "No, not me" and escalate.
No, not me OR no response within 30 min:
#Send Channel Message to
#soc-triagewith the user, login details, and escalate to Sec-12 (Anomalous Login).#Send Direct Message to the user (after revocation): "We've revoked your sessions and reset your factors as a precaution. Please re-authenticate from a trusted location."
#Custom Vanta Log Restricted Country Event with the full audit trail.
#Leave Internal Note capturing detection, response, action.
Restricted-Country Access Control
Playbooks
/
Restricted-Country Access Control
Restricted-Country Access Control
Created by

Console Team
Published
Security
Okta
Vanta
+1
Conditions
Detection — scheduled Okta system log poll every 5 minutes
Instructions
#Custom Get Restricted Country List from the security policy (e.g. OFAC list + internal exclusions).
#Search Okta System Log Custom with filter for
eventType eq "user.session.start"ANDclient.geographicalContext.country in restricted-listfor the last 5 minutes.For each matching login:
#Lookup Users on the user email with
includeManager,includeGroups.Check exemptions: #custom Get Travel Authorization for an active travel-from-country exemption.
If exempt → log and exit for this user.
#Send Direct Message to the user immediately:
"We detected a login from {{country}} at {{time}} from IP {{ip}}. Was this you?"
#Trigger Form with options: "Yes, I'm traveling" / "Yes, VPN" / "No, not me".
schedule_action wake at 30 minutes for response.
Branch on response:
Yes, traveling:
#Request Approval from security for time-boxed allowance with duration.
On approval: #custom Okta Create Network Zone Exception for the user + country window.
#Send Direct Message confirming with expiry.
schedule_action wake at TTL to remove the exception.
Yes, VPN:
Verify against known corporate VPN egress IPs via custom Check VPN Egress.
If matches → no action, log only.
If doesn't match → treat as "No, not me" and escalate.
No, not me OR no response within 30 min:
#Send Channel Message to
#soc-triagewith the user, login details, and escalate to Sec-12 (Anomalous Login).#Send Direct Message to the user (after revocation): "We've revoked your sessions and reset your factors as a precaution. Please re-authenticate from a trusted location."
#Custom Vanta Log Restricted Country Event with the full audit trail.
#Leave Internal Note capturing detection, response, action.
Restricted-Country Access Control
Playbooks
/
Restricted-Country Access Control
Restricted-Country Access Control
Created by

Console Team
Published
Security
Okta
Vanta
+1
Conditions
Detection — scheduled Okta system log poll every 5 minutes
Instructions
#Custom Get Restricted Country List from the security policy (e.g. OFAC list + internal exclusions).
#Search Okta System Log Custom with filter for
eventType eq "user.session.start"ANDclient.geographicalContext.country in restricted-listfor the last 5 minutes.For each matching login:
#Lookup Users on the user email with
includeManager,includeGroups.Check exemptions: #custom Get Travel Authorization for an active travel-from-country exemption.
If exempt → log and exit for this user.
#Send Direct Message to the user immediately:
"We detected a login from {{country}} at {{time}} from IP {{ip}}. Was this you?"
#Trigger Form with options: "Yes, I'm traveling" / "Yes, VPN" / "No, not me".
schedule_action wake at 30 minutes for response.
Branch on response:
Yes, traveling:
#Request Approval from security for time-boxed allowance with duration.
On approval: #custom Okta Create Network Zone Exception for the user + country window.
#Send Direct Message confirming with expiry.
schedule_action wake at TTL to remove the exception.
Yes, VPN:
Verify against known corporate VPN egress IPs via custom Check VPN Egress.
If matches → no action, log only.
If doesn't match → treat as "No, not me" and escalate.
No, not me OR no response within 30 min:
#Send Channel Message to
#soc-triagewith the user, login details, and escalate to Sec-12 (Anomalous Login).#Send Direct Message to the user (after revocation): "We've revoked your sessions and reset your factors as a precaution. Please re-authenticate from a trusted location."
#Custom Vanta Log Restricted Country Event with the full audit trail.
#Leave Internal Note capturing detection, response, action.
Vulnerability Assessment & Impact
Playbooks
/
Vulnerability Assessment & Impact
Vulnerability Assessment & Impact
Created by

Console Team
Published
Security
Kandji
CrowdStrike
AWS
+3
Conditions
Requester pastes a CVE ID or vulnerability description, or asks "what's our exposure to X?"
Instructions
Parse the CVE ID or vuln description.
If a CVE ID:
#Web Research the NVD page for CVE details (CVSS, affected products, fix versions).
If a vuln description:
#Web Research to find the matching CVE(s) and affected software.
#Trigger Form to collect (with smart defaults from the parse):
Confirmed CVE list
Affected products / versions
Severity threshold for action (Critical only / High+ / Medium+)
Scope (devices / cloud / SaaS / all)
Run queries in parallel:
#List AWS Inspector Findings filtered by the CVE.
#Custom Wiz Query Vulnerabilities for cloud and container exposure.
#CrowdStrike: Get Device Vulnerabilities (Spotlight) for endpoint exposure.
#List Devices (Kandji) + custom Kandji Filter By App Version for affected client software.
Aggregate the exposed assets:
For each finding, capture: asset, owner (via custom Get Asset Owner), severity, reachability (internet-facing?), data-classification.
Score by reachability:
Internet-facing + sensitive-data + critical-CVE → P0.
Internal-facing + critical-CVE → P1.
Internal-facing + high-CVE → P2.
Else → P3.
Create remediation tickets:
Group by owning team.
For each team: #Create Linear Issue with: CVE summary, affected assets, severity, recommended fix, SLA (P0 = 24h, P1 = 7d, P2 = 30d).
#Send Direct Message to team lead with the issue link.
Compose the impact report:
#Send Channel Message to
#securitywith: total findings, by-priority breakdown, owning-team distribution, ticket links.#Send Direct Message to the requester with the same report and the deep links.
schedule_action wake at the SLA windows (24h, 7d, 30d) to check remediation status.
On wake: for unresolved P0/P1 issues, #Send Channel Message to
#security-leadsescalating.#Leave Internal Note capturing the assessment.
Vulnerability Assessment & Impact
Playbooks
/
Vulnerability Assessment & Impact
Vulnerability Assessment & Impact
Created by

Console Team
Published
Security
Kandji
CrowdStrike
AWS
+3
Conditions
Requester pastes a CVE ID or vulnerability description, or asks "what's our exposure to X?"
Instructions
Parse the CVE ID or vuln description.
If a CVE ID:
#Web Research the NVD page for CVE details (CVSS, affected products, fix versions).
If a vuln description:
#Web Research to find the matching CVE(s) and affected software.
#Trigger Form to collect (with smart defaults from the parse):
Confirmed CVE list
Affected products / versions
Severity threshold for action (Critical only / High+ / Medium+)
Scope (devices / cloud / SaaS / all)
Run queries in parallel:
#List AWS Inspector Findings filtered by the CVE.
#Custom Wiz Query Vulnerabilities for cloud and container exposure.
#CrowdStrike: Get Device Vulnerabilities (Spotlight) for endpoint exposure.
#List Devices (Kandji) + custom Kandji Filter By App Version for affected client software.
Aggregate the exposed assets:
For each finding, capture: asset, owner (via custom Get Asset Owner), severity, reachability (internet-facing?), data-classification.
Score by reachability:
Internet-facing + sensitive-data + critical-CVE → P0.
Internal-facing + critical-CVE → P1.
Internal-facing + high-CVE → P2.
Else → P3.
Create remediation tickets:
Group by owning team.
For each team: #Create Linear Issue with: CVE summary, affected assets, severity, recommended fix, SLA (P0 = 24h, P1 = 7d, P2 = 30d).
#Send Direct Message to team lead with the issue link.
Compose the impact report:
#Send Channel Message to
#securitywith: total findings, by-priority breakdown, owning-team distribution, ticket links.#Send Direct Message to the requester with the same report and the deep links.
schedule_action wake at the SLA windows (24h, 7d, 30d) to check remediation status.
On wake: for unresolved P0/P1 issues, #Send Channel Message to
#security-leadsescalating.#Leave Internal Note capturing the assessment.
Vulnerability Assessment & Impact
Playbooks
/
Vulnerability Assessment & Impact
Vulnerability Assessment & Impact
Created by

Console Team
Published
Security
Kandji
CrowdStrike
AWS
+3
Conditions
Requester pastes a CVE ID or vulnerability description, or asks "what's our exposure to X?"
Instructions
Parse the CVE ID or vuln description.
If a CVE ID:
#Web Research the NVD page for CVE details (CVSS, affected products, fix versions).
If a vuln description:
#Web Research to find the matching CVE(s) and affected software.
#Trigger Form to collect (with smart defaults from the parse):
Confirmed CVE list
Affected products / versions
Severity threshold for action (Critical only / High+ / Medium+)
Scope (devices / cloud / SaaS / all)
Run queries in parallel:
#List AWS Inspector Findings filtered by the CVE.
#Custom Wiz Query Vulnerabilities for cloud and container exposure.
#CrowdStrike: Get Device Vulnerabilities (Spotlight) for endpoint exposure.
#List Devices (Kandji) + custom Kandji Filter By App Version for affected client software.
Aggregate the exposed assets:
For each finding, capture: asset, owner (via custom Get Asset Owner), severity, reachability (internet-facing?), data-classification.
Score by reachability:
Internet-facing + sensitive-data + critical-CVE → P0.
Internal-facing + critical-CVE → P1.
Internal-facing + high-CVE → P2.
Else → P3.
Create remediation tickets:
Group by owning team.
For each team: #Create Linear Issue with: CVE summary, affected assets, severity, recommended fix, SLA (P0 = 24h, P1 = 7d, P2 = 30d).
#Send Direct Message to team lead with the issue link.
Compose the impact report:
#Send Channel Message to
#securitywith: total findings, by-priority breakdown, owning-team distribution, ticket links.#Send Direct Message to the requester with the same report and the deep links.
schedule_action wake at the SLA windows (24h, 7d, 30d) to check remediation status.
On wake: for unresolved P0/P1 issues, #Send Channel Message to
#security-leadsescalating.#Leave Internal Note capturing the assessment.
Endpoint Compliance Drift
Playbooks
/
Endpoint Compliance Drift
Endpoint Compliance Drift
Created by

Console Team
Published
Security
Okta
1Password
Kandji
+3
Conditions
Detection — scheduled scan every 6 hours
Instructions
#List Devices (Kandji) for all enrolled devices.
For each device, #Get Device Details and #Kandji Get Device Library Items Status for compliance posture.
#CrowdStrike Search Devices by serial to confirm EDR coverage.
Check compliance gates:
FileVault/BitLocker encryption enabled?
OS version within 2 releases of latest?
Required Kandji library items deployed?
CrowdStrike sensor running and healthy?
Required apps installed (e.g. 1Password, VPN)?
Last check-in within 7 days?
For each device failing one or more gates:
#Lookup Users on
device.assignedUserEmail.Skip if user is on leave or hire date < 14 days (grace period).
Check if this device was already flagged within the last 7 days (avoid spam).
Try auto-remediation first:
Encryption off → #Create Kandji Custom Script to re-enable FileVault.
OS outdated → #Create Kandji Custom Script to trigger software update with user notification.
Missing app → custom Kandji Reinstall Library Item.
EDR not running → #CrowdStrike: Init RTR Session + #CrowdStrike: RTR Run Script to restart the sensor.
Stale check-in → #Kandji Blank Push (Force Check-In).
#Send Direct Message to the user explaining what was fixed and what they need to do.
schedule_action wake at 24h to re-check compliance.
On wake, if still non-compliant:
#Send Direct Message to the user with stronger urgency.
schedule_action wake at 3 days.
On second wake (day 3), if still non-compliant:
#Send Direct Message to the user's manager.
#Create Linear Issue in the IT-Security project.
Day 7 escalation:
#Send Channel Message to
#securitywith the non-compliant device + user.#Custom Okta Conditional Access Block for non-compliant device (if policy permits).
#Custom Vanta Upload Evidence weekly with compliance stats.
#Leave Internal Note per device capturing the drift and remediation path.
Endpoint Compliance Drift
Playbooks
/
Endpoint Compliance Drift
Endpoint Compliance Drift
Created by

Console Team
Published
Security
Okta
1Password
Kandji
+3
Conditions
Detection — scheduled scan every 6 hours
Instructions
#List Devices (Kandji) for all enrolled devices.
For each device, #Get Device Details and #Kandji Get Device Library Items Status for compliance posture.
#CrowdStrike Search Devices by serial to confirm EDR coverage.
Check compliance gates:
FileVault/BitLocker encryption enabled?
OS version within 2 releases of latest?
Required Kandji library items deployed?
CrowdStrike sensor running and healthy?
Required apps installed (e.g. 1Password, VPN)?
Last check-in within 7 days?
For each device failing one or more gates:
#Lookup Users on
device.assignedUserEmail.Skip if user is on leave or hire date < 14 days (grace period).
Check if this device was already flagged within the last 7 days (avoid spam).
Try auto-remediation first:
Encryption off → #Create Kandji Custom Script to re-enable FileVault.
OS outdated → #Create Kandji Custom Script to trigger software update with user notification.
Missing app → custom Kandji Reinstall Library Item.
EDR not running → #CrowdStrike: Init RTR Session + #CrowdStrike: RTR Run Script to restart the sensor.
Stale check-in → #Kandji Blank Push (Force Check-In).
#Send Direct Message to the user explaining what was fixed and what they need to do.
schedule_action wake at 24h to re-check compliance.
On wake, if still non-compliant:
#Send Direct Message to the user with stronger urgency.
schedule_action wake at 3 days.
On second wake (day 3), if still non-compliant:
#Send Direct Message to the user's manager.
#Create Linear Issue in the IT-Security project.
Day 7 escalation:
#Send Channel Message to
#securitywith the non-compliant device + user.#Custom Okta Conditional Access Block for non-compliant device (if policy permits).
#Custom Vanta Upload Evidence weekly with compliance stats.
#Leave Internal Note per device capturing the drift and remediation path.
Endpoint Compliance Drift
Playbooks
/
Endpoint Compliance Drift
Endpoint Compliance Drift
Created by

Console Team
Published
Security
Okta
1Password
Kandji
+3
Conditions
Detection — scheduled scan every 6 hours
Instructions
#List Devices (Kandji) for all enrolled devices.
For each device, #Get Device Details and #Kandji Get Device Library Items Status for compliance posture.
#CrowdStrike Search Devices by serial to confirm EDR coverage.
Check compliance gates:
FileVault/BitLocker encryption enabled?
OS version within 2 releases of latest?
Required Kandji library items deployed?
CrowdStrike sensor running and healthy?
Required apps installed (e.g. 1Password, VPN)?
Last check-in within 7 days?
For each device failing one or more gates:
#Lookup Users on
device.assignedUserEmail.Skip if user is on leave or hire date < 14 days (grace period).
Check if this device was already flagged within the last 7 days (avoid spam).
Try auto-remediation first:
Encryption off → #Create Kandji Custom Script to re-enable FileVault.
OS outdated → #Create Kandji Custom Script to trigger software update with user notification.
Missing app → custom Kandji Reinstall Library Item.
EDR not running → #CrowdStrike: Init RTR Session + #CrowdStrike: RTR Run Script to restart the sensor.
Stale check-in → #Kandji Blank Push (Force Check-In).
#Send Direct Message to the user explaining what was fixed and what they need to do.
schedule_action wake at 24h to re-check compliance.
On wake, if still non-compliant:
#Send Direct Message to the user with stronger urgency.
schedule_action wake at 3 days.
On second wake (day 3), if still non-compliant:
#Send Direct Message to the user's manager.
#Create Linear Issue in the IT-Security project.
Day 7 escalation:
#Send Channel Message to
#securitywith the non-compliant device + user.#Custom Okta Conditional Access Block for non-compliant device (if policy permits).
#Custom Vanta Upload Evidence weekly with compliance stats.
#Leave Internal Note per device capturing the drift and remediation path.
IOC Enrichment & Lookup
Playbooks
/
IOC Enrichment & Lookup
IOC Enrichment & Lookup
Created by

Console Team
Published
Security
Okta
Slack
+6
Conditions
Analyst pastes a file hash, IP address, domain, or URL in Slack or a request.
Instructions
Parse the input:
Auto-detect IOC type via regex (MD5/SHA1/SHA256 hash, IPv4/IPv6, domain, URL).
If ambiguous, #Send Direct Message asking for clarification.
#Lookup Users on the requester to confirm analyst role (in
security-analystsOkta group).Run lookups in parallel based on IOC type:
Hash → #custom VirusTotal Hash Lookup, custom abuse.ch MalwareBazaar Lookup, #custom Recorded Future Hash Lookup, #CrowdStrike Query Quarantined Files to check if seen internally.
IP → custom VirusTotal IP Lookup, custom abuse.ch ThreatFox Lookup, custom Recorded Future IP Lookup, custom GreyNoise Lookup, #CrowdStrike: Intel Indicator Lookup.
Domain → custom VirusTotal Domain Lookup, custom WHOIS Lookup, custom Get Domain Age, custom Recorded Future Domain Lookup, #CrowdStrike: Intel Indicator Lookup.
URL → custom VirusTotal URL Lookup, custom URLscan Submit, custom Phishtank Lookup.
Compile a unified verdict:
Count engines flagging as malicious / suspicious / clean.
Pull first-seen / last-seen dates.
Pull associated malware families if any.
Pull related IOCs (e.g. domains hosted on the same IP).
Internal correlation:
#Search Okta System Log Custom for the IP/domain in recent logins (if IP/domain).
#Custom Google Workspace Audit Log Search for the IOC in email senders/URLs.
#CrowdStrike Search Hosts by Hostname or custom CrowdStrike Search by IOC.
#Send Direct Message (or reply in thread) to the analyst with a formatted response:
IOC + type
Verdict (Malicious / Suspicious / Clean / Unknown)
Engine counts and notable findings
Associated families / IOCs
Internal correlation hits
Source links to each enrichment provider
Suggested next action (block / monitor / dismiss)
If verdict is Malicious AND analyst confirms via follow-up:
Offer to fire response actions: #Add SHA256 Hash to CrowdStrike Allowlist or #Blocklist SHA256 Hash, #Search and Purge Email for the URL/domain.
#Leave Internal Note in the request capturing the IOC and verdict.
IOC Enrichment & Lookup
Playbooks
/
IOC Enrichment & Lookup
IOC Enrichment & Lookup
Created by

Console Team
Published
Security
Okta
Slack
+6
Conditions
Analyst pastes a file hash, IP address, domain, or URL in Slack or a request.
Instructions
Parse the input:
Auto-detect IOC type via regex (MD5/SHA1/SHA256 hash, IPv4/IPv6, domain, URL).
If ambiguous, #Send Direct Message asking for clarification.
#Lookup Users on the requester to confirm analyst role (in
security-analystsOkta group).Run lookups in parallel based on IOC type:
Hash → #custom VirusTotal Hash Lookup, custom abuse.ch MalwareBazaar Lookup, #custom Recorded Future Hash Lookup, #CrowdStrike Query Quarantined Files to check if seen internally.
IP → custom VirusTotal IP Lookup, custom abuse.ch ThreatFox Lookup, custom Recorded Future IP Lookup, custom GreyNoise Lookup, #CrowdStrike: Intel Indicator Lookup.
Domain → custom VirusTotal Domain Lookup, custom WHOIS Lookup, custom Get Domain Age, custom Recorded Future Domain Lookup, #CrowdStrike: Intel Indicator Lookup.
URL → custom VirusTotal URL Lookup, custom URLscan Submit, custom Phishtank Lookup.
Compile a unified verdict:
Count engines flagging as malicious / suspicious / clean.
Pull first-seen / last-seen dates.
Pull associated malware families if any.
Pull related IOCs (e.g. domains hosted on the same IP).
Internal correlation:
#Search Okta System Log Custom for the IP/domain in recent logins (if IP/domain).
#Custom Google Workspace Audit Log Search for the IOC in email senders/URLs.
#CrowdStrike Search Hosts by Hostname or custom CrowdStrike Search by IOC.
#Send Direct Message (or reply in thread) to the analyst with a formatted response:
IOC + type
Verdict (Malicious / Suspicious / Clean / Unknown)
Engine counts and notable findings
Associated families / IOCs
Internal correlation hits
Source links to each enrichment provider
Suggested next action (block / monitor / dismiss)
If verdict is Malicious AND analyst confirms via follow-up:
Offer to fire response actions: #Add SHA256 Hash to CrowdStrike Allowlist or #Blocklist SHA256 Hash, #Search and Purge Email for the URL/domain.
#Leave Internal Note in the request capturing the IOC and verdict.
IOC Enrichment & Lookup
Playbooks
/
IOC Enrichment & Lookup
IOC Enrichment & Lookup
Created by

Console Team
Published
Security
Okta
Slack
+6
Conditions
Analyst pastes a file hash, IP address, domain, or URL in Slack or a request.
Instructions
Parse the input:
Auto-detect IOC type via regex (MD5/SHA1/SHA256 hash, IPv4/IPv6, domain, URL).
If ambiguous, #Send Direct Message asking for clarification.
#Lookup Users on the requester to confirm analyst role (in
security-analystsOkta group).Run lookups in parallel based on IOC type:
Hash → #custom VirusTotal Hash Lookup, custom abuse.ch MalwareBazaar Lookup, #custom Recorded Future Hash Lookup, #CrowdStrike Query Quarantined Files to check if seen internally.
IP → custom VirusTotal IP Lookup, custom abuse.ch ThreatFox Lookup, custom Recorded Future IP Lookup, custom GreyNoise Lookup, #CrowdStrike: Intel Indicator Lookup.
Domain → custom VirusTotal Domain Lookup, custom WHOIS Lookup, custom Get Domain Age, custom Recorded Future Domain Lookup, #CrowdStrike: Intel Indicator Lookup.
URL → custom VirusTotal URL Lookup, custom URLscan Submit, custom Phishtank Lookup.
Compile a unified verdict:
Count engines flagging as malicious / suspicious / clean.
Pull first-seen / last-seen dates.
Pull associated malware families if any.
Pull related IOCs (e.g. domains hosted on the same IP).
Internal correlation:
#Search Okta System Log Custom for the IP/domain in recent logins (if IP/domain).
#Custom Google Workspace Audit Log Search for the IOC in email senders/URLs.
#CrowdStrike Search Hosts by Hostname or custom CrowdStrike Search by IOC.
#Send Direct Message (or reply in thread) to the analyst with a formatted response:
IOC + type
Verdict (Malicious / Suspicious / Clean / Unknown)
Engine counts and notable findings
Associated families / IOCs
Internal correlation hits
Source links to each enrichment provider
Suggested next action (block / monitor / dismiss)
If verdict is Malicious AND analyst confirms via follow-up:
Offer to fire response actions: #Add SHA256 Hash to CrowdStrike Allowlist or #Blocklist SHA256 Hash, #Search and Purge Email for the URL/domain.
#Leave Internal Note in the request capturing the IOC and verdict.
Compromised Credential Response
Playbooks
/
Compromised Credential Response
Compromised Credential Response
Created by

Console Team
Published
Security
Okta
1Password
Vanta
+5
Conditions
Detection — webhook from HaveIBeenPwned API monitor OR Dehashed scheduled poll
Instructions
Parse the dump match:
Affected email
Source dump name + date
What was compromised (password / email / phone / other)
#Search Okta User by Email to confirm the user exists and is active.
If user doesn't exist or is already deactivated → log and exit.
#Lookup Users with
includeManager.Risk assessment:
If
passwordwas in the dump:#Custom Okta Check Password Reuse to see if the dumped password matches their current Okta password (via secure hash comparison if available).
If reuse detected → Critical.
Else → High.
If only email/phone exposed → Medium (phishing risk).
Execute response based on risk:
Critical / High (password compromised):
#Reset Password (Okta) with
sendEmail = true.#Reset User Factors (Custom) to force MFA re-enrollment.
#Custom Okta Force Password Change Next Login.
Medium (email/phone only):
#Send Direct Message with phishing-awareness reminder.
No forced reset, but heightened monitoring for 30 days.
#Send Direct Message to the user:
Explain the breach source and date (without leaking other affected services).
Confirm what was reset.
Recommend they:
Use 1Password to generate a unique password for the corporate account.
Check other accounts for password reuse via HIBP self-check link.
Enable phishing-resistant MFA (FIDO2 / passkey).
Include 1Password setup link if user isn't enrolled.
#Send Channel Message to
#security-credentialswith the response summary.schedule_action wake at 7 days to verify the user re-enrolled MFA and reset password.
On wake: if MFA not re-enrolled → #Send Direct Message reminder.
#Custom Vanta Log Credential Incident for compliance.
#Leave Internal Note capturing breach source, response actions, follow-up status.
Compromised Credential Response
Playbooks
/
Compromised Credential Response
Compromised Credential Response
Created by

Console Team
Published
Security
Okta
1Password
Vanta
+5
Conditions
Detection — webhook from HaveIBeenPwned API monitor OR Dehashed scheduled poll
Instructions
Parse the dump match:
Affected email
Source dump name + date
What was compromised (password / email / phone / other)
#Search Okta User by Email to confirm the user exists and is active.
If user doesn't exist or is already deactivated → log and exit.
#Lookup Users with
includeManager.Risk assessment:
If
passwordwas in the dump:#Custom Okta Check Password Reuse to see if the dumped password matches their current Okta password (via secure hash comparison if available).
If reuse detected → Critical.
Else → High.
If only email/phone exposed → Medium (phishing risk).
Execute response based on risk:
Critical / High (password compromised):
#Reset Password (Okta) with
sendEmail = true.#Reset User Factors (Custom) to force MFA re-enrollment.
#Custom Okta Force Password Change Next Login.
Medium (email/phone only):
#Send Direct Message with phishing-awareness reminder.
No forced reset, but heightened monitoring for 30 days.
#Send Direct Message to the user:
Explain the breach source and date (without leaking other affected services).
Confirm what was reset.
Recommend they:
Use 1Password to generate a unique password for the corporate account.
Check other accounts for password reuse via HIBP self-check link.
Enable phishing-resistant MFA (FIDO2 / passkey).
Include 1Password setup link if user isn't enrolled.
#Send Channel Message to
#security-credentialswith the response summary.schedule_action wake at 7 days to verify the user re-enrolled MFA and reset password.
On wake: if MFA not re-enrolled → #Send Direct Message reminder.
#Custom Vanta Log Credential Incident for compliance.
#Leave Internal Note capturing breach source, response actions, follow-up status.
Compromised Credential Response
Playbooks
/
Compromised Credential Response
Compromised Credential Response
Created by

Console Team
Published
Security
Okta
1Password
Vanta
+5
Conditions
Detection — webhook from HaveIBeenPwned API monitor OR Dehashed scheduled poll
Instructions
Parse the dump match:
Affected email
Source dump name + date
What was compromised (password / email / phone / other)
#Search Okta User by Email to confirm the user exists and is active.
If user doesn't exist or is already deactivated → log and exit.
#Lookup Users with
includeManager.Risk assessment:
If
passwordwas in the dump:#Custom Okta Check Password Reuse to see if the dumped password matches their current Okta password (via secure hash comparison if available).
If reuse detected → Critical.
Else → High.
If only email/phone exposed → Medium (phishing risk).
Execute response based on risk:
Critical / High (password compromised):
#Reset Password (Okta) with
sendEmail = true.#Reset User Factors (Custom) to force MFA re-enrollment.
#Custom Okta Force Password Change Next Login.
Medium (email/phone only):
#Send Direct Message with phishing-awareness reminder.
No forced reset, but heightened monitoring for 30 days.
#Send Direct Message to the user:
Explain the breach source and date (without leaking other affected services).
Confirm what was reset.
Recommend they:
Use 1Password to generate a unique password for the corporate account.
Check other accounts for password reuse via HIBP self-check link.
Enable phishing-resistant MFA (FIDO2 / passkey).
Include 1Password setup link if user isn't enrolled.
#Send Channel Message to
#security-credentialswith the response summary.schedule_action wake at 7 days to verify the user re-enrolled MFA and reset password.
On wake: if MFA not re-enrolled → #Send Direct Message reminder.
#Custom Vanta Log Credential Incident for compliance.
#Leave Internal Note capturing breach source, response actions, follow-up status.
Anomalous Login
Playbooks
/
Anomalous Login
Anomalous Login
Created by

Console Team
Published
Security
Okta
CrowdStrike
Vanta
+5
Conditions
Okta Event Hook — user.session.start with risk signals (impossible-travel, new-device, suspicious-IP)
Instructions
#Lookup Users on $event.userEmail with includeManager, includeGroups.
Filter false positives:
#Custom Check VPN Egress — if IP matches corporate VPN, exit.
#Custom Check Travel Authorization — if user has an active travel exemption matching the country, exit.
Pull context:
#Search Okta System Log Custom for the user's previous 5 logins (location, IP, device).
#CrowdStrike Get Device Login History for any corp device the user might be on.
Compute risk:
Impossible travel (distance > N km / time delta) → High.
New device + new country → High.
New IP from known country → Medium.
Just risk-flagged but recognizable → Low.
Branch on risk:
High:
#Custom Okta Force Step-Up MFA for the active session.
#Send Direct Message to the user: "We saw a login from {{geo}} on {{device}}. Was this you?" + #Trigger Form "Yes / No".
schedule_action wake at 10 minutes.
Medium:
#Send Direct Message with same prompt but no immediate step-up.
schedule_action wake at 30 minutes.
Low → just log, no user prompt.
On wake, check response:
Yes → log as confirmed, no further action.
No OR no response:
#Reset User Factor for any non-FIDO factors.
#Custom Okta Lock Account until manual review.
#Send Channel Message to #soc-triage with full context.
Fire Sec-11 (Compromised Credential Response) flow for the user.
#Send Direct Message to the user (after revocation): "We've locked your account as a precaution. To recover, contact security."
#Send Direct Message to the user's manager flagging the incident.
#Custom Vanta Log Anomalous Login for audit.
#Leave Internal Note capturing risk score, response, outcome.
Anomalous Login
Playbooks
/
Anomalous Login
Anomalous Login
Created by

Console Team
Published
Security
Okta
CrowdStrike
Vanta
+5
Conditions
Okta Event Hook — user.session.start with risk signals (impossible-travel, new-device, suspicious-IP)
Instructions
#Lookup Users on $event.userEmail with includeManager, includeGroups.
Filter false positives:
#Custom Check VPN Egress — if IP matches corporate VPN, exit.
#Custom Check Travel Authorization — if user has an active travel exemption matching the country, exit.
Pull context:
#Search Okta System Log Custom for the user's previous 5 logins (location, IP, device).
#CrowdStrike Get Device Login History for any corp device the user might be on.
Compute risk:
Impossible travel (distance > N km / time delta) → High.
New device + new country → High.
New IP from known country → Medium.
Just risk-flagged but recognizable → Low.
Branch on risk:
High:
#Custom Okta Force Step-Up MFA for the active session.
#Send Direct Message to the user: "We saw a login from {{geo}} on {{device}}. Was this you?" + #Trigger Form "Yes / No".
schedule_action wake at 10 minutes.
Medium:
#Send Direct Message with same prompt but no immediate step-up.
schedule_action wake at 30 minutes.
Low → just log, no user prompt.
On wake, check response:
Yes → log as confirmed, no further action.
No OR no response:
#Reset User Factor for any non-FIDO factors.
#Custom Okta Lock Account until manual review.
#Send Channel Message to #soc-triage with full context.
Fire Sec-11 (Compromised Credential Response) flow for the user.
#Send Direct Message to the user (after revocation): "We've locked your account as a precaution. To recover, contact security."
#Send Direct Message to the user's manager flagging the incident.
#Custom Vanta Log Anomalous Login for audit.
#Leave Internal Note capturing risk score, response, outcome.
Anomalous Login
Playbooks
/
Anomalous Login
Anomalous Login
Created by

Console Team
Published
Security
Okta
CrowdStrike
Vanta
+5
Conditions
Okta Event Hook — user.session.start with risk signals (impossible-travel, new-device, suspicious-IP)
Instructions
#Lookup Users on $event.userEmail with includeManager, includeGroups.
Filter false positives:
#Custom Check VPN Egress — if IP matches corporate VPN, exit.
#Custom Check Travel Authorization — if user has an active travel exemption matching the country, exit.
Pull context:
#Search Okta System Log Custom for the user's previous 5 logins (location, IP, device).
#CrowdStrike Get Device Login History for any corp device the user might be on.
Compute risk:
Impossible travel (distance > N km / time delta) → High.
New device + new country → High.
New IP from known country → Medium.
Just risk-flagged but recognizable → Low.
Branch on risk:
High:
#Custom Okta Force Step-Up MFA for the active session.
#Send Direct Message to the user: "We saw a login from {{geo}} on {{device}}. Was this you?" + #Trigger Form "Yes / No".
schedule_action wake at 10 minutes.
Medium:
#Send Direct Message with same prompt but no immediate step-up.
schedule_action wake at 30 minutes.
Low → just log, no user prompt.
On wake, check response:
Yes → log as confirmed, no further action.
No OR no response:
#Reset User Factor for any non-FIDO factors.
#Custom Okta Lock Account until manual review.
#Send Channel Message to #soc-triage with full context.
Fire Sec-11 (Compromised Credential Response) flow for the user.
#Send Direct Message to the user (after revocation): "We've locked your account as a precaution. To recover, contact security."
#Send Direct Message to the user's manager flagging the incident.
#Custom Vanta Log Anomalous Login for audit.
#Leave Internal Note capturing risk score, response, outcome.
GitHub Outside-Collaborator Review
Playbooks
/
GitHub Outside-Collaborator Review
GitHub Outside-Collaborator Review
Created by

Console Team
Published
Security
GitHub
Vanta
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
#Custom GitHub List Outside Collaborators at org level to get all non-employee accounts with repo access.
For each outside collaborator:
Capture: GitHub login, email (if visible), repos with access, permission level, last activity.
Cross-reference against employees:
#Lookup Users for each outside collaborator's email.
If matches an active employee → flag as "should be inside collaborator" and skip ownership review.
For confirmed outside collaborators:
#List Repositories to get repo metadata.
#Custom GitHub Get Repo Owner via CODEOWNERS file or repo settings.
Group findings by repo owner.
For each repo owner, #Lookup Users with
includeSlackId.#Send Direct Message to each owner with their list:
"{{collaborator}}: {{repos}}, last active {{date}}"
#Trigger Form per collaborator: "Keep" / "Revoke" / "Convert to inside (employee)".
schedule_action wake at 5 days for response.
On wake, execute decisions:
Keep → log and exit; capture justification.
Revoke → #Remove User from Repo for each repo, or #Remove User from Org if all repos revoked.
Convert → #custom GitHub Add Org Member + remove outside-collab status.
No response → escalate at day 7 to repo owner's manager; revoke at day 10 if still no response.
#Custom Vanta Log Access Review with the outside-collab decisions.
#Send Channel Message to
#securityweekly summary: total reviewed, kept, revoked, escalated.#Leave Internal Note capturing the cycle.
GitHub Outside-Collaborator Review
Playbooks
/
GitHub Outside-Collaborator Review
GitHub Outside-Collaborator Review
Created by

Console Team
Published
Security
GitHub
Vanta
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
#Custom GitHub List Outside Collaborators at org level to get all non-employee accounts with repo access.
For each outside collaborator:
Capture: GitHub login, email (if visible), repos with access, permission level, last activity.
Cross-reference against employees:
#Lookup Users for each outside collaborator's email.
If matches an active employee → flag as "should be inside collaborator" and skip ownership review.
For confirmed outside collaborators:
#List Repositories to get repo metadata.
#Custom GitHub Get Repo Owner via CODEOWNERS file or repo settings.
Group findings by repo owner.
For each repo owner, #Lookup Users with
includeSlackId.#Send Direct Message to each owner with their list:
"{{collaborator}}: {{repos}}, last active {{date}}"
#Trigger Form per collaborator: "Keep" / "Revoke" / "Convert to inside (employee)".
schedule_action wake at 5 days for response.
On wake, execute decisions:
Keep → log and exit; capture justification.
Revoke → #Remove User from Repo for each repo, or #Remove User from Org if all repos revoked.
Convert → #custom GitHub Add Org Member + remove outside-collab status.
No response → escalate at day 7 to repo owner's manager; revoke at day 10 if still no response.
#Custom Vanta Log Access Review with the outside-collab decisions.
#Send Channel Message to
#securityweekly summary: total reviewed, kept, revoked, escalated.#Leave Internal Note capturing the cycle.
GitHub Outside-Collaborator Review
Playbooks
/
GitHub Outside-Collaborator Review
GitHub Outside-Collaborator Review
Created by

Console Team
Published
Security
GitHub
Vanta
Conditions
Scheduled — every Monday at 9:00 AM America/Chicago
Instructions
#Custom GitHub List Outside Collaborators at org level to get all non-employee accounts with repo access.
For each outside collaborator:
Capture: GitHub login, email (if visible), repos with access, permission level, last activity.
Cross-reference against employees:
#Lookup Users for each outside collaborator's email.
If matches an active employee → flag as "should be inside collaborator" and skip ownership review.
For confirmed outside collaborators:
#List Repositories to get repo metadata.
#Custom GitHub Get Repo Owner via CODEOWNERS file or repo settings.
Group findings by repo owner.
For each repo owner, #Lookup Users with
includeSlackId.#Send Direct Message to each owner with their list:
"{{collaborator}}: {{repos}}, last active {{date}}"
#Trigger Form per collaborator: "Keep" / "Revoke" / "Convert to inside (employee)".
schedule_action wake at 5 days for response.
On wake, execute decisions:
Keep → log and exit; capture justification.
Revoke → #Remove User from Repo for each repo, or #Remove User from Org if all repos revoked.
Convert → #custom GitHub Add Org Member + remove outside-collab status.
No response → escalate at day 7 to repo owner's manager; revoke at day 10 if still no response.
#Custom Vanta Log Access Review with the outside-collab decisions.
#Send Channel Message to
#securityweekly summary: total reviewed, kept, revoked, escalated.#Leave Internal Note capturing the cycle.
Cloud IAM Reviews
Playbooks
/
Cloud IAM Reviews
Cloud IAM Reviews
Created by

Console Team
Published
Security
AWS
Azure Blob Storage
Vanta
+5
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 7:00 AM America/Chicago
Instructions
Pull IAM inventory:
For each IAM principal, compute privilege score:
#Custom AWS Access Analyzer Query for unused permissions in the last 90 days.
#Custom GCP Policy Analyzer for overly permissive bindings.
Flag overly permissive:
Admin-equivalent (e.g.
AdministratorAccess,*:*,Owner) → always reviewed.Unused permissions ≥ 60 days → flagged.
Service accounts with human-like patterns → flagged for review.
Resolve owners:
For each flagged identity, #custom Get Service Owner by looking up:
Tags on the AWS user/role.
CODEOWNERS in associated repos.
Custom internal service-to-owner mapping.
Send attestations:
For each owner: #Send Direct Message with their IAM scope.
#Trigger Form with attest decision per identity: "Keep / Reduce / Revoke / Convert to role".
schedule_action wakes at 7, 14, 21 days for non-respondents.
At deadline + 1, execute decisions:
Reduce → #custom AWS IAM Detach Policy for unused policies; custom GCP Reduce Binding Scope.
Revoke → #custom AWS IAM Deactivate User + #custom AWS IAM Delete Access Keys.
Convert to role → #custom AWS IAM User to Role Migration.
#Custom Vanta Upload Evidence with the full review log.
#Send Channel Message to
#securitypost-cycle summary.#Create Linear Issue in Security-Audit for the quarterly cycle artifact.
#Leave Internal Note with cycle stats.
Cloud IAM Reviews
Playbooks
/
Cloud IAM Reviews
Cloud IAM Reviews
Created by

Console Team
Published
Security
AWS
Azure Blob Storage
Vanta
+5
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 7:00 AM America/Chicago
Instructions
Pull IAM inventory:
For each IAM principal, compute privilege score:
#Custom AWS Access Analyzer Query for unused permissions in the last 90 days.
#Custom GCP Policy Analyzer for overly permissive bindings.
Flag overly permissive:
Admin-equivalent (e.g.
AdministratorAccess,*:*,Owner) → always reviewed.Unused permissions ≥ 60 days → flagged.
Service accounts with human-like patterns → flagged for review.
Resolve owners:
For each flagged identity, #custom Get Service Owner by looking up:
Tags on the AWS user/role.
CODEOWNERS in associated repos.
Custom internal service-to-owner mapping.
Send attestations:
For each owner: #Send Direct Message with their IAM scope.
#Trigger Form with attest decision per identity: "Keep / Reduce / Revoke / Convert to role".
schedule_action wakes at 7, 14, 21 days for non-respondents.
At deadline + 1, execute decisions:
Reduce → #custom AWS IAM Detach Policy for unused policies; custom GCP Reduce Binding Scope.
Revoke → #custom AWS IAM Deactivate User + #custom AWS IAM Delete Access Keys.
Convert to role → #custom AWS IAM User to Role Migration.
#Custom Vanta Upload Evidence with the full review log.
#Send Channel Message to
#securitypost-cycle summary.#Create Linear Issue in Security-Audit for the quarterly cycle artifact.
#Leave Internal Note with cycle stats.
Cloud IAM Reviews
Playbooks
/
Cloud IAM Reviews
Cloud IAM Reviews
Created by

Console Team
Published
Security
AWS
Azure Blob Storage
Vanta
+5
Conditions
Scheduled — quarterly on the 1st of Jan/Apr/Jul/Oct at 7:00 AM America/Chicago
Instructions
Pull IAM inventory:
For each IAM principal, compute privilege score:
#Custom AWS Access Analyzer Query for unused permissions in the last 90 days.
#Custom GCP Policy Analyzer for overly permissive bindings.
Flag overly permissive:
Admin-equivalent (e.g.
AdministratorAccess,*:*,Owner) → always reviewed.Unused permissions ≥ 60 days → flagged.
Service accounts with human-like patterns → flagged for review.
Resolve owners:
For each flagged identity, #custom Get Service Owner by looking up:
Tags on the AWS user/role.
CODEOWNERS in associated repos.
Custom internal service-to-owner mapping.
Send attestations:
For each owner: #Send Direct Message with their IAM scope.
#Trigger Form with attest decision per identity: "Keep / Reduce / Revoke / Convert to role".
schedule_action wakes at 7, 14, 21 days for non-respondents.
At deadline + 1, execute decisions:
Reduce → #custom AWS IAM Detach Policy for unused policies; custom GCP Reduce Binding Scope.
Revoke → #custom AWS IAM Deactivate User + #custom AWS IAM Delete Access Keys.
Convert to role → #custom AWS IAM User to Role Migration.
#Custom Vanta Upload Evidence with the full review log.
#Send Channel Message to
#securitypost-cycle summary.#Create Linear Issue in Security-Audit for the quarterly cycle artifact.
#Leave Internal Note with cycle stats.
Secret & API Key Rotation
Playbooks
/
Secret & API Key Rotation
Secret & API Key Rotation
Created by

Console Team
Published
Security
Slack
1Password
AWS
+2
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull secrets inventory:
#Custom 1Password List Items with
lastModifiedtimestamps for shared vaults.#Custom GitHub List Repository Secrets for org-level and repo-level secrets.
#Custom Vault List Secrets by mount.
#Custom AWS Secrets Manager List with rotation status.
For each secret, compute age and expiry:
Use
lastRotatedfield if available, elsecreatedAt.Apply policy: 90-day rotation for prod, 180-day for non-prod, 365-day for read-only API keys.
Categorize by urgency:
Expired (past rotation date) → P0.
30 days from rotation → P1, send first reminder.
14 days from rotation → P2, second reminder.
7 days from rotation → P3, final reminder.
For each secret, #custom Get Secret Owner via:
Item tags / metadata.
Vault path → service mapping.
GitHub repo → CODEOWNERS.
For each owner, group their pending rotations.
#Send Direct Message with the list, urgency, and:
For rotatable-by-Console: offer "Rotate now" button via #Trigger Form.
For manual: link to runbook + provider rotation steps.
On "Rotate now":
Fire custom API Token Rotation action for that specific secret type (e.g. rotate AWS access key, regenerate Slack bot token).
Update the secret in the vault.
#Send Direct Message confirming, with the new secret stored in the original vault location.
schedule_action wakes at the expiry date to verify rotation occurred.
On wake, if not rotated:
#Send Direct Message to owner with hard-expiry warning.
#Send Channel Message to
#securityif past expiry by 7 days.For critical secrets past 14 days: custom Revoke Expired Secret to force the issue.
#Custom Vanta Log Secret Rotation for compliance.
Weekly: #Send Channel Message to
#securitywith rotation stats.#Leave Internal Note capturing rotation activity.
Secret & API Key Rotation
Playbooks
/
Secret & API Key Rotation
Secret & API Key Rotation
Created by

Console Team
Published
Security
Slack
1Password
AWS
+2
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull secrets inventory:
#Custom 1Password List Items with
lastModifiedtimestamps for shared vaults.#Custom GitHub List Repository Secrets for org-level and repo-level secrets.
#Custom Vault List Secrets by mount.
#Custom AWS Secrets Manager List with rotation status.
For each secret, compute age and expiry:
Use
lastRotatedfield if available, elsecreatedAt.Apply policy: 90-day rotation for prod, 180-day for non-prod, 365-day for read-only API keys.
Categorize by urgency:
Expired (past rotation date) → P0.
30 days from rotation → P1, send first reminder.
14 days from rotation → P2, second reminder.
7 days from rotation → P3, final reminder.
For each secret, #custom Get Secret Owner via:
Item tags / metadata.
Vault path → service mapping.
GitHub repo → CODEOWNERS.
For each owner, group their pending rotations.
#Send Direct Message with the list, urgency, and:
For rotatable-by-Console: offer "Rotate now" button via #Trigger Form.
For manual: link to runbook + provider rotation steps.
On "Rotate now":
Fire custom API Token Rotation action for that specific secret type (e.g. rotate AWS access key, regenerate Slack bot token).
Update the secret in the vault.
#Send Direct Message confirming, with the new secret stored in the original vault location.
schedule_action wakes at the expiry date to verify rotation occurred.
On wake, if not rotated:
#Send Direct Message to owner with hard-expiry warning.
#Send Channel Message to
#securityif past expiry by 7 days.For critical secrets past 14 days: custom Revoke Expired Secret to force the issue.
#Custom Vanta Log Secret Rotation for compliance.
Weekly: #Send Channel Message to
#securitywith rotation stats.#Leave Internal Note capturing rotation activity.
Secret & API Key Rotation
Playbooks
/
Secret & API Key Rotation
Secret & API Key Rotation
Created by

Console Team
Published
Security
Slack
1Password
AWS
+2
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull secrets inventory:
#Custom 1Password List Items with
lastModifiedtimestamps for shared vaults.#Custom GitHub List Repository Secrets for org-level and repo-level secrets.
#Custom Vault List Secrets by mount.
#Custom AWS Secrets Manager List with rotation status.
For each secret, compute age and expiry:
Use
lastRotatedfield if available, elsecreatedAt.Apply policy: 90-day rotation for prod, 180-day for non-prod, 365-day for read-only API keys.
Categorize by urgency:
Expired (past rotation date) → P0.
30 days from rotation → P1, send first reminder.
14 days from rotation → P2, second reminder.
7 days from rotation → P3, final reminder.
For each secret, #custom Get Secret Owner via:
Item tags / metadata.
Vault path → service mapping.
GitHub repo → CODEOWNERS.
For each owner, group their pending rotations.
#Send Direct Message with the list, urgency, and:
For rotatable-by-Console: offer "Rotate now" button via #Trigger Form.
For manual: link to runbook + provider rotation steps.
On "Rotate now":
Fire custom API Token Rotation action for that specific secret type (e.g. rotate AWS access key, regenerate Slack bot token).
Update the secret in the vault.
#Send Direct Message confirming, with the new secret stored in the original vault location.
schedule_action wakes at the expiry date to verify rotation occurred.
On wake, if not rotated:
#Send Direct Message to owner with hard-expiry warning.
#Send Channel Message to
#securityif past expiry by 7 days.For critical secrets past 14 days: custom Revoke Expired Secret to force the issue.
#Custom Vanta Log Secret Rotation for compliance.
Weekly: #Send Channel Message to
#securitywith rotation stats.#Leave Internal Note capturing rotation activity.
Certificate Expiration Tracking
Playbooks
/
Certificate Expiration Tracking
Certificate Expiration Tracking
Created by

Console Team
Published
Security
AWS
Vanta
+5
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull cert inventory:
#Custom Cloudflare List Certificates for all zones.
#Custom AWS ACM List Certificates for all regions.
#Custom Let's Encrypt List Certificates if any managed externally.
For each cert, capture:
Domain(s)
Issuer
Not-after date
Days-to-expiry
Cert owner (via custom Get Cert Owner).
Determine alert tier:
30 days → first reminder.
14 days → second reminder.
3 days → urgent + create Linear ticket.
Expired → critical alert.
For each cert at an alert tier:
#Lookup Users on the cert owner.
Check if already alerted in the last 24h (avoid spam).
Send the alert:
#Send Direct Message to the owner with: domain, expiry date, days remaining, renewal runbook link, "Renew now" form.
For auto-renewable certs (LE, ACM auto-renew): just notify; system will handle.
For manual: provide step-by-step.
On "Renew now":
For LE / ACM: custom Trigger Cert Renewal action.
For manual cert sources: #Create Linear Issue in the platform project assigned to the owner.
At 3-day mark:
#Create Linear Issue regardless of prior action.
#Send Channel Message to #security with the impending expiry.
At expiry:
#Send Channel Message to #security-critical and the cert owner's team channel.
#Custom Page On-Call for production-critical certs.
Weekly summary:
#Send Channel Message to #security with: certs expiring in next 30/60/90 days, renewal status.
#Custom Vanta Upload Evidence monthly with cert inventory snapshot.
#Leave Internal Note for each cert action.
Certificate Expiration Tracking
Playbooks
/
Certificate Expiration Tracking
Certificate Expiration Tracking
Created by

Console Team
Published
Security
AWS
Vanta
+5
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull cert inventory:
#Custom Cloudflare List Certificates for all zones.
#Custom AWS ACM List Certificates for all regions.
#Custom Let's Encrypt List Certificates if any managed externally.
For each cert, capture:
Domain(s)
Issuer
Not-after date
Days-to-expiry
Cert owner (via custom Get Cert Owner).
Determine alert tier:
30 days → first reminder.
14 days → second reminder.
3 days → urgent + create Linear ticket.
Expired → critical alert.
For each cert at an alert tier:
#Lookup Users on the cert owner.
Check if already alerted in the last 24h (avoid spam).
Send the alert:
#Send Direct Message to the owner with: domain, expiry date, days remaining, renewal runbook link, "Renew now" form.
For auto-renewable certs (LE, ACM auto-renew): just notify; system will handle.
For manual: provide step-by-step.
On "Renew now":
For LE / ACM: custom Trigger Cert Renewal action.
For manual cert sources: #Create Linear Issue in the platform project assigned to the owner.
At 3-day mark:
#Create Linear Issue regardless of prior action.
#Send Channel Message to #security with the impending expiry.
At expiry:
#Send Channel Message to #security-critical and the cert owner's team channel.
#Custom Page On-Call for production-critical certs.
Weekly summary:
#Send Channel Message to #security with: certs expiring in next 30/60/90 days, renewal status.
#Custom Vanta Upload Evidence monthly with cert inventory snapshot.
#Leave Internal Note for each cert action.
Certificate Expiration Tracking
Playbooks
/
Certificate Expiration Tracking
Certificate Expiration Tracking
Created by

Console Team
Published
Security
AWS
Vanta
+5
Conditions
Scheduled — every day at 6:00 AM America/Chicago
Instructions
Pull cert inventory:
#Custom Cloudflare List Certificates for all zones.
#Custom AWS ACM List Certificates for all regions.
#Custom Let's Encrypt List Certificates if any managed externally.
For each cert, capture:
Domain(s)
Issuer
Not-after date
Days-to-expiry
Cert owner (via custom Get Cert Owner).
Determine alert tier:
30 days → first reminder.
14 days → second reminder.
3 days → urgent + create Linear ticket.
Expired → critical alert.
For each cert at an alert tier:
#Lookup Users on the cert owner.
Check if already alerted in the last 24h (avoid spam).
Send the alert:
#Send Direct Message to the owner with: domain, expiry date, days remaining, renewal runbook link, "Renew now" form.
For auto-renewable certs (LE, ACM auto-renew): just notify; system will handle.
For manual: provide step-by-step.
On "Renew now":
For LE / ACM: custom Trigger Cert Renewal action.
For manual cert sources: #Create Linear Issue in the platform project assigned to the owner.
At 3-day mark:
#Create Linear Issue regardless of prior action.
#Send Channel Message to #security with the impending expiry.
At expiry:
#Send Channel Message to #security-critical and the cert owner's team channel.
#Custom Page On-Call for production-critical certs.
Weekly summary:
#Send Channel Message to #security with: certs expiring in next 30/60/90 days, renewal status.
#Custom Vanta Upload Evidence monthly with cert inventory snapshot.
#Leave Internal Note for each cert action.
Public Exposure Monitoring
Playbooks
/
Public Exposure Monitoring
Public Exposure Monitoring
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Detection — scheduled scan every 4 hours + GitHub secret-scanning webhook
Instructions
Multi-source scan in parallel:
#Custom GitHub Secret Scan Get Findings at org level.
#Custom GitHub Search Public Code for org domain + sensitive keywords.
#Custom AWS List Internet-Facing Resources (RDS, ELBs, ECS services).
#Custom Shodan Org Lookup for unexpected exposed services.
For each finding, classify severity:
Leaked secret (API key, token, password) → P0.
Public S3 with data → P1.
Unexpected exposed port → P2.
Outdated TLS / weak config → P3.
Resolve the owning team:
For GitHub findings: #custom Get Repo Owner via CODEOWNERS.
For AWS findings: #custom Get Resource Owner via tags.
Default: route to
#securityfor triage.
For each finding:
For P0 (leaked secret):
#Custom Revoke Leaked Secret if it's an API key the system can revoke.
#Send Direct Message to the team lead with extreme urgency.
#Send Channel Message to
#security-critical.#Create Linear Issue with severity Critical.
#Custom Page On-Call security engineer.
For P1 (public data):
#Send Direct Message to the team lead.
#Create Linear Issue with severity High.
#Send Channel Message to
#security.
For P2/P3:
#Send Direct Message to the team lead with the finding.
#Create Linear Issue with severity Medium/Low.
schedule_action wakes per finding at SLA windows:
P0 → 4h, 8h, 24h.
P1 → 24h, 72h, 7d.
P2 → 7d, 30d.
P3 → 30d, 90d.
On wakes, #custom Get Finding Status to check remediation.
If unremediated past SLA: #Send Channel Message escalating to the team's skip-level and
#security-leads.#Custom Vanta Log Exposure Finding for compliance.
Weekly summary to
#securityvia #Send Channel Message.#Leave Internal Note per finding.
Public Exposure Monitoring
Playbooks
/
Public Exposure Monitoring
Public Exposure Monitoring
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Detection — scheduled scan every 4 hours + GitHub secret-scanning webhook
Instructions
Multi-source scan in parallel:
#Custom GitHub Secret Scan Get Findings at org level.
#Custom GitHub Search Public Code for org domain + sensitive keywords.
#Custom AWS List Internet-Facing Resources (RDS, ELBs, ECS services).
#Custom Shodan Org Lookup for unexpected exposed services.
For each finding, classify severity:
Leaked secret (API key, token, password) → P0.
Public S3 with data → P1.
Unexpected exposed port → P2.
Outdated TLS / weak config → P3.
Resolve the owning team:
For GitHub findings: #custom Get Repo Owner via CODEOWNERS.
For AWS findings: #custom Get Resource Owner via tags.
Default: route to
#securityfor triage.
For each finding:
For P0 (leaked secret):
#Custom Revoke Leaked Secret if it's an API key the system can revoke.
#Send Direct Message to the team lead with extreme urgency.
#Send Channel Message to
#security-critical.#Create Linear Issue with severity Critical.
#Custom Page On-Call security engineer.
For P1 (public data):
#Send Direct Message to the team lead.
#Create Linear Issue with severity High.
#Send Channel Message to
#security.
For P2/P3:
#Send Direct Message to the team lead with the finding.
#Create Linear Issue with severity Medium/Low.
schedule_action wakes per finding at SLA windows:
P0 → 4h, 8h, 24h.
P1 → 24h, 72h, 7d.
P2 → 7d, 30d.
P3 → 30d, 90d.
On wakes, #custom Get Finding Status to check remediation.
If unremediated past SLA: #Send Channel Message escalating to the team's skip-level and
#security-leads.#Custom Vanta Log Exposure Finding for compliance.
Weekly summary to
#securityvia #Send Channel Message.#Leave Internal Note per finding.
Public Exposure Monitoring
Playbooks
/
Public Exposure Monitoring
Public Exposure Monitoring
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Detection — scheduled scan every 4 hours + GitHub secret-scanning webhook
Instructions
Multi-source scan in parallel:
#Custom GitHub Secret Scan Get Findings at org level.
#Custom GitHub Search Public Code for org domain + sensitive keywords.
#Custom AWS List Internet-Facing Resources (RDS, ELBs, ECS services).
#Custom Shodan Org Lookup for unexpected exposed services.
For each finding, classify severity:
Leaked secret (API key, token, password) → P0.
Public S3 with data → P1.
Unexpected exposed port → P2.
Outdated TLS / weak config → P3.
Resolve the owning team:
For GitHub findings: #custom Get Repo Owner via CODEOWNERS.
For AWS findings: #custom Get Resource Owner via tags.
Default: route to
#securityfor triage.
For each finding:
For P0 (leaked secret):
#Custom Revoke Leaked Secret if it's an API key the system can revoke.
#Send Direct Message to the team lead with extreme urgency.
#Send Channel Message to
#security-critical.#Create Linear Issue with severity Critical.
#Custom Page On-Call security engineer.
For P1 (public data):
#Send Direct Message to the team lead.
#Create Linear Issue with severity High.
#Send Channel Message to
#security.
For P2/P3:
#Send Direct Message to the team lead with the finding.
#Create Linear Issue with severity Medium/Low.
schedule_action wakes per finding at SLA windows:
P0 → 4h, 8h, 24h.
P1 → 24h, 72h, 7d.
P2 → 7d, 30d.
P3 → 30d, 90d.
On wakes, #custom Get Finding Status to check remediation.
If unremediated past SLA: #Send Channel Message escalating to the team's skip-level and
#security-leads.#Custom Vanta Log Exposure Finding for compliance.
Weekly summary to
#securityvia #Send Channel Message.#Leave Internal Note per finding.
Vendor Security Review
Playbooks
/
Vendor Security Review
Vendor Security Review
Created by

Console Team
Published
Security
Vanta
Linear
Conditions
IT or someone requests a new SaaS app/vendor.
Instructions
#Trigger Form to collect:
Vendor name
Vendor URL
Use case (what data, what users, what integration)
Data sensitivity (none / PII / financial / customer-data / PHI / IP)
Number of users
Integration scope (SSO only / SCIM / API / data residency)
Business owner / requester
#Lookup Users on the requester.
Pull vendor attestations:
#Custom Vanta Get Vendor Profile for the vendor.
If exists: pull SOC2 / ISO 27001 / GDPR DPA / security questionnaire status.
If new vendor: #Web Research the vendor's trust/security page.
Tier the risk:
Low: no sensitive data, well-known vendor with SOC2 II, <50 users.
Medium: PII or financial, SOC2 II + DPA available.
High: customer-data, PHI, or IP; SOC2 II + DPA + security questionnaire + pen-test report required.
Critical: requires full vendor risk assessment + legal review + executive sign-off.
Run the security questionnaire if needed:
#Custom Send Vendor Security Questionnaire with the standard template.
schedule_action wake at 14 days to check response.
Route for approval:
Low → auto-approve with security info note.
Medium → #Request Approval from security engineer.
High → #Request Approval chained: security engineer → security lead → privacy/legal (if PII/PHI).
Critical → security lead → privacy → legal → CISO/CTO.
On full approval:
#Custom Vanta Add Approved Vendor with the risk tier and review artifacts.
#Create Linear Issue in the IT project for the actual onboarding (link to IT-7 if SSO setup is needed).
#Send Direct Message to the requester with: approval, next steps, restrictions if any.
On denial:
#Send Direct Message to the requester with the reason and alternative suggestions.
#Leave Internal Note capturing risk tier, attestations, approval trail.
Vendor Security Review
Playbooks
/
Vendor Security Review
Vendor Security Review
Created by

Console Team
Published
Security
Vanta
Linear
Conditions
IT or someone requests a new SaaS app/vendor.
Instructions
#Trigger Form to collect:
Vendor name
Vendor URL
Use case (what data, what users, what integration)
Data sensitivity (none / PII / financial / customer-data / PHI / IP)
Number of users
Integration scope (SSO only / SCIM / API / data residency)
Business owner / requester
#Lookup Users on the requester.
Pull vendor attestations:
#Custom Vanta Get Vendor Profile for the vendor.
If exists: pull SOC2 / ISO 27001 / GDPR DPA / security questionnaire status.
If new vendor: #Web Research the vendor's trust/security page.
Tier the risk:
Low: no sensitive data, well-known vendor with SOC2 II, <50 users.
Medium: PII or financial, SOC2 II + DPA available.
High: customer-data, PHI, or IP; SOC2 II + DPA + security questionnaire + pen-test report required.
Critical: requires full vendor risk assessment + legal review + executive sign-off.
Run the security questionnaire if needed:
#Custom Send Vendor Security Questionnaire with the standard template.
schedule_action wake at 14 days to check response.
Route for approval:
Low → auto-approve with security info note.
Medium → #Request Approval from security engineer.
High → #Request Approval chained: security engineer → security lead → privacy/legal (if PII/PHI).
Critical → security lead → privacy → legal → CISO/CTO.
On full approval:
#Custom Vanta Add Approved Vendor with the risk tier and review artifacts.
#Create Linear Issue in the IT project for the actual onboarding (link to IT-7 if SSO setup is needed).
#Send Direct Message to the requester with: approval, next steps, restrictions if any.
On denial:
#Send Direct Message to the requester with the reason and alternative suggestions.
#Leave Internal Note capturing risk tier, attestations, approval trail.
Vendor Security Review
Playbooks
/
Vendor Security Review
Vendor Security Review
Created by

Console Team
Published
Security
Vanta
Linear
Conditions
IT or someone requests a new SaaS app/vendor.
Instructions
#Trigger Form to collect:
Vendor name
Vendor URL
Use case (what data, what users, what integration)
Data sensitivity (none / PII / financial / customer-data / PHI / IP)
Number of users
Integration scope (SSO only / SCIM / API / data residency)
Business owner / requester
#Lookup Users on the requester.
Pull vendor attestations:
#Custom Vanta Get Vendor Profile for the vendor.
If exists: pull SOC2 / ISO 27001 / GDPR DPA / security questionnaire status.
If new vendor: #Web Research the vendor's trust/security page.
Tier the risk:
Low: no sensitive data, well-known vendor with SOC2 II, <50 users.
Medium: PII or financial, SOC2 II + DPA available.
High: customer-data, PHI, or IP; SOC2 II + DPA + security questionnaire + pen-test report required.
Critical: requires full vendor risk assessment + legal review + executive sign-off.
Run the security questionnaire if needed:
#Custom Send Vendor Security Questionnaire with the standard template.
schedule_action wake at 14 days to check response.
Route for approval:
Low → auto-approve with security info note.
Medium → #Request Approval from security engineer.
High → #Request Approval chained: security engineer → security lead → privacy/legal (if PII/PHI).
Critical → security lead → privacy → legal → CISO/CTO.
On full approval:
#Custom Vanta Add Approved Vendor with the risk tier and review artifacts.
#Create Linear Issue in the IT project for the actual onboarding (link to IT-7 if SSO setup is needed).
#Send Direct Message to the requester with: approval, next steps, restrictions if any.
On denial:
#Send Direct Message to the requester with the reason and alternative suggestions.
#Leave Internal Note capturing risk tier, attestations, approval trail.
Security Exception Handling
Playbooks
/
Security Exception Handling
Security Exception Handling
Created by

Console Team
Published
Security
Vanta
Conditions
Requester asks to bypass a security policy ("I need root SSH on a prod box", "exception to MFA on this kiosk", "allow this admin to keep their password instead of FIDO2").
Instructions
#Trigger Form to collect:
Policy being bypassed (dropdown of named policies)
Justification (free text, min 100 chars)
Duration requested (max 30 days, max 90 days, max 1 year)
Compensating controls being put in place
Risk acknowledgment (checkbox)
Business owner sign-off (email)
#Lookup Users on the requester.
Pull policy context:
#Custom Get Policy Definition for the named policy.
#Search Knowledge Base for the policy doc.
Assess compensating controls:
#Custom Evaluate Compensating Controls against the policy.
If insufficient → #Send Direct Message to requester with what's missing; ask to revise.
Route for approval:
#Request Approval from security lead.
For business-critical policies (MFA, encryption, sensitive-data access): #Request Approval from CISO or delegate.
#Request Approval from the business owner named in the form.
On approval:
#Custom Apply Exception for the specific policy + user + scope (e.g. exclude user from MFA enforcement group, add SSH key to specific host).
#Custom Vanta Log Exception with all metadata.
schedule_action wake at expiry date.
#Send Direct Message to the requester with: exception scope, expiry, compensating controls, what they must NOT do.
#Send Channel Message to
#security-exceptionswith the granted exception.schedule_action wakes at 30/60/90% of duration for reminder:
"Your exception {{name}} expires in {{X}} days. Need to renew or let it expire?"
At expiry:
#Custom Remove Exception to reverse step 6.
#Send Direct Message to requester confirming auto-expire.
#Send Channel Message to
#security-exceptionsconfirming.
If renewal requested before expiry, loop back to step 5 (skip form if same parameters).
#Leave Internal Note capturing exception scope, controls, expiry.
#Resolve Request.
Security Exception Handling
Playbooks
/
Security Exception Handling
Security Exception Handling
Created by

Console Team
Published
Security
Vanta
Conditions
Requester asks to bypass a security policy ("I need root SSH on a prod box", "exception to MFA on this kiosk", "allow this admin to keep their password instead of FIDO2").
Instructions
#Trigger Form to collect:
Policy being bypassed (dropdown of named policies)
Justification (free text, min 100 chars)
Duration requested (max 30 days, max 90 days, max 1 year)
Compensating controls being put in place
Risk acknowledgment (checkbox)
Business owner sign-off (email)
#Lookup Users on the requester.
Pull policy context:
#Custom Get Policy Definition for the named policy.
#Search Knowledge Base for the policy doc.
Assess compensating controls:
#Custom Evaluate Compensating Controls against the policy.
If insufficient → #Send Direct Message to requester with what's missing; ask to revise.
Route for approval:
#Request Approval from security lead.
For business-critical policies (MFA, encryption, sensitive-data access): #Request Approval from CISO or delegate.
#Request Approval from the business owner named in the form.
On approval:
#Custom Apply Exception for the specific policy + user + scope (e.g. exclude user from MFA enforcement group, add SSH key to specific host).
#Custom Vanta Log Exception with all metadata.
schedule_action wake at expiry date.
#Send Direct Message to the requester with: exception scope, expiry, compensating controls, what they must NOT do.
#Send Channel Message to
#security-exceptionswith the granted exception.schedule_action wakes at 30/60/90% of duration for reminder:
"Your exception {{name}} expires in {{X}} days. Need to renew or let it expire?"
At expiry:
#Custom Remove Exception to reverse step 6.
#Send Direct Message to requester confirming auto-expire.
#Send Channel Message to
#security-exceptionsconfirming.
If renewal requested before expiry, loop back to step 5 (skip form if same parameters).
#Leave Internal Note capturing exception scope, controls, expiry.
#Resolve Request.
Security Exception Handling
Playbooks
/
Security Exception Handling
Security Exception Handling
Created by

Console Team
Published
Security
Vanta
Conditions
Requester asks to bypass a security policy ("I need root SSH on a prod box", "exception to MFA on this kiosk", "allow this admin to keep their password instead of FIDO2").
Instructions
#Trigger Form to collect:
Policy being bypassed (dropdown of named policies)
Justification (free text, min 100 chars)
Duration requested (max 30 days, max 90 days, max 1 year)
Compensating controls being put in place
Risk acknowledgment (checkbox)
Business owner sign-off (email)
#Lookup Users on the requester.
Pull policy context:
#Custom Get Policy Definition for the named policy.
#Search Knowledge Base for the policy doc.
Assess compensating controls:
#Custom Evaluate Compensating Controls against the policy.
If insufficient → #Send Direct Message to requester with what's missing; ask to revise.
Route for approval:
#Request Approval from security lead.
For business-critical policies (MFA, encryption, sensitive-data access): #Request Approval from CISO or delegate.
#Request Approval from the business owner named in the form.
On approval:
#Custom Apply Exception for the specific policy + user + scope (e.g. exclude user from MFA enforcement group, add SSH key to specific host).
#Custom Vanta Log Exception with all metadata.
schedule_action wake at expiry date.
#Send Direct Message to the requester with: exception scope, expiry, compensating controls, what they must NOT do.
#Send Channel Message to
#security-exceptionswith the granted exception.schedule_action wakes at 30/60/90% of duration for reminder:
"Your exception {{name}} expires in {{X}} days. Need to renew or let it expire?"
At expiry:
#Custom Remove Exception to reverse step 6.
#Send Direct Message to requester confirming auto-expire.
#Send Channel Message to
#security-exceptionsconfirming.
If renewal requested before expiry, loop back to step 5 (skip form if same parameters).
#Leave Internal Note capturing exception scope, controls, expiry.
#Resolve Request.
Compliance Training
Playbooks
/
Compliance Training
Compliance Training
Created by

Console Team
Published
Security
Vanta
Conditions
Scheduled — daily + on hire (called from HR-1) + on cadence per framework Note: Overlaps with HR-15 but is framework-specific (SOC2, ISO, HIPAA, PCI).
Instructions
Determine required attestations per employee:
#Custom Vanta Get Required Trainings by role + framework scope.
Map to LearnUpon module IDs via custom Module Mapping.
For each employee with missing or due-for-renewal trainings:
#Lookup Users with
includeManager.#Custom LearnUpon Get Active Assignments to avoid double-assigning.
Assign modules:
#Custom LearnUpon Assign Modules with deadline (30 days standard, 14 days for new hires).
#Send Direct Message to the employee with:
List of required modules
Framework context (e.g. "Required for our SOC2 attestation")
Deadline
LearnUpon link
schedule_action wakes at 7, 14, 21, 30, 60, 90:
On each wake, custom LearnUpon Get Completion Status.
If incomplete:
Day 7-21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee.
Day 60 → #Send Channel Message to
#compliancewith the employee.Day 90 → #Custom Vanta Flag Compliance Risk + #Send Direct Message to HRBP + CISO delegate.
On completion:
#Custom Vanta Upload Training Evidence with cert + completion date.
#Send Direct Message to employee thanking them.
Quarterly:
#Run Query for completion stats.
#Send Channel Message to
#compliancewith the org-wide report.
#Leave Internal Note per employee per training cycle.
Compliance Training
Playbooks
/
Compliance Training
Compliance Training
Created by

Console Team
Published
Security
Vanta
Conditions
Scheduled — daily + on hire (called from HR-1) + on cadence per framework Note: Overlaps with HR-15 but is framework-specific (SOC2, ISO, HIPAA, PCI).
Instructions
Determine required attestations per employee:
#Custom Vanta Get Required Trainings by role + framework scope.
Map to LearnUpon module IDs via custom Module Mapping.
For each employee with missing or due-for-renewal trainings:
#Lookup Users with
includeManager.#Custom LearnUpon Get Active Assignments to avoid double-assigning.
Assign modules:
#Custom LearnUpon Assign Modules with deadline (30 days standard, 14 days for new hires).
#Send Direct Message to the employee with:
List of required modules
Framework context (e.g. "Required for our SOC2 attestation")
Deadline
LearnUpon link
schedule_action wakes at 7, 14, 21, 30, 60, 90:
On each wake, custom LearnUpon Get Completion Status.
If incomplete:
Day 7-21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee.
Day 60 → #Send Channel Message to
#compliancewith the employee.Day 90 → #Custom Vanta Flag Compliance Risk + #Send Direct Message to HRBP + CISO delegate.
On completion:
#Custom Vanta Upload Training Evidence with cert + completion date.
#Send Direct Message to employee thanking them.
Quarterly:
#Run Query for completion stats.
#Send Channel Message to
#compliancewith the org-wide report.
#Leave Internal Note per employee per training cycle.
Compliance Training
Playbooks
/
Compliance Training
Compliance Training
Created by

Console Team
Published
Security
Vanta
Conditions
Scheduled — daily + on hire (called from HR-1) + on cadence per framework Note: Overlaps with HR-15 but is framework-specific (SOC2, ISO, HIPAA, PCI).
Instructions
Determine required attestations per employee:
#Custom Vanta Get Required Trainings by role + framework scope.
Map to LearnUpon module IDs via custom Module Mapping.
For each employee with missing or due-for-renewal trainings:
#Lookup Users with
includeManager.#Custom LearnUpon Get Active Assignments to avoid double-assigning.
Assign modules:
#Custom LearnUpon Assign Modules with deadline (30 days standard, 14 days for new hires).
#Send Direct Message to the employee with:
List of required modules
Framework context (e.g. "Required for our SOC2 attestation")
Deadline
LearnUpon link
schedule_action wakes at 7, 14, 21, 30, 60, 90:
On each wake, custom LearnUpon Get Completion Status.
If incomplete:
Day 7-21 → #Send Direct Message reminder.
Day 30 → #Send Direct Message to manager + employee.
Day 60 → #Send Channel Message to
#compliancewith the employee.Day 90 → #Custom Vanta Flag Compliance Risk + #Send Direct Message to HRBP + CISO delegate.
On completion:
#Custom Vanta Upload Training Evidence with cert + completion date.
#Send Direct Message to employee thanking them.
Quarterly:
#Run Query for completion stats.
#Send Channel Message to
#compliancewith the org-wide report.
#Leave Internal Note per employee per training cycle.
SOC2 / Vanta Evidence Collection
Playbooks
/
SOC2 / Vanta Evidence Collection
SOC2 / Vanta Evidence Collection
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Scheduled — every 1st of the month at 7:00 AM America/Chicago
Instructions
Identify required evidence:
#Custom Vanta List Required Evidence for the current audit window.
Categorize: access reviews, training completion, vuln scans, incident logs, change management, vendor reviews, backups.
Pull each evidence category in parallel:
Access reviews → #custom Get UAR Reports from Sec-1 archives.
Training completion → #custom LearnUpon Export Completion for the period.
Vuln scans → #List AWS Inspector Findings, custom Wiz Export Findings.
Incident logs → #custom Get IR Tickets from Linear Security-IR project + custom Vanta Get Incident Log.
Change management → #custom GitHub Get PR Approvals for prod-affecting repos.
Vendor reviews → #custom Vanta Get Vendor Review Log from Sec-18 archives.
Backups → #custom AWS Backup Get Job Status.
For each evidence package:
Validate completeness (e.g. all in-scope users reviewed in UAR, all critical incidents have post-mortems).
Identify gaps.
Upload evidence:
#Custom Vanta Upload Evidence for each artifact with metadata (date range, control, source).
For gaps:
#Custom Get Control Owner for each failing control.
#Send Direct Message to each owner with: gap description, expected evidence, deadline (typically 14 days before audit).
#Create Linear Issue in Security-Audit for each gap.
schedule_action wakes weekly until gaps closed.
Generate compliance health report:
#Custom Generate Compliance Snapshot with: framework, control coverage %, gap count, evidence freshness.
#Send Channel Message to
#complianceand#security-leadswith the snapshot.
Annual audit prep:
60 days before audit: ramp evidence checks to weekly.
30 days before audit: daily; custom Pre-Audit Walkthrough Schedule.
#Leave Internal Note per evidence upload
SOC2 / Vanta Evidence Collection
Playbooks
/
SOC2 / Vanta Evidence Collection
SOC2 / Vanta Evidence Collection
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Scheduled — every 1st of the month at 7:00 AM America/Chicago
Instructions
Identify required evidence:
#Custom Vanta List Required Evidence for the current audit window.
Categorize: access reviews, training completion, vuln scans, incident logs, change management, vendor reviews, backups.
Pull each evidence category in parallel:
Access reviews → #custom Get UAR Reports from Sec-1 archives.
Training completion → #custom LearnUpon Export Completion for the period.
Vuln scans → #List AWS Inspector Findings, custom Wiz Export Findings.
Incident logs → #custom Get IR Tickets from Linear Security-IR project + custom Vanta Get Incident Log.
Change management → #custom GitHub Get PR Approvals for prod-affecting repos.
Vendor reviews → #custom Vanta Get Vendor Review Log from Sec-18 archives.
Backups → #custom AWS Backup Get Job Status.
For each evidence package:
Validate completeness (e.g. all in-scope users reviewed in UAR, all critical incidents have post-mortems).
Identify gaps.
Upload evidence:
#Custom Vanta Upload Evidence for each artifact with metadata (date range, control, source).
For gaps:
#Custom Get Control Owner for each failing control.
#Send Direct Message to each owner with: gap description, expected evidence, deadline (typically 14 days before audit).
#Create Linear Issue in Security-Audit for each gap.
schedule_action wakes weekly until gaps closed.
Generate compliance health report:
#Custom Generate Compliance Snapshot with: framework, control coverage %, gap count, evidence freshness.
#Send Channel Message to
#complianceand#security-leadswith the snapshot.
Annual audit prep:
60 days before audit: ramp evidence checks to weekly.
30 days before audit: daily; custom Pre-Audit Walkthrough Schedule.
#Leave Internal Note per evidence upload
SOC2 / Vanta Evidence Collection
Playbooks
/
SOC2 / Vanta Evidence Collection
SOC2 / Vanta Evidence Collection
Created by

Console Team
Published
Security
AWS
GitHub
Vanta
+2
Conditions
Scheduled — every 1st of the month at 7:00 AM America/Chicago
Instructions
Identify required evidence:
#Custom Vanta List Required Evidence for the current audit window.
Categorize: access reviews, training completion, vuln scans, incident logs, change management, vendor reviews, backups.
Pull each evidence category in parallel:
Access reviews → #custom Get UAR Reports from Sec-1 archives.
Training completion → #custom LearnUpon Export Completion for the period.
Vuln scans → #List AWS Inspector Findings, custom Wiz Export Findings.
Incident logs → #custom Get IR Tickets from Linear Security-IR project + custom Vanta Get Incident Log.
Change management → #custom GitHub Get PR Approvals for prod-affecting repos.
Vendor reviews → #custom Vanta Get Vendor Review Log from Sec-18 archives.
Backups → #custom AWS Backup Get Job Status.
For each evidence package:
Validate completeness (e.g. all in-scope users reviewed in UAR, all critical incidents have post-mortems).
Identify gaps.
Upload evidence:
#Custom Vanta Upload Evidence for each artifact with metadata (date range, control, source).
For gaps:
#Custom Get Control Owner for each failing control.
#Send Direct Message to each owner with: gap description, expected evidence, deadline (typically 14 days before audit).
#Create Linear Issue in Security-Audit for each gap.
schedule_action wakes weekly until gaps closed.
Generate compliance health report:
#Custom Generate Compliance Snapshot with: framework, control coverage %, gap count, evidence freshness.
#Send Channel Message to
#complianceand#security-leadswith the snapshot.
Annual audit prep:
60 days before audit: ramp evidence checks to weekly.
30 days before audit: daily; custom Pre-Audit Walkthrough Schedule.
#Leave Internal Note per evidence upload
Privacy / Data Deletion
Playbooks
/
Privacy / Data Deletion
Privacy / Data Deletion
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Snowflake
+6
Conditions
Requester submits a Data Subject Request (DSR) — internal user, customer, or external request via privacy@.
Instructions
#Trigger Form to collect:
Request type (Access / Portability / Deletion / Rectification / Opt-out)
Subject email or identifier
Subject relationship (customer / employee / prospect / unknown)
Verification method (email confirmation / govt ID / customer auth)
Regulatory basis (GDPR / CCPA / other)
SLA window (auto-calculated: GDPR = 30 days, CCPA = 45 days)
Verify the requester is authorized:
For employee-initiated → require their direct email match.
For customer → #custom Send Verification Email + verify response.
For attorney/legal rep → require power of attorney upload + legal review.
#Lookup Users on the subject email (employee case).
#Request Approval from the Data Protection Officer (DPO) for high-impact requests (deletion of active customer, employee records).
Locate the subject across all systems:
#Custom Snowflake Locate User across product DBs (orders, sessions, events).
#Search Okta User by Email for identity systems.
#Custom Zendesk Locate Tickets for support history.
#Custom Mailchimp/SendGrid Locate Subscriber for marketing.
#Custom Google Workspace Search for emails referencing the subject.
#Custom S3 Inventory Search for any data lake exports.
Build a comprehensive data inventory:
System / data type / record count / oldest record / newest record.
Branch on request type:
Access / Portability:
#Custom Generate Data Export action that pulls JSON/CSV from each system.
Compile into a single secure package (encrypted ZIP).
#Send Email to subject with download link + decryption key (separate channel).
Deletion:
For each system: #custom Delete User Data action.
For systems with retention obligations (e.g. financial records under SOX): apply pseudonymization instead of hard delete; document the basis.
#Deactivate User (Okta) if employee.
#Custom Snowflake Execute Deletion with audit log.
Rectification:
Apply corrections in each system via the appropriate update actions.
Opt-out:
#Custom Mark User Opted Out in marketing systems.
Add to suppression list.
Generate completion certificate:
#Custom Generate DSR Completion Report with: all systems touched, action taken, timestamps, records affected.
#Send Email to subject confirming completion.
#Custom Vanta Upload DSR Evidence for compliance audit trail.
schedule_action wake at SLA deadline minus 7 days to check unfinished items.
On wake: if any items remain, #Send Channel Message to
#privacy-opsand DPO.#Leave Internal Note capturing data inventory and completion.
Privacy / Data Deletion
Playbooks
/
Privacy / Data Deletion
Privacy / Data Deletion
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Snowflake
+6
Conditions
Requester submits a Data Subject Request (DSR) — internal user, customer, or external request via privacy@.
Instructions
#Trigger Form to collect:
Request type (Access / Portability / Deletion / Rectification / Opt-out)
Subject email or identifier
Subject relationship (customer / employee / prospect / unknown)
Verification method (email confirmation / govt ID / customer auth)
Regulatory basis (GDPR / CCPA / other)
SLA window (auto-calculated: GDPR = 30 days, CCPA = 45 days)
Verify the requester is authorized:
For employee-initiated → require their direct email match.
For customer → #custom Send Verification Email + verify response.
For attorney/legal rep → require power of attorney upload + legal review.
#Lookup Users on the subject email (employee case).
#Request Approval from the Data Protection Officer (DPO) for high-impact requests (deletion of active customer, employee records).
Locate the subject across all systems:
#Custom Snowflake Locate User across product DBs (orders, sessions, events).
#Search Okta User by Email for identity systems.
#Custom Zendesk Locate Tickets for support history.
#Custom Mailchimp/SendGrid Locate Subscriber for marketing.
#Custom Google Workspace Search for emails referencing the subject.
#Custom S3 Inventory Search for any data lake exports.
Build a comprehensive data inventory:
System / data type / record count / oldest record / newest record.
Branch on request type:
Access / Portability:
#Custom Generate Data Export action that pulls JSON/CSV from each system.
Compile into a single secure package (encrypted ZIP).
#Send Email to subject with download link + decryption key (separate channel).
Deletion:
For each system: #custom Delete User Data action.
For systems with retention obligations (e.g. financial records under SOX): apply pseudonymization instead of hard delete; document the basis.
#Deactivate User (Okta) if employee.
#Custom Snowflake Execute Deletion with audit log.
Rectification:
Apply corrections in each system via the appropriate update actions.
Opt-out:
#Custom Mark User Opted Out in marketing systems.
Add to suppression list.
Generate completion certificate:
#Custom Generate DSR Completion Report with: all systems touched, action taken, timestamps, records affected.
#Send Email to subject confirming completion.
#Custom Vanta Upload DSR Evidence for compliance audit trail.
schedule_action wake at SLA deadline minus 7 days to check unfinished items.
On wake: if any items remain, #Send Channel Message to
#privacy-opsand DPO.#Leave Internal Note capturing data inventory and completion.
Privacy / Data Deletion
Playbooks
/
Privacy / Data Deletion
Privacy / Data Deletion
Created by

Console Team
Published
Security
Okta
Google Workspace Admin
Snowflake
+6
Conditions
Requester submits a Data Subject Request (DSR) — internal user, customer, or external request via privacy@.
Instructions
#Trigger Form to collect:
Request type (Access / Portability / Deletion / Rectification / Opt-out)
Subject email or identifier
Subject relationship (customer / employee / prospect / unknown)
Verification method (email confirmation / govt ID / customer auth)
Regulatory basis (GDPR / CCPA / other)
SLA window (auto-calculated: GDPR = 30 days, CCPA = 45 days)
Verify the requester is authorized:
For employee-initiated → require their direct email match.
For customer → #custom Send Verification Email + verify response.
For attorney/legal rep → require power of attorney upload + legal review.
#Lookup Users on the subject email (employee case).
#Request Approval from the Data Protection Officer (DPO) for high-impact requests (deletion of active customer, employee records).
Locate the subject across all systems:
#Custom Snowflake Locate User across product DBs (orders, sessions, events).
#Search Okta User by Email for identity systems.
#Custom Zendesk Locate Tickets for support history.
#Custom Mailchimp/SendGrid Locate Subscriber for marketing.
#Custom Google Workspace Search for emails referencing the subject.
#Custom S3 Inventory Search for any data lake exports.
Build a comprehensive data inventory:
System / data type / record count / oldest record / newest record.
Branch on request type:
Access / Portability:
#Custom Generate Data Export action that pulls JSON/CSV from each system.
Compile into a single secure package (encrypted ZIP).
#Send Email to subject with download link + decryption key (separate channel).
Deletion:
For each system: #custom Delete User Data action.
For systems with retention obligations (e.g. financial records under SOX): apply pseudonymization instead of hard delete; document the basis.
#Deactivate User (Okta) if employee.
#Custom Snowflake Execute Deletion with audit log.
Rectification:
Apply corrections in each system via the appropriate update actions.
Opt-out:
#Custom Mark User Opted Out in marketing systems.
Add to suppression list.
Generate completion certificate:
#Custom Generate DSR Completion Report with: all systems touched, action taken, timestamps, records affected.
#Send Email to subject confirming completion.
#Custom Vanta Upload DSR Evidence for compliance audit trail.
schedule_action wake at SLA deadline minus 7 days to check unfinished items.
On wake: if any items remain, #Send Channel Message to
#privacy-opsand DPO.#Leave Internal Note capturing data inventory and completion.
Tool Migration & Secure Deployment
Playbooks
/
Tool Migration & Secure Deployment
Tool Migration & Secure Deployment
Created by

Console Team
Published
Security
Kandji
Ramp
Vanta
+1
Conditions
Admin/security engineer kicks off a security tooling migration or rollout (IdP migration, EDR deployment, MFA enforcement, etc.).
Instructions
#Trigger Form to collect:
Migration / rollout name
Source tool (if migration)
Target tool / config
Cohort definition (canary 10 users / 10% / department / all)
Rollback threshold (error rate %, complaint count)
Success criteria (metric thresholds)
Timeline (canary duration, ramp schedule)
Pre-deployment posture check:
#Custom Run Pre-Deployment Check that:
Confirms target tool is configured.
Confirms rollback procedure is documented.
Confirms monitoring is in place.
Confirms support team is briefed.
If any check fails → #Send Direct Message to admin with failures; do not proceed.
Stage 1: Canary cohort:
#Custom Resolve Cohort Members for the canary definition.
For each user: custom Apply Migration (e.g. add to new IdP, install EDR via Kandji, enforce MFA).
#Send Direct Message to each canary user with: what changed, what to expect, how to report issues.
schedule_action wake at 24h for canary monitoring:
#Custom Get Migration Metrics for error rate, user complaints, support ticket volume.
#Search Requests for tickets mentioning the rollout in the last 24h.
Decision gate after canary:
If error rate < threshold AND complaints < threshold → proceed to stage 2.
Else → #Send Direct Message to admin with metrics; pause for review.
Stage 2: Ramp to next cohort (e.g. 25% → 50% → 100%):
For each ramp stage, repeat steps 3-5.
schedule_action wakes per stage duration (typically 3-7 days).
Continuous monitoring during ramp:
#Send Channel Message to
#migration-{{name}}daily status updates.Track key metrics via #Run Query custom dashboards.
Rollback trigger (automatic):
If at any wake, error rate exceeds rollback threshold → fire custom Rollback Migration for all enrolled users.
#Send Channel Message to
#security-criticalwith rollback initiated.#Send Direct Message to admin with metrics and rollback confirmation.
Completion:
When 100% cohort reached + 7 days stable:
#Send Channel Message to
#securitywith the success report.#Custom Vanta Log Tool Deployment for compliance.
#Create Linear Issue in Security-Projects for the post-migration retro.
#Leave Internal Note capturing cohort progression, metrics, decisions.
Tool Migration & Secure Deployment
Playbooks
/
Tool Migration & Secure Deployment
Tool Migration & Secure Deployment
Created by

Console Team
Published
Security
Kandji
Ramp
Vanta
+1
Conditions
Admin/security engineer kicks off a security tooling migration or rollout (IdP migration, EDR deployment, MFA enforcement, etc.).
Instructions
#Trigger Form to collect:
Migration / rollout name
Source tool (if migration)
Target tool / config
Cohort definition (canary 10 users / 10% / department / all)
Rollback threshold (error rate %, complaint count)
Success criteria (metric thresholds)
Timeline (canary duration, ramp schedule)
Pre-deployment posture check:
#Custom Run Pre-Deployment Check that:
Confirms target tool is configured.
Confirms rollback procedure is documented.
Confirms monitoring is in place.
Confirms support team is briefed.
If any check fails → #Send Direct Message to admin with failures; do not proceed.
Stage 1: Canary cohort:
#Custom Resolve Cohort Members for the canary definition.
For each user: custom Apply Migration (e.g. add to new IdP, install EDR via Kandji, enforce MFA).
#Send Direct Message to each canary user with: what changed, what to expect, how to report issues.
schedule_action wake at 24h for canary monitoring:
#Custom Get Migration Metrics for error rate, user complaints, support ticket volume.
#Search Requests for tickets mentioning the rollout in the last 24h.
Decision gate after canary:
If error rate < threshold AND complaints < threshold → proceed to stage 2.
Else → #Send Direct Message to admin with metrics; pause for review.
Stage 2: Ramp to next cohort (e.g. 25% → 50% → 100%):
For each ramp stage, repeat steps 3-5.
schedule_action wakes per stage duration (typically 3-7 days).
Continuous monitoring during ramp:
#Send Channel Message to
#migration-{{name}}daily status updates.Track key metrics via #Run Query custom dashboards.
Rollback trigger (automatic):
If at any wake, error rate exceeds rollback threshold → fire custom Rollback Migration for all enrolled users.
#Send Channel Message to
#security-criticalwith rollback initiated.#Send Direct Message to admin with metrics and rollback confirmation.
Completion:
When 100% cohort reached + 7 days stable:
#Send Channel Message to
#securitywith the success report.#Custom Vanta Log Tool Deployment for compliance.
#Create Linear Issue in Security-Projects for the post-migration retro.
#Leave Internal Note capturing cohort progression, metrics, decisions.
Tool Migration & Secure Deployment
Playbooks
/
Tool Migration & Secure Deployment
Tool Migration & Secure Deployment
Created by

Console Team
Published
Security
Kandji
Ramp
Vanta
+1
Conditions
Admin/security engineer kicks off a security tooling migration or rollout (IdP migration, EDR deployment, MFA enforcement, etc.).
Instructions
#Trigger Form to collect:
Migration / rollout name
Source tool (if migration)
Target tool / config
Cohort definition (canary 10 users / 10% / department / all)
Rollback threshold (error rate %, complaint count)
Success criteria (metric thresholds)
Timeline (canary duration, ramp schedule)
Pre-deployment posture check:
#Custom Run Pre-Deployment Check that:
Confirms target tool is configured.
Confirms rollback procedure is documented.
Confirms monitoring is in place.
Confirms support team is briefed.
If any check fails → #Send Direct Message to admin with failures; do not proceed.
Stage 1: Canary cohort:
#Custom Resolve Cohort Members for the canary definition.
For each user: custom Apply Migration (e.g. add to new IdP, install EDR via Kandji, enforce MFA).
#Send Direct Message to each canary user with: what changed, what to expect, how to report issues.
schedule_action wake at 24h for canary monitoring:
#Custom Get Migration Metrics for error rate, user complaints, support ticket volume.
#Search Requests for tickets mentioning the rollout in the last 24h.
Decision gate after canary:
If error rate < threshold AND complaints < threshold → proceed to stage 2.
Else → #Send Direct Message to admin with metrics; pause for review.
Stage 2: Ramp to next cohort (e.g. 25% → 50% → 100%):
For each ramp stage, repeat steps 3-5.
schedule_action wakes per stage duration (typically 3-7 days).
Continuous monitoring during ramp:
#Send Channel Message to
#migration-{{name}}daily status updates.Track key metrics via #Run Query custom dashboards.
Rollback trigger (automatic):
If at any wake, error rate exceeds rollback threshold → fire custom Rollback Migration for all enrolled users.
#Send Channel Message to
#security-criticalwith rollback initiated.#Send Direct Message to admin with metrics and rollback confirmation.
Completion:
When 100% cohort reached + 7 days stable:
#Send Channel Message to
#securitywith the success report.#Custom Vanta Log Tool Deployment for compliance.
#Create Linear Issue in Security-Projects for the post-migration retro.
#Leave Internal Note capturing cohort progression, metrics, decisions.
Account & Contact Dedupe
Playbooks
/
Account & Contact Dedupe
Account & Contact Dedupe
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
Apollo
+12
Conditions
New account/contact being created (request-triggered) OR webhook on hubspot.contact.creation / salesforce.account.created.
Instructions
Parse the new record details:
Name, domain, email, phone, location, owner.
Run internal dedupe:
#Search HubSpot Companies by name (fuzzy match) and by domain (exact).
#Search HubSpot Contacts by email and by phone.
Run external enrichment dedupe:
#Apollo Search Companies by Technology and Employee Range for the domain.
#Custom ZoomInfo Search Company for the name + domain.
Compute similarity scores:
Domain match → 100%.
Exact name + same country → 95%.
Fuzzy name (Levenshtein <3) + same domain → 90%.
Phone match → 85%.
Else use weighted attributes.
Branch on scores:
No match (<70%) → proceed with create; just enrich the new record.
Likely match (70-89%) → present options.
High-confidence match (≥90%) → block creation; suggest merge.
For matches (70%+):
#Lookup Users on the requester (or record owner if webhook-triggered).
#Send Direct Message with the candidate matches: "Found {{N}} possible duplicates for {{name}}. Review?"
Include a #Trigger Form with options per candidate: "Merge into this one" / "Different company" / "Create anyway".
On response:
Merge → custom HubSpot Merge Companies (or Salesforce Merge Accounts) with the chosen master.
Different / Create anyway → proceed with creation. Capture justification in a deal note.
Enrichment regardless of path:
Apply Apollo/ZoomInfo enrichment via #Update HubSpot Company Properties.
#Send Direct Message confirming the action taken.
#Send Channel Message to #revops-data weekly summary of duplicates prevented.
#Leave Internal Note capturing the decision.
Account & Contact Dedupe
Playbooks
/
Account & Contact Dedupe
Account & Contact Dedupe
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
Apollo
+12
Conditions
New account/contact being created (request-triggered) OR webhook on hubspot.contact.creation / salesforce.account.created.
Instructions
Parse the new record details:
Name, domain, email, phone, location, owner.
Run internal dedupe:
#Search HubSpot Companies by name (fuzzy match) and by domain (exact).
#Search HubSpot Contacts by email and by phone.
Run external enrichment dedupe:
#Apollo Search Companies by Technology and Employee Range for the domain.
#Custom ZoomInfo Search Company for the name + domain.
Compute similarity scores:
Domain match → 100%.
Exact name + same country → 95%.
Fuzzy name (Levenshtein <3) + same domain → 90%.
Phone match → 85%.
Else use weighted attributes.
Branch on scores:
No match (<70%) → proceed with create; just enrich the new record.
Likely match (70-89%) → present options.
High-confidence match (≥90%) → block creation; suggest merge.
For matches (70%+):
#Lookup Users on the requester (or record owner if webhook-triggered).
#Send Direct Message with the candidate matches: "Found {{N}} possible duplicates for {{name}}. Review?"
Include a #Trigger Form with options per candidate: "Merge into this one" / "Different company" / "Create anyway".
On response:
Merge → custom HubSpot Merge Companies (or Salesforce Merge Accounts) with the chosen master.
Different / Create anyway → proceed with creation. Capture justification in a deal note.
Enrichment regardless of path:
Apply Apollo/ZoomInfo enrichment via #Update HubSpot Company Properties.
#Send Direct Message confirming the action taken.
#Send Channel Message to #revops-data weekly summary of duplicates prevented.
#Leave Internal Note capturing the decision.
Account & Contact Dedupe
Playbooks
/
Account & Contact Dedupe
Account & Contact Dedupe
Created by

Console Team
Published
RevOps
HubSpot
Salesforce
Apollo
+12
Conditions
New account/contact being created (request-triggered) OR webhook on hubspot.contact.creation / salesforce.account.created.
Instructions
Parse the new record details:
Name, domain, email, phone, location, owner.
Run internal dedupe:
#Search HubSpot Companies by name (fuzzy match) and by domain (exact).
#Search HubSpot Contacts by email and by phone.
Run external enrichment dedupe:
#Apollo Search Companies by Technology and Employee Range for the domain.
#Custom ZoomInfo Search Company for the name + domain.
Compute similarity scores:
Domain match → 100%.
Exact name + same country → 95%.
Fuzzy name (Levenshtein <3) + same domain → 90%.
Phone match → 85%.
Else use weighted attributes.
Branch on scores:
No match (<70%) → proceed with create; just enrich the new record.
Likely match (70-89%) → present options.
High-confidence match (≥90%) → block creation; suggest merge.
For matches (70%+):
#Lookup Users on the requester (or record owner if webhook-triggered).
#Send Direct Message with the candidate matches: "Found {{N}} possible duplicates for {{name}}. Review?"
Include a #Trigger Form with options per candidate: "Merge into this one" / "Different company" / "Create anyway".
On response:
Merge → custom HubSpot Merge Companies (or Salesforce Merge Accounts) with the chosen master.
Different / Create anyway → proceed with creation. Capture justification in a deal note.
Enrichment regardless of path:
Apply Apollo/ZoomInfo enrichment via #Update HubSpot Company Properties.
#Send Direct Message confirming the action taken.
#Send Channel Message to #revops-data weekly summary of duplicates prevented.
#Leave Internal Note capturing the decision.
Pipeline & Deal Lookup
Playbooks
/
Pipeline & Deal Lookup
Pipeline & Deal Lookup
Created by

Console Team
Published
RevOps
Slack
HubSpot
Conditions
Requester asks for a pipeline view ("my deals stuck in proposal >30 days", "Q3 forecast", "closed-won this week", "deals in EMEA over $50k").
Instructions
Parse the query:
Filter dimensions: owner / stage / close date / amount / region / vertical.
Aggregation: list / count / sum / forecast roll-up.
Time window.
#Lookup Users on the requester to default
ownerfilter to self unless asking about team.Translate to a CRM query:
#Search Open HubSpot Deals by Owner with Forecast Category for forecast queries.
#Search HubSpot Deals by Stage Entry Date for stage-stuck queries.
#Search HubSpot Deals by Close Date Range for date-range queries.
#Search HubSpot Deals by Owner for general owner queries.
#Hubspot Search Deals for ad-hoc filters.
Apply post-query enrichment:
For each deal, optional #Get HubSpot Deal Details with Activity Timeline if the user asked for "what's the latest on...".
Calculate days-in-stage if stage-stuck query.
Calculate forecast roll-up sums if forecast query.
Format output:
List queries → Slack table with: Deal name | Stage | Amount | Close date | Owner | Last activity.
Count queries → just the number + breakdown by stage.
Sum / forecast queries → totaled with breakdown.
#Send Direct Message with the formatted result.
Offer follow-up actions:
"Want me to ping the owners on these?" → fire Rev-20 flow for stale opps.
"Want this as a recurring digest?" → offer to set up a Rev-19 style scheduled report.
#Leave Internal Note capturing the query.
Pipeline & Deal Lookup
Playbooks
/
Pipeline & Deal Lookup
Pipeline & Deal Lookup
Created by

Console Team
Published
RevOps
Slack
HubSpot
Conditions
Requester asks for a pipeline view ("my deals stuck in proposal >30 days", "Q3 forecast", "closed-won this week", "deals in EMEA over $50k").
Instructions
Parse the query:
Filter dimensions: owner / stage / close date / amount / region / vertical.
Aggregation: list / count / sum / forecast roll-up.
Time window.
#Lookup Users on the requester to default
ownerfilter to self unless asking about team.Translate to a CRM query:
#Search Open HubSpot Deals by Owner with Forecast Category for forecast queries.
#Search HubSpot Deals by Stage Entry Date for stage-stuck queries.
#Search HubSpot Deals by Close Date Range for date-range queries.
#Search HubSpot Deals by Owner for general owner queries.
#Hubspot Search Deals for ad-hoc filters.
Apply post-query enrichment:
For each deal, optional #Get HubSpot Deal Details with Activity Timeline if the user asked for "what's the latest on...".
Calculate days-in-stage if stage-stuck query.
Calculate forecast roll-up sums if forecast query.
Format output:
List queries → Slack table with: Deal name | Stage | Amount | Close date | Owner | Last activity.
Count queries → just the number + breakdown by stage.
Sum / forecast queries → totaled with breakdown.
#Send Direct Message with the formatted result.
Offer follow-up actions:
"Want me to ping the owners on these?" → fire Rev-20 flow for stale opps.
"Want this as a recurring digest?" → offer to set up a Rev-19 style scheduled report.
#Leave Internal Note capturing the query.
Pipeline & Deal Lookup
Playbooks
/
Pipeline & Deal Lookup
Pipeline & Deal Lookup
Created by

Console Team
Published
RevOps
Slack
HubSpot
Conditions
Requester asks for a pipeline view ("my deals stuck in proposal >30 days", "Q3 forecast", "closed-won this week", "deals in EMEA over $50k").
Instructions
Parse the query:
Filter dimensions: owner / stage / close date / amount / region / vertical.
Aggregation: list / count / sum / forecast roll-up.
Time window.
#Lookup Users on the requester to default
ownerfilter to self unless asking about team.Translate to a CRM query:
#Search Open HubSpot Deals by Owner with Forecast Category for forecast queries.
#Search HubSpot Deals by Stage Entry Date for stage-stuck queries.
#Search HubSpot Deals by Close Date Range for date-range queries.
#Search HubSpot Deals by Owner for general owner queries.
#Hubspot Search Deals for ad-hoc filters.
Apply post-query enrichment:
For each deal, optional #Get HubSpot Deal Details with Activity Timeline if the user asked for "what's the latest on...".
Calculate days-in-stage if stage-stuck query.
Calculate forecast roll-up sums if forecast query.
Format output:
List queries → Slack table with: Deal name | Stage | Amount | Close date | Owner | Last activity.
Count queries → just the number + breakdown by stage.
Sum / forecast queries → totaled with breakdown.
#Send Direct Message with the formatted result.
Offer follow-up actions:
"Want me to ping the owners on these?" → fire Rev-20 flow for stale opps.
"Want this as a recurring digest?" → offer to set up a Rev-19 style scheduled report.
#Leave Internal Note capturing the query.
Call Recording Lookup
Playbooks
/
Call Recording Lookup
Call Recording Lookup
Created by

Console Team
Published
RevOps
Gong
HubSpot
Fathom
+5
Conditions
Requester asks for a Gong/Fathom call ("Gong from Acme last Tuesday", "Fathom call with Globex CTO", "recap from the demo I did with Initech").
Instructions
Parse:
Account/company name.
Date or relative date ("last Tuesday", "yesterday").
Participant name (if specified).
Type (demo / discovery / negotiation).
#Lookup Users on the requester (to filter to their calls by default).
Resolve the account:
#Search HubSpot Companies for the company name.
If multiple matches, #Send Direct Message with disambiguation.
Resolve the date window:
"Last Tuesday" → compute calendar date.
"Yesterday" → previous day.
"Last week" → 7-day window.
Search call recordings:
#Custom Gong Search Calls by accountId + date range.
#Get All Meetings from Fathom as fallback.
#Custom Get HubSpot Engagements (Meetings) by companyId + date.
If multiple matches, list them:
#Send Direct Message with: Title | Date | Duration | Participants | Link.
#Trigger Form to pick one.
On selection (or if single match):
#Custom Gong Get Call Transcript (or #Get Meeting Transcript from Fathom).
#Custom Gong Get Call AI Summary for the AI-generated summary.
#Custom Gong Get Call Highlights for key moments and action items.
Format the response:
TL;DR (1-3 sentence summary).
Key moments with timestamps.
Action items extracted.
Sentiment / talk ratio if relevant.
Full transcript link.
#Send Direct Message with the formatted call brief.
#Create HubSpot Note on Deal if a deal is associated, capturing the summary.
Call Recording Lookup
Playbooks
/
Call Recording Lookup
Call Recording Lookup
Created by

Console Team
Published
RevOps
Gong
HubSpot
Fathom
+5
Conditions
Requester asks for a Gong/Fathom call ("Gong from Acme last Tuesday", "Fathom call with Globex CTO", "recap from the demo I did with Initech").
Instructions
Parse:
Account/company name.
Date or relative date ("last Tuesday", "yesterday").
Participant name (if specified).
Type (demo / discovery / negotiation).
#Lookup Users on the requester (to filter to their calls by default).
Resolve the account:
#Search HubSpot Companies for the company name.
If multiple matches, #Send Direct Message with disambiguation.
Resolve the date window:
"Last Tuesday" → compute calendar date.
"Yesterday" → previous day.
"Last week" → 7-day window.
Search call recordings:
#Custom Gong Search Calls by accountId + date range.
#Get All Meetings from Fathom as fallback.
#Custom Get HubSpot Engagements (Meetings) by companyId + date.
If multiple matches, list them:
#Send Direct Message with: Title | Date | Duration | Participants | Link.
#Trigger Form to pick one.
On selection (or if single match):
#Custom Gong Get Call Transcript (or #Get Meeting Transcript from Fathom).
#Custom Gong Get Call AI Summary for the AI-generated summary.
#Custom Gong Get Call Highlights for key moments and action items.
Format the response:
TL;DR (1-3 sentence summary).
Key moments with timestamps.
Action items extracted.
Sentiment / talk ratio if relevant.
Full transcript link.
#Send Direct Message with the formatted call brief.
#Create HubSpot Note on Deal if a deal is associated, capturing the summary.
Call Recording Lookup
Playbooks
/
Call Recording Lookup
Call Recording Lookup
Created by

Console Team
Published
RevOps
Gong
HubSpot
Fathom
+5
Conditions
Requester asks for a Gong/Fathom call ("Gong from Acme last Tuesday", "Fathom call with Globex CTO", "recap from the demo I did with Initech").
Instructions
Parse:
Account/company name.
Date or relative date ("last Tuesday", "yesterday").
Participant name (if specified).
Type (demo / discovery / negotiation).
#Lookup Users on the requester (to filter to their calls by default).
Resolve the account:
#Search HubSpot Companies for the company name.
If multiple matches, #Send Direct Message with disambiguation.
Resolve the date window:
"Last Tuesday" → compute calendar date.
"Yesterday" → previous day.
"Last week" → 7-day window.
Search call recordings:
#Custom Gong Search Calls by accountId + date range.
#Get All Meetings from Fathom as fallback.
#Custom Get HubSpot Engagements (Meetings) by companyId + date.
If multiple matches, list them:
#Send Direct Message with: Title | Date | Duration | Participants | Link.
#Trigger Form to pick one.
On selection (or if single match):
#Custom Gong Get Call Transcript (or #Get Meeting Transcript from Fathom).
#Custom Gong Get Call AI Summary for the AI-generated summary.
#Custom Gong Get Call Highlights for key moments and action items.
Format the response:
TL;DR (1-3 sentence summary).
Key moments with timestamps.
Action items extracted.
Sentiment / talk ratio if relevant.
Full transcript link.
#Send Direct Message with the formatted call brief.
#Create HubSpot Note on Deal if a deal is associated, capturing the summary.
Comp & Quota Q&A
Playbooks
/
Comp & Quota Q&A
Comp & Quota Q&A
Created by

Console Team
Published
RevOps
Workday
HubSpot
+5
Conditions
Requester asks about their comp plan, attainment, commission timing, or accelerator triggers ("what's my plan", "Q3 attainment", "when does last quarter's commission pay", "am I in accelerator").
Instructions
Parse the question type:
Plan details / attainment / payment timing / accelerator / quota.
#Lookup Users on the requester with
includeManagerto confirm comp eligibility.Authentication / sensitivity check:
Comp data is personal — only the requester or their manager + ops should see.
If requester is asking about someone else: #Request Approval from that person or from ops.
Pull comp data:
#Custom CaptivateIQ Get Plan for the current plan details.
#Custom CaptivateIQ Get Attainment for current period attainment.
#Custom CaptivateIQ Get Payment Schedule for upcoming payments.
#Custom Workday Get Comp for base + variable split confirmation.
Cross-check against CRM:
#Search HubSpot Deals by Owner filtered to closed-won in the comp period for sanity.
#Custom Calculate Attainment from CRM as a sanity check vs CaptivateIQ.
If discrepancy >5% → flag for ops review.
Format the answer based on question type:
Plan → quota, OTE, base, variable, accelerator thresholds, SPIFFs.
Attainment → period, attainment %, dollars at quota, dollars at attainment.
Payment timing → next pay date, amount, prior periods status.
Accelerator → current attainment vs threshold, projected accelerator earnings.
#Send Direct Message with the formatted answer.
If discrepancy was flagged:
#Send Direct Message to ops with the user + discrepancy.
Offer follow-up: "Want me to walk you through how this is calculated?"
#Leave Internal Note capturing the query type.
Comp & Quota Q&A
Playbooks
/
Comp & Quota Q&A
Comp & Quota Q&A
Created by

Console Team
Published
RevOps
Workday
HubSpot
+5
Conditions
Requester asks about their comp plan, attainment, commission timing, or accelerator triggers ("what's my plan", "Q3 attainment", "when does last quarter's commission pay", "am I in accelerator").
Instructions
Parse the question type:
Plan details / attainment / payment timing / accelerator / quota.
#Lookup Users on the requester with
includeManagerto confirm comp eligibility.Authentication / sensitivity check:
Comp data is personal — only the requester or their manager + ops should see.
If requester is asking about someone else: #Request Approval from that person or from ops.
Pull comp data:
#Custom CaptivateIQ Get Plan for the current plan details.
#Custom CaptivateIQ Get Attainment for current period attainment.
#Custom CaptivateIQ Get Payment Schedule for upcoming payments.
#Custom Workday Get Comp for base + variable split confirmation.
Cross-check against CRM:
#Search HubSpot Deals by Owner filtered to closed-won in the comp period for sanity.
#Custom Calculate Attainment from CRM as a sanity check vs CaptivateIQ.
If discrepancy >5% → flag for ops review.
Format the answer based on question type:
Plan → quota, OTE, base, variable, accelerator thresholds, SPIFFs.
Attainment → period, attainment %, dollars at quota, dollars at attainment.
Payment timing → next pay date, amount, prior periods status.
Accelerator → current attainment vs threshold, projected accelerator earnings.
#Send Direct Message with the formatted answer.
If discrepancy was flagged:
#Send Direct Message to ops with the user + discrepancy.
Offer follow-up: "Want me to walk you through how this is calculated?"
#Leave Internal Note capturing the query type.
Comp & Quota Q&A
Playbooks
/
Comp & Quota Q&A
Comp & Quota Q&A