Help & documentation

The complete guide to Flowroid, the Android automation platform where your phone is the server. Build flows that react to what your device sees and does, control hardware and apps, and expose it all to external systems through an embedded HTTP API. Everything runs locally — no account, no cloud relay for core automation.

Platform
Android 8.0 (API 26) and newer
Designed for
Android 14 (target API 35)
Works on
Phones, tablets, Chromebooks
Privacy
Core automation runs on-device
On this page
  1. Core concepts
  2. Getting started
  3. Building flows
  4. Triggers
  5. Actions
  6. Conditions
  7. Variables & expressions
  8. Permissions
  9. Reliability
  10. Templates
  11. Import & export
  12. HTTP API server
  13. Plans & pricing
  14. Privacy & security
  15. Troubleshooting & FAQ

Core concepts

Flowroid automations are called flows. A flow is three parts that run in sequence.

  1. Starts on

    Triggers

    A device event starts the flow — a notification arrives, you reach a location, the battery drops. A flow can have one or more.

  2. Guarded by

    Conditions

    Optional checks evaluated when a trigger fires. The flow only continues if they pass. An empty group passes.

  3. Then runs

    Actions

    What the flow does, in order. Each action can read the output of the ones before it. Every run is logged to history.

Flows are event-driven — they react to events rather than polling — and fail gracefully: if one action errors, the flow logs it and either continues, retries, or stops based on your settings, but never crashes the app.

Getting started

Install & first launch

  1. Install Flowroid from Google Play and open it.
  2. On first launch you're guided through the Permissions overview, where you grant only the permissions the features you want require.
  3. Flowroid starts a persistent foreground service that keeps your automations alive. The small ongoing notification shows how many flows are active — that's what lets flows run when the app isn't open.

Create your first flow

The fastest start is the Templates library: ready-made automations you install in one tap and customise. To build from scratch:

  1. Tap + New Flow.
  2. Add a trigger (for example, Battery State).
  3. Optionally add conditions.
  4. Add one or more actions (for example, Post Notification).
  5. Give the flow a name, enable it, and save.

Your flow is now live and runs whenever its trigger fires.

Building flows

The visual editor

Flows are built in a visual editor where you assemble triggers, conditions, and an ordered chain of actions. Each trigger and action presents a form generated from its configuration schema, so you only ever see the options that are relevant.

Action chaining & outputs

Actions run sequentially. Every action produces structured outputs that later actions can reference using template expressions. For example, an HTTP Request action exposes statusCode, headers, body, and latency, which a following action reads with {{previous.http.body}}.

Control flow

First-class control-flow actions let a flow branch, loop, and call sub-flows:

  • If / Else — run one set of nested actions or another based on a condition group.
  • Loop — repeat nested actions forEach item, a fixed number of times, or while a condition holds (with a maxIterations safety cap).
  • Call Sub-Flow — invoke another flow and pass it an input object, enabling reusable building blocks.
  • Delay, Stop, Log, plus Math, String, and Array helpers for in-flow data manipulation.

Error handling

Each action can be configured to continue, stop, or retry on error. Failures are recorded in the flow's execution history with logs, so you can see exactly what happened and when.

Trigger catalog

Flowroid ships 30 triggers. Permissions noted are only required if you use that trigger.

Notifications

1
  • Notification Receivednotification.posted

    A notification is posted.

    Filter by package, title text, body text, priority. Exposes title, text, bigText, category, priority, key, and more. Requires notification access.

Battery & power

3
  • Battery Statebattery.state

    Battery level or charging state changes.

    Level threshold, direction (rising / falling / any), low-battery, hysteresis.

  • Charging Typebattery.charging_type

    A charger connects or disconnects.

    Charger type (USB / AC / wireless / dock), connected / disconnected.

  • Battery Temperaturebattery.temperature

    Temperature crosses a threshold.

    Above / below, °C threshold.

Connectivity

