What OnlineHours does
OnlineHours sends automated availability requests to Slack, ClickUp and supported Microsoft Teams accounts during the hours you choose. These requests run on our servers, so your laptop can be closed. Setup uses Microsoft authorization or a private code from your signed-in app session, depending on the connection method. The sections below explain the access and data involved.
What the website stores
You sign in with Google or with a one-time code sent to your email. For a code, we store your email address, a keyed hash of the code (never the code itself), the number of tries, the page to return to, keyed hashes of your IP address and network (not the address itself) and a hash of a random value kept in your browser; the code works once, expires after 10 minutes, and these records are deleted a day later. We use them to limit how many codes an address or network can request and how many wrong codes can be tried, based on our legitimate interest in keeping accounts and our email delivery safe. On the sign-in page, Cloudflare Turnstile checks that a code request comes from a person: it processes signals from your browser, such as your IP address, TLS fingerprint and user agent, on our behalf, and before a code is sent our server confirms the result with Cloudflare, passing your IP address. Cloudflare also uses these signals to improve its bot detection (see the Turnstile Privacy Addendum). We receive only whether the check passed. The first time a code signs you in, we save that email address as a sign-in method of your account: of the account that already uses it as its current Google or account email, otherwise of a new account. It stays until you delete your account, and appears in Settings and in your data export. For Google sign-in, we receive your Google account identifier, display name and verified email address to create or link your OnlineHours account. A secure session cookie and a hash of its session key are stored for up to 30 days. We do not store your Google password or Google access token for sign-in. We also store saved schedules, connection settings, a recent activity log and support requests so the service can show your own records. To see where setup gets difficult, we record the first time your account chooses its trial app, opens the connect step and submits a connection code (the step and its time only, never the code). These records are included in your data export and deleted with your account.
On a phone you can ask us to email you the setup link, because setup needs Chrome on a computer. We send that one email to the address you enter (or, when you are signed in, to your account address) and do not keep the address: we store only keyed hashes of it, of your IP address and of your network, the time and, when you are signed in, your account ID, for 32 days, to limit how often one address, phone or network can ask (our legitimate interest in keeping our email delivery safe). The address is not added to any mailing list. When you are not signed in, Cloudflare Turnstile checks this request the same way as a sign-in code request.
When you open the dashboard we record the IP address and country (as reported by Cloudflare) of your latest visit, the time of that visit, and the country of your first visit. We use this to prevent trial and payment abuse, to secure accounts and to support you, based on our legitimate interest. Only the latest address is kept, it is visible to our team only, it is included in your data export, and it is deleted with your account.
To understand which pages and campaigns bring visitors, our own pages send a cookieless page-view count. We store the day, the page you landed on, the referring website or campaign tags (utm), your country and device type, and a visitor code made from your IP address and browser with a secret that changes every day and is deleted after two days, so the code cannot be traced back to you later, except through the account link just described. We also count, under the same visitor code and only by day, a few steps on the way to an account: whether the prices came into view, which sign-up buttons were clicked (with the page and the name of each button), the sign-in page was opened and a sign-in was started, whether the setup link was emailed from a phone (with the page and the name of the button), whether someone tried the hours preview on a page, and whether someone interacted with the page for at least 10 seconds (so automated visits can be left out). For the same reason we keep, per visit, the longest time a page was visible in seconds, how far it was scrolled in percent, the window size rounded to 10 pixels, whether the browser reported itself as automated, whether there was any mouse, touch, scroll or key input, and the operating system family (such as Windows or Mac, not the browser name or version). If you create an account, that day’s visit and steps are counted as leading to it. We do not store your IP address or browser string for this, set no cookie, and keep these counts for up to 13 months. When you create an account, we save where your first visit came from.
Support messages
You can contact support without an account. We store the email address you provide, your subject, messages and our replies. Signed-in tickets are also linked to your account. Guest tickets use a private receipt held in the current browser tab so you can check for a reply. The setup assistant provides help from our product documentation. When AI answers are enabled, your question and relevant help entries are sent to Cloudflare Workers AI to generate a reply. We attempt to remove email addresses and common credential formats before sending the question, but this cannot identify every secret. Our team can read support tickets and reply in the support window. Automated account emails are delivered by Cloudflare Email Service (Resend may be used as an alternative delivery provider). Our support mailbox is hosted by Zoho Mail. Do not include passwords or connection codes.
The Slack & ClickUp connector
The separate session connector reads the supported app session only after your consent. It creates a private connection code containing access credentials. These session credentials can carry permissions beyond online status; they are not presence-only keys. OnlineHours does not request chat history or store message, DM or project content. The connector does not upload the code. Pasting it into OnlineHours transfers it to the server, where credentials are encrypted. They are used server-side to verify your connection, run and check scheduled availability, apply any Slack status text you choose, and stop or clean up the connection. The server stores the resulting status, check-in times and error codes. Keep the code private. Disconnecting or deleting your account removes the stored server credentials. To revoke the underlying app session, use the app provider’s session or security controls as well.
This connector uses your own signed-in web session. It is not an official Slack or ClickUp integration, and an app provider or your organization may restrict automated activity under their own terms or policies. Check them before connecting a work account.
The separate Teams Connector
For supported personal Teams sessions, OnlineHours Teams Connector reads the signed-in Teams session only after your consent and creates a private connection code. The code grants session access and is not a presence-only credential. The extension does not read chats, messages or files, and does not upload the code automatically. You copy and paste it into your OnlineHours account to transfer it to the server. Do not send the code to support or another person.
We store the Teams session credential encrypted, along with its account identifier, expiry, schedule, presence endpoint identifier, status observations and fixed error codes. Server operations use it to manage and check online availability. We do not request conversation history or store message content. This method does not automatically renew the imported Microsoft session: the dashboard shows its expiry and you can supply a fresh code to reconnect.
Stopping clears the server presence session and leaves the encrypted connection saved and paused for later use. Disconnecting first clears the server presence session, then removes the saved connection and credential after the provider confirms cleanup. Until that confirmation, the connection and encrypted credential remain stored. If the credential expires before cleanup finishes, the dashboard may ask for a fresh code from the same Teams account solely to finish stopping it; this does not restart your schedule. Account deletion waits for this cleanup too. Your browser remains signed in to Microsoft until you sign out there. Organization policies still apply, and this connector cannot override them.
Review invitations
A private review invitation is linked to the first signed-in account that activates it. We store a hash of the invitation code, the account identifier, creation time and expiry. It grants temporary product access without administrator rights or a paid subscription. Deleting your account removes its link to the invitation and retains only an anonymous redemption record to prevent reuse. The pending code stays temporarily in the current browser tab during Google sign-in and is cleared after activation.
Account preferences and API keys
We store your selected language, time zone and email preferences. A one-time welcome email is queued when you create an account. Our email delivery provider (Cloudflare Email Service, or Resend as an alternative) processes the recipient address and message for delivery. Connection and trial reminder emails follow your service-email preference; marketing is off by default. Browser notifications require your permission on each device. We store the encrypted browser subscription, your announcement preference and delivery timestamps. You can turn them off in Settings or your browser. Browser push services process encrypted notification payloads and delivery endpoints. API keys have read-only access to your schedules and connection status. We store only a hash, a short identifying prefix, expiry and usage timestamps; the full key is shown once. Keys expire after 90 days and can be replaced or revoked immediately in Dashboard → API Keys.
Microsoft sign-in and other authorized connections
Work and school Teams use Microsoft sign-in with profile and presence permissions, without requesting chat or file permissions. The service stores Microsoft access and refresh credentials encrypted, linked to your account and provider, so it can renew availability while your device is off. Disconnecting stops new renewals and removes the saved credentials. Provider activity may remain briefly.
Google Chat through OnlineHours Connector
After you choose Create connection code in a standalone Google Chat tab, the connector reads a limited named set of Google session cookies, the Chat request token and account index. You enter the email of the account you intend to connect. No Google password is requested. The extension keeps the code only in popup memory and does not upload it automatically. Copying puts the private code on your clipboard; paste it only into your OnlineHours dashboard.
The code grants access to your Google session. Its credentials are broader than a status-only permission and may authorize other Google services; our implementation uses them only on chat.google.com to verify your own account, read your own presence and send activity heartbeats. It does not request chat history, Gmail, Drive or message content. Your organization may restrict this use. We do not bypass sign-in challenges or device and administrator policies.
When you choose Allow & connect, the session is sent over HTTPS to our Cloudflare service, encrypted for storage, and supplied over an authenticated encrypted connection to our OVH presence server during your selected hours. We store the verified Google account identifier, email, schedule, timestamps and fixed status/error codes. Google may renew some cookies in its responses; renewed values remain encrypted. A session that expires or is rejected requires a fresh code. We do not sell this data, use it for advertising or train AI models with it.
Stop ends new activity and attempts an inactive heartbeat; it does not sign you out of Google or force other devices offline. Disconnect removes the saved encrypted session and stops server activity within the current execution lease (up to one minute during a control outage). The session may remain in an in-flight request briefly while cleanup finishes. You can also end the Google session in your Google Account security settings. This is separate from signing in to OnlineHours with Google.
Hosted browser pilot
A server session uses a separate browser profile on a server. You sign in to the app directly through a short-lived secure window. The browser profile stores the app’s cookies and login data on that server, so the session can continue when your computer is off. We do not ask you to export your personal browser profile.
An authenticated browser can access the work content that your account can access. The current activity adapter does not type messages or edit tasks, but this does not make the stored session a presence-only credential. Connect an account only when you are authorized to use it this way.
The dashboard stores the session settings, server check-in times, activity timestamps and error codes. Login window tickets expire after two minutes and can be redeemed once; a login window session lasts at most ten minutes. Removing a session revokes runner access. In this pilot, deleting its stored browser profile is a separate operator action: submit a Privacy request through Support to confirm that the profile and any retained copies are removed. Pilot access expires within seven days unless the operator renews it.
Telegram bot
Connecting Telegram stores your numeric Telegram identifier, display name and the link to your OnlineHours account until you disconnect. A connection link lasts ten minutes and needs confirmation in your signed-in dashboard. Session control buttons expire after fifteen minutes. Expired links and buttons are removed when the bot or pairing flow is used.
The bot receives commands you send in its private chat and replies with hosted session names, schedules and server status through Telegram. We do not store full chat transcripts. Update identifiers are retained for seven days to prevent duplicate commands and removed on subsequent bot activity. Telegram handles chat content under its own privacy policy. Do not send passwords, cookies or work app credentials in chat.
Disconnecting removes the account link and pending controls. Existing server schedules continue until stopped separately. You can also remove the conversation in Telegram.
Payments
Stripe processes subscription payments. You enter your card and billing details in Stripe’s secure payment form, shown on our page or on Stripe’s own page; they never reach OnlineHours. Stripe shares with us your email address, billing country, the plan you chose, payment and subscription status, and Stripe customer and subscription identifiers. We use these only to grant, renew, refund and end access. Stripe handles payment data under its own privacy policy. See our billing and refund terms.
Retention
Your dashboard retains up to 100 recent activity entries. Diagnostic records contain a reference ID, fixed operation/error codes and timestamps, without request bodies, credentials or personal account details. We retain diagnostic records for up to 14 days, capped at about 1,000 records; older records are removed as new ones are written. Expected errors, such as an expired sign-in, are kept only in short-lived server logs. First verified connection and activation milestones are retained with your account for product measurement and conversion deduplication; they are included in your export and removed when you delete your account. Marketing events are sent only with consent and only within seven days of the milestone. Expired connection handshakes are removed by the scheduler. Processed payment event identifiers are retained for up to 90 days for duplicate handling. Account, schedule, support and billing records remain until removed under the service’s retention process.
Where your data is processed
OnlineHours runs on Cloudflare (website, database and sign-in sessions) and on an OVHcloud server that runs cloud connections. Stripe processes payments, Cloudflare Email Service delivers account emails (Resend may be used as an alternative delivery provider), Zoho Mail handles support email, Telegram relays support messages to our team so we can answer quickly, Google provides sign-in and Microsoft provides Teams authorization. If AI support is enabled, Cloudflare Workers AI processes support questions as described above. Meta (advertising), Google Analytics (site measurement) and Microsoft Clarity (session recordings and heatmaps of how our public pages are used, with typed text hidden; never the workspace, sign-in or support chat) receive events only with your consent in the cookie choice. Our processors use data only to provide their part of the service; Meta, Google and Microsoft also apply their own policies to data from the optional cookies.
Why we may use your data (legal bases)
To provide the service you signed up for (GDPR Art. 6(1)(b)): your account, schedules, connections, support requests, payments and service emails. To meet legal obligations (Art. 6(1)(c)): billing and tax records. For our legitimate interests (Art. 6(1)(f)): keeping accounts and payments secure, preventing trial and payment abuse, and our own cookieless page-view counts; you can object to these, as described below. With your consent (Art. 6(1)(a) and the ePrivacy rules on cookies): analytics and advertising cookies, browser notifications and product news by email. You can withdraw consent at any time, without affecting what was done before.
International transfers
Some of our providers process data outside the European Economic Area, mainly in the United States. Where they do, we rely on a European Commission adequacy decision (for US providers, the EU–US Data Privacy Framework where the provider is certified under it) or on the Commission’s Standard Contractual Clauses in the provider’s data processing terms. Telegram, which relays support messages to our team, processes them under its own terms, so please keep sensitive details out of support messages. You can ask us for details through Support.
Children
OnlineHours is a work tool and is not intended for anyone under 16. We do not knowingly collect data from children.
Access, correction and deletion
You can edit or delete saved schedules and disconnect work accounts from the dashboard. You can export your data or delete your account in Settings. Active subscriptions must be canceled first. When a free trial starts we keep a keyed, irreversible hash of your sign-in email and of the work account it ran on, and we keep it after account deletion so the same person cannot restart the trial. It cannot be turned back into your email or account ID. Hosted browser profiles require operator removal. For these cases or another privacy request, submit a Privacy request through Support. Billing records may need separate handling where retention is required.
You also have the right to access a copy of your data, to correct it, to have it erased, to restrict or object to its use (including our legitimate-interest processing), to receive it in a portable format and to withdraw consent at any time. We answer within one month. If you think we have not handled your data correctly, you can complain to a data protection authority, such as the Comissão Nacional de Proteção de Dados (CNPD) in Portugal or the authority where you live or work.
Contact
For OnlineHours support, billing or privacy questions, email support@onlinehours.app or leave a message.