ServiceNow Flows
as Code

Read, create, update, and export ServiceNow flows as YAML. CLI and REST API. Free tier for reading and validating. Pro for write operations.

Terminal
$ █

Features

Read, create, update, and validate ServiceNow flows — from YAML.

⇄ Free

Export YAML

Export existing flows to YAML for version control, review, or migration between instances.

✔ Free

Offline Validation

Validate YAML flows without a ServiceNow connection. Catch errors before deployment.

✚ Pro

Create from YAML

Define flows in YAML. Create them in ServiceNow with triggers, steps, and configured values.

✎ Pro

Incremental Updates

Edit exported YAML and push changes back. Only modified steps are patched via GraphQL.

◇ Team

Web Editor

Monaco editor with live validation, flow diagrams, and sample browser in the browser.

⇄ Team

REST API

Full HTTP API with OpenAPI docs for CI/CD pipelines. Create, read, and export flows programmatically.

Sample Flows

Define complex flows in readable YAML. Here are a few examples.

Simple Lookup & Update

Trigger on incident, find a group, assign it.

name: Simple Incident Assignment
trigger:
  type: record_created
  table: incident
steps:
  - action: lookup_record
    id: find_group
    inputs:
      table: sys_user_group
      conditions: "name=Service Desk"
  - action: update_record
    inputs:
      record: $trigger.current
      values:
        assignment_group: $find_group.record

Conditional Email

Branch on priority, send targeted emails.

name: Priority-Based Notification
trigger:
  type: record_created
  table: incident
  conditions: "priority<=2"
steps:
  - if: "Priority is Critical"
    inputs:
      lhs: $trigger.current.priority
      operator: "="
      rhs: "1"
    then:
      - action: send_email
        inputs:
          to: "oncall@example.com"
          subject: "CRITICAL: ..."
    else:
      - action: log
        inputs:
          message: "Low priority"

Loops & Parallel

ForEach loops inside parallel branches.

name: Change Notification and Tasks
trigger:
  type: record_created
  table: change_request
steps:
  - action: lookup_record
    id: find_cis
    inputs:
      table: cmdb_rel_ci
  - parallel: "Notify and create"
    branches:
      - - for_each: "Each CI"
          do:
            - action: send_email
      - - for_each: "Each CI"
          do:
            - action: create_record