7
  • Network Connectivityconnectivity.state

    Wi-Fi or mobile data connectivity changes.

    Per-network connect / disconnect, SSID pattern.

  • Wi-Fi SSIDconnectivity.wifi_ssid

    You connect to or leave a specific network.

    Exact SSID, connected / disconnected. Requires location.

  • Network Typeconnectivity.network_type

    Network type changes (2G / 3G / 4G / 5G / Wi-Fi).

    Types, connect / disconnect.

  • Airplane Modeconnectivity.airplane

    Airplane mode is toggled.

    Enabled / disabled / changed.

  • VPN Stateconnectivity.vpn

    A VPN connects or disconnects.

    Optional VPN name filter.

  • Bluetooth Deviceconnectivity.bluetooth_device

    A specific Bluetooth device connects or disconnects.

    Device MAC, type. Requires Bluetooth.

  • Hotspot Stateconnectivity.hotspot

    Your hotspot is enabled or disabled.

    Enabled / disabled / changed.

Device & system

8
  • Device Statedevice.state

    Screen turns on or off, or the device is unlocked.

    Screen on / off, user unlock.

  • Headset Pluggeddevice.headset

    Headphones connect or disconnect.

    Wired / Bluetooth / any. Bluetooth needs permission.

  • NFC Tag Scanneddevice.nfc

    An NFC tag is scanned.

    Tag-ID and content filters (wildcards). Requires NFC.

  • Do Not Disturbdevice.dnd

    DND mode changes.

    Enabled / disabled / changed. Requires DND access.

  • Media Buttondevice.media_button

    A media button is pressed.

    Play / pause / next / previous.

  • Device Bootsystem.bootCompleted

    The device finishes booting.

  • Alarm Triggeredsystem.alarm

    A device alarm fires.

    All or specific alarms.

  • Clipboard Changedclipboard.changed

    Clipboard content changes.

    Optional text filter.

Schedule & time

1
  • Scheduled Timetime.schedule

    A schedule fires.

    Intervals, specific times, days of week, cron expressions, timezone. Exact timing needs alarm access.

Location

1
  • Geofencelocation.geofencePro

    You enter, exit, or dwell in an area.

    Multiple geofences (lat / lng / radius, enter / exit / dwell). Requires location + background location.

Apps

1
  • App Opened / Closedapp.foreground

    An app comes to or leaves the foreground.

    App selection, opened / closed, minimum foreground time. Requires usage access.

Phone & calendar

2
  • Phone Callphone.call

    A call event occurs (incoming / outgoing / answered / ended / missed).

    Number / contact filters, minimum duration. Requires phone state (+ contacts for names).

  • Calendar Eventcalendar.event

    A calendar event starts or ends, or a reminder fires.

    Minutes-before, calendar and title filters. Requires calendar.

Sensors

5
  • Physical Statesensor.physical_state

    The phone's orientation or motion changes (flat, face-down, shaken, and so on).

    State, sensitivity, debounce.

  • Proximity Sensorsensor.proximity

    Something approaches or leaves the proximity sensor.

    Near / far / changed, sensitivity.

  • Device Picked Upsensor.pickup

    The device is picked up.

    Sensitivity.

  • Light Levelsensor.light

    Ambient light crosses a threshold.

    Bright / dark, threshold, sensitivity.

  • Step Countersensor.steps

    A step-count milestone is reached.

    Threshold, daily reset. Requires activity recognition.

Chat

1
  • Flowroid Chatflowroid.chat

    A message is sent in Flowroid's in-app chat.

    Optional target-flow filter.

Action catalog

Flowroid ships 45+ actions. Each action's outputs are available to later actions via template expressions.

Android 10+ radio note

Google restricts apps from silently toggling Wi-Fi (and some other radios) on Android 10 and newer. On those versions the Wi-Fi action may open a system panel for confirmation rather than switching silently. Templates that rely on this carry an honest in-app limitation note.

HTTP & integrations

1
  • HTTP Requesthttp.request

    Sends an HTTP request to an external endpoint.

    URL, method, headers, body, content type, timeout. Outputs statusCode, headers, body, latency.

Notifications

