Skip to main content
Driftstack DRIFTSTACK

Command a fleet of real iPhones.

Spin up real iPhones in the cloud — each with its own identity, its own history, its own corner of the world. Drive them by hand, by code, or by AI. To every website, they're just people on phones.

One profile · 20-minute sessions · no card required.

DRIFTSTACK your-workspace 4 running

// workspace

Profiles

Sessions

Recipes

Proxies

// folders

📁 E-commerce

📁 Social ops

📁 QA suite

amsterdam-shopperRunning

iPhone 17 · 🇳🇱 AMS · SOCKS5

checkoutpriority
us-retail-qaRunning

iPhone 17 · 🇺🇸 NYC · WireGuard

e2e
jp-marketIdle

iPhone 15 Pro · 🇯🇵 TYO · SOCKS5

research
de-pricingSyncing

iPhone 17 · 🇩🇪 FRA · SOCKS5

daily
fingerprint coherence verified detection flags 0 median control latency <100ms

Real WebKit

The engine every iPhone ships

iOS 18.7 / 26.x

Safari versions Apple still ships

3 SDKs

TypeScript · Python · Go

SOCKS5 + VPN

Configurable per profile

Indistinguishable iPhone Safari. Programmable from any language.

Run a real iPhone browser in the cloud that every website treats as a genuine iPhone — never a bot, never an emulator. Built for scraping, testing, and automation that has to pass as a real mobile user. Drive it from TypeScript, Python, Go, or the desktop app.

One profile · 20-minute sessions · no card required.

driftstack-typescript-sdk
import { Driftstack } from '@driftstack/sdk';

const ds = new Driftstack({ apiKey: process.env.DRIFTSTACK_API_KEY });

const session = await ds.sessions.create({
  archetype: 'iphone17_ios18_7_safari26_4',
  label: 'target-flow',
});

try {
  await ds.sessions.navigate(session.id, { url: 'https://target.example' });
  await ds.sessions.capture(session.id, { kind: 'screenshot' });
  const state = await ds.sessions.getState(session.id);
  console.log(state.url, state.title);
} finally {
  await ds.sessions.destroy(session.id);
}

Not another anti-detect browser.

Anti-detects patch a desktop browser to lie about itself. Driftstack runs the real thing — actual WebKit on Apple-shipped iOS versions — so there's nothing to detect.

Capability Typical anti-detect Driftstack
Mobile fingerprintspoofed desktop UAreal WebKit, real iOS
Where it runsyour machinecloud + live control
Detection surfacestealth-patch bundle to spotno runtime JS patching at all
Automationclunky local RPA3 SDKs · AI agent · API

Full tier-by-tier and tool-by-tool detail on the comparison page.

Three steps to a real iPhone in the cloud.

1

Pick an iPhone profile

Start with the default iPhone, or create your own. Each profile is a persistent identity that remembers its logins, cookies, and history across every run.

2

Start a session

Spin up a real iPhone Safari browser in the cloud — one click in the desktop app, or one API call. No hardware to buy, nothing to install.

3

Drive it your way

Click around yourself, or automate it from TypeScript, Python, or Go. Every website it visits sees a genuine iPhone — never a bot.

Code it precisely, or just describe what you want.

Engineers drive sessions directly with the SDK (see the hero example). Everyone else can open the dashboard, type the task in plain English, and watch the agent execute it live — with the option to export the result as code anytime.

DRIFTSTACK your-workspace · 4 running
amsterdam-shopperRunning
iPhone 17 · 🇳🇱 AMS · SOCKS5
checkoutpriority
us-retail-qaRunning
iPhone 17 · 🇺🇸 NYC · WireGuard
e2e
de-pricingSyncing
iPhone 17 · 🇩🇪 FRA · SOCKS5
daily
uk-checkoutRunning
iPhone 17 · 🇬🇧 LDN · OpenVPN
bot-check

The desktop app is the cockpit: organize profiles in folders, launch with one click, and pop any session out into its own floating device window. Engineers get the same power from the SDK — no agent overhead on repeat runs.

What sets us apart

Population-matched Canvas + WebGL hashes match the real-iPhone population — not unique-per-session like every other API
Zero detection surface No runtime JS patching, no stealth bundle for fingerprinters to spot
Apple's WebKit, not Chromium Built from Apple's WebKit source — same engine your iOS users actually run
API · SDK · GUI TypeScript, Python, Go, or the dashboard — same engine, three access paths

Anywhere mobile Safari fidelity decides the outcome.

QA + testing

Mobile-Safari coverage

Run end-to-end tests against the exact engine your iOS users run. Same rendering, same JavaScript timing, same quirks — so the bug you reproduce in CI is the same bug your users hit in production.

Data collection

Mobile-first scraping

Many sites serve different content to mobile Safari than to desktop Chrome. With Driftstack, your scraper sees what an iPhone visitor would see — no behind-the-scenes redirects to "please use our app" pages.

