Skip to content

Browser Flow monitor

A Browser Flow monitor runs a scripted sequence of steps in a real browser — navigate, click, fill, assert — modelling a real user journey end-to-end. Use it for the workflows that matter most to the business: sign-in, checkout, multi-page form submission, search → result → detail.

For single-page assertions without interaction, see the lighter Browser Lite monitor.

Plan & add-ons

Flow slots are sold per variant:

VariantMinimum intervalWhere to get it
Standard15 min$7.99/mo per slot (Pro+). Pro includes 1; Business includes 2.
Fast5 min$14.99/mo per slot (Pro+). Business includes 1.
Real-time1 min$39.99/mo per slot (Business+).

Self-hosted flow checks share the Self-hosted browser monitor add-on slot — $9.99/mo on Starter+ runs Flow plus Lite on the same slot pool, with a 1-minute minimum interval and no managed runtime cap. See Self-hosted runners.

Top-level configuration

FieldTypeDefaultNotes
BrowserenumchromiumOne of chromium, firefox, webkit.
BrowsersarrayRun the same flow across multiple engines (Business + add-ons). Takes precedence over Browser when set.
Viewportobject1280 × 720{width, height}. Width 320–3840, height 240–2160.
User agentstringbrowser defaultOptional override. Max 500 chars.
StepsarrayOne or more flow steps (see catalogue). Required.
Variablesstring mapReusable values referenced in steps as {{name}}.
Secretsstring mapSensitive values referenced as {{secret.name}}. Never logged or stored in plaintext on the check result.
Screenshot on failurebooltrueCapture a screenshot when a step fails.
Trace captureboolfalseRecord a full trace artifact. Larger; useful for debugging intermittent failures.
Ignore HTTPS errorsboolfalseDisable certificate verification. Staging-only.

Step actions

The flow editor exposes 50+ step actions. Common ones:

CategoryActionWhat it does
NavigationnavigateLoad a URL with optional wait_until (load, domcontentloaded, networkidle, commit).
Navigationwait_for_navigationWait for the next navigation to finish.
Interactionclick / double_click / right_click / hoverMouse actions against a selector.
Interactionfill / clear_input / select / check_checkboxForm-field input.
Interactionpress_keySend a single keystroke (e.g. Enter).
Interactionupload_fileProvide a file for a file-input element.
WaitingwaitSleep for a fixed duration.
Waitingwait_for_elementWait for an element to reach a state (visible, hidden, attached, detached).
Waitingwait_for_api_responsePause until a specific XHR / fetch resolves.
Assertionsassert_text / assert_title / assert_urlText-content checks.
Assertionsassert_visible / assert_element_count / assert_attribute / assert_cssDOM-state checks.
Assertionsassert_response / assert_redirectNetwork-level checks.
Assertionsassert_console_errorsFail the check if the browser console logged errors above the configured level.
Assertionsassert_cookieVerify a cookie was set with expected attributes.
CapturescreenshotSave a screenshot artifact.
Capturestore_valueCapture a selector’s text or attribute into a variable for later steps.
Control flowif_elseBranch on element visibility / variable equality.
Control flowskip_steps_ifSkip the next N steps conditionally.
Control flowrepeat_stepsLoop a block of steps.
Networkhttp_requestSend an arbitrary HTTP request from the browser context.
Networkblock_request / set_extra_headersModify outgoing requests.
Tabs / framesswitch_to_tab / close_tab / switch_to_iframe / switch_to_main_frameMulti-context navigation.
Browser stateset_cookie / delete_cookies / set_local_storagePre-seed browser state.
Browser stateemulate_device / set_viewport / set_geolocation / set_permissionsEmulation overrides.
Miscexecute_javascriptRun arbitrary JS in the page context.
Mischandle_dialogAccept or dismiss alert / confirm / prompt.
Misclog_messageAnnotate the trace timeline.

See the full step actions reference for parameters and selector syntax.

Variables and secrets

Variables let one flow run cleanly against staging and production:

variables:
base_url: https://app.example.com
username: regression+ci@example.com
secrets:
password: hunter2
steps:
- action: navigate
url: "{{base_url}}/sign-in"
- action: fill
selector: input[name=email]
value: "{{username}}"
- action: fill
selector: input[name=password]
value: "{{secret.password}}"

Secrets are masked in artifacts and never logged in cleartext. Rotate them from the monitor’s settings; the next run picks up the new value.

Runtime cap

Cloud-managed flow checks have a 90 second total runtime cap. A flow that doesn’t complete inside the cap is marked down with reason runtime_exceeded.

Self-hosted flows configure their own cap on the runner.

Result data

Each flow check returns:

  • Total flow duration (ms).
  • Per-step duration and pass / fail outcome.
  • Final page URL.
  • HTTP status of the last navigation.
  • Screenshot artifact (on failure if screenshot_on_failure: true, or any step with an explicit screenshot action).
  • Trace artifact (when trace_capture: true).
  • Console error counts.

Status mapping

OutcomeStatus
All steps complete, all assertions passup
Total flow duration exceeds the monitor’s degraded thresholddegraded
Any assertion fails, any required step times outdown
Browser fails to launch, navigation aborts, network unreachabledown
Runtime cap exceededdown

Tips

  • Split long flows — a 30-step end-to-end is hard to debug. Three 10-step monitors give you cleaner alert signals and let you alert on partial coverage.
  • Variables per environment — keep one flow definition and pass env-specific values via variables; you don’t need a copy of the flow per environment.
  • Multi-browser sparingly — chromium covers most issues. Add Firefox or WebKit only where you’ve seen real engine-specific failures.
  • Self-hosted for private surfaces — sign-in flows against internal-only admin panels work fine on the Self-hosted browser add-on without exposing the panel publicly.