2
  • Post Notificationnotification.post

    Posts a notification.

    Title, text, big text, channel, priority, ongoing, auto-cancel.

  • Cancel Notificationnotification.cancel

    Cancels a notification.

    By id (own posts) or by key (any notification, via notification access).

Device control

12
  • Set Volumedevice.volume

    Sets or mutes a volume stream (media / ring / notification / alarm / system).

  • Set Ringer Modedevice.ringer_mode

    Normal / vibrate / silent.

  • Set Brightnessdevice.brightness

    Manual level or auto.

    Needs Modify settings.

  • Set Screen Timeoutdevice.screen_timeout

    Sets the screen timeout.

    Needs Modify settings.

  • Control Screen Statedevice.screenState

    Screen on / off, or lock the device.

  • Flashlightdevice.flashlight

    On / off / toggle with brightness.

    Needs camera.

  • Vibratedevice.vibrate

    Duration or custom pattern.

  • Set Auto Rotatedevice.auto_rotate

    On / off.

    Needs Modify settings.

  • Dark Modedevice.darkMode

    On / off / toggle.

    Needs Modify settings.

  • Keep Screen Awakedevice.keep_awake

    Holds a wake lock for a duration.

  • Toggle Wi-Fidevice.wifi

    On / off / toggle.

    Behaviour limited on Android 10+ — see the radio note above.

  • Toggle Bluetoothdevice.bluetooth

    On / off / toggle.

    Needs Bluetooth.

Audio & media

3
  • Play Soundaudio.play

    Plays an audio file on a chosen stream.

  • Text to Speechaudio.tts

    Speaks text (pitch, rate, language).

  • Media Controlmedia.control

    Play / pause / next / previous / stop.

Connectivity

3
  • Connect Bluetoothconnectivity.bluetooth_connect

    Connects to a device by MAC (A2DP / HFP / HSP).

  • Toggle Airplane Modeconnectivity.airplane

    On / off / toggle.

    Needs Modify settings.

  • Toggle Hotspotconnectivity.hotspot

    On / off / toggle with optional SSID and password.

Apps & system

4
  • Launch Appapp.launch

    Launches an app, or opens a URL or intent.

  • Kill Appapp.kill

    Terminates a running app.

  • Send Intentsystem.intent

    Sends an arbitrary Android intent (action, package, class, data, extras).

  • Set Clipboardsystem.setClipboard

    Writes text to the clipboard.

Phone & chat

2
  • Make Phone Callphone.call

    Dials a number.

    Needs Make calls.

  • Send Chat Responsechat.respond

    Sends a message in Flowroid's in-app chat.

Files

7
  • Read Filefile.read

    Reads file contents (encoding, max lines).

  • Write Filefile.write

    Writes or appends content.

  • Copy Filefile.copy

    Copies a file.

  • Move Filefile.move

    Moves or renames a file.

  • Delete Filefile.delete

    Deletes a file (recursive for directories).

  • Create Directoryfile.mkdir

    Creates a directory.

  • List Directoryfile.list

    Lists directory contents with an optional filter.

Flow control & logic

11
  • Delayflow.delay

    Pauses for a duration.

  • If / Elseflow.ifElse

    Branches into nested actions based on a condition group.

  • Loopflow.loop

    Repeats nested actions (forEach / times / while).

  • Call Sub-Flowflow.call

    Calls another flow with an input object.

  • Set Variableflow.setVariable

    Sets a flow- or global-scoped variable.

  • Clear Variableflow.clearVariable

    Clears a variable.

  • Math Operationflow.math

    add / subtract / multiply / divide / modulo / power.

  • String Operationflow.string

    uppercase / lowercase / trim / replace / split / concat / substring.

  • Array Operationflow.array

    push / pop / shift / unshift / filter / map / join.

  • Logflow.log

    Writes a message to the debug log.

  • Stop Flowflow.stop

    Stops execution with an optional reason.

Conditions

Conditions let a flow decide whether to proceed, or which branch to take in an If / Else. Each condition compares a left value (usually a template expression) against a right value using an operator.

Operators

Equality & text

