A zero-backend, privacy-first Selenium & Playwright recorder built into Google Chrome. Record multi-page workflows, mask passwords with AES-256, and export clean code for free.
Built for automation engineers, QA specialists, and developers who require deterministic browser replay, zero-trust credential security, and zero cloud dependencies.
Operates entirely within Chrome using Manifest V3 and chrome.storage.local/session. Zero cloud execution sandboxes, no external backend servers, and zero telemetry. Your automation data never leaves your device.
Records redundant fallback locators: data-testid → id → aria-label → optimal CSS path → XPath. If an element's styling or markup changes, playback falls back down the chain seamlessly.
Auto-reattaches across full-page redirects, OAuth logins, and SPA transitions (pushState/replaceState/popstate). Flushes debounced inputs instantly upon route changes to guarantee zero dropped keystrokes.
Auto-detects input[type="password"] and sensitive credentials. In-RAM encryption via native Web Crypto API (AES-256-GCM) with 96-bit random IVs, exporting clean process.env variables with zero leakage.
Recursively traverses open shadow roots using shadow-piercing locators (>>>) and routes automation commands to specific frame IDs. Automates embedded payment forms, Stripe elements, and Web Components with ease.
Dedicated controller window (960 × 750px) with Record, Pause, Stop, Step Editing, and Undo/Redo history. 1-click export to clean Playwright (TS), Puppeteer (JS), Python Selenium, or native Selenium .side JSON.
Observe how sensitive password inputs automatically render as process.env.AUTO_MACRO_PASSWORD across all target frameworks.
// Generated by FlowMacro IDE • Playwright (TypeScript)
import { test, expect } from '@playwright/test';
test('Automated Supabase Login Workflow', async ({ page }) => {
// 🛡️ Zero-Trust Vault: Credentials loaded strictly via environment
// Plain-text password is NEVER committed to repository or CI logs
const AUTO_MACRO_PASSWORD = process.env.AUTO_MACRO_PASSWORD || '';
await page.goto('https://app.supabase.com/login');
await page.locator('css=[data-testid="email-input"]').fill('lead.engineer@acme.dev');
// Injected securely into DOM without plain-text leakage
await page.locator('input[type="password"]').fill(AUTO_MACRO_PASSWORD);
await page.locator('button#login-submit').click();
await expect(page.locator('#prod-analytics-cluster')).toBeVisible();
});No paywall, no recurring subscriptions, no credit card required. Experience complete local automation with 0 plain-text leaks.
For individual developers recording and replaying local macros in browser tabs.
For engineering teams running automated batch fills, shadow DOM traversal, and exporting to CI/CD test pipelines.
✨ Checkout disabled during Beta • Instant free install from Chrome Web Store
Pragmatic guides for everyday browser automation, multi-step logins, credential protection, and exporting tests.
Click the FlowMacro icon in your Chrome toolbar, type your target Base URL, and hit Record. A standalone IDE window opens and synchronizes with your active browser tab.
Click buttons, type searches, and navigate pages. FlowMacro generates resilient 5-tier locators (data-testid → ID → ARIA → CSS → XPath) and penetrates open Shadow DOMs in real time.
Hit Stop when done. Replay directly in your browser with adjustable speed (0.5x, 1x, 2x), or export to Playwright (TS), Puppeteer (JS), Python Selenium, or .side JSON.
On sites with multi-screen authentication (e.g. enter username → click Continue → enter password screen), duplicate submit clicks or transient elements can be recorded during the transition.
submit steps between entering your username and typing your password. FlowMacro will cleanly execute Step 1 (Username) → Click Continue → Step 2 (Password) → Click Sign In.You never need to worry about credentials leaking into plain-text JSON files or git commits.
{{SECRET_PASSWORD}}. When exported to Playwright or Python, FlowMacro generates clean process.env.AUTO_MACRO_PASSWORD references so credentials stay secure.Occurs if a slow network request or complex animation delays the element from rendering in the DOM.
wait step (e.g. 1500ms) or click the step in the IDE to pick an alternate locator.You don't have to throw away your recording and start over if you accidentally clicked something.
Have an automation challenge, feedback, or need help with a specific website? Reach out directly to our team!