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