OperatorMeaning
EQUALSExact match (case-sensitive)
NOT_EQUALSNot equal
CONTAINSSubstring present (case-insensitive)
NOT_CONTAINSSubstring absent
STARTS_WITHPrefix match (case-insensitive)
ENDS_WITHSuffix match (case-insensitive)
MATCHES_REGEXMatches a regular expression

Numeric

OperatorMeaning
GREATER_THANLeft > right
GREATER_THAN_OR_EQUALSLeft ≥ right
LESS_THANLeft < right
LESS_THAN_OR_EQUALSLeft ≤ right

Lists

OperatorMeaning
INValue is in a list (JSON array or comma-separated)
NOT_INValue is not in the list

Presence

OperatorMeaning
IS_EMPTYEmpty or null
IS_NOT_EMPTYHas a value
IS_NULLNull or missing
IS_NOT_NULLPresent and non-null

Time & date

OperatorMeaning
TIME_BEFORECurrent time is before HH:mm
TIME_AFTERCurrent time is after HH:mm
TIME_BETWEENCurrent time is within HH:mm-HH:mm (handles overnight ranges)
DAY_OF_WEEK_INToday is one of the listed days

How values are compared

Numeric operators try a numeric comparison first and fall back to string comparison if the values aren't numbers. List operators accept either a JSON array (["a","b"]) or a comma-separated string (a, b).

Combining conditions

Conditions group into AND / OR sets, and groups can nest arbitrarily deep for complex logic. An empty condition group passes (evaluates to true).

AND
├── {{event.sender}} EQUALS "+15551234567"
└── OR
    ├── {{event.body}} CONTAINS "urgent"
    └── {{event.body}} CONTAINS "important"

Variables & template expressions

Scopes

ScopePersistenceWritableUse for
GlobalPersists across flows and app restartsYesCounters, shared state, settings
FlowIn-memory, single executionYesTemporary values, loop indices
EventRead-only during executionNoThe trigger's payload
DeviceReal-time, read-onlyNoLive device state
Secret ProEncrypted at rest, read-only in expressionsNoAPI keys, tokens, passwords

Template expressions

Anywhere a field accepts dynamic input, use {{ ... }} expressions with dot-notation and array indexing:

{{event.sender}}              Trigger event field
{{event.data.nested}}         Nested field
{{event.items[0]}}            Array index
{{global.counter}}            Global variable
{{flow.temp}}                 Flow-scoped variable
{{previous.http.body}}        Output of a previous action (by type)
{{prev[0].output.field}}      Output of a previous action (by index)
{{device.battery.level}}      Live device state
{{secret.api_key}}            Secret value (read-only)

Device variables

The device.* namespace exposes live state without needing a trigger:

  • Batterydevice.battery.level, .charging, .status
  • Networkdevice.network.connected, .type, .wifi
  • Screendevice.screen.brightness
  • Androiddevice.android.version, .release
  • Localedevice.locale.language, .country
  • Timedevice.time.zone, .timestamp

Referencing a category without a property (e.g. {{device.battery}}) returns the whole object as JSON.

Secrets Pro

Secret variables are encrypted at rest using AES-256-GCM with a key held in the device's hardware-backed Keystore (where available). Secret values are masked everywhere in the UI, are never written to logs, and are read-only inside expressions — a flow can use {{secret.api_key}} but cannot overwrite it. The secret vault is a Pro feature.

Permissions

Flowroid only asks for the permissions needed by the features you actually use. They fall into two groups: standard runtime permissions (granted with a system dialog) and special-access permissions (granted on a dedicated Android settings screen).

On SMS & call logs

Flowroid intentionally does not request SMS (READ_SMS / SEND_SMS / RECEIVE_SMS), call-log, or call-screening permissions. These were removed to comply with Google Play policy. Phone-call triggers use only the basic phone-state permission.

Runtime permissions

