Privacy policy
Version of 2026-09-17
This page explains what data Keepslot stores, why, for how long and who else touches it. Written for trainers and for their clients. Questions: info@keepslot.app.
Contents
1. Who we are
Keepslot is operated by PAVEL BELOV, a sole trader registered in Portugal, tax number (NIF) 324091443, RUA MONSENHOR FERREIRA NÚMERO 299/305 1 DRT, 4710-407 BRAGA, PORTUGAL. Email for privacy matters: info@keepslot.app. We are a small company and have not appointed a data protection officer (DPO); the contact above answers everything.
We wear two hats:
- For the trainer's data (account, billing, website use) we are the controller.
- For the text-message programme we are the controller: consent is given to Keepslot, the phone numbers that send are owned by Keepslot, the messages are Keepslot's own, and we alone keep the consent, STOP and delivery records.
- For the rest of the trainer's client data (names, bookings, balances) the trainer is the controller; we process that data on the trainer's behalf, as a processor, under the DPA.
Are you a client with questions about the text messages — consent, STOP, or what we hold? Write to us at info@keepslot.app. For questions about your bookings or payments with your trainer, your trainer answers; we help either way.
2. What we store and why
Model use: when you ask the assistant to read a screenshot of a client's texts, to transcribe a photo of a schedule, or for exercise alternatives, the picture, your client names and your own words go to our model provider (OpenAI) to work out the request. Under OpenAI's API terms this data is not used to train its models unless the customer opts in; Keepslot does not opt in. OpenAI keeps API requests for up to 30 days for abuse monitoring, longer only where the law requires it or to protect against harm. Exercise alternatives never carry a client's name.
Trainer data:
Swipe sideways to see more →
| Data | Why | Legal basis |
|---|---|---|
| Name, phone, email, language, time zone, working hours | Create and run your account, contact you | Contract |
| Dedicated Keepslot SMS number and messaging-provider identifiers | Send and receive operational texts for your account | Contract |
| Text of the commands you send us («Ana 10 sessions») | Turn the command into a draft you approve | Contract |
| Trainer command audio and transcript, if the feature is enabled | Convert voice to text for the same processing as written commands; Keepslot does not store the audio file | Contract (optional feature) |
| Busy/free times from Google Calendar and bookings in the separate «Keepslot» calendar (only if you connect it) | Avoid conflicts and keep Keepslot bookings in your calendar | Contract (optional connection) |
| Subscription status and invoices (Stripe holds the card, we do not) | Charge you, issue invoices | Contract; legal obligation (tax) |
| Technical logs (timestamps, errors, deliveries) | Keep the service running and fix problems | Legitimate interest |
Data of the trainer's clients (processed on the trainer's behalf):
Swipe sideways to see more →
| Data | Why |
|---|---|
| Name, phone, language | Know whom to remind and in which language |
| Bookings, recurring series, pauses | Remind, confirm, reschedule |
| Packages: bought, used, restored, expired | Count what is left |
| Debts and partial payments (amounts only, never card data) | Show the trainer what is outstanding |
| Separate payer: name, phone, language and linked family/individual account | Send financial information to the right person, never by assumption |
| Consents: date of the «yes» to reminders, slot offers and financial messages; date of «STOP» | Prove the person agreed and honour «STOP» |
| Messages sent and received by Keepslot | Record of what was said and when |
| Legacy WhatsApp messages, only for accounts that still have that channel enabled | Deliver the legacy service without mixing it into the SMS channel |
| Trainer's notes: «what we did / what to do next» | Training memory. A note can contain a short physical limitation the client agreed to share, such as «left knee sore, no lunges» — only what the session needs, never diagnoses, medication or medical records |
| Contact number of a parent/guardian if the client is a minor | Messages go to the responsible adult |
| Public Trial Link request: first name, email, requested time or broad availability, optional goal, referral source and optional mobile number | Verify and route a first-session request, prevent duplicate or abusive submissions, let the trainer decide, and create a client and booking only after acceptance |
Website visitors: statistics are aggregated (pages viewed, country), with no cookies and nobody identified. If you submit an application, support request or public Trial Link request, we process the fields shown on that form and minimum technical submission data only to deliver the requested flow and prevent abuse — see «Cookies».
3. Legal bases
- Contract (art. 6(1)(b) GDPR): everything needed to provide the service to the trainer.
- Legal obligation (art. 6(1)(c)): keeping invoices for as long as tax law requires.
- Legitimate interest (art. 6(1)(f)): technical logs, security and abuse prevention.
- Consent (art. 6(1)(a)): recurring operational SMS, including reminders, available openings, package and payment updates, are sent only after an explicit opt-in that can be withdrawn at any time by replying «STOP».
We make no automated decisions with legal effects on anyone, build no profiles and never sell data.
4. Who else touches the data (sub-processors)
The providers below are used according to enabled features and connections. The integration in preparation is identified separately. Before a provider receives live data, we verify the applicable data processing agreement, region and transfer safeguards, including standard contractual clauses or, where applicable, the EU-US Data Privacy Framework. This list does not mean every provider receives data from every account.
Swipe sideways to see more →
| Provider | Role | What data | Region |
|---|---|---|---|
| Supabase | Database | Everything listed above | EU — Frankfurt, Germany |
| Vercel | Application hosting | Data in transit while handling requests | Functions in the EU (Frankfurt); company in the USA |
| Twilio | US SMS delivery for enabled workspaces | Phone numbers, operational message content, consent keywords and delivery status | Processing and transfers under the applicable Twilio agreement and account configuration |
| YCloud | Legacy WhatsApp Business API connection | Phone numbers, messages, delivery statuses for legacy accounts | As specified by the applicable YCloud DPA and account configuration |
| Alibaba Cloud — Chat App Message Service (in preparation) | Alternative legacy WhatsApp Business API connection, not enabled | If enabled: phone numbers, WABA identifiers, messages and delivery statuses for the connected channel | Region and transfers to be confirmed before activation |
| Meta (WhatsApp) | Legacy messaging network | Numbers, messages and metadata for legacy WhatsApp accounts | Meta Platforms Ireland (EU); transfers to the USA under the DPF |
| Stripe | Trainer payments | Name, email, card data (only Stripe sees it) | Stripe Payments Europe, Ireland |
| Calendar (only if the trainer connects it) | Busy/free intervals | Google Ireland; USA under the DPF | |
| Anthropic (Claude) | Interpreting trainer commands, if enabled | Redacted text of commands and notes typed in the assistant, and language; known client names are replaced with placeholders before sending. A note can contain a short physical limitation the client agreed to share, such as «left knee sore». Client conversations are not automatically sent | USA; not used for training; inputs and outputs deleted within 30 days, kept up to 2 years only if flagged as a Usage Policy violation or longer where the law requires it |
| OpenAI (GPT and transcription) | Interpreting commands, transcribing trainer voice notes, reading screenshots and suggesting exercise alternatives, if enabled | For commands and notes typed in the assistant: redacted text and language; known client names are replaced with placeholders, and a note can contain a short physical limitation the client agreed to share, such as «left knee sore». For transcription: audio sent by the trainer. For screenshots: the picture, client names and the trainer's note | International processing; not used for training; requests kept up to 30 days for abuse monitoring, longer only where the law requires it or to protect against harm |
| Plausible | Website statistics, no cookies | Aggregated data, no IP stored | EU |
| Resend | Delivering applications and support requests by email | Name, contact details, profession, message and delivery metadata | Data and logs in the USA; transfers under SCCs and the DPF |
| Cloudflare Turnstile | Protecting public forms against abuse | Technical browser and network signals; it does not receive form-field contents | Global network; transfers under SCCs and the DPF |
Twilio receives live client data only for an enabled SMS workspace after the required messaging registration, sender number and production setup are complete. YCloud remains listed only for existing legacy WhatsApp connections. The Alibaba Cloud integration is in preparation and is not active. Each account uses only its enabled provider connection.
When AI interpretation is enabled, the trainer's commands, including notes typed in the assistant, and language may be sent to Anthropic or OpenAI, depending on the configuration. Keepslot replaces known client names with placeholders first and does not send the workspace's client list. A note can contain a short physical limitation the trainer writes with the client's agreement, such as «left knee sore, no lunges»: only what the session needs, never diagnoses, medication or medical records. If transcription is enabled, trainer audio is sent to OpenAI; the transcript follows the same processing as written commands. Messages and audio sent by clients themselves are not automatically sent to these AI services.
Under each provider's API terms, this data is not used to train its models unless the customer opts in; Keepslot does not opt in. OpenAI keeps API requests for up to 30 days for abuse monitoring, longer only where the law requires it or to protect against harm. Anthropic deletes API inputs and outputs within 30 days; a request its automated safety systems flag as a Usage Policy violation may be kept for up to 2 years, and either provider may keep data longer where the law requires it.
If we change or add a provider, we update this table and notify trainers 30 days in advance (see DPA).
5. For how long
Swipe sideways to see more →
| What | Period |
|---|---|
| A trainer's client, after «delete» or the person's own request | 30 days, then permanently erased |
| Trainer account, after cancellation | 30 days, then permanently erased (clients included) |
| Technical logs | 90 days |
| Invoices and payment records | As long as Portuguese tax law requires (currently 10 years) |
| Google Calendar access | Only while connected; on disconnect we delete the token. The «Keepslot» calendar and events already created remain in your Google account until you delete them |
| Applications and support requests submitted on the website | No copy is stored in our database. The message delivered to the inbox is deleted after the period shown on the form, unless there is a commercial relationship or legal duty |
| Public Trial Link request | While the request is open. If accepted, it becomes part of the trainer's client and booking record; if declined, expired or withdrawn, it is deleted after 90 days |
| Production backups | No live data is accepted until backup, restore and deletion policies are configured and tested |
6. Your rights
At any time you can ask to:
- Access your data and know what we hold.
- Correct anything that is wrong.
- Erase («be forgotten»), except what the law obliges us to keep.
- Receive your data in a file to take elsewhere (portability).
- Object to processing based on legitimate interest — for example, say «STOP» to receive no more messages.
- Restrict processing while a question is being resolved.
- Withdraw a consent, without affecting what was done before.
How: email info@keepslot.app (trainers and clients), or reply «STOP» to an operational SMS. We answer within 30 days at most. If you are a trainer's client we may ask the trainer to confirm the request, because the trainer is the controller.
If you believe we handled your data badly, you can complain to the authority in your country: Portugal — CNPD (cnpd.pt); Spain — AEPD (aepd.es); United Kingdom — ICO (ico.org.uk). We would rather solve it with you first.
8. Google Calendar
If you connect Google Calendar, we use two separate, limited permissions. On your other calendars we query only «busy/free» and never read event titles, descriptions or guests. Keepslot creates a separate calendar named «Keepslot» and only creates, updates or deletes its own bookings there. An event contains only the client's name, date, time and duration — never a phone number, notes, payments or a client invitation.
If you move, resize or delete one of those events in Google, Keepslot shows a question under «Needs you». The booking, package and client messages change only after you confirm. You can disconnect on the «Today» page or at myaccount.google.com/permissions; we delete the access token. The «Keepslot» calendar and events already created remain in your Google account until you delete them.
Keepslot's use and transfer to any other app of information received from Google APIs will adhere to Google API Services User Data Policy, including the Limited Use requirements.
9. SMS and legacy WhatsApp
The US service uses a dedicated Keepslot number for operational SMS through Twilio. A workspace is enabled only after the required messaging registration, sender number, webhooks and live tests are complete.
Keepslot does not send a text asking for permission. Before any recurring SMS, the client opts in by sending the prepared START keyword from a trainer-specific QR code, by using a private invitation page with an unchecked consent box, or by separately selecting the unchecked SMS box on a coach's public Trial Link. A Trial Link request works by email without SMS. The disclosure covers reminders, available openings, package balances and payment updates. Keepslot records the date, source, disclosure version, phone and provider evidence.
Operational texts identify Keepslot and the trainer, explain their purpose and provide STOP. Message frequency varies. Message and data rates may apply. Marketing requires separate consent and is not part of the service.
The messaging provider and mobile carriers process the phone number, message content, timestamps and delivery status needed to deliver the SMS. Keepslot records consent, STOP and delivery outcomes.
Mobile information is not sold or shared with third parties or affiliates for marketing or promotional purposes. Text-message opt-in data and consent are not shared with third parties for their marketing.
Legacy WhatsApp code remains available only for accounts that already use that channel. Those messages are handled by the enabled legacy provider and Meta under their applicable terms; legacy data is not silently moved into SMS.
A separate payer opts in the same way a client does — by sending START or ticking the consent box on our form — and only then receives a package balance, renewal proposal, payment confirmation and pause receipt. «STOP» disables that entire financial flow.
Keepslot never chats freely with clients. It sends fixed operational messages and short reply choices. A client's free-text question goes to the trainer.
10. Children
Keepslot does not message minors. When the student is a minor, the contact number is a parent's or guardian's, and that adult receives the reminders and summaries. The minor's data (name, bookings, balance) is entered by the trainer, who is responsible for having the adult's permission. If we find we are messaging a minor directly, we stop and tell the trainer.
11. Security
- Data encrypted in transit (TLS) and at rest in the database.
- Database in the EU (Frankfurt).
- Trainer access via a private tokenised link; internal access kept to a minimum and logged.
- We do not accept live client data until production backup and restore are configured and tested.
- If a data breach puts you at risk, we notify the trainer within 48 hours and, where the law requires, the authority and the people affected.
12. Changes
When we change this policy we publish the new version here with its date. If the change matters, we notify trainers by message or email.
13. Contact
PAVEL BELOV, a sole trader registered in Portugal, tax number (NIF) 324091443, RUA MONSENHOR FERREIRA NÚMERO 299/305 1 DRT, 4710-407 BRAGA, PORTUGAL · info@keepslot.app