Vikasa Studio

Speko Privacy Policy

Effective date: 6 October 2026 · Last updated: 6 October 2026

Speko is a personal finance tracker for iPhone. You log spending and income by speaking, by scanning a receipt, by typing, or by importing a statement file. This policy explains what Speko keeps on your phone, what it sends off your phone and to whom, what our servers keep, and the choices you have.

Summary


1. Who we are

Speko is published by Priyank Verma, trading as Vikasa Studio, K-0405, Tranquil at Brigade Cornerstone Utopia, Varthur, Bengaluru 560087, Karnataka, India ("Speko", "we", "us"). We decide how the personal data described here is processed (we are the "controller", and the "Data Fiduciary" under India's Digital Personal Data Protection Act, 2023). Contact: privacy@vikasa.studio.

This policy covers the Speko iOS app, its share extension, and Speko's server (the Worker described in section 3). It does not cover Apple's App Store, payment flow or iOS services, which Apple's own privacy policy governs, or apps you choose to open from Speko (for example a payment app).

2. What stays on your phone

The following is stored on your iPhone and is not sent to Speko's servers or providers except as section 3 describes:

Statement passwords for locked PDFs are used on your phone to open the file and are never sent. Spending figures such as totals, trends, forecasts and budget progress are calculated on your phone.

3. What leaves your phone, when, and to whom

All network requests use TLS encryption in transit. AI and voice requests to Speko's server carry a random app identifier (section 5), your plan (Free or Premium) and, for captures, your time-zone offset, which the server uses to apply usage limits (the free smart-capture allowance is counted per app identifier and does not reset; monthly limits reset each month). The server does not pass that identifier to OpenAI, ElevenLabs or Groq.

3.1 Voice capture (Cloud voice)

Speko does not use Apple's speech recognition; transcription happens in the cloud. Before voice is used, the iPhone's microphone permission prompt tells you that Speko's AI partners process your speech to log expenses and answer your questions, and you choose whether to allow it. After that, audio is sent only when you press and hold the talk button, every time (details below). The partners for voice are ElevenLabs and, as a fallback, Groq (transcription); the words then go to OpenAI (section 3.2). Speko shows no extra consent screen, and if we change a partner we update this policy rather than asking again in the app (section 16). To stop, turn Cloud voice off in Settings → Privacy Center, or turn off microphone access in iOS Settings → Speko; you can then type instead.

3.2 Capture text and the assistant (OpenAI)

3.3 Receipt and screenshot photos

An image is sent through Speko's server to OpenAI, whose GPT-6 Luna model reads the merchant, total, date and line items. The request includes your currency, today's date and your category names.

Speko's server does not keep the image; OpenAI may keep it for up to 30 days under its terms. If an image cannot be read, you can retry or type the entry. To stop, do not scan, pick or share images to Speko, or turn off camera access in iOS Settings → Speko.

3.4 Statement import (Premium)

When you import a bank or card statement, whether you choose the file in Speko or share it to Speko from another app, the app sends the file's contents and its file name through Speko's server to OpenAI to turn them into entries:

This includes anything printed on the statement, such as the account holder's name, address and account number. Speko's server reads the file to pass it on and does not keep it; OpenAI may keep the contents for up to 30 days under its terms. A password for a locked PDF is used only on your phone and is never sent. You review the rows before anything is saved. Speko never connects to your bank. Before you choose a file, the import screen says your statement is read by our AI partner, with a Privacy link. To stop, do not import statements.

3.5 Split invites (end-to-end encrypted)

Splitting a bill with someone is stored only on your phone. If you choose to share a split:

  1. Your phone creates the invite (your display name, the note, the total, the amount the other person owes, the currency and the date) and encrypts it with a new random key (XChaCha20-Poly1305).
  2. The encrypted invite is uploaded to Speko's server. The key is not uploaded: it is placed only in the part of the link after #, which apps and browsers do not send to servers.
  3. The server keeps the encrypted invite for at most 7 days and deletes it when the recipient's Speko app fetches it. We cannot read it. The server also counts invite requests per IP address and day to prevent abuse (section 4).
  4. You send the message with the iOS share sheet through the app you choose. It contains a speko:// link that opens Speko, a link to Speko's relay page on our Cloudflare Worker (a static page with no scripts that tells the reader to open the link in Speko), a link to Speko on the App Store, and a plain-text summary (your name, the note, the total and the amount owed) that the recipient can read without Speko. Anyone who has the complete link can open the invite.

If Speko's server cannot be reached, the encrypted invite is placed inside the link itself and nothing is uploaded. Speko never moves money. When you settle up, Speko can open the payment app you choose (for example a UPI app or PayPal) with the amount and note filled in, or share a payment request message you can review beforehand; Speko does not receive anything back from those apps.

3.6 Purchases (RevenueCat and Apple)

Payments are made through Apple; we do not receive your card or Apple Account details. We use RevenueCat to validate purchases and to know whether you have Premium. The app identifies itself to RevenueCat with the random app identifier (section 5), not your name or email. RevenueCat receives your App Store purchase and subscription records, plus technical information its SDK sends, such as your IP address, device model, operating system and app version, locale and App Store country. Speko's server asks RevenueCat whether that identifier has Premium before unlocking paid cloud features. RevenueCat's privacy policy states that it stores data on Amazon Web Services in the USA. Speko does not enable RevenueCat's Apple Search Ads attribution.

3.7 Exchange rates

To convert currencies, the app downloads the public daily exchange-rate table from open.er-api.com. The request contains no app data or identifier; the service receives your IP address, as with any web request. Rates are cached on your phone.

3.8 Connectivity check

While the app is open, it checks every 15 seconds whether the internet is reachable by sending a request with no content to Google's generate_204 address. Google receives your IP address, as with any web request; no app data or identifier is sent.

3.9 Things you share yourself

4. What Speko's servers keep

Speko's server is a Cloudflare Worker. It keeps per-device counters in a per-device store (a Cloudflare Durable Object) and per-IP and global counters in a key-value store. It keeps no request content (text, audio or images) and no names, emails or phone numbers. Its log lines record only operational events (for example which transcription provider answered, how long it took, or an error type), not content or identifiers. Everything it stores is listed here:

Record Keyed by Kept for
Monthly usage counters (assistant questions, captures, Premium smart captures, statement imports) App identifier + month Deleted automatically after ~62 days
Free-plan daily capture counter and capture-meter bookkeeping (your local calendar day, holds) App identifier + day Deleted automatically after 2–3 days
Abuse-prevention request counters (AI requests and split invites) IP address + day, or global Deleted automatically after ~2 days
Premium status (verified with RevenueCat) App identifier 1 hour
Mark that a shared file was already counted against your limits App identifier + random file ID 24 hours
Mark that a failed, silent or discarded capture was already refunded, and the daily refund budget App identifier + random capture ID, or day 2 days
Encrypted split invite (section 3.5) Random invite ID Until fetched, and at most 7 days

Short per-minute request limits (30 a minute per app identifier, 120 a minute per IP address) are enforced by Cloudflare's rate-limiting service and are not stored by Speko.

Cloudflare, which hosts the Worker, processes the network traffic (including your IP address) to deliver it, under its own terms. Cloudflare runs a global network, so a request may be handled in a data centre outside your country.

What "we don't store what you spend" means: Speko's servers keep no readable copy of your entries, receipts, statements or questions. The providers in section 7 receive the content of the cloud requests you make and may retain it under their own terms.

5. The app identifier

Speko creates a random identifier (a UUID) once and stores it in the iOS Keychain on your phone. Unlike the database key, it is not limited to "this device only", so iOS may keep it after you delete the app and may include it in your encrypted iPhone backups. It is not derived from your device, your Apple Account or Apple's advertising identifier. We use it only to apply usage limits and to match your purchases in RevenueCat. It is a pseudonymous identifier, not an anonymous one: our usage counters and RevenueCat's purchase records are tied to it. Resetting your data in Settings does not change it. Speko has no accounts or passwords and does not ask for your name, email or phone number. Speko does not use the advertising identifier (IDFA) and does not show an App Tracking Transparency prompt, because it does not track you.

6. What we do not do

7. Service providers

Provider Purpose What it receives Retention and location, as the provider states
Cloudflare Hosts Speko's server (the Worker) and its key-value store All requests to Speko's server, including your IP address; stores only the records in section 4 Under Cloudflare's terms; global network
ElevenLabs Voice transcription (Scribe v2 Realtime; Scribe v2 as fallback) Voice audio and the recognition hints in section 3.1; no app identifier Its default retention applies (Speko does not use its Enterprise-only zero-retention option). Its privacy policy states personal data is transferred to the United States for storage
Groq Fallback voice transcription (Whisper large-v3) A voice clip and recognition hints, only when ElevenLabs fails; no app identifier Its documentation states it does not retain inference data by default, but may keep it for up to 30 days to troubleshoot errors or investigate suspected abuse, stored in the United States
OpenAI Structuring entries, the assistant, reading receipts and statements (GPT-6 Luna) The text, figures, photos, statement contents and file names in sections 3.2–3.4; no app identifier Its API terms state no training on API data and retention of up to 30 days to provide the service and detect abuse; requests are routed across its global infrastructure, including the United States
RevenueCat Validating purchases and Premium status The app identifier, your App Store purchase records, and SDK technical data such as IP address, device model, OS and app version, and locale Under RevenueCat's terms; its privacy policy states data is stored on AWS in the USA
Apple App Store, payments, iOS services (Keychain, Face ID/Touch ID, notifications) What Apple's services require; Face ID/Touch ID data never reaches Speko Apple's privacy policy
open.er-api.com Public exchange rates Your IP address only Under its terms
Google Connectivity check Your IP address only Under Google's terms

We do not control these providers' own policies; please review them. We will update this list before adding a provider that receives personal data.

AI partners by kind of data

The app calls the AI providers "our AI partners". This is who receives each kind of data, how long they may keep it, and how to stop sending it:

Data you send AI partner How long the partner may keep it, as it states How to stop
Voice recordings and recognition hints (section 3.1) ElevenLabs (Scribe v2); Groq (Whisper large-v3) only if ElevenLabs fails ElevenLabs: under its privacy policy, at most 3 years after your last interaction for data it generates about a voice (Speko does not use its Enterprise-only zero retention). Groq: none by default; up to 30 days to troubleshoot errors or investigate abuse Turn Cloud voice off, or turn off microphone access in iOS Settings → Speko
Words you speak or type into capture, with the capture context (section 3.2) OpenAI (GPT-6 Luna) Up to 30 days to provide the service and detect abuse; not used for training Type an entry straight into its fields, or log while offline
Questions to the assistant, the spending figures and recent turns sent with them (section 3.2) OpenAI (GPT-6 Luna) Up to 30 days; not used for training Do not use Ask or the AI tab
Receipt photos and screenshots (section 3.3) OpenAI (GPT-6 Luna) Up to 30 days; not used for training Do not scan, pick or share images to Speko; turn off camera access in iOS Settings → Speko
Statement files and their file names (section 3.4) OpenAI (GPT-6 Luna) Up to 30 days; not used for training Do not import statements
Up to 3 contact names that sound like a name you said (sections 3.2 and 9) OpenAI (GPT-6 Luna) Up to 30 days; not used for training Turn Match with Contacts off, or turn off Contacts access in iOS Settings → Speko

Speko's server keeps none of this content (section 4). To delete what is on your phone, see section 11. Copies a partner keeps are deleted on its own schedule; because Speko sends partners no app identifier, we may be unable to identify a particular request there.

8. Why we process personal data

Where a law requires a legal basis (for example the EU/UK GDPR):

9. Permissions Speko asks for

10. Retention

11. Your rights and choices

In the app

Requests to us

For data held by our server or processors, contact privacy@vikasa.studio. Please note: because Speko has no accounts, our records are tied only to the random app identifier or to an IP address, and we may be unable to find records that belong to you; they are deleted automatically within the periods in section 4. We do not hold a copy of your ledger, so requests about your ledger are carried out on your phone with the tools above. We will not discriminate against you for exercising your rights.

Depending on where you live, you may have the right to access, correct, delete or port your personal data; to restrict or object to processing; to withdraw consent; and to complain to your data protection authority.

12. India: Digital Personal Data Protection Act, 2023

13. Children

Speko is a personal finance app for adults and is not directed to anyone under 18. We do not knowingly process personal data of anyone under 18. (In India, a "child" is anyone under 18, and processing their data requires verifiable parental consent; Speko does not seek it.) If you believe someone under 18 has used Speko's cloud features, contact us.

14. International transfers

Speko's server runs on Cloudflare's global network. Our providers process data in other countries, including the United States (OpenAI, ElevenLabs, Groq, RevenueCat), which may not offer the same level of protection as your country. Where the law requires a safeguard for these transfers, we rely on the European Commission's Standard Contractual Clauses, which are built into the data processing terms of OpenAI, ElevenLabs and Cloudflare.

15. Security

No system is perfectly secure. If a breach affects your personal data, we will notify you and the authorities as the law requires.

16. Changes to this policy

We will update this policy, and its "Last updated" date, before changing how Speko handles data, including before a new AI partner receives your data. The app links to this page beside the Ask field, in the Scan or import and statement import screens, and in Settings → Privacy Center. For other material changes, such as a new kind of data leaving your phone, we will also show a notice in the app before the change takes effect. The current version is published at https://vikasa.studio/speko/privacy.

17. Contact

Questions, requests and grievances: privacy@vikasa.studio · Priyank Verma (grievance officer), Vikasa Studio, K-0405, Tranquil at Brigade Cornerstone Utopia, Varthur, Bengaluru 560087, Karnataka, India.