← Back to Home

Privacy Policy

Last updated: November 4, 2026

Overview

VoiceScroll is a teleprompter app that listens as you read and scrolls your script to match. It has no accounts and no servers of its own, so there is nowhere for us to store your data. This policy describes what stays on your device and what Apple, Google, our diagnostics provider, and Vercel, which hosts our website, receive.

iOS, Android, Mac and Windows Differences

The iOS, Android and Mac apps behave the same way in most respects; the Windows app, which is still in preparation, differs more. The differences that affect your privacy are:

  • Speech recognition: by default, iOS recognises on your device, and on Android VoiceScroll asks for on-device recognition. Both apps have an online recognition setting. If you turn it on, your audio is sent for recognition, but only for languages your device can't recognise offline: to Apple on iOS, and to Google on Android.
  • Analytics: both apps include Firebase Analytics. The Android app also collects the device's advertising ID; the iOS app uses a build of the SDK that cannot read it. The iOS app additionally reports anonymous install and purchase conversion values to Apple's SKAdNetwork for advertising measurement.
  • Purchases: Apple's App Store on iOS, Google Play on Android.
  • Backup: on Android, your scripts may be included in the system backup or a device-to-device transfer.
  • Mac: the Mac app, for Macs with Apple silicon, is the same App Store app as the iOS app. Speech recognition works as on iOS. It sends fewer analytics events than the iOS app, without advertising-ID support or SKAdNetwork, and its error reports carry no installation identifier. It can also record your screen, and it saves videos to a folder on your Mac rather than to Photos. It has Script AI, as described above.
  • Windows: the Windows app, which is still in preparation and not yet released, has no speech recognition; the script scrolls at a speed you set. On first launch it asks whether to send usage statistics and error reports, and sends them only if you choose Send. Usage statistics go directly to Google Analytics rather than through Firebase, without an advertising ID. Its error reports carry no device model or installation identifier. It has no purchases yet. It can also record your screen, and it saves videos to a folder on your PC.

Data Collection

