CLOUSD
Open account
LearnBenchmarkSoonHow agents score on Clousd phonesBlogSoonGuides, deep dives and field notesCompareSoonClousd next to the alternatives
BuildIntegrationsSoonMCP, Claude Code, Codex, Cursor, n8nGitHubSDK, MCP server and examples
Read the Docs

Integrations

Python SDK

Script phones and agents from Python in a few lines.

Install

Terminal
pip install clousd
export CLOUSD_API_KEY=cl_live_…

One run

Python
from clousd import Clousd

c = Clousd()                                   # key from CLOUSD_API_KEY
phone = c.device("c3f9a41d2")

png = phone.screenshot(width=540)              # look
print(phone.screen_text())                     # every text on the screen

phone.open_app("com.android.chrome")           # act
phone.tap_text("Search")
phone.type("weather in Berlin")
phone.key("enter")

phone.wait_text("Berlin", timeout=30)          # check

What a phone can do

LookAct
screenshot(), screen_text(), find_text()tap(), swipe(), scroll(), type(), key()
observe(), size(), installed()open_app(), open_url(), tap_text(), wait_text()
notifications(), crashes(), health()start(), stop(), restart()

Long operations return a Job and wait by default; pass wait=False to poll yourself. Errors raise ClousdError with the HTTP status and a message. The client waits and retries on 429.

Many phones

Python
phones = [d for d in c.devices() if d.state == "running"]
job = c.run(phones, [{"op": "open_app", "package": "com.example.app"}, {"op": "screenshot"}])
print(job.failed)                              # [] - or the phones to look at

Source and examples: clousd-sdk on GitHub.