Privacy Policy

Last updated August 12, 2026

Pennypoke is two surfaces sharing a brand: a Telegram bot that parses expense messages into your Google Sheet, and a splitter web app at pennypoke-app.pages.dev for shared expenses with friends. This page explains exactly what data touches our server on each surface, what we keep, and what we never see.

The short version. The bot is stateless: your receipts and messages exist only in memory for the few seconds we read them, and your extracted expenses live in your Google Sheet, not on our server. The splitter is account-based: it holds your email, a hashed session token, and the group/expense rows you and your group members create together. We never store IPs, user agents, geolocation, device fingerprints, analytics events, or an audit log. There is a self-serve JSON export of every byte we hold on you, and account deletion is reversible for 30 days then permanent.

01 What we process

When you send a text message to the bot or upload a receipt photo, our service:

  1. Parses the text (or sends the image to Anthropic's Claude Vision API) to extract amount, merchant, date, category, items.
  2. Sends the extracted data to your Google Sheet via the Google Sheets API.
  3. Frees the memory holding the message or image once the request completes.

We do not store your messages, receipts, or extracted data. The server is a Cloudflare Worker, a stateless compute environment with no disk, no filesystem, no persistent storage. Your input exists in memory for the few seconds it takes to process, then the process ends. This is architecturally enforced, not just a policy promise.

02 What we store on the Telegram bot side

For users of the Telegram bot, we store the minimum needed to operate the service:

That's it. No expense data, no receipt images, no financial information.

02a What we store on the splitter web app side

The splitter is account-based, so it does store the rows you and the people you split with create together. Specifically:

What we explicitly do NOT store on the splitter: IP addresses, user agents, geolocation, device fingerprints, analytics events, or an audit log of any kind. There is no "last login" or "last seen" field anywhere in the splitter database.

03 Sub-processors

Your data passes through these services during processing:

ServicePurposeWhat they receivePolicy
Anthropic (Claude Vision) Receipt photo OCR Receipt image (transient) Anthropic policy, API data not used for training
Google (Sheets API) Writing rows to your Sheet Extracted data Google policy
Telegram Bot messaging Your messages to the bot Telegram policy
Cloudflare Hosting (Workers, Pages, D1, KV) Request metadata, hashed account ID Cloudflare policy. EU SCCs in place for data outside the EEA.
Brevo (Sendinblue) Transactional email (splitter magic-link sign-in, group invitations) Recipient email address, message body Brevo policy. EU-hosted (Paris), GDPR-compliant by default; no transatlantic transfer for our use case.

International transfers to Cloudflare, Google, Anthropic, and Telegram rely on EU Standard Contractual Clauses plus the EU-US Data Privacy Framework where applicable.

Payment processing was retired in August 2026. Pennypoke previously sold optional paid tiers through Polar Software Inc. as Merchant of Record. Those tiers are withdrawn, there is no checkout, and no payment sub-processor receives your data any more. We never held card details at any point.

04 What we do not do

04a Recipient categories

The splitter is operated by a single named person (see Data Controller below). That person, in their role as system administrator, can technically read account rows and group rows in the database when responding to support requests, abuse reports, or legal demands. There is an admin allowlist of email addresses that gates an internal admin panel; only operators on that allowlist can see other users' accounts. We log nothing automatically; the only access trail is the operator's own memory and the server logs that Cloudflare retains for 7 days for operational purposes.

Members of a group you create or join can see your display name (chosen by you for that group), the expenses you mark yourself as having paid or owing on, and the settlements you record. Group members cannot see your email address through the app UI.

05 Your rights

Under GDPR, CCPA, and similar laws you have the right to:

To exercise any right, email [email protected].

05a Data controller

The data controller for Pennypoke is Povilas Konopackas, individual activity in the Republic of Lithuania, EU. Contact: [email protected]. This is also the address for any GDPR request, complaint, or right exercise. Pennypoke is free of charge and takes no payments, so there is no billing controller.

06 Data retention

07 Security

All data in transit is encrypted via TLS. Data at rest in D1 and KV is encrypted by Cloudflare. OAuth tokens for the bot are additionally encrypted before storage. Splitter session and magic-link tokens are stored as SHA-256 hashes; passwords (when set) use PBKDF2-HMAC-SHA256 with 600,000 iterations. Mutating endpoints require a valid Origin / Referer header from the splitter web app's known origin (CSRF). We follow OWASP guidelines for the web application.

08 Children

This service is not directed at children under 16. We do not knowingly process data from children.

09 Changes

If we change this policy in a way that affects your rights, we will notify you via the email on your Google account or a banner on the site, at least 30 days before the change takes effect.

10 Contact

For privacy questions, email [email protected].