Skip to main content
For some workflows, you might want to refine the automation graph or input variables the builder agent has generated. For that we offer a UI.

Edit Graph

The main steps of your business process are captured in the automation graph. A graph consists of nodes and edges. Nodes are predefined actions that you instruct our agent to take such as clicking, typing or making a decision. You can add nodes by right-clicking on the canvas and connect them with each other by drawing an edge between them.

Node Types

The workflow editor provides various node types to automate business processes through a graph-based interface. Action Nodes handle direct interactions like Navigate, Click or ExtractDatamodel (structured data extraction). Control Flow Nodes include BoolCondition for branching logic and Loop for repeated operations over arrays or ranges. Specialized Nodes cover advanced scenarios like Tfa (two-factor authentication), FileUpload/FileDownload (file management) or UserInteraction (human-in-the-loop).

Execution Types

Nodes can use different execution strategies:
  • STATIC: Uses explicit XPATH selectors for deterministic targeting
  • LLM_VISION: Uses AI to do an action or make a decision based off a screenshot.
  • LLM_DOM: Leverages AI to extract elements in the DOM structure (for ExtractDatamodel only)

Tips and Tricks

  • Use descriptive names for each node action. These are important context for the maintenance agent during recovery.
  • Leverage LLM execution types when static selectors get too complex
  • Use STATIC execution when possible for speed and reliability
The navigation node supports navigating to the previous page. You can trigger this behavior by entering the reserved keyword back in the URL field.
{
  "id": "459a8fec-46fd-434d-a3dd-00d9e0ab4733",
  "name": "Navigate back",
  "parameters": {
    "url": "back"
  },
  "action": "NAVIGATE"
}

Overwrite Arrays

Arrays are ‘append’ by default. If you extract into the same array twice e.g. in a loop, new items will be appended. You can override this behavior by adding the array key to the overwriteArrayKeys array. Here’s an example JSON schema you could use in a ExtractDatamodel node:
{
  "type": "object",
  "properties": {
    "organization_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "selected": true,
      "description": "A list of all organization names. The organization name is written on top of each card and enclosed by a headline tag"
    }
  },
  "overwriteArrayKeys": [
    "organization_names"
  ]
}

Access Browser Variables

We allow extraction of some browser variables:
  • The complete URL the browser agent is on: {{window.location.href}}
  • The path name of the current URL: {{window.location.pathname}}
  • The query string of the current URL: {{window.location.search}}
Here’s an example JSON schema you can use in a ExtractDatamodel node:
{
  "type": "object",
  "properties": {
    "current_url": {
      "type": "string",
      "selected": true,
      "path": "{{window.location.href}}",
      "mode": "xpath"
    },
    "path_name": {
      "type": "string",
      "selected": true,
      "path": "{{window.location.pathname}}",
      "mode": "xpath"
    },
    "query_string": {
      "type": "string",
      "selected": true,
      "path": "{{window.location.search}}",
      "mode": "xpath"
    }
  }
}
Note that the execution type for this needs to be STATIC.

Extract Raw HTML

You can extract the HTML content of the current page using document variables:
  • Sanitized HTML ({{document.sanitized}}): Extracts a simplified version of the HTML that removes most attributes and only maintains the structure, tags, and content. This is useful for cleaner data extraction and reduces noise when processing HTML.
  • Complete HTML ({{document}}): Extracts the entire raw HTML with all attributes intact, including classes, IDs, data attributes, styles, and other metadata.
Here’s an example JSON schema you can use in a ExtractDatamodel node:
{
  "type": "object",
  "properties": {
    "sanitized_html": {
      "type": "string",
      "selected": true,
      "path": "{{document.sanitized}}",
      "mode": "xpath",
      "description": "Clean HTML with structure, tags, and content only"
    },
    "complete_html": {
      "type": "string",
      "selected": true,
      "path": "{{document}}",
      "mode": "xpath",
      "description": "Full raw HTML with all attributes"
    }
  }
}
Note that the execution type for this needs to be STATIC.

Other ExtractDatamodel Gotchas

  • Extracting HTML attributes e.g. the id value of an element is only supported in STATIC mode. Simply use an XPath that point to this attribute.
  • You can extract arrays in STATIC mode by supplying an XPath that matches several elements at once.

Edit Inputs & Outputs

All workflows are parameterized with inputs. You can access these variables with {{context.inputs.my_variable}}. All the data that is extracted during runtime is returned in the execution.success webhook payload. If you only want a subset of this returned, you can specify an optional output schema.

Data Transformation of Variables

Variables can be transformed before using them in an action. Let’s say you send a date in YYYY-MM-DD format, but you want to type it in DD/MM/YYYY format. You can use JSONata to transform the date like so: {{$fromMillis($toMillis(context.inputs.date, "[Y0001]-[M01]-[D01]"), "[M01]/[D01]/[Y0001]")}} Here’s how the full node action would look like:
{
  "id": "ae4a223f-645e-4dae-b09c-40168b3629e3",
  "name": "Type Date",
  "description": "\n",
  "parameters": {
    "selector": "//input[@id='date']",
    "execution": "STATIC",
    "text": "{{$fromMillis($toMillis(context.inputs.date, "[Y0001]-[M01]-[D01]"), "[M01]/[D01]/[Y0001]")}}",
    "wait_time": 25000
  },
  "action": "INPUT_TEXT"
}