We have no server of our own. Apart from downloading caption fonts from our website, described under Third-Party Services, the app sends nothing to us. Some data is handled by Apple, Google, our diagnostics provider, and Vercel, which hosts our website, as follows:

  • Your scripts are stored on your device. We never receive them. On Android they may be included in Android's system cloud backup or a device-to-device transfer, so they can return when you reinstall or change device. A cloud backup is stored in your own Google account and encrypted in transit and at rest; on Android 9 or later, when backup is on and a screen lock is set, it is end-to-end encrypted with a key neither we nor Google can use. Script AI, in the iOS app on a device with iOS or iPadOS 27 or later and in the Mac app on macOS 27 or later, with Apple Intelligence, can make a script easier to read aloud or change it as you ask. It sends your script and any request you typed to Apple's servers (Private Cloud Compute) only when you ask it to: when you tap or click Polish or send a request, or try again after that. Apple's servers send the answer back to your device. Opening Script AI sends nothing. The feature has no setting of its own to turn on or off. Apple states that data processed on Private Cloud Compute is not stored and is used only to fulfil your request. Apple says it may also collect limited information about a request, such as its approximate size and how long it takes, but not its content. We do not receive your script, your request or the answer. Script AI exists only in the iOS and Mac apps.
  • Script links: a VoiceScroll script link (www.voice-scroll.com/s) carries the script after the “#” in the address. Browsers don't send that part of an address to any server, so we and Vercel don't receive the script. When the link opens in a browser, the page decodes the script inside that browser and loads no analytics or third-party scripts. As with any web page, Vercel receives the browser's IP address and the page's address up to the “#”.
  • On iOS, recognition uses Apple's Speech framework and, by default, runs entirely on your device. If you turn on online recognition, a language whose recognition model isn't on your device is recognised by Apple's servers instead. Your audio is then sent to Apple, together with any words in your script identified as another language (used as recognition hints), and handled under Apple's privacy policy. Languages whose model is on your device stay on it. On Android it uses the recognition service installed on your phone — usually Google's, though it may be another provider you have installed. VoiceScroll asks that service to recognise speech on your device and does not switch to server-based recognition by itself. If your phone can't recognise your language offline, the app tells you. Online recognition is off by default. If you turn it on and read in such a language, your audio is sent to Google for recognition and handled under Google's privacy policy. The app's voice settings show which languages work offline.
  • We never receive your audio. Videos you record include their sound and stay on your device; VoiceScroll does not retain a separate audio file after a recording is processed.
  • Video recording is optional. Recordings are saved on your device, and to your photo gallery only if you choose. They are never transmitted to us.
  • On Mac, a recording can include your Mac's camera and, if you choose, one whole display, recorded separately. Screen recordings do not capture sound playing on your Mac; the sound in your videos comes from the microphone. Takes you have not saved stay in the app's own storage on your Mac and are deleted after the period set in the app (by default 7 days, up to 3 per script). Saved videos go to the VoiceScroll folder in Movies or to a folder you choose, never to Photos. Recordings are never transmitted to us.
  • On Windows, a recording can include your PC's camera and, if you choose, one whole display, recorded separately. Screen recordings do not capture sound playing on your PC; the sound in your videos comes from the microphone. Takes you have not saved stay in the app's own folder on your PC and are deleted after the period set in the app (by default 7 days, up to 3 per script). Saved videos go to the VoiceScroll folder in Videos or to a folder you choose. Recordings are never transmitted to us.
  • The iOS, Android and Mac apps include Firebase Analytics, a Google service we use to measure app usage and our advertising campaigns. No audio and no script text is included. On Android, each time you tap Start for one of your own scripts, it records the script's language, its length as a number of characters and words and as a coarse range, whether the free length limit applied, and whether speech recognition has worked on your device before. It also records, once each, the first such start and the first time speech recognition moves one of your scripts. When a reading session begins, it records the script's language and whether you are reading the app's sample script unedited. When the session ends, it records the language, whether the script followed your voice or scrolled at a speed you set, whether speech recognition ran on your device or online, whether you used the floating window, whether automatic scrolling for when the microphone is lost was switched on and whether the microphone was actually lost, how many times automatic scrolling took over while you were reading by voice, as a range, and coarse ranges for how long you read and for how your speaking pace compared with a reference pace. The first time automatic scrolling takes over during voice reading in a session, it records why (such as the microphone being lost or recognition stalling), roughly how far into the script you had got, the reading-speed setting and what that speed was based on, and coarse ranges for the speed and the estimated words per minute. For speech recognition, it records whether recognition could be used for the script's language when you started and, if it could not or if it stopped, why; which speech recognition services on your device were checked and how each responded; whether the script's language matches your device's language; and, when recognition stops hearing you, why, a coarse range for how long that lasted and whether it recovered. Services the app knows are recorded by a short label, and others by their package and service name; it also records how many services could be used and which one came first. If speech recognition cannot start or restart, the record can include the error message Android gave for that failure, shortened to fit a 100-character limit. Once per recording, it records coarse ranges describing that recording: how loud the microphone input was, how much the app reduced it and how often, which gain setting was in use, roughly how long it lasted, and whether the microphone was the built-in one, another one, or changed part-way. For the first three times the app opens the microphone in a reading session, it records, when each capture ends, the type of input (such as built-in, Bluetooth, wired or USB), the input the app preferred and whether they matched, whether the input changed, the audio source setting, whether sound came in, and coarse ranges for the longest silence and the capture length. When a recording finishes, it records how writing its audio and video ended, together with the exact sample rate, bit rate and audio encoder name. When you save a video or share a caption file, it records whether the original or an edited video was saved, whether captions and trimmed silences were applied, whether caption timing and rendering succeeded and, if timing failed, a general reason, the caption appearance and font type, whether you shared a caption file or cancelled, the script's language used for caption timing, and a coarse range for the video's length. It records completed purchases with the price, currency, product and Google Play order number, the plan you bought, or the plans you switched from and to and whether the switch applies now or at the next renewal, and it keeps your current plan (free, yearly, monthly, or lifetime) as a property of your installation. After a new installation, it records each step of the welcome screens you see and how you left them: by practising with the sample, starting with your own script, or skipping.
  • On iOS Firebase Analytics records, once per reading session, the language detected in your script together with coarse ranges and yes/no flags describing that session: whether you were only reading, recording in the app, or using the floating window, whether you were reading the app's sample script unedited, whether the script followed your voice or scrolled at a speed you set, the screen orientation, whether automatic scrolling for when the microphone is lost was switched on, whether another app took the microphone, whether the conditions for automatic scrolling were met, whether the script actually moved, how many times it started, roughly how long you read for, and — when the app has a reference pace for that script — a coarse range for how your reading pace compared with it. When the script scrolls on its own it also records what kind of interruption took the microphone, how far into the script you had got at that moment, the reading-speed setting and speed range in use, what that speed was based on, and a coarse range for the estimated words per minute. Each time you try to start reading one of your scripts, it records the script's language, its length as a number of characters and words and as a coarse range, whether the free length limit applied, and whether speech recognition has worked on your device before; the text itself is never included. It records whether speech recognition was ready and started when a session began, together with the script's language and, if it was not, a general reason such as a missing permission or an unsupported language. It also records the first time speech recognition moves one of your scripts on your device. After a new installation, it records each step of the welcome screens you see and how you left them: by practising with the sample, starting with your own script, or skipping. When you record in the app, it records whether the camera started and how its starting orientation was chosen, each camera switch together with whether you were recording and the screen orientation, and, once per recording, the same kind of coarse ranges about the microphone input described for Android above. When you save a recording, it records whether it was saved as recorded or with captions or trimmed silences, how the caption timings were produced, the caption style, whether saving finished, and a coarse range for the video's length. When you use Script AI, it records whether you used Polish or your own request, whether the request was sent, applied, discarded, stopped or failed, a general reason if it failed (such as the daily limit or a network problem), and the script's language; your script and request are never included. When you buy VoiceScroll Pro in the app, it records which plan you chose — yearly, monthly, or lifetime. It also keeps your current plan (free, yearly, monthly, or lifetime) as a property of your installation, and Firebase may record the purchase itself automatically, including the product, its price, and the currency. Firebase also assigns each installation an identifier and records general information such as device model, OS version, and approximate region derived from your IP address. On Android it collects the device's advertising ID where one is available, while the iOS app uses a build of the SDK without advertising-ID support. This data is pseudonymous rather than anonymous. On iOS, Apple's SKAdNetwork separately receives anonymous conversion values for installs and purchases.
  • On Mac, Firebase Analytics records the same reading-session, script-start, speech-recognition, Script AI and purchase information described for iOS above, including your current plan. It sends no separate camera, recording or saving events; the reading-session information includes whether you chose to record in the app. Firebase also assigns each installation an identifier and records the general device information described above. The Mac app does not collect an advertising ID and does not report to SKAdNetwork. The Mac app lets you turn off both usage statistics and error reports at any time with Send Usage Statistics and Error Reports in Settings > General; it is on until you turn it off. When you turn it off, Firebase stops collecting usage statistics, deletes those not yet sent and creates a new installation identifier, and the app stops sending error reports to Sentry. Error reports collected before you turned it off and not yet sent may still be sent. No audio, script text or screen content is ever included.
  • On first launch, the Windows app asks whether to send usage statistics and error reports. Until you answer, and while you have chosen Don't Send, it sends nothing to Google Analytics or Sentry. You can change this at any time with Send Usage Statistics and Error Reports in Settings > General. When you turn it off, the app stops creating usage statistics and error reports, deletes those saved on your PC and not yet sent, and creates a new installation identifier; error reports already handed to Sentry for sending before you turned it off may still be sent. If you choose Send, the app sends usage statistics directly to Google Analytics, without Firebase. Each time you try to start reading a script other than the sample script, it records the script's language, the script length as a number of characters and words and as a rough range, and whether the free length limit applied; the first such attempt on an installation is also recorded once as a separate event. When a reading starts and ends, it records the script's language, along with whether you chose to record in the app at the start, and the approximate reading time and a rough range for the fastest scrolling speed you used at the end. With these it sends a random installation identifier created by the app, a session identifier, the app version, the Windows version, the app's display language, and the Country or region setting in Windows. It does not send your device model or an advertising ID, and it sends signals declining the use of the data for ads and ad personalization. Google receives your PC's IP address with each request. No script text, file paths, video or audio are ever included. This data is pseudonymous, not anonymous.
  • No account creation is required.

