Skip to content

Automation overview

Santiago turns every browser profile into a programmable, fully-spoofed browser you can drive from your own code or hand to an AI agent. You talk to a single local HTTP API on http://localhost:7891; the daemon launches a Camoufox (Firefox-based) browser for the profile and applies all fingerprint, proxy, timezone and WebRTC spoofing for you. You never assemble a fingerprint or wire up a proxy in your automation code — you reference a profile by ID and act inside it.

Anything you can do by hand in a profile window, you can script — at one profile or across hundreds, in parallel.

Use caseWhat it looks like
Fill in formsNavigate to a form, fill every field, solve the dropdowns, submit — all through trusted, humanized events. See Filling forms.
Extract dataLaunch a profile, read the DOM with evaluate, and pull out the text or values you need. Cookies and tabs sync back on stop.
Drive multiple profilesRun many isolated profiles at once — each with its own fingerprint, proxy and cookie store — to run the same task in parallel. See Multiple profiles.
Long-running tasksHand an agent a duration and let it work autonomously, with randomized, human-like pacing. See Autonomous tasks.

Santiago is one desktop app with a layered process hierarchy:

Process hierarchy
Electron tray app
└─ local daemon (Fastify HTTP server on http://localhost:7891)
└─ Camoufox browser (one process per running profile)
  • Electron tray — the desktop app you install and sign in to. It owns your license and starts the daemon.
  • Local daemon — a Fastify HTTP server listening on http://localhost:7891. This is the only public Santiago API. It manages profiles, launches browsers, and exposes the automation endpoints.
  • Camoufox — a hardened Firefox-based browser, launched per profile, with the profile’s fingerprint baked in. When humanize is enabled, the daemon adds bezier-curve cursor movement to every action automatically.

Your code or AI agent sits outside this stack and calls the daemon over plain HTTP:

Who calls what
your code / AI agent ──HTTP──▶ daemon :7891 ──▶ Camoufox profile

There are two HTTP surfaces on :7891, both under /api:

SurfaceBase pathPurpose
Profile APIhttp://localhost:7891/api/profilesList, create, update, launch, stop profiles; read status; import/export cookies.
Automation APIhttp://localhost:7891/api/automation/:profileId/<action>Drive a running profile: navigate, snapshot, click, type, fill forms, screenshot, evaluate.

Every response uses the same envelope:

Success
{ "ok": true, "data": { } }
Error
{ "ok": false, "error": { "code": "PROFILE_NOT_RUNNING", "message": "..." } }

Pick a profile, launch it, and start driving it. All you need is the profile ID.

Find a profile
curl -s localhost:7891/api/profiles | jq '.data[] | {id, name, status}'
Launch it (async, returns 202)
PROFILE=<profile-id>
curl -s localhost:7891/api/profiles/$PROFILE/launch -X POST
Navigate inside the running profile
curl -s localhost:7891/api/automation/$PROFILE/navigate -X POST \
-H 'Content-Type: application/json' -d '{"url":"https://example.com"}'
Snapshot the page to find your targets
curl -s localhost:7891/api/automation/$PROFILE/snapshot -X POST | jq -r .data.snapshot
Stop it — cookies and tabs sync before closing
curl -s localhost:7891/api/profiles/$PROFILE/stop -X POST

The full set of actions (click, type, fill-page, select-combobox, screenshot, evaluate, wait, batch, and more) is documented in the HTTP API guide and the API reference.

You can call the daemon however you like — curl, fetch, a Python client, anything that speaks HTTP. There are two common patterns:

  • Your own code — issue the HTTP calls directly. The endpoints, payloads and response shapes are in the HTTP API and API reference.
  • An AI agent — install the Santiago agent skill and let a model decide the concrete actions (which element to click, what to type, when to wait). The skill teaches the agent the endpoints and the stealth rules. See Install the agent skill.
Download the agent skill
curl -fsSL https://downloads.santiago-browser.com/skill/latest/santiago-browser-skill.tar.gz \
-o santiago-browser-skill.tar.gz

The disguise is only as good as the events you generate. Two rules carry over into everything you script:

A profile reports one runtime status; automation only works against a running profile.

StatusMeaning
idleNot launched. Automation calls return PROFILE_NOT_RUNNING.
launchingBrowser is starting up.
runningReady to drive via the automation API.
stoppingBrowser is shutting down (syncing cookies and tabs).
lockedThe profile is in use on another device — it can’t be launched here until released.

How many profiles you can launch concurrently is set by your plan, and the daemon enforces it.

PlanPriceProfiles
Starter$9/mo3
Pro (most popular)$59/mo40
Agency$149/mo300 + team up to 10 members

Santiago is paid-only — there is no free trial. A profile launch requires an active license and a free concurrent slot; exceeding the slot count returns CONCURRENT_LIMIT_REACHED. See Plans for details.