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:
| Variant | Minimum interval | Where to get it |
|---|---|---|
| Standard | 15 min | $7.99/mo per slot (Pro+). Pro includes 1; Business includes 2. |
| Fast | 5 min | $14.99/mo per slot (Pro+). Business includes 1. |
| Real-time | 1 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
| Field | Type | Default | Notes |
|---|---|---|---|
| Browser | enum | chromium | One of chromium, firefox, webkit. |
| Browsers | array | — | Run the same flow across multiple engines (Business + add-ons). Takes precedence over Browser when set. |
| Viewport | object | 1280 × 720 | {width, height}. Width 320–3840, height 240–2160. |
| User agent | string | browser default | Optional override. Max 500 chars. |
| Steps | array | — | One or more flow steps (see catalogue). Required. |
| Variables | string map | — | Reusable values referenced in steps as {{name}}. |
| Secrets | string map | — | Sensitive values referenced as {{secret.name}}. Never logged or stored in plaintext on the check result. |
| Screenshot on failure | bool | true | Capture a screenshot when a step fails. |
| Trace capture | bool | false | Record a full trace artifact. Larger; useful for debugging intermittent failures. |
| Ignore HTTPS errors | bool | false | Disable certificate verification. Staging-only. |
Step actions
The flow editor exposes 50+ step actions. Common ones:
| Category | Action | What it does |
|---|---|---|
| Navigation | navigate | Load a URL with optional wait_until (load, domcontentloaded, networkidle, commit). |
| Navigation | wait_for_navigation | Wait for the next navigation to finish. |
| Interaction | click / double_click / right_click / hover | Mouse actions against a selector. |
| Interaction | fill / clear_input / select / check_checkbox | Form-field input. |
| Interaction | press_key | Send a single keystroke (e.g. Enter). |
| Interaction | upload_file | Provide a file for a file-input element. |
| Waiting | wait | Sleep for a fixed duration. |
| Waiting | wait_for_element | Wait for an element to reach a state (visible, hidden, attached, detached). |
| Waiting | wait_for_api_response | Pause until a specific XHR / fetch resolves. |
| Assertions | assert_text / assert_title / assert_url | Text-content checks. |
| Assertions | assert_visible / assert_element_count / assert_attribute / assert_css | DOM-state checks. |
| Assertions | assert_response / assert_redirect | Network-level checks. |
| Assertions | assert_console_errors | Fail the check if the browser console logged errors above the configured level. |
| Assertions | assert_cookie | Verify a cookie was set with expected attributes. |
| Capture | screenshot | Save a screenshot artifact. |
| Capture | store_value | Capture a selector’s text or attribute into a variable for later steps. |
| Control flow | if_else | Branch on element visibility / variable equality. |
| Control flow | skip_steps_if | Skip the next N steps conditionally. |
| Control flow | repeat_steps | Loop a block of steps. |
| Network | http_request | Send an arbitrary HTTP request from the browser context. |
| Network | block_request / set_extra_headers | Modify outgoing requests. |
| Tabs / frames | switch_to_tab / close_tab / switch_to_iframe / switch_to_main_frame | Multi-context navigation. |
| Browser state | set_cookie / delete_cookies / set_local_storage | Pre-seed browser state. |
| Browser state | emulate_device / set_viewport / set_geolocation / set_permissions | Emulation overrides. |
| Misc | execute_javascript | Run arbitrary JS in the page context. |
| Misc | handle_dialog | Accept or dismiss alert / confirm / prompt. |
| Misc | log_message | Annotate 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.comsecrets: password: hunter2steps: - 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 explicitscreenshotaction). - Trace artifact (when
trace_capture: true). - Console error counts.
Status mapping
| Outcome | Status |
|---|---|
| All steps complete, all assertions pass | up |
| Total flow duration exceeds the monitor’s degraded threshold | degraded |
| Any assertion fails, any required step times out | down |
| Browser fails to launch, navigation aborts, network unreachable | down |
| Runtime cap exceeded | down |
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.