Privacy Policy
Effective October 16, 2026 · BioFlow is a product of Devino Solutions (14930398 Canada Inc.), Ottawa, ON, Canada.
This policy explains what data BioFlow (“we”, “us”) collects from creators and visitors, why we collect it, who we share it with, and how you can exercise your rights. We aim to keep it short and honest. If anything is unclear, email hello@devino.ca.
What we collect
- Account data. Email, display name, hashed password, and (if you sign in with Google or Apple) the OAuth identifier returned by those providers.
- Bio page content. Whatever you publish on your BioFlow page — handles, links, descriptions, themes, and any images or audio you upload.
- Usage analytics. Page views and interaction events captured by PostHog so we can improve the product. No third-party advertising trackers.
- Google Analytics. Only if you click “Allow analytics”. Google Analytics 4 then measures visits to our marketing site and app with measurement cookies. See Google Analytics and your choice.
- Session replay. Where session replay is enabled, PostHog and Sentry record a reconstruction of your session in the app — the pages you open, where you click and scroll, and how the interface responded — so we can see what actually happened when something breaks. What you type is masked before it leaves your browser: the contents of every form field, your AI copilot conversation, and credentials such as API keys and webhook signing secrets are replaced with placeholders and are never recorded. Sentry also masks all text and blocks images and media. PostHog recordings are kept for up to 5 years. On public BioFlow pages and on our marketing site (getbioflow.com), replay runs only for visitors who have accepted analytics cookies, and stops if you withdraw that choice.
- Error and performance reports. If the app crashes or a request is slow, Sentry receives a stack trace and a small amount of context (URL, user id) to help us debug.
- Payment data. If you accept tips or sales, Stripe processes the charge and stores card and payout information on its own infrastructure. We only store transaction metadata (amount, status, application fee).
- Subscription state. If you upgrade to a paid plan, RevenueCat tracks the status of that subscription.
- Connected accounts. If you link a third-party service — Google Calendar, Instagram, TikTok, YouTube, Shopify, Calendly, Cal.com, Mailchimp, Kit (formerly ConvertKit), or an RSS feed — we store an encrypted access token to read on your behalf, plus the specific items we display on your page. See Google user data and Limited Use for exactly what we read from Google.
- Logs. We log IP address, user agent, and request path for short-term security, abuse prevention, and rate-limiting.
- Cookies. We use a first-party cookie to keep you signed in, a small local-storage entry for your theme preference, and a first-party cookie that remembers your analytics choice. Google Analytics measurement cookies are set only if you allow them. We do not use third-party advertising cookies.
How we use your data
- To run the service: render your bio page, process payments, deliver email.
- To debug crashes and improve performance.
- To understand which features are used so we can prioritise improvements.
- To detect abuse, fraud, and spam.
- To send transactional email (verification, password reset, payment receipts, replies to your support requests).
We do not sell your personal data, and we do not use it to train machine-learning models without explicit consent.
Who we share with
We share the minimum data required with the third parties listed below. Each operates under its own privacy policy:
- Stripe (payment processing) — stripe.com/privacy
- RevenueCat (subscription management) — revenuecat.com/privacy
- Google Analytics (website and app measurement, only if you allow it) — policies.google.com/privacy
- PostHog (product analytics and session replay, self-hosted on our infrastructure) — your analytics and replay data is processed on servers we operate and is not sent to PostHog Inc.
- Sentry (error tracking, self-hosted on our infrastructure)
- Google (Sign in with Google) — policies.google.com/privacy
- Backblaze B2 (object storage for uploaded media)
- UseSend (transactional email, self-hosted on our infrastructure)
- OpenRouter (AI gateway for the in-app editing copilot) — openrouter.ai/privacy. Only when you use the copilot, and only the page you are editing. See Third-party AI services.
Google Analytics and your choice
BioFlow uses Google Analytics 4 to measure how its marketing site, getbioflow.com, and its app are used. It is off until you choose “Allow analytics” on the bar at the bottom of the page. Until then no Google Analytics script is loaded, no request is sent to Google for it, and no Google Analytics cookie is set. “Decline” keeps it off and is remembered.
- What it sets. Measurement cookies named
_gaand_ga_<id>, and it sends page views and the usual page and device details to Google. Google signals and ad personalisation are switched off, and the advertising consent settings (ad_storage,ad_user_data,ad_personalization) stay denied. - Sign-ups and first payments. If you allowed analytics when you signed up, BioFlow’s servers also report two events to Google Analytics under the Google Analytics client id from your
_gacookie: that you signed up (and whether by email, Google or Apple), and your subscription’s first payment, with its amount, its currency and an order reference (the Stripe invoice or RevenueCat transaction id). We keep that client id with your account only for this. These reports contain no name, email address or IP address. Withdrawing consent stops new reports, and we delete the stored client id the next time you open the app or start a checkout. - Your choice is remembered in a first-party cookie,
bioflow_cookie_consent, for 180 days, and then we ask again. On getbioflow.com and its subdomains one choice covers the marketing site, the app and creators’ pages; a creator’s own domain keeps its own. On a creator’s public page the same choice also decides whether BioFlow counts that page’s views and link clicks for the creator’s dashboard. - Change your mind at any time with the button below, or “Cookie settings” in the footer of the marketing site. Withdrawing consent stops Google Analytics straight away and deletes its cookies from your browser.
This choice covers Google Analytics only. It does not change the analytics described under “Usage analytics” above.
Google user data and Limited Use
BioFlow’s use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy, including the Limited Use requirements. The use of raw or derived user data received from Workspace APIs will adhere to the Google User Data Policy, including the Limited Use requirements.
What we ask for. Connecting Google Calendar requests a single read-only scope, granting permission to read the events on the calendar you choose and nothing else. We never request write access, and BioFlow cannot create, change, or delete anything in your Google account.
What we read. For each of your next 25 upcoming events we read only the title, location, start and end time, cancellation status, and the Google event link. We do not read attendee lists, guest email addresses, event descriptions, organiser details, attachments, conferencing links, or any calendar other than the one you select.
What we do with it. The only purpose is to render the Events block on the BioFlow page you chose to put it on. We do not sell Google user data, do not use it for advertising or ad-personalisation, do not transfer it to data brokers, and do not use it to build profiles or to assess creditworthiness or eligibility for anything. Humans at BioFlow do not read it, except in the narrow cases the Limited Use policy permits: with your explicit consent, where required by law, or where strictly necessary for a security investigation.
Data protection for sensitive data
Connected-account credentials and the data we read on your behalf are treated as sensitive. These are the specific controls in place:
- Credentials encrypted at rest. OAuth access and refresh tokens are never written to the database in plaintext. Each one is sealed with AES-256-GCM authenticated encryption, with a random per-record initialisation vector and an authentication tag, before it is stored. The encryption key is supplied through the server environment and is never stored alongside the data it protects.
- Encrypted in transit. Every request to Google’s authorisation and Calendar endpoints uses HTTPS/TLS. BioFlow itself is served over HTTPS and sends HSTS on every response (six months, including subdomains), so browsers refuse to downgrade to plain HTTP.
- Least privilege. We request the narrowest scope that makes the feature work — read-only, one scope, one calendar — rather than a broader scope we might later find a use for.
- Data minimisation. We store only the event fields listed above, for at most 25 upcoming events. Anything else in a calendar response is discarded rather than stored.
- Access is scoped to your workspace. Connector credentials and synced data are keyed to the single workspace that authorised the connection. Every read and every change goes through an authenticated, workspace-scoped API call, so another customer’s account cannot reach them.
- Deletion on disconnect. Disconnecting Google Calendar immediately deletes the stored credentials and the connector’s cached event data in a single database transaction, with no soft-delete and no archive copy. We stop contacting Google at that moment. Disconnecting any connected account also removes the copies we had already written onto your page: the synced items are cleared from the block in your draft, in the published version visitors see, in the earlier versions you could roll back to, and in any running A/B test variant; the connected account’s handle goes with them; and the block is unlinked from the connector, so nothing on the page is still bound to it. Images we had mirrored into our own storage are deleted, so their links stop resolving. Your published page is refreshed immediately rather than waiting for a cache window to lapse. What you wrote yourself — the block’s heading and your own text — is left in place, because disconnecting is not a request to delete your content.
- Deletion on account closure. Deleting your BioFlow account removes connected-account credentials and synced data along with the rest of your account data, within 30 days.
- Never sent to an AI service. Data received from Google APIs is stripped out of the page content before that content is passed to our AI copilot, so your calendar events are not transmitted to the AI provider behind it. An AI app you authorise yourself is not given your calendar events either — for exactly what such an app can read, see Third-party AI services.
- No training on your Google data. We do not use data received from Google APIs to train machine-learning models, and we do not authorise anyone else to use it to train theirs.
- Revoking access yourself. Independently of BioFlow, you can revoke our access at any time from your Google Account security settings at myaccount.google.com/permissions.
Third-party AI services
BioFlow has one AI feature of its own: an in-app copilot that edits your bio page when you ask it to. It uses a single provider chain, and we use no other AI service ourselves:
- OpenRouter — the AI gateway we send requests to.
- OpenAI, currently
gpt-5.4-mini— the model OpenRouter routes those requests to. The exact model is a server setting we may change; the gateway and the protections below do not change with it.
When it runs and what it sees. Nothing is sent unless you type a request into the copilot. When you do, we send that request together with the content of the page you are editing, because the copilot cannot edit a page it cannot see. That is your own page copy — the text, links, layout and settings you wrote yourself. Three things travel with it: the names, file types and storage paths of the uploads in your workspace, so the copilot can place one when you name it; any file you attach to that particular message; and, on a turn where you ask about performance, that page’s view, click and unique-visitor totals.
Content synced from a connected account is removed first. Before the page reaches the AI provider we strip out everything a connected account put on your page: your Google Calendar events, and equally your Shopify products, Instagram posts, TikTok videos, YouTube video titles and view counts, RSS headlines and summaries, your mailing-list name and subscriber count, and your booking link. On a block bound to a connected account we blank every field the sync writes — the heading of that block included, not only its list of items — and we put the real values back only after the copilot has answered. What the copilot is left with is the block’s position, its layout settings, which service it is connected to and how many synced items it holds. It can reorder that block, restyle it, and change its layout, but it cannot read a word of what the connected account put there.
What the copilot is never sent. Your OAuth tokens, your Google account credentials, any calendar or event data at all, attendee lists and guest email addresses (which we never receive from Google in the first place), and the contents of other pages in your workspace. The connector itself never calls an AI provider.
Training. We do not use your content to train machine-learning models. Every request we send to our AI gateway carries an instruction forbidding it from routing that request to any provider which collects prompt data for training.
Connecting BioFlow to your own AI app. Separately from our copilot, you can authorise an AI assistant or agent of your own choosing to reach your workspace, by signing in to it through BioFlow and granting it permission. That app is yours, not ours: we do not choose it, run it, or send it anything until you connect it, and what it does with what it reads is governed by its own privacy policy, not this one. It can read only what the permissions you granted allow, and it never receives raw block content. What it can read is: your page titles, slugs, publication status and theme name; the kind of each block with a short label of at most 80 characters, which on a block bound to a connected account can be the synced title; your view, click and unique-visitor totals together with your most-clicked links and referrers; the email addresses and names of contacts your forms captured, and when and from which block; and the names, file types, sizes and storage paths of your uploads. Your calendar’s list of events, their times and their locations are not among them, and no connected-account credential ever is. One consequence is worth naming plainly: a click on any link you publish is recorded with that link’s own text, and on a synced event row that text is the event title you have already published on your public page, so an app you have granted analytics permission can read it there. You can withdraw any app’s access at any time under Settings → Connected AI apps. Revoking removes your consent, so the app’s next request is refused even if the access token it holds has not expired, and its refresh token is revoked, so it cannot obtain a new one.
Where we store data
Application data is stored on infrastructure operated by Devino Solutions in the European Union and the United States. Backups are encrypted at rest. Stripe stores payment data in its own infrastructure under PCI-DSS controls.
How long we keep it
Account data is kept for the lifetime of your account and deleted within 30 days of account deletion. Anonymised analytics is retained for up to 24 months. Payment records are kept for 7 years to comply with tax law.
Your rights
You can request access, correction, export, or deletion of your data, or object to specific processing, at any time. Contact hello@devino.ca and we will respond within 30 days.
Children
BioFlow is not directed at children under 13 (or under 16 in the EU/UK), and we do not knowingly collect personal information from them. If you believe a child has provided personal information, contact us and we will delete it.
Changes
We will update this page when our practices change. Material changes will be announced by email or in-app at least 14 days before they take effect.
Contact
Devino Solutions (14930398 Canada Inc.)
2149 Johnston Rd, Ottawa, ON K1G 5K1, Canada
Email: hello@devino.ca