Account workflows

Multi-account operations

Keep separate identities on services that lock down by device fingerprint. Persistent profiles let each account look like its own physical phone, every session, every time.

Route every byte the way you need.

Full proxy + VPN tunnelling per profile — not just HTTP. UDP flows, WebRTC datachannels, and QUIC stay on your egress path so detection systems see one consistent network identity per session.

SOCKS5

UDP + WebRTC + QUIC

Full SOCKS5 UDP-ASSOCIATE so WebRTC media + QUIC sessions stream over your proxy, not a leaky direct path. The harness reports egress capabilities live so you know when a proxy quietly drops UDP.

OpenVPN

.ovpn per profile

Upload a standard OpenVPN config to a profile slot and every session bound to that profile dials the tunnel before launching the browser. DNS leaks blocked by default; no client-side wrapper needed.

WireGuard

.conf per profile

Paste a WireGuard interface block + peer config; sessions using the profile attach to the tunnel transparently. Modern kernel-level performance — single-digit-ms RTT overhead even on mobile-LTE-class peers.

Three SDKs. One HTTPS API. Slots into anything.

First-party SDKs in TypeScript, Python, and Go. Beyond that, any HTTP-aware tool can drive Driftstack — Playwright tests, n8n workflows, Make.com scenarios, Zapier triggers, plain curl from a cron job.

SDK

TypeScript

@driftstack/sdk

SDK

Python

driftstack-sdk

SDK

Go

driftstack-go

via API

Playwright

drives sessions

via API

n8n · Make

workflow nodes

via API

curl · cron

plain HTTPS

One iPhone among millions.

Detection systems read hundreds of signals to decide who's visiting. Driftstack returns the exact ones a real iPhone returns — so your session lands in the iPhone bucket with millions of others.

Pixel-exact

The same hashes, bit for bit

Canvas and WebGL hashes identical to real-device hashes. Not approximate, not "within tolerance" — identical.

Real families

The iPhones your users hold

iPhone 15 Pro, iPhone 16 Pro, and the current iPhone 17 lineup — on iOS 18.7 / Safari 26.4, and Safari 26.5 as it rolls out.

Engine-deep

Fixed in the engine, not a wrapper

If any measurable signal differs from the real phone, it's a launch-blocking bug. We fix the browser engine itself — never a JavaScript patch a fingerprinter can spot.

Full signal-by-signal methodology at /trust/cumulative-rig.

Same signals as a physical iPhone. Not "close enough".

Detection systems read hundreds of small signals. A typical stealth browser fakes the user-agent string but leaks the underlying engine in the canvas, WebGL, or audio fingerprint. Driftstack runs Apple's WebKit, so every signal returns the exact iPhone value — not approximate.

A 7-signal preview. Full signal-by-signal table at /trust/cumulative-rig — see /trust/security-overview for what's live today.

Signal Stealth Chromium Driftstack User-agent spoofed real Canvas hash leaks Chromium iPhone WebGL renderer leaks Chromium Apple GPU AudioContext leaks Chromium iOS Core Text metrics leaks system iOS JS engine timing V8 fingerprint JSCore Hash uniqueness across sessions 100% unique population-stable

Every tap drawn from human motion.

Bots move in straight lines and constant time. Driftstack's input engine doesn't: every tap, swipe and keystroke is generated from human motor patterns — so automated sessions read like a person holding a phone, because that's what the motion says.

Touch & scroll

Curved touch paths, momentum flicks, variable dwell — no two taps land alike, and none land like a script.

Typing cadence

Per-character rhythm with natural pauses and variance — typed the way thumbs type, not the way scripts paste.

Per-profile persona

Each profile keeps its own consistent motion signature across sessions — the same "person", every visit.

Run identities like infrastructure.

Everything below is rendered the way you'd actually use it — because the product is the interface.

Identity

The Identity Wardrobe Rolling out

Profiles as wearable identities: a complete iPhone (hardware, iOS, Safari, fonts, canvas, TLS) with its own cookies, storage, proxy and behavioral persona. Duplicate one, template one, hand one to a teammate — the identity stays coherent for life.

Folders · tags · statuses · bulk ops · per-profile egress

jp-marketiPhone 15 Pro · idle
🇯🇵 Tokyo · SOCKS5
us-retail-qaiPhone 17 · running
🇺🇸 NYC · WireGuard
amsterdam-shopperiPhone 17 · agent-driven
🇳🇱 AMS · OpenVPN

Time travel

Session Replay Roadmap

Every session can record itself: video, taps, network and agent decisions on one timeline. Scrub back to the moment a flow broke, share the clip with your team, or export it as evidence that the run behaved.

Timeline scrubbing · tap markers · agent-step annotations

00:00tap ×14 · nav ×3 · challenge ×112:41

Trust curve

Warm-up Scheduler Roadmap

Fresh identities are suspicious identities. Schedule organic browse sessions that age a profile on a curve — light touches first, deeper flows later — so by the time it works, it has a history.