Permissions

VoiceScroll requests the following permissions:

  • Microphone: Required for real-time speech recognition to detect your voice and scroll the script accordingly.
  • Speech Recognition: Required for converting your speech to text so it can be matched against your script. Where that conversion happens is described under Data Collection.
  • Camera: Optional. Used only to record video while you read your script.
  • Photos: Optional. Used only to save recorded videos to your photo gallery when you choose to.
  • Screen Recording (Mac only): Optional. Used only when you choose to record a display. macOS lists it as Screen & System Audio Recording, but VoiceScroll does not record your Mac's audio.
  • Files and Folders (Mac only): Optional. Used only when you choose a folder other than Movies for saved videos.
  • Camera and Microphone (Windows): The Windows app uses the camera and microphone only when you choose to record in the app, including the camera preview before recording starts. The microphone is used only to record the sound of your video; the Windows app does not ask for speech recognition access.

These permissions are used solely for the app's own functionality. The Android app additionally declares the advertising-ID permission, used only for the campaign measurement described above.

In-App Purchases

VoiceScroll offers VoiceScroll Pro, which removes the script length limit. From version 2.0 it is available on iOS and Android as a yearly or monthly subscription that renews automatically, or as a one-time purchase. On Mac it is the same purchase as on iOS, so Pro bought on an iPhone or iPad with the same Apple Account also unlocks the Mac app. Transactions are handled entirely by Apple's App Store on iOS and Mac and by Google Play on Android. We do not have access to your payment information. On iOS, Android and Mac purchases are also recorded in Firebase Analytics, as described above.

