Bullpen is a young product and these pages move with it. Everything below describes what the software actually does today — if a sentence stops matching the product, that is a bug, and we want the email.
Privacy
Written by reading the code, not by copying a template. If a sentence here is wrong about what the product does, that is a bug and we want to hear about it.
Effective 27 August 2026 · Version 2.0
The short version
- We collect what team chat needs to work: your email, your handle, the messages you write and the files you attach.
- No ads. We do not sell or share your data. There are no analytics or tracking scripts in the product — none.
- Voice recording is the sensitive one. It only runs when a member starts it, it shows an indicator to everyone in the room, and the audio is stored and transcribed by a third party.
- Messages an agent is shown are sent to a model provider to produce the reply. Never your DMs when you ask from a channel.
- Stripe handles payments. We never see a card number.
- Deleting your account works. Your profile goes; the messages you wrote stay in their channels as "Someone".
What we collect, and why
Your account. Email address, the username you pick, and your display name. Passwords are handled by our auth provider and hashed there — we never see or store one. Used to sign you in and to show teammates who you are.
What you write. Messages, the files attached to them, channel and room names, workspace names, who is a member of what, invites, reactions, and which messages you have read. That is the product; without it there is nothing to open.
Voice presence. While you are in a room, which room and whether your mic is muted, so the rail can show it. That is live state and disappears when the call does. The one thing it leaves behind is a usage record — see below.
Recordings, only when one is started. Per-speaker audio from the room, the transcript made from it, and the notes posted afterwards. See Voice rooms and recording below, which is the section worth reading properly.
Usage and cost. One row per billable unit per workspace: what kind of thing ran (an agent reply, a voice minute, a transcription), roughly how many tokens, and what it cost. A row can also name the channel, the person and the agent it belongs to — a voice minute is one row per participant per minute, so those rows do amount to a record of who was in which room. It is how we know what running your workspace costs, how the monthly agent pool is enforced, and workspace admins can read the same meter in the app.
Billing details, held mostly by Stripe. If your workspace buys a plan, Stripe collects the card, the billing address and any VAT number. We store the Stripe customer id, the subscription id, the plan and the interval on the workspace row — see Paying for a plan.
Push notifications, only if you turn them on. Switching the bell on stores what your browser hands us: a push endpoint URL at Apple, Google or Mozilla and two keys that let that service relay bytes it cannot read. The payload we send carries a channel name and nothing else, because a phone draws it on a lock screen. Turning the bell off deletes the row.
Cookies, and only these. A session cookie from our auth provider (names beginning sb-), a cookie remembering which workspace you last had open, and a cookie recording that you finished first-run setup. Your browser also keeps read-position markers and your notification preference in local storage under a bullpen: prefix. All of them are cleared when you sign out. None of them are for advertising or for tracking you across other sites.
Server logs. Our hosting provider keeps ordinary request logs, which include IP addresses, the way every web host does. Browser security-policy violation reports come to us as a capped log line and are never written to a database.
Crash reports. When JavaScript throws in your browser, the page sends us the error message, up to three lines of the stack, the path of the page you were on, and your browser's user-agent string. The query string is thrown away before anything is logged, so the workspace and channel ids in an /app URL — and the token in a sign-in link — never reach us this way. Like the reports above it is a capped log line, never a database row, and it is used to find bugs and nothing else. If a bug puts a piece of what you typed into an error message, that fragment rides along in the message; we are telling you rather than pretending the field is always machine text.
What we don't do
- No advertising, and nothing about you is used to target one.
- We do not sell, rent, share or trade your data — not to a data broker, not to anyone. In the sense California law gives those words, we do not sell or share personal information, and we have not in the past twelve months.
- We do not train models on your content, and we have no arrangement letting a provider do it on our behalf.
- No analytics and no tracking pixels. We checked rather than assumed: there is no Google Analytics, Tag Manager or Meta pixel, no PostHog, Mixpanel, Amplitude, Segment, Hotjar or Plausible, and no Sentry or Datadog anywhere in this app. Nothing follows you between pages or between sites. When the app crashes it does send us a crash report, which is a different thing and is described above.
- We do not read your workspace for fun. Support access happens when you ask for help, and we say so when it does.
One honest exception to "no third-party requests": our home page loads its two typefaces from Google Fonts, so Google sees that request. The signed-in app serves its own fonts and loads nothing from anyone else.
Voice rooms and recording
A voice room is live audio carried by LiveKit. In a call that nobody records, no audio file and no transcript are created. One thing is still written down: while you are in a room the app records a usage row a minute against your workspace, and that row names the channel and you. Those rows are a record of who was in which room and for how long — see what we collect.
Recording only starts when a member presses "Ask Scribe to take notes". There is no always-on capture, and no path that starts one without raising the indicator below. While a session runs:
Everyone in the room sees a red indicator in the voice dock reading "Recording — Wren is taking notes."
Wren posts into the channel: "Wren is taking notes in [room]. Everyone here can see the recording indicator."
The indicator is drawn from the server's own record of the session or from LiveKit's recording flag — never from a claim the browser makes about itself.
Here is exactly what happens to that audio:
- LiveKit captures one audio file per speaker, so the transcript can say who said what. People who join after the session starts are not captured.
- Those files are written to our private object storage on Supabase. The bucket is not public; our server reads a file with a signed request, and no browser ever gets a link to one.
- The audio is sent to a speech-capable model — currently Google's Gemini, reached through OpenRouter — which returns the words.
- The transcript is stored with the session and is readable by members of that workspace. Wren then posts the decisions and action items it could ground in what was actually said.
Only the person who started the session or a workspace admin can stop it, so nobody else can silence a recording other people are relying on.
Whether recording a particular room is lawful is decided by where the people in it are, and that is on whoever starts the session — the Terms say so plainly. The indicator and the channel message exist so nobody is recorded secretly.
Recorded audio is not deleted automatically today. It stays in that private bucket until we remove it. If you want a specific recording deleted, email support@bullpen.chat with the workspace and roughly when the meeting was, and we will delete it.
Agents and model providers
Agent replies are part of the paid plans. In a free workspace the agents are visible but do not answer, and none of what follows happens there: the refusal is written by Bullpen, no prompt is built, and nothing about your workspace reaches a model provider. The rest of this section describes a paid workspace, and only the moments somebody mentions an agent in one.
When you mention an agent, we build a prompt and send it to a third-party large-language-model provider, reached through OpenRouter. Today that is OpenAI's models for chat and Google's Gemini for reading meeting audio. We name the category rather than a version number because the version changes more often than this page does.
What goes in that request:
- Recent message history from channels the person asking can already read — up to 200 messages, capped at roughly 32,000 characters, with the oldest dropped first.
- Older messages that match the question, pulled from the same set by full-text search, so an agent can answer about something that has scrolled away.
- A directory of the workspace as it currently is: channel names, room names, and the display names of members and agents.
- The question itself, and the agent's instructions.
Direct messages are held out of both. An agent asked in a channel never receives the asker's DMs, and an agent asked inside a DM receives that DM and nothing else from the workspace. The scope is decided per question, because the answer is read by whoever can read the room it lands in.
What does not go: your password, your email address, your usage records, your billing details, or anything from a channel the asker cannot open.
The same applies to the daily standup digest, which is one scheduled agent call per workspace that has switched it on.
We do not train models on your content, and we have no separate arrangement letting a provider do so. What each provider does with an API request is governed by their own terms — OpenRouter's and the model provider's — which is a limit worth stating plainly rather than papering over.
Agent answers can be wrong. That is a product fact rather than a privacy one, and the Terms say it at length.
Paying for a plan
Bullpen stores no card numbers. Buying a plan sends the workspace owner to Stripe's own checkout page, where Stripe collects the card, the billing address it needs to work out tax, and a VAT number if the business has one. None of that reaches our servers.
What Stripe is told about you is the workspace id, the plan and the interval, and — for a first purchase — the email address on your account, so the receipt has somewhere to go. What we keep afterwards is the Stripe customer id, the subscription id, the plan and the interval, on the workspace row.
Invoices, receipts, the card on file and cancellation live in Stripe's billing portal rather than in a screen we built, which is also why the payment history is Stripe's to keep. A cancelled workspace keeps its customer id so the portal still opens on its own invoices.
Stripe is a processor for the parts it handles on our behalf and a controller for the parts it must keep for its own compliance. Its privacy notice governs those.
Who else processes your data
These companies handle your data on our behalf so that Bullpen can run. We do not add one without updating this list.
- Supabase — accounts and sign-in, the database that holds messages and workspaces, and the private storage buckets that hold attachments and recorded audio.
- Vercel — hosting, the servers that run our code, the CDN that serves pages, and the request logs that come with running a website.
- LiveKit Cloud — carries voice audio between people in a room, and performs the capture when a note-taking session is started.
- OpenRouter — routes our model calls to the provider that answers them: OpenAI's models for agent replies, Google Gemini for transcribing meeting audio.
- Stripe — payments, cards, invoices, tax, and the billing portal.
- Resend — sends workspace invitation emails on deployments where invites by email are switched on. It sees the address invited and the invitation text.
One more that is not a processor: when you turn browser notifications on, the push service your browser belongs to — Apple, Google or Mozilla — relays the message. It sees the endpoint and the encrypted bytes, and it cannot read them.
These are US companies, so assume your data is processed in the United States as well as anywhere else they operate.
We may also disclose data if the law requires it, or to protect somebody from serious harm. If Bullpen is ever sold or merged, the data moves with the service and this page changes before it does. That is the whole list.
Why we are allowed to hold it
If you are in a place with data-protection law, these are the grounds we rely on:
- To do what you asked — your account, your messages, your files, your voice rooms, your agents. Running the service you signed up for is the contract between us.
- Our legitimate interests — keeping the service up and secure, stopping abuse, and metering what a workspace costs so the plan limits mean something. Nothing under this heading is used to profile you or to sell anything.
- Your consent — browser notifications, which the browser asks you for and you can withdraw by turning the bell off.
- A legal obligation — payment and tax records, which Stripe keeps for the period the law requires.
How long we keep it
- Messages, files and channels are kept until they are deleted. There is no automatic expiry — chat history that vanishes on a timer is not what a team wants from one.
- Deleting a workspace cascades. It is a single operation: the workspace row goes and the database removes its channels, messages, memberships, agents, invites, note-taking sessions and usage records with it. It either all happens or none of it does — there is no half-deleted workspace.
- Attachment bytes with no message — a file uploaded into a composer that was never sent, or one whose message was deleted — are swept out of storage after a day.
- Usage records survive smaller deletions on purpose. Removing a channel or a member does not erase what the workspace was billed for; the record stays and simply stops naming them. It still dies with the workspace.
- Recorded audio stays in private storage until we delete it — see the note in Voice rooms and recording.
- Push subscriptions go when you turn the bell off, and are pruned automatically once the push service says that browser is gone.
- Billing records live with Stripe under its retention policy and the tax law it answers to. What we hold is the handful of ids described above.
- Server logs follow our hosting provider's own retention policy, which we do not set and do not control.
Your rights, and how to use them
Depending on where you live you may have the right to see the personal data we hold about you, correct it, take a copy of it, have it deleted, object to some uses of it, or complain to your data-protection authority. In California you also have the right not to be treated differently for exercising any of that. We honour those requests regardless of where you live, and we do not charge for them.
What you can do yourself right now:
- Change your display name and username in the app.
- Edit or delete messages you wrote.
- Leave a workspace.
- Turn browser notifications off, which deletes that row.
- Cancel a plan in the billing portal, if you own the workspace.
- Delete a workspace you own, which deletes everything in it for everybody.
Exporting your data is not self-serve yet. We would rather say that than pretend otherwise. Email support@bullpen.chat from the address on the account and we will put together a file you can keep, normally within 30 days.
Deleting your account is a request too — by email rather than by a button — but it is a real deletion, and the next section says exactly what it removes.
If you are in a workspace somebody else owns, some of what you wrote lives in their workspace too. Tell us either way and we will explain exactly what can be removed and what belongs to the workspace.
Deleting your account, exactly
Email support@bullpen.chat from the address on the account. We delete the account itself, and here is what that does — checked against the database rather than described in the abstract:
- Your profile is removed: your email address, your username, your display name and your sign-in.
- Your messages stay, without you on them. A message is written to a channel other people read, and pulling it out would edit their conversation. The author is detached instead, and the app renders it as "Someone" — a tombstone with no name, no handle and no link back to a person.
- Your reactions, read markers, push subscriptions and the file-attachment records you uploaded go with the profile. Those files stop being reachable from the message and their bytes are swept out of storage afterwards.
- Usage rows stop naming you. The workspace keeps what it was billed for; the row no longer says who it was for. Same for a note-taking session you started: the notes stay with the workspace, the starter is detached.
- You are no longer a member of anything.
Two things deletion does not do, said out loud because a policy that leaves them out is misleading. It does not delete a workspace you own, or cancel that workspace's subscription — tell us to do those too, or hand the workspace over first. And it does not rewrite what other people wrote: if a teammate typed your name in their own message, that is their message, and it stays.
Deletion is permanent. There is no undo and no thirty-day grace period in which we could bring it back.
How it is protected
- Every table has row-level security on it, so the database itself enforces that you only read your own workspaces.
- The privileged database key never reaches a browser and is only used inside routes that have already checked who you are and what role you hold.
- The recording and attachment buckets are private. Files are read with a signed request; there is no public URL to leak, and the upload allowlist keeps out the file types that would run as script on somebody else's screen.
- Sessions live in cookies set by our auth provider, and the first-run cookie is marked so that page scripts cannot read it at all. Bullpen refuses to be embedded in a frame, and workspace ids are kept out of the referrer header so they do not ride along on an outbound click.
None of that makes a system perfect, and we are not going to claim it does. If you find a hole, email support@bullpen.chat and we will treat it as urgent. If a breach ever affects your data, we will tell you and the regulators the law names, without waiting to be asked.
Children
Bullpen is a workplace tool for adults. It is not for anyone under 13, and we do not knowingly collect anything from a child. If you believe a child has an account, email support@bullpen.chat and we will delete it.
Changes to this page
When what we do changes, this page changes, and the version and date at the top change with it. This is version 2.0. If a change materially affects you — a new subprocessor, a new category of data, a change to how recording works — we will say so in the product or by email rather than editing quietly.
Contact
Privacy questions, export and deletion requests, or a sentence on this page that does not match what the product does: support@bullpen.chat.
The rules for using Bullpen are on the Terms page.