Playwright-powered

Browser monitoring with dependency intelligenceSee what's breaking, and what's causing it

Browser checks that go beyond pass/fail. Third-party domains attributed as OTel span attributes, Web Vitals anomaly-scored, and every step captured, all flowing into your OTel backend as a rich insight pack.

cross-monitor dependency view
MonitorLCP3P Impact
Checkout Flow3.2s+2.1σ
Product Detail2.9s+1.8σ
Homepage3.6s+2.4σ
Search Results2.7s+1.3σ
Shared dependency detected
cdn.tagmanager.net · 4 monitors · never deployed

How it works

01

Playwright runs in a real browser

Your script runs in a real Chromium instance in an isolated container on a global location. No headless shortcuts: full browser, full network stack, real third-party requests.

02

Every request classified and attributed

Third-party requests classified by domain. Payload bytes, request latency, and blocking vs non-blocking measured per domain, per check run, and across your monitor portfolio.

03

OTel insight pack emitted

Web Vitals, anomaly scores, third-party attribution, filmstrip screenshot URLs, and W3C traceparent emitted as a single OTLP insight pack to your backend.

Third-party attribution, automatic

Every request hostname compared to the page hostname. Domain, payload bytes, and request latency tracked per-check and across your monitor portfolio. When a tag manager script starts behaving differently, you know which monitors are affected, before users file support tickets.

  • Third-party domains identified and classified automatically
  • Payload bytes tracked per domain per run
  • Cross-monitor shared dependency detection
  • Anomaly scored against per-domain baselines
  • Emitted as structured OTel span attributes (count, total bytes, domains)
Third-party domains on Checkout Flow
cdn.tagmanager.net
847 KB324ms
analytics.google.com
42 KB89ms
fonts.googleapis.com
12 KB31ms
cdn.stripe.com
156 KB78ms
Screenshot URLs in OTel spans
Step 1: Page load
0msscreenshot →
Step 2: Login form
1,240msscreenshot →
Step 3: Product added
2,890msscreenshot →
Step 4: Checkout
4,120msscreenshot →
URLs embedded in OTLP spans, accessible from any tool in your stack

Filmstrip evidence

Every step in your Playwright script captured and stored. Screenshot URLs embedded directly in OTel spans. Pull up the filmstrip from inside Grafana or your incident runbook, with no context switch to a separate monitoring dashboard required.

When your checkout breaks at 2am, the on-call engineer opens the alert, clicks the screenshot URL in the span, and sees exactly what the user saw, in the same tool they already have open.

Web Vitals, anomaly-scored

LCP, FCP, CLS, and TTFB tracked against 14-day rolling baselines, calculated per location and per hour of day. The synthetics.check.completed log event fires every run; when behavior drifts, deviation in σ is attached as a log attribute: your backend knows "+2.1σ on LCP from Tokyo at 14:00 UTC", not just a raw number.

No fixed thresholds to maintain. No manual tuning when your app ships a performance improvement. The baseline adapts, and alerts fire when behavior deviates from what's normal for that check, that location, and that time of day.

Web Vitals: Checkout Flow / Tokyo
LCP+2.1σ
Current: 3.2sBaseline: 1.4s
FCP+0.4σ
Current: 1.1sBaseline: 0.9s
CLS+0.6σ
Current: 0.02Baseline: 0.01
TTFB+1.2σ
Current: 420msBaseline: 280ms

Unlike isolated browser check runners

  • Most tools run browser checks in isolation. Yorker tracks third-party domains across your entire monitor portfolio, so a failing CDN shows up across all affected monitors simultaneously, not as four separate unrelated alerts.

  • Filmstrip screenshots are stored and linked in OTel spans, not locked in a proprietary dashboard. Pull them up from any tool in your stack: Grafana, a PagerDuty runbook, or a Slack alert.

  • Web Vitals are anomaly-scored against per-location, per-hour-of-day baselines, not compared to a fixed threshold you have to maintain and tune as your app evolves.

Frequently asked

Can I run Playwright scripts as monitors?

Yes. Yorker wraps Playwright as a library dependency — you write standard Playwright TypeScript scripts and declare them as browser monitors in your yorker.config.yaml. Any script that runs in Playwright runs as a Yorker monitor. No proprietary API, no forked Playwright version.

How does third-party dependency attribution work?

Every network request during a browser check run is compared against the page's hostname. Requests to different hostnames are classified as third-party. Yorker tracks the domain, payload bytes, and request latency per third-party domain per run, then emits them as structured OTel span attributes (synthetics.third_party.count, synthetics.third_party.total_bytes, synthetics.third_party.domains). Cross-monitor correlation fires when two or more browser checks fail within five minutes sharing the same third-party domain.

What Web Vitals does Yorker capture?

LCP (Largest Contentful Paint), FCP (First Contentful Paint), CLS (Cumulative Layout Shift), and TTFB (Time to First Byte) are tracked per check run. Each metric is anomaly-scored against a 14-day rolling baseline, calculated per location and per hour of day, and emitted as a log attribute on the synthetics.check.completed event.

Where are filmstrip screenshots stored?

Screenshots are stored in S3-compatible object storage and the URL is embedded directly in the OTel span as the synthetics.screenshot.url attribute. You can open the screenshot from any tool that can read your OTel backend (Grafana, HyperDX, a PagerDuty runbook) without switching to a separate monitoring dashboard.

How many global locations are available for browser checks?

Fourteen hosted locations. Browser checks run in isolated, single-use Playwright + Chromium environments, so every run starts from a clean slate with no state carried over. You select which locations to run from when you define your monitor; multi-location checks run in parallel.

Put your first check live in one command.

Free tier includes 10,000 HTTP + MCP checks and 1,500 browser checks per month. No credit card required.

npx @yorker/cli init