Third-Party Services

VoiceScroll uses Sentry (sentry.io) on iOS and Android to receive diagnostics — crashes, and a small number of handled errors such as a failed purchase. These reports include your device model, OS version, and an installation identifier; they do not include your scripts. The Mac app also uses Sentry, for crashes, app freezes and a few handled errors (a reading session that fails to start, a failed purchase, or a recording that can't be written); its reports include your Mac's model, macOS version and app version, which part of the app was on screen, whether the app was in front, how many displays are connected, and a short trail of recent screen changes and of sleep and wake, but no installation identifier and no scripts. The Windows app, which is still in preparation and not yet released, sends diagnostics to Sentry only if you choose Send: crashes and other errors the app could not handle, and two handled errors (a reading session that fails to start, or a recording that can't be written). Its reports include runtime details such as the Windows version, the app version, and your language and time zone settings, but no device model, device name, installation identifier or scripts. The iOS, Android and Mac apps also use Firebase Analytics. The Android app additionally uses Google Play Billing and relies on Google Play services for in-app updates and the review prompt; the iOS app checks Apple's App Store for new versions. For scripts in Arabic, Hebrew, Thai, or Hindi, some caption fonts are not built into the app: the app downloads each one the first time it is needed on your device, from our website (voice-scroll.com), which is hosted by Vercel. As with any download, Vercel receives your device's IP address with the request; your scripts and audio are never sent. The Mac app connects only to Apple, Firebase and Sentry: the Mac App Store handles its updates, and it does not download caption fonts. The Windows app connects only to Google Analytics and Sentry, and to neither of them unless you choose Send; it does not download caption fonts either. Speech recognition is provided by your device's own recognition service or, if you turn on online recognition, by Apple on iOS and Mac and by Google on Android, as described above. Script AI in the iOS and Mac apps is provided by Apple, as described above. We do not display ads in the app and we do not sell your data. We do advertise VoiceScroll, and the measurement data above is used to see which campaigns work.

Changes to This Policy

We may update this privacy policy from time to time. Any changes will be posted on this page with an updated revision date.

Contact

If you have any questions about this privacy policy, please contact us at tony@voice-scroll.com