Curve presets · per-folder schedules · runs on idle fleet capacity

Egress

Exit anywhere. Leak nowhere.

SOCKS5, OpenVPN (.ovpn) and WireGuard (.conf) per profile — and unlike anyone else, UDP, WebRTC and QUIC ride the tunnel too. Locale and timezone follow the exit geo so nothing contradicts the IP.

Per-profile binding · health checks · geo-coherent locale

Trust center

Sealed by architecture.

Profiles are client-encrypted (AES-256-GCM) before they reach us — our servers move opaque bytes. Per-tenant key isolation means a wrong account can't decrypt, by math. Nobody at Driftstack can watch your sessions.

Audited secret access · export/delete anytime · public security model

Apple's engine. Not a Chromium copy.

Every stealth tool you've used before is a Chromium fork with a fake user-agent, or Playwright with a patch plugin layered on top. Driftstack runs Apple's WebKit source code itself — the same engine that ships on every iPhone. WebKit, Core Text, and the iOS rendering pipeline produce your fingerprint the way Apple wrote them, in the order Apple intended.

One metric. Concurrent sessions. That's it.

Concurrent means sessions running at the same time — think browser tabs. Pick a plan, get a concurrent cap, run anything inside it. No per-call markup. No per-element fees. No hourly metering that turns idle sessions into surprise overage charges. Visit 200 pages on one session for the cost of visiting one.

Concurrent cap = the only thing you pay for

EU-only by default.

Your data stays in the EU. We don't log what your sessions visit or do — only the operational metadata we need to bill (session duration, archetype, cap usage). Full data residency + sub-processor breakdown at /trust/sub-processors.

Customer-configurable egress (SOCKS5 / OpenVPN / WireGuard) — see /trust/security-overview for the current implementation state and the security posture across each proxy type.

# Driftstack control plane
stores session metadata only
never stores response bodies
EU-jurisdiction object storage

# Roadmap — customer-configurable egress
→ SOCKS5 / OpenVPN / WireGuard (not shipped)

Drive it by hand, or drive it from code.

Manual

Desktop app

A native desktop client that lets you keep 10 to 200 logged-in profiles open at once and switch between them like browser tabs. Same WebKit, same fingerprint, no code required. Built for account teams and operators who keep multiple sign-ins alive across the workday.

  • Personal $79/mo · Team $249/mo · Agency $699/mo
  • 1 / 3 / 8 concurrent sessions per tier
  • Unlimited hours within your concurrent cap
See Manual pricing →

API

SDK + HTTPS

First-party SDKs in TypeScript, Python, and Go — plus a plain HTTPS API any HTTP client can drive. Built for QA pipelines, data collection, integration tests, and production automation that needs the real iPhone fingerprint.

  • API Starter $149/mo · Builder $499/mo · Scale $1,499/mo
  • 2 / 8 / 24 concurrent sessions per tier; Enterprise custom
  • Optional bundled AI assistant — or bring your own Anthropic API key (Builder+)
See API pricing →

Not sure which fits? Both share the same engine, the same device archetypes, the same free tier. Start free, see which workflow matches yours, then subscribe.

Two ladders. A free tier to start.

Start free — one profile, 20-minute sessions, no card required. Then choose: Manual from $79/mo if you're driving by hand in the desktop app, or API from $149/mo if your code is running sessions. Annual contracts save 20%.

See pricing

Run Driftstack on your own infrastructure.

For privacy, sovereignty, or sustained high-volume use. We help you pick the right hardware, deploy the control plane, and operate the fleet. Three packages, annual contracts, hands-on onboarding.

See self-hosted →

When self-hosted makes sense

  • Privacy-sensitive workloads where session contents must not leave your network.
  • High-concurrency use where owned hardware costs less than an equivalent cloud subscription.
  • Full data sovereignty over recordings, screenshots, and everything sessions produce.
Contact sales

Built by engineers, not a growth team.

Driftstack is built by the people who write the WebKit patches — no SDR machine, no upsell ladder, no roadmap chosen by investors. Customer feedback goes straight to the engineers shipping the product, and support replies come from the same team.

Design partner

Direct engineer access

Design-partner customers get a Slack channel shared with the engineer who writes the code. Bug → fix → deploy in the same week, not the same quarter. No tier-1 support gauntlet.

Honest pricing

One concurrent metric

No per-call markup, no per-element fees, no opaque "credits" that expire. Concurrent cap is the only number you reason about. Annual contracts save 20% — listed, not negotiated case-by-case.

Sovereignty

Your data stays in the EU

Customer data lives in the EU, single-region. We don't log destination URLs, response bodies, or session content. The full sub-processor list is on /trust/sub-processors.

See it for yourself. Free.

iPhone Safari sessions on real WebKit — one profile, 20-minute manual sessions, no card required. Plenty of room to point your workflow at it and decide on your own terms.

Start free