PermissionEnablesNotes
NotificationsPOST_NOTIFICATIONSPosting notifications and the foreground-service status notification.Required on Android 13+
Phone stateREAD_PHONE_STATEThe Phone Call trigger (incoming / outgoing / answered / ended / missed).No call-log access
ContactsREAD_CONTACTSShowing contact names in call triggers, filtering by contact.Optional
Make callsCALL_PHONEThe Make Phone Call action.Optional, dialer flow only
Fine locationACCESS_FINE_LOCATIONGeofence triggers, Wi-Fi SSID detection (required by Android for SSID).
Background locationACCESS_BACKGROUND_LOCATIONGeofences that work while the app is in the background.Android 10+. Shown only after an in-app disclosure explaining why
BluetoothBLUETOOTH_CONNECTBluetooth device triggers, headset detection, Bluetooth toggle.Android 12+
Activity recognitionACTIVITY_RECOGNITIONThe Step Counter trigger.Android 10+
CalendarREAD_CALENDARThe Calendar Event trigger.

Special-access permissions

These are granted through Android's settings, not a popup. Flowroid links you straight to the right screen. The Permissions screen shows everything at a glance, grouped by category, with grant status and one-tap actions; a Guided mode walks you through only the permissions that still need attention.

AccessEnablesWhere
Notification accessNotification triggers — reading notifications from other apps.Settings → Special app access → Notification access
Usage accessThe App Opened / Closed trigger (foreground app detection).Settings → Special app access → Usage access
Modify system settingsActions that change brightness, screen timeout, auto-rotate, dark mode.Settings → Special app access → Modify system settings
Schedule exact alarmsPrecise schedule and timed triggers.Settings → Special app access → Schedule exact alarms (Android 12+)
Do Not Disturb accessThe Do Not Disturb trigger and ringer / DND actions.Settings → Special app access → Do Not Disturb access
Display over other appsLaunching apps from background triggers (e.g. after unlock).Settings → Special app access → Display over other apps
Battery optimization exemptionReliable background execution.Settings → Battery → Battery optimization

Keeping automations running

Android aggressively stops background apps to save battery, and some manufacturers are far more aggressive than others. To make sure your flows run when you expect them to:

  1. Exempt Flowroid from battery optimization. The single most important step. Settings → Apps → Flowroid → Battery → Unrestricted / Not optimized.
  2. Enable auto-start on Xiaomi, Oppo / Realme, Vivo / iQOO, OnePlus, Huawei / Honor, Asus, and similar. These brands block apps from starting after a reboot unless you allow auto-start in their own settings. Flowroid provides a shortcut to the relevant manufacturer screen.
  3. Grant notification access if you use notification triggers.
  4. Grant exact-alarm access if you use schedules and want minute-accurate timing.

Boot behaviour

When your device restarts, Flowroid's boot receiver restarts the foreground service (if auto-start is enabled) and resumes all enabled flows. Boot triggers fire after you first unlock the device, once encrypted storage becomes available — Flowroid does not run during the locked, pre-unlock phase.

Templates

Flowroid ships 46 ready-made templates spanning beginner to intermediate automations. Install one in a tap, customise its values (times, locations, app choices, thresholds), and it becomes a normal editable flow. A sampling of what's included:

  • Silent at Night

    Go silent at bedtime on selected days.

  • Low Battery Alert

    Notify when the battery drops below a threshold.

  • Wi-Fi at Home

    Manage Wi-Fi on geofence arrival.

  • Flip to Silence

    Silence the phone when placed face-down.

  • Headphones Auto-Play

    Launch music and set volume when headphones connect.

  • NFC Office Mode

    Tap a tag to switch to work mode.

  • Auto Dark Mode at Sunset

    Schedule-based dark mode.

  • Pocket Mode Protection

    Lock the screen when pocketed.

  • Meeting Auto-Silence

    Silence during calendar events.

  • Battery Overheat Warning

    Alert on high battery temperature.

  • Auto TTS Notification Reader

    Read notifications aloud.

  • Media Pause on Call

    Pause media on an incoming call, resume after.

  • File Backup on Charge

    Back up a file when charging.

…and many more across power, connectivity, sensors, and productivity.

Honest limitations

Some templates depend on capabilities Android restricts on newer versions or specific manufacturers (for example, silently toggling Wi-Fi on Android 10+, or force-closing apps). Those templates display a clear limitations note in their detail screen describing exactly what will and won't work on your device, so there are no surprises.

Import & export

Every flow can be exported to a portable file and re-imported on the same or another device — handy for backups, sharing, or moving between devices. Import / export works entirely with local device storage: no account or cloud required. (Flows can also be exported and imported through the API server.)

The embedded HTTP API server

Flowroid can run an embedded HTTP server directly on your device, turning your phone into an automation endpoint that external systems call. The device is the server — your computer, home-automation hub, or another phone connects to the phone. This is a Pro feature.

Security model

The API server is off by default and built secure-by-default:

  • Localhost-only by default. It binds to 127.0.0.1 and is unreachable from the network until you explicitly enable the Enable LAN access toggle (which rebinds to 0.0.0.0 and shows a clear warning).
  • Authentication required. All protected routes require an API key or a JWT bearer token. The signing secret is stored in the hardware-backed Keystore; if that's unavailable the server refuses to start rather than fall back to a guessable secret.
  • Scoped access. API keys carry fine-grained scopes (flows:read, flows:write, flows:execute, variables:read, webhooks:write) so you grant only what each integration needs.
  • CORS closed by default. No browser origins are allowed unless you add them to an allow-list; wildcard origins are rejected.
  • Request body cap of 1 MiB and configurable rate limiting.
  • Secrets never leave in plaintext. Secret variables are returned masked; revealing a value requires a separate dedicated scope.
  • SSRF protection on outbound HTTP actions (loopback, link-local, and private ranges are blocked by default).
  • Optional HTTPS / TLS with a self-signed certificate you can export, and HMAC-SHA256 signature verification for inbound webhooks.

Authentication flow

Exchange an API key for a short-lived JWT, or authenticate per-request with the key directly (X-Api-Key: fd_live_xxxx).

# Exchange an API key for a short-lived JWT
curl -X POST http://<device-ip>:8080/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"apiKey":"fd_live_xxxxxxxxxxxxxxxx"}'
# → { "accessToken": "...", "refreshToken": "...", "expiresIn": 900 }

Core endpoints

All endpoints are versioned under /api/v1.

GroupExamples
Health & infoGET /api/v1/health, GET /api/v1
AuthPOST /auth/token, POST /auth/refresh, GET /auth/me, GET /auth/scopes, API-key CRUD under /auth/apikeys
FlowsGET /flows, POST /flows, GET/PUT/PATCH/DELETE /flows/{id}, /flows/{id}/toggle, /execute, /duplicate, /executions, /export, POST /flows/import
ExecutionsGET /executions, GET /executions/{id}, GET /executions/{id}/logs
DeviceGET /device plus /battery, /network, /storage, /memory, /screen, /locale, /apps, /sensors
VariablesGET /variables, GET/PUT/DELETE /variables/{name}, POST /variables/{name}/reveal
WebhooksGET/POST /webhooks, GET/PATCH/DELETE /webhooks/{id}, plus the public trigger endpoint POST /api/v1/hooks/{path}
DiscoveryGET /discovery/mdns, /devices, /capabilities (mDNS service advertisement)
TLSGET /tls, certificate inspection / export / regeneration
WebSocketws://<device-ip>:8080/api/v1/ws for real-time execution events

Run a flow remotely

curl -X POST http://<device-ip>:8080/api/v1/flows/<flow-id>/execute \
  -H "X-Api-Key: fd_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{"input":{"reason":"manual run"},"sync":true}'

Inbound webhooks

Create a webhook bound to a flow, then trigger it from any external system. The webhook can require no auth, an API key, a bearer token, or an HMAC-SHA256 signature:

BODY='{"event":"deploy","status":"green"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "your-secret" -hex | sed 's/^.* //')
curl -X POST http://<device-ip>:8080/api/v1/hooks/my-webhook \
  -H "Content-Type: application/json" \
  -H "X-Signature: sha256=$SIG" \
  -d "$BODY"

Live, interactive reference

The server publishes its own always-current OpenAPI spec and Swagger UI on the device: GET /openapi.json and /openapi.yaml for the machine-readable spec, GET /docs for interactive Swagger UI, and GET /redoc for the ReDoc viewer. Because these are generated from the running server, they are the authoritative, version-matched reference for your specific build.

Plans & pricing

Flowroid has two tiers. Pricing is shown in the app and on Google Play, localised to your region.

Free

Everything you need to automate your device, free forever.

  • Unlimited flows
  • All standard triggers — notifications, schedules, sensors, connectivity, calendar, app foreground, Do Not Disturb, phone call, NFC, boot, battery, Bluetooth, step counter, and more
  • All standard actions — device control, file operations, app launch, system intents, notifications, audio / TTS, media control, vibrate, volume / ringer, flow control & logic
  • Basic HTTP requests
  • Global & flow variables
  • The full condition engine — all operators, nested AND / OR groups
  • Local, on-device execution — no cloud relay
  • The curated template library
  • Local import / export

Pro

Everything in Free, plus

The advanced surfaces.

  • Embedded HTTP API server — expose your flows as a secure REST API
  • Encrypted secret vault — store credentials and use them as {{secret.*}}
  • Geofence trigger — location-based automations (Google Geofencing)
  • Maps & advanced location
  • Inbound webhooks — trigger flows over HTTP
  • Priority support

Available monthly, yearly, or as a one-time lifetime purchase. Flows that use Pro features are paused, not deleted, if Pro access ends — so you never lose your work, and everything resumes when Pro is active again.

Privacy & security

  • On-device by default. Core automation runs entirely on your phone. No account requirement and no cloud relay for normal flow execution.
  • Sensitive data stays local. Notification titles and text are never written to Flowroid's logs. Secret variables are encrypted at rest with a hardware-backed key and masked throughout the UI.
  • The API server is opt-in, localhost-bound, and authenticated. Network exposure requires an explicit toggle; all protected routes require scoped credentials; CORS is closed by default.
  • Outbound requests are guarded. The HTTP action blocks server-side request forgery against loopback, link-local, and private address ranges by default.
  • No restricted permissions. Flowroid does not request SMS, call-log, or accessibility-service permissions.
  • Honest capability disclosures. Where Android or a manufacturer restricts a capability, the relevant template or action says so plainly in-app.

The full Privacy Policy details exactly what each permission accesses and where the data goes.

Troubleshooting & FAQ

My flows stop running when the screen is off, or after a while.

Exempt Flowroid from battery optimization, and on Xiaomi, Oppo, Vivo, OnePlus, Huawei, and Asus devices enable auto-start. See Keeping automations running.

My automations don't run after a reboot.

Make sure auto-start is enabled (especially on the manufacturers above) and that battery optimization is disabled. Flowroid resumes flows automatically once you unlock the device after boot.

Notification triggers stopped working after an update or reboot (Xiaomi / MIUI).

Some MIUI and HyperOS builds drop the notification-listener binding. Flowroid re-requests it automatically on boot and after updates; if a flow still doesn't fire, toggle notification access off and on for Flowroid in Android settings.

My Wi-Fi, airplane, or radio toggle action doesn't switch silently.

On Android 10+ Google restricts apps from changing these radios directly; the action may open a confirmation panel instead. This is an OS restriction, noted in-app on the affected templates.

My schedule fires a few minutes late.

Grant the “Schedule exact alarms” special access (Android 12+) and disable battery optimization for minute-accurate timing.

Can external apps control Flowroid?

Yes — enable the Pro API server. It's localhost-only and authenticated by default; turn on LAN access only when you need network reach. See The embedded HTTP API server.

Does Flowroid send SMS or read my texts or call log?

No. SMS and call-log capabilities are not part of Flowroid — these permissions were removed to comply with Google Play policy.

Where can I see why a flow did or did not run?

Open the flow's execution history — each run records its trigger, the actions executed, their outputs, and any errors with logs.

Still stuck? Reach the maker directly — Flowroid has no telemetry, so the detail you include is all support has to go on.

Back to top