Browser automation fordevelopersenterprisesfreelancersteamshobbyistsdevelopers

Doppelganger runs on your hardware while giving you the power of a visual builder with block-based actions, optional JavaScript, and a secure API.

localhost
Run Task
Clicking: a
› Scrolling page: 400px over 500ms...
› Pressing key: Enter
Capabilities

Build automation tasks locally, step by step.

A block-based editor, multiple run modes, and exportable task definitions you can reuse.

Block-Based Builder

Create tasks by stacking action blocks inside a visual editor.

Modes: Scrape, Agent, Headful

Choose the right execution mode per task from the dashboard.

Action Blocks

Click, type, hover, wait, scroll, press, and run JavaScript.

JavaScript Blocks

Add custom extraction and page logic where you need it.

JSON Export

Copy task definitions from the editor for reuse.

Secure API Access

Trigger and manage tasks through a secure API.

Use Cases

Automation you can actually ship to production.

From monitoring pages to QA checks, every flow runs on your hardware and can be accessed via the secure API.

Explore all use cases

Price Monitoring

Track public pricing pages and collect the latest values.

Lead Enrichment

Collect public signals and structure them for your own records.

QA Regression

Run scripted QA flows across environments and compare outputs.

Security Testing

Simulate real flows in a controlled, local environment.

Modes

Choose the execution mode per task.

Scrape, Agent, and Headful modes are available from the task editor and the secure API.

Scrape

Fast extraction mode for straightforward data pulls.

Agent

Multi-step flows with block sequencing and variables.

Headful

Manual, interactive browser session with no automation blocks.

API

Secure API access to run and manage tasks.

Trigger tasks, monitor runs, and fetch results from a secure API alongside the dashboard.

Trigger Runs

Start tasks programmatically through the secure API.

Check Status

Read run progress and statuses without leaving your stack.

Fetch Results

Pull structured outputs directly from the API.

terminal.sh
curl -X POST "http://localhost:11345/tasks/:id/api" \
  -H "x-api-key: dpl_9d2f..." \
  -d "{"target_url": "https://example.com"}"