Privacy Policy

Troctor has a live mode that captures what the other people say, streaming the audio from your Mac to a transcription vendor. Your own microphone is not captured: there is no longer an option to include it, so your own voice never reaches the vendor at all. That is the largest thing this policy has ever had to describe, so it is described first and in full rather than folded in. Your vault still never reaches us, and neither does a recording the Mac app made. Troctor Next, the browser product, is the first deliberate exception: conversations you record at troctor.com in order to share them are stored with us, and they have a section of their own. Troctor Voice, the phone receptionist we are testing with a small number of venues, is the second, and because a phone call cannot start on your Mac it works differently again: its section says exactly how, as does the Google and Microsoft data Next can use. Your question and the excerpts it retrieved do pass through our backend on the way to a model vendor, and that is now true of every model rather than of one. Everything we hold is short enough to list line by line, and this page lists it.

Effective: 19 August 2026    Last updated: 5 September 2026

In short

The biggest change this policy has ever carried: Troctor can now capture a meeting, and the audio leaves your Mac

Every earlier version of this page said that no audio was captured, that Troctor never asked for your microphone or your system audio, that it requested no privacy permission from macOS, and that macOS could show no recording indicator because there was nothing to indicate. All of that has been deleted, because none of it is true any more.

Troctor has a live mode. It captures the audio your speakers were asked to play, which in a video call is the other people, and streams it to Soniox, a transcription vendor, to be turned into text while the meeting happens. What leaves is not a summary and not a question you chose to type. It is the conversation itself, as it is spoken, and the half that always leaves is the half said by people who never installed anything.

Four things bound it, and each is stated again in full under what leaves when Troctor listens. It is off unless you switch it on, and that is a decision per meeting rather than a setting you make once. It runs on our Soniox account: our backend mints a key that lasts sixty seconds and can do nothing but open a stream, and the audio then goes from your Mac to Soniox without passing through us. The audio is written to disk on your own Mac, as WAV files beside the transcript, so a meeting can be played back afterwards; those files are never uploaded, and the app offers Show in Finder, Delete, and a switch that stops the audio being written at all. And live mode is a beta feature still changing quickly, so it is described here in full rather than assumed to be settled.

The other change, from v0.1, and how it has grown since

Answers run on our vendor keys. In v0.1 that was one default model and you could avoid it by pasting a key of your own. Every model now works that way, and there is no longer an option that does not: the app has no key storage and no vendor client left in it, so it sends a model id to our backend and the backend decides which vendor answers.

So: your question and the excerpts Troctor retrieved from your meetings pass through infrastructure we control. Before v0.1 nothing about a meeting ever reached our servers, and this page said so at length and emphatically. It no longer says so, because it would no longer be true, and there is no setting that makes it true again.

The messages are relayed and not stored, and the exact list of what is written down is in what leaves when you ask. What bounds it is a daily allowance of 2,000 credits per licence rather than a bill, and the allowance cannot be raised from the app, because there is no key to add.

Audio is captured only in live mode, only during a meeting you started. With live mode off, which is how it arrives, Troctor asks macOS for no privacy permission and there is no audio anywhere in the app. Switching it on asks for the system audio permission and nothing else: no microphone permission is ever requested, and no recording indicator appears, because capturing what your speakers play is not something macOS marks with the orange dot. Nothing tells the other people in the meeting that transcription is running. That is your job, not the operating system's.

Transcription happens at Soniox, on our account. There is no speech-to-text on your Mac and none on our servers. In live mode the audio goes from your Mac to Soniox and comes back as text, over a socket your Mac holds directly, using a temporary key our backend minted for that meeting. You need no account with them. Troctor also still works from transcripts you already have, exported from the tools that produced them, and that path involves no audio and no vendor at all.

Your screen is captured only when you press Capture, and only the box you draw. Until 16 September 2026 this said the screen was never captured, and it was true. Since then, a meeting's Context dialog has a Capture button: it opens the Mac's own crosshair, and what you draw a box around is attached to that meeting so an answer can read what somebody is sharing. Troctor asks macOS for the Screen Recording permission once, when it starts, with a request that takes a one-pixel thumbnail of each display and discards it at once; refuse it and nothing else changes, and the button says it is off. Nothing else in the app uses that permission: listening does not, there is no capture on a timer or in the background, and a static test holds that by name. A captured picture is stored on your own Mac beside the meeting, goes to the model only with a question you ask in that meeting, and is deleted with the meeting or from its Context tab.

Your vault never reaches us. It is a folder of Markdown files on a disk you chose. The search index is derived from those files and sits in Troctor's own folder in your user library, along with any recordings live mode has written. None of it is ever uploaded, and there is no upload step in the app to trust us about. What can reach us is narrower than that and narrower than it was: only what you attached to the meeting you are asking in, and what has been said in that meeting. Every other meeting on the disk stays where it is, and a question is not matched against them at all.

When you ask a question, your question and that meeting's own material go to our backend, which forwards them to a model vendor on our account. That is the only route there is. Which vendor depends on the model you picked, and the choice of vendor is ours rather than yours.

What we do hold is the paperwork of running a private beta: the form you filled in to ask for a key, your licence and the Macs it is activated on, one line each time you download the build, a closed list of counts and timings from the app, one report after each meeting of how the assistant behaved in it, with no words in it unless you choose to share them, and a count of the answers and the transcription minutes we paid for.

The thing most privacy policies bury

Usage reporting is on by default. It is not opt-in. It is disclosed on the activation screen, with the switch sitting next to the disclosure, before a single event is sent, and it can be turned off there or in Settings at any time. We rely on legitimate interests rather than consent, which is the honest description of a default-on setting, and the whole of what it sends is listed further down this page rather than summarised.

Who we are

Troctor is a product of Globyskytek LLC ("we", "us"), a limited liability company registered in North Carolina, United States. For the purposes of data protection law, Globyskytek LLC is the controller of the personal data described here.

Our registered address is Globyskytek LLC, #2150, 207 W Millbrook Road, Suite 210, Raleigh, NC 27609, United States. You can reach us at privacy@troctor.com.

What never leaves your Mac

Your vault
Plain Markdown with YAML frontmatter, in the folder you picked. Troctor writes only inside the sections it created, so your own edits survive a reindex. Openable in Obsidian, VS Code or TextEdit, with or without Troctor installed.
The search index
A SQLite file called index.db in the app's own folder under ~/Library/Application Support. It is derived from the vault and can be rebuilt from it. Protected by macOS file permissions, and by FileVault if you have it on.
Embeddings
Computed on your own CPU by a small open model that downloads once and is then cached on disk. Nothing is sent anywhere to be indexed.
Your licence
The device token Troctor was issued at activation, encrypted through the macOS Keychain and tied to your login. It is the only secret the app stores. There are no vendor API keys on your Mac any more: the app cannot hold one, because the code that stored them was deleted along with the vendor clients that used them.
Recordings of meetings
Written on your own Mac and never uploaded. While live mode runs, the audio is appended to a WAV file and every finalised line of the transcript to a text file, inside Troctor's own folder under ~/Library/Application Support, so that a meeting survives a crash and can be played back afterwards. Audio is about 115 MB per channel hour, and nothing deletes it on a timer, because the recording somebody wants is usually the old one a timer would have removed. The app lists every recording with its size and offers Show in Finder and Delete, and a switch stops the audio half being written at all, in which case only the transcript is kept. We have nothing to hand over if anybody asks us, because none of it reaches us.

Importing, indexing, searching and reading citations all work with the network switched off entirely. Two things need a connection: generating an answer, because every model runs on our keys behind our backend, and live mode, because transcription happens at a vendor.

What leaves when Troctor listens

This section covers live mode only. If you never switch it on, none of it applies to you and nothing in it happens.

One thing about its maturity, stated here rather than left to the roadmap, because it belongs next to the disclosure rather than away from it: live mode is in daily beta use and still changes quickly: the live path is reshaped most weeks in response to what real meetings surface. That is not a reason to read the rest of this section as hypothetical, since the code is in the build you installed and the moment you switch it on the audio described below is what leaves. It is a reason not to depend on it yet.

What is captured, and what macOS asks you first

Two channels, chosen by you, each with its own macOS permission. Nothing is requested at install or at launch; a permission is asked for the first time you start a meeting with that channel switched on.

System audio
Everything your speakers were asked to play, which in a video call is the other people. macOS calls this permission System Audio Recording Only. It covers audio and nothing else, it grants no access to your screen, and it does not need the app relaunched. It asks for no microphone permission and shows no recording indicator, because no microphone is open.
Your microphone
You. This is the ordinary macOS microphone prompt. While it is on, macOS puts the orange dot in the menu bar of your own Mac. That dot is on your screen and your screen only. It is not transmitted, it is not part of the call, and nobody else in the meeting can see it.
Your screen
Never captured, never requested, in either configuration.

Who said what comes from the vendor's speaker diarisation, which labels voices Speaker 1, Speaker 2 and so on within that meeting. The labels are per meeting and carry no identity: nothing ties Speaker 2 today to any person or to Speaker 2 tomorrow. An earlier design captured your microphone as a second connection and used the channel itself to tell you apart from the room; that option is gone, and one connection per meeting is also half the transcription cost.

The other people in the meeting

Everything else in this policy is about material you already had. This part is about a conversation, and half of it belongs to people who did not install Troctor, did not read this page, and will not be told by their operating system or ours that a transcript is being made. There is no technical control that fixes that. Telling them is the control, and Responsible Use is where we say what we think you owe them and where the law may already require it.

What goes to the transcription vendor

The vendor is Soniox. While a meeting is running, Troctor opens one connection per channel and sends:

  • The audio itself, as raw 16 kHz mono samples in tenth-of-a-second frames. Unedited and unfiltered: everything the channel heard for as long as the meeting ran.
  • A temporary key, the model name, the audio format, and the languages you said to expect.
  • A list of terms you typed, if you typed one. Product names, people, acronyms, to help it spell them.

Nothing else. No vault content, no file names, no account of yours with us, and no identifier of ours. The transcript comes back over the same connection and is written into that meeting, which is to say into your vault, on your disk, and into the recording described above.

The key is ours, and it is temporary. Your Mac asks our backend for one when a meeting starts, our backend exchanges our real Soniox key for one that expires in sixty seconds and can do nothing but open a stream, and your Mac then holds the socket itself. The audio does not pass through our servers at any point, and it is worth saying why that is the design rather than an accident: relaying it would put every word of every meeting through a process we own, and add a hop to a delay measured in tens of milliseconds. What crosses our side is a request for a key and, while the meeting runs, a count of seconds. Never a word of it.

This does change one thing that used to be said here. Soniox was previously a company you had an account with; it is now a vendor of ours, on our key and our bill, so it is named under who we share with rather than kept off that list. What Soniox retains from a stream is governed by their own terms.

What goes to a model, and when

Live mode occasionally puts a suggestion on screen, which means one model call. It is rarer than a sentence: a line has to look like a question, a claim, a figure or a date; a rate limit has to be clear; retrieval has to find something in your vault; and the model has to decide there is anything worth interrupting you for, which it is instructed to say no to by default.

When one is made it carries the last six lines of the live transcript, the line that set it off, up to four passages from your vault and up to two excerpts from what you attached to the meeting. Never audio. The model never receives audio at any point in this product.

It travels exactly as a question you typed does: through our backend, to the vendor behind the model selected for that meeting, and it spends credits from the day's allowance, so a live meeting can consume part of that allowance without you typing anything. The model can be set for the meeting alone, and the assistant can be turned off entirely, in which case no model call is made for any reason.

The window it draws on

Suggestions appear in a small always-on-top window over your call. It is a window like any other, so sharing your whole screen shares it. It used to be built with setContentProtection applied, which asks macOS to exclude a window from screen recording and from screen sharing, and that stopped working on macOS 15: every window is flattened into one image before capture now, and ScreenCaptureKit, which is what Zoom, Teams, Meet and QuickTime use, reads that image. We removed the feature on 9 September 2026 rather than keep a setting that worked on some Macs and quietly did nothing on the rest. What keeps the panel out of the picture, on every version of macOS, is sharing the single window you are presenting rather than your whole display, because macOS captures a chosen window on its own and leaves out anything drawn over it. A second display works too. The security page is where we set out why we will not sell any of this as a way of being undetectable. The window also never takes the keyboard unless you press the shortcut that opens its ask box.

What is kept, and by whom

By Troctor, on your Mac
The text of the transcript, attached to that meeting in your vault, and the recording of the session: one WAV per channel plus the transcript, in Troctor's own folder. Yours to reveal, delete, or never write in the first place.
By Troctor, on our servers
No audio. Two counts: the seconds of connection a meeting used, against your licence's daily transcription allowance, and one usage record per model answer, carrying the model name, token counts and timing. And, if usage reporting is on, one report per meeting of how the assistant behaved, which describes the shape of the meeting in numbers and codes and carries no transcript, no line of one, and nothing anybody said, unless you have turned on the second switch that shares the words, which is off until you do.
By Soniox
Whatever their terms say. The account is ours now rather than yours, so they are named as a vendor of ours below.
Audio, on our side
None. It never reaches us: the socket is between your Mac and the vendor.

One further trace, and it is a count rather than content. If Troctor crashes with a transcription connection still open, it writes a small file so the next launch can notice, because a connection nobody closed keeps costing until the vendor's own limit. When that happens the app reports two numbers to us if usage reporting is on: how many channels were open and roughly how many minutes ago it started. Never which meeting, never a word of what was said.

What leaves after a meeting

When a meeting ends, the app sends us one report of how the assistant behaved in it, if usage reporting is on. It exists because we cannot sit in your meetings, and a meeting is the only place the assistant's judgement can be seen: whether it answered when it should have, stayed quiet when it should have, and how long it took. Counts of answers cannot show that; the order of events can. It is the same switch that governs the events above, described on the activation screen and in Settings under Send anonymous usage counts, and turning that off discards any report not yet sent.

The report is a closed list, applied in the app when it is written and again on our server when it arrives, so a modified copy of the app cannot send more than an unmodified one. In full, it holds: an identifier for the meeting, when it started and ended and why it ended; which channels were listened to (the speakers, the microphone, or both); which assist mode and which of our model ids was in use; totals of turns, distinct voices, answers, quiet moments, failed answers, streams, reconnects, rotations, dropouts and billed minutes. Then, for every finalised turn of the transcript: its number, its second within the meeting, its channel, the meeting's own speaker number (never the vendor's label, never a name), and how many characters it was. For every decision the assistant made: which turn it was made on, its second, whether it answered or stayed quiet, the reason it stayed quiet as one of twelve fixed codes, whether you asked the question yourself, the model, how many milliseconds the answer took, how many turns were in its window, the lengths of the question and the answer in characters, how large the request was in bytes and how many pictures were attached to it (never the pictures), a short error code if it failed, and whether it was stopped. And what the listening itself did: how long each of the three waits inside pressing Listen took (opening the audio, setting up transcription, connecting), each stream starting and how long that took in total, and when each stream closed: how it ended (our own word, or the transcription service's error code and its request id), how far the service had fallen behind the audio at worst, how much audio was waiting to be sent at worst, how much of the audio was above a loudness floor, and how many tokens came back; being replaced by a fresh one (how long the replacement listened beside it first, how many voices were matched across the seam, and whether a voice afterwards had to be guessed), reconnecting and how many attempts, dropping out and recovering, the chosen voices changing or being carried, going idle, stopping; and on each turn, which of the meeting's streams heard it. Times, counts, codes and lengths. Not a word of what was said, and not the request sent to the model.

A second switch, off until you turn it on, adds the words. It sits under the first in Settings and reads Also share my meeting transcripts and the assistant's answers with Troctor. With it on, the same report also carries the text of every turn, the question the assistant considered at each decision and the answer it gave, each cut at four thousand characters, and a report too large to store drops the words and says so rather than dropping the meeting. We ask for this because the shape of a meeting shows that the assistant answered at the wrong moment and only the words show why. Other people in your meetings are in that text, which is why the switch is separate, off, and worded as it is. A report that carries words while claiming the switch was off is refused whole on arrival.

Either kind is kept for 90 days and then expires automatically, with the expiry written onto the document as it is stored. Only an admin account can read one, through a list that shows summaries with no words in them whatever a report holds, and a view of one meeting at a time. Nothing in a report can be read by any client, including the app that sent it.

What leaves when you ask

One request, made only when you press ask. What is in it is the same whichever model you chose:

  • Your question, as you typed it.
  • What you attached to that meeting, and what has been said in it. Nothing is read from the rest of your vault while answering; that path is built and switched off for the beta. Each excerpt carries the file or the speaker, the date and the timestamp it came from, so the answer can cite it.
  • Whatever you attached to that meeting: files you dragged in, text you pasted, and the transcript of the meeting the thread was started from, if it was started from one.
  • The standing instructions you wrote for that meeting, if you wrote any.
  • Up to eight earlier messages from the same meeting, so a follow-up makes sense on its own.

Nothing else, and nothing at any other time. The rest of your vault is not sent, and meetings that did not match are not sent. One correction to a sentence this page used to carry: the name of a file you attach is sent, because the model has to be told what it is reading. The path it came from is not. Before anything goes anywhere, the composer shows you the size of the request as a percentage of the model's context window, itemised by part, so this is a list you can check rather than one you have to trust.

An earlier version of this page said that a weak question sent nothing at all, because retrieval was scored against a floor and below it the model was never called. That gate was removed in v0.1. The model is now called every time you ask, so every question you type is sent, whether or not Troctor found much to answer it with.

Where the request goes, whichever model you picked

The request is posted to https://www.troctor.com/api/v1/chat, which is our own backend. It carries the model id you selected and nothing about a vendor, because the app does not know which vendor answers. Our backend checks that your licence is still good, spends the model's cost from the day's allowance, and forwards the same messages to that vendor over the OpenAI-compatible chat protocol using our API key. The answer streams back through us to your Mac.

Stated once and plainly, because it deserves better than being distributed across a page: on the free tier your question and the excerpts from your meetings transit a server we operate. The free tier is now the only tier, so that sentence covers every question you ask. They exist in that server's memory for as long as the answer takes, and they are not written to our database.

What is written, once per answer, is a single usage record holding the vendor model name, the input and output token counts, whether those counts were measured or estimated, how many milliseconds it took, and whether it failed. That is the whole record. Not the question, not the answer, not an excerpt, not a fragment of one, not a hash of any of it. The same token counts are added to a per-licence daily total, which is what enforces the allowance. Both writes are in functions/src/chat.ts, which is worth reading rather than believing.

One exception, which we would rather name than have someone find. When the vendor refuses a request outright, our server writes the first 300 characters of the vendor's error body to its operational log, because without that an outage cannot be diagnosed. Some vendors quote part of the request back inside that body. Those entries go to our Cloud Logging rather than to any database of ours and are never shown to you or to anyone outside the project, but it is the one path on which a fragment of a question could land in a log line, and it is cheaper to say so here.

Which vendor sits behind a model, and what that vendor calls it, are deployment parameters on our side rather than anything fixed in the app, because vendors rename and retire models on their own schedule and an installed build cannot be redeployed. The models offered during the beta are Groq Turbo and Groq Instant on Groq, GPT (fast) on OpenAI, Grok 4.6 on xAI and Claude Haiku on Anthropic. Rows for Google and a second OpenAI model exist in the same table and are switched off. The app fetches that list from us, so it can change without a new build, and this page names the current vendors rather than permanent ones. We will update it when they change.

The daily allowance

2,000 credits per licence per day, during the beta. An answer costs one credit on the free model, two on GPT (fast), four on Claude Haiku and six on Grok 4.6, so a day is 2,000 answers or 333 depending on what you pick. It is counted per licence rather than per device, so three Macs on one key share one allowance, and it resets at midnight UTC. When it runs out the next question is refused before anything is sent anywhere, with a message saying when the allowance comes back and whether a cheaper model can still afford it. Credits are spent at the moment a request is accepted rather than when it succeeds, and they are not returned if the vendor then fails. There is nothing you can add to raise the limit, because there is no key to add.

What used to be different

Until recently you could pick Claude, GPT, Gemini, Groq or a local model in Settings, paste your own key, and have the request go from your Mac straight to that provider with nothing of ours in the path. That option is gone. The key storage, the vendor clients and the settings screen that held them were all deleted, so there is no configuration in which a question avoids our backend. What you get in exchange is that there is no vendor account to open, nothing to paste, and no key of yours on disk to leak. We think that is the better trade for a pilot, and it is a real trade rather than a free improvement, which is why it is written here rather than left for you to notice.

Troctor Next, in the browser

Everything above describes the Mac app, whose promise is that your meetings stay on your machine. Troctor Next is a separate product at troctor.com/next, and its promise is close to the opposite, because its point is the opposite: you record a conversation in the browser in order to share it, as a live link, or with named people, and a conversation you can open from any browser is a conversation stored on our servers. The two products share your account and licence and nothing else; nothing here changes what the Mac app does. If you never open Troctor Next, nothing in this section happens.

What is captured

Your microphone, the one thing the Mac app never captures is the first thing Next asks for, through the browser's ordinary permission prompt, only after you press Record. System audio is not captured in the browser, and neither is your screen. The audio streams from your browser directly to Soniox on the same sixty-second minted keys the Mac app uses, so on its way to transcription it does not pass through our servers. What comes back, the finalised text, is published to our database as it is spoken, because appearing live on the page you shared is the product.

Following along, on a shared page

A shared conversation offers Follow along: press it, read the transcript out loud, and the page highlights the word you are on. It needs no account, because the link you were sent is what grants it, and while it runs your microphone streams to Soniox on the same short-lived minted keys everything else here uses. The difference from recording is what happens to the words: nothing is stored anywhere. Your voice is not saved, not added to the transcript, not shown to the person who shared it with you, and not visible to us; the recognised words exist for the instant it takes to move a highlight in your own browser and are then gone. Nothing starts until you press the button and grant the microphone, it stops when you press Escape or close the page, and it stops itself after a few minutes of silence.

What we store, per conversation

The transcript
Every finalised line, with the per-meeting speaker labels the vendor assigned. This is the first Troctor product in which a transcript is held by us rather than by you, and it is held so that the people you shared it with can read it.
Title, times, duration
Plus your display name as the conversation's owner, shown to people you share with, a shared page that does not say whose meeting it is reads as a trap.
The summary
Overview, action items and outline, if one was written.
A search copy
The transcript flattened into one document so your own search can look inside your conversations. Readable by nobody but our own search code acting for you.
The recording
When you stop, the browser uploads a compressed copy of the audio to our storage so the conversation can be exported with its recording, and delivered to Google Drive if you send it there. This is the first place in any Troctor product where audio is held by us. It is reachable only through the same sharing rules as the transcript, and only through links our backend mints on request, which expire after minutes rather than lasting for ever. If the upload fails, or the tab dies mid-meeting, we hold no audio for that conversation and the page says so rather than hiding it.
Sharing lists
Private by default. Turning the link on makes the conversation readable by anyone holding its unguessable address. Adding people stores their email addresses; a channel stores the member addresses you typed. Invitee addresses are readable by you and our rules engine, not by other invitees.

Summaries travel like questions do. When a summary is written, the transcript goes through our backend to a model vendor on our keys, exactly as a question from the Mac app does: relayed, not stored, with a usage record and nothing of the words. The transcript itself was already stored, because storing it is what Next is.

Deletion is real. Delete forever, in the app, removes the conversation for everyone: the transcript, the summary, the search copy, and the recording from our storage. Bin first, so a slip is recoverable; purge on delete.

AI Chat reads your own conversations, the ones you recorded or imported, and nothing else unless you say so. Settings has a switch, "Conversations shared with me", off unless you turn it on, that lets it also read what other people shared with you. What it reads travels the way a summary does: through our backend to a model vendor on our keys, relayed and not stored there.

Your conversations are not used to train models, and are not used to improve Troctor unless you say so. Settings has a switch, "Help improve Troctor", off unless you turn it on. With it on, a conversation you record from then on may be read by Troctor's own people, the recording and its transcript, to measure and improve how accurately Troctor transcribes, and for nothing else: never to train a model, never shared, never sent anywhere it would not have gone anyway. It is stamped on each conversation at the moment it is recorded, so turning it off later stops it for new conversations and does not reach back, and turning it on later does not open old ones. The default is off and stays off for anybody who never touches it.

Integrations, when you connect them

Next can deliver a finished conversation to services of yours, Slack, Notion, a webhook endpoint you name, and Google Drive; it can read a calendar you connect, Google or Microsoft Outlook, to show what is coming up; and it can import recordings you choose from your own Zoom cloud recordings or from a dedicated Dropbox folder. The calendars are covered in their own sections, and Zoom and Dropbox in their own, because reading your accounts deserves more than a bullet. All of it is off until you connect a service, and nothing is delivered automatically until you switch auto-send on, per service.

  • What we store: the credential you provided, a Slack webhook URL, a Notion token and page, your endpoint's URL, or the Google or Microsoft credential described below, on our servers. It is never shown back to any browser, ours included, and it is deleted when you disconnect.
  • What a delivery carries: the conversation's title, date, duration, owner name and summary, plus its link only when the link is switched on. Google Drive deliveries also carry the transcript and the recording, as files, because Drive is where files go. The webhook payload never includes the transcript.
  • Whose hands it lands in: the service you connected, under that service's own terms. A delivery is you disclosing your conversation to a place you chose; we are the courier, not a new custodian.

Troctor Voice, the phone receptionist

Troctor Voice answers a venue's inbound phone line, holds the conversation, books tables and, where the venue has switched it on, takes orders for pickup or delivery. It is in a closed beta with a small number of restaurants. If you are a caller who rang one of those venues, this section is about your call. If you run one of those venues, it is about your workspace too, and the Voice data terms are the contract underneath it: they say that your callers' details are yours rather than ours, name every company that touches them, and set out what happens to all of it when you leave.

The audio path is different from every other Troctor product, and we say so plainly. The Mac app streams meeting audio from your own machine to a transcription vendor without touching our servers. A phone call has no Mac to start from. When you ring a venue that uses Voice, your call reaches us over the phone network (carried by Telnyx), the audio is handled in real time by call infrastructure we operate (built on LiveKit), speech is turned into text by Soniox or Deepgram (whichever engine the workspace runs), the reply is composed by a model at OpenAI (or at Google, where a workspace is set to run one of theirs) and spoken by Cartesia. The audio passes through infrastructure we run. It is processed live and it is not kept: we do not record calls, and there is no recording setting to switch on in this beta.

Callers are told at the start. The very first thing the agent says on every call identifies it as an AI assistant, says the call is transcribed, and offers a way out: say "no recording" and the agent takes a message with nothing kept. That announcement is ours, and it is the same at every venue. It is one sentence held in the system, spoken word for word whoever you rang: there is no field in a venue's console that could reword it, no switch that could turn it off, and no setting we intend to add. A venue cannot soften it, shorten it, move it later in the call or opt out of it, and that is the design rather than an oversight, because it is the sentence that makes the rest of the call fair to you. We keep a technical receipt for every call proving the announcement finished before transcription began.

Some callers are asked one more thing. Several US states, California, Florida, Illinois, Maryland, Massachusetts, Pennsylvania and Washington, require everyone on a call to agree before it is recorded or transcribed rather than just one person. We are in North Carolina, which does not, and a venue's own agreement does not cover a caller in a state that does. So when the number you are calling from carries an area code belonging to one of those states, the agent asks you one question after the announcement and before anything is written down: is it alright to keep a transcript of this call. If you say no, nothing you say is stored. The agent takes your message the way a person at the counter would, passes it to the venue, and no transcript of that call exists afterwards, on our side or theirs. You can still book, still order, still be rung back.

An area code is not a location, and we know it. A Chicago number rings from Denver, people keep the number they had at nineteen, and a mobile says nothing about where its owner is standing. So the rule is deliberately over-inclusive: it asks more callers than it strictly has to, because the alternative is guessing where you are from your phone number, which is both less accurate and more intrusive than simply asking. This is the newest part of Voice and it is going in during the closed beta, which makes it the one paragraph of this section describing something we are adding rather than something that has run since the first call. Responsible Use names the same states for the Mac app, and the reasoning is the same in both places.

What we store from a call: the transcript, a short summary and outcome produced by a model, the caller ID as the phone network delivered it (shown to the venue the way any office phone shows it), any booking made (name, phone number, party size, date and time, and any note you asked to pass to the kitchen), and the consent receipt described above, which holds a salted one-way hash of the caller's number rather than the number itself. What we deliberately do not build: caller profiles across calls, voiceprints, or any analysis of how a caller sounds. If you say a card number aloud the agent will not ask for one and does not want one; payment happens at the venue.

Orders, and the texts about them. An order you place by phone (the items, your name, the phone number you gave, and a delivery address if there is one) is stored in that venue's workspace the way a booking is, so the kitchen can make it. If you gave a phone number, Troctor may text that number from a Troctor number about that order and nothing else: the order number when the order is placed, a word when it is ready, and a word if the kitchen moves the time, changes the order or has to cancel it. The venue can switch these texts off. There is no marketing in them, they stop when the order is done, and every one of them names the venue and the venue's own phone number. Reply STOP to any of them to receive no more texts from Troctor, or HELP for the venue's number; message and data rates may apply. The phone numbers callers give are used for the call, the booking or the order they gave them for, and are never sold or shared with third parties for marketing or promotional purposes.

How long it stays: transcripts are deleted by an automatic job after 90 days. Bookings, orders and the messages taken for a venue belong to that venue's workspace and last as long as it does. Consent receipts are kept for four years and then deleted by a job of the same kind, because they exist to prove the announcement was played if anyone ever asks, and four years is roughly how long somebody has to ask. A receipt is deliberately not a record of who rang. It holds the times, which version of the announcement was spoken, what you said in reply, and a salted one-way hash of your number rather than the number itself, which means it can confirm that the caller on a particular call heard the disclosure and cannot be turned back into a list of phone numbers.

Getting a venue's data deleted, and the button that does not exist. There is no delete button in the venue console, and we would rather say so than have somebody hunt for one. What exists is us. A venue writes to privacy@troctor.com from an account on the workspace, and within 30 days we delete the workspace and what sits under it: the call records, any transcript still inside its ninety days, the bookings, the orders, the messages and the menu. Ask for a copy first if you want one, because afterwards there is nothing to copy. The one thing that may outlive the rest is the consent receipts, to the end of their four years, because they are the proof that those calls were disclosed and they hold no number that identifies anybody. And archiving is not deletion, which is worth saying plainly because the two sit near each other in our own console: archiving a venue stops the line being answered and hides the workspace from its staff, and everything under it stays exactly where it was until someone deletes it.

Model vendors do not get free rein. Call transcripts go to the model vendors named above only to produce the reply and the summary, on our keys, under the same terms as the rest of Troctor: we do not use your calls to train models, and we choose vendor settings that do not retain content for training where the vendor offers that control.

This is a beta. The honest consequence is that details here will change as we learn, and when they do this section changes with them, dated like every other change to this page.

Google user data: Calendar and Drive

Troctor Next can connect to Google Calendar and Google Drive with Google sign-in. This section is the complete account of that data. If you connect neither, none of it applies.

We request two permissions, each only when you connect its feature: calendar.events.readonly, a read-only view of your calendar events, and drive.file, which lets the app create files and see only the files it created, Google's own permission model makes the rest of your Drive invisible to us, which is why we chose that scope over a broader one.

Calendar: what we access
Your next 24 hours of events, titles, times, attendee addresses, and the meeting link, fetched from Google when you open the app and shown to you as an "up next" list.
Calendar: what we store
Nothing, by default. The list is fetched, shown on your screen, and discarded; your calendar is not written to our database. Two things persist only because you act: starting a recording from an event stores that event's title as the conversation's title, and attendee addresses are offered as sharing suggestions, stored only if you actually share with them, exactly as if you had typed the address yourself. Suggested is never pre-shared.
Drive: what we do
Create files, the summary, the transcript, the recording, inside a folder named "Troctor Next", and only when you send a conversation there or have auto-send on. We store that folder's identifier so exports land in one place. We read nothing from your Drive beyond confirming the files and folder we created exist.
The credential
The sign-in happens between your browser and Google; the resulting refresh token is stored on our servers, is never sent to any browser or any third party, and is used for nothing but the two purposes above. Disconnecting in the app deletes it and asks Google to revoke it. You can also revoke it yourself at any time at myaccount.google.com/permissions, which cuts us off regardless of anything on our side.

Google user data is not sold, is not used for advertising, is not shared with anyone except as described above, and is never used to train AI or machine-learning models, calendar and Drive data does not reach a model at all: the model sees the conversation's transcript, which was recorded by you in Troctor Next, never anything read from Google.

Troctor's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.

Microsoft user data: Outlook Calendar

Troctor Next can connect Outlook Calendar with Microsoft sign-in. It is the Microsoft twin of the Google Calendar connection above, and the same discipline applies word for word: if you never connect it, none of this happens.

We request three permissions from Microsoft: Calendars.Read, a read-only view of your calendar; User.Read, which tells us the address of the account you connected, shown on the integration's card, and used to leave you out of the attendee suggestions; and offline_access, which is what lets the connection persist between visits. Troctor never creates, edits or deletes an event.

What we access
Your next 24 hours of events, titles, times, attendee addresses, and the meeting link, fetched from Microsoft Graph when you open the app and shown in the same "up next" list as Google's, merged.
What we store
Nothing, by default. Fetched, shown, discarded; your calendar is not written to our database. As with Google: an event's title is stored only if you start a recording from it, and an attendee address only if you actually share with that person.
The credential
The sign-in happens between your browser and Microsoft; the resulting refresh token is stored on our servers, never sent to any browser or third party, and used for nothing but the reads above. Microsoft rotates these tokens and we store each rotation, which is bookkeeping rather than new access. Disconnecting in the app deletes it. Microsoft offers us no way to revoke it remotely, so the deletion is the whole of our side; you can also review and remove app access yourself at account.microsoft.com/privacy (personal accounts) or myapps.microsoft.com (work accounts), which cuts us off regardless.

Microsoft user data is not sold, is not used for advertising, is not shared with anyone, and is never used to train AI or machine-learning models, calendar data from Microsoft, like Google's, does not reach a model at all.

Zoom user data: cloud recordings

Troctor Next can connect your Zoom account to import your own cloud recordings as conversations. If you never connect Zoom, none of this happens. Troctor has no meeting bot: it never joins, records, or attends a Zoom meeting. It only fetches recordings that already exist in your Zoom cloud, and only the ones you individually choose.

We request two permissions from Zoom: user:read:user, which tells us the address of the account you connected, shown on the integration's card; and cloud_recording:read:list_user_recordings, a read-only view of your cloud recording list. Troctor never creates, edits or deletes anything in your Zoom account.

What we access
When you open the browse list: your last 30 days of cloud recordings, meeting titles, dates, durations and file sizes. When you import one: that recording's audio (or video) file, fetched once from Zoom by our servers.
What we store
Only what you import. The imported recording file is stored with the conversation it becomes, exactly as if you had uploaded the file yourself, along with the meeting's title as the conversation's title. The browse list itself is fetched, shown, and discarded; recordings you do not import are never stored.
Transcription
An imported recording is transcribed by our speech-to-text provider (Soniox), the same way a file you upload is; the audio is deleted from the provider when transcription completes. The transcript then behaves like any Troctor Next conversation, including the AI summary.
The credential
The sign-in happens between your browser and Zoom; the resulting refresh token is stored on our servers, never sent to any browser or third party, and used for nothing but the reads above. Zoom rotates these tokens and we store each rotation, which is bookkeeping rather than new access. Disconnecting in the app deletes the credential and asks Zoom to revoke it. You can also remove the app yourself in the Zoom App Marketplace under Manage → Added Apps, which cuts us off regardless of anything on our side.

Zoom user data is not sold, is not used for advertising, is not shared with anyone except as described above, and is never used to train AI or machine-learning models. The AI summary sees the transcript of a recording you chose to import, never your recording list or anything else read from Zoom.

Dropbox user data: your Troctor folder

Troctor Next can connect your Dropbox to import recordings you place in one specific folder. If you never connect it, none of this happens. The connection uses Dropbox's App Folder access, which means Troctor can see exactly one folder, Dropbox/Apps/Troctor, and is technically incapable of reading anything else in your Dropbox.

We request three read-only permissions: account_info.read, which tells us the address of the account you connected, shown on the integration's card; files.metadata.read, the names, sizes and dates of files in the app folder; and files.content.read, the ability to download a file from that folder when you import it. Troctor never creates, edits or deletes anything in your Dropbox.

What we access
When you open the browse list: the file listing of the app folder, names, sizes, modification dates. When you import one: that file, fetched once from Dropbox by our servers.
What we store
Only what you import. The imported file is stored with the conversation it becomes, exactly as if you had uploaded it yourself. The folder listing is fetched, shown, and discarded; files you do not import are never stored.
Transcription
An imported file is transcribed the same way an uploaded file is; the audio is deleted from the transcription provider when processing completes. The transcript then behaves like any Troctor Next conversation, including the AI summary.
The credential
The sign-in happens between your browser and Dropbox; the resulting refresh token is stored on our servers, never sent to any browser or third party, and used for nothing but the reads above. Disconnecting in the app deletes the credential and revokes the entire grant at Dropbox. You can also remove the app yourself at dropbox.com under Settings → Connected apps, which cuts us off regardless of anything on our side.

Dropbox user data is not sold, is not used for advertising, is not shared with anyone except as described above, and is never used to train AI or machine-learning models. The AI summary sees the transcript of a file you chose to import, never your folder listing or anything else read from Dropbox.

What we collect

When you ask for a beta key

The form on the download page writes one record: your email address, your name, what you do, your company if you give one, which meeting tools you already use, roughly how many meetings a week you have, the note you wrote about what you would want to ask, and where you arrived from (the query string on the link you followed, or the referring page, truncated). The record is stored under an identifier derived from your address, so submitting the form twice updates a timestamp rather than creating a second entry. Only your email address is required.

If you are let in and sign in

Sign-in is handled by Firebase Authentication. We store your email address, your name if your sign-in provider supplies one, your account status, and the licence attached to it.

The licence record holds the key itself, your email address, its status, its plan, how many machines it allows, when it was issued and when it expires, and how many activations it currently has. The only plan value that exists is beta. There is no payment processor, no card details, no invoice and no subscription tier, because the beta is free and there is nothing to bill.

Each Mac you activate

Activation exchanges your key for a per-device token, and creates one record per machine:

Device identifier
A random UUID generated on that Mac the first time Troctor runs and written to a file. It is deliberately not derived from a serial number, a MAC address or anything else that follows you between products, and deleting that file resets it. It exists to count installs, not to identify a person.
Token hash
A hash of the device token. The token itself stays on your Mac.
Machine name
The name your Mac calls itself, so that three laptops on one key are three distinguishable rows in your dashboard and "free one up" is an instruction you can act on. If you named your Mac after yourself, that name identifies you, and we would rather say so than pretend it is anonymous.
Build and system
App version, platform, macOS version and CPU architecture.
Timestamps
When the Mac was first activated and when it last checked in. The app checks in at launch and once a day.

Each time you download the build

One row in an audit log: your account identifier, your email address, the licence, the version you downloaded and the time. Download links are signed and valid for ten minutes, and this log is what lets a leaked link be traced back to the account that requested it.

Usage reporting from the app

Counts, durations and short identifiers, on by default. The complete list is the next section, in full rather than in summary.

Each answer we serve, and each meeting you transcribe

Counters, all written by our backend rather than by the app: one usage record per answer holding the model name, token counts and timing, a running total of credits for the day against your licence so the allowance can be enforced, and, for live mode, the seconds of connection reported while a meeting runs plus a count of how many connections that licence has opened today. None of them has a field capable of holding anything you wrote or anything anybody said. The answer records are itemised in the next section.

Feedback you send from the dashboard

Your account identifier, your email address, the message you wrote, the kind of feedback you picked and your app version.

When you email us

Whatever you put in the email, kept so we can answer you and remember the conversation if you write again.

This website

No advertising cookies, no analytics tags and no third-party trackers on any page. Our host records standard server logs including IP address and user agent, retained briefly for security and abuse prevention. The waitlist form counts submissions per IP address to keep bots off it, in a short-lived rate-limit record.

Usage reporting in full

Every event carries the event name, your device UUID, your licence identifier, the app version and a timestamp. Beyond that, each event may carry only the properties named against it below. This is the entire list, and it is the same list that exists in the app's source.

app_launched
The app version. Nothing else.
vault_chosen
That you picked a vault folder. No path, no folder name, no properties at all.
import_completed
How many files, how many meetings, how many were skipped, how many failed, and how many milliseconds it took.
import_failed
How many files.
ask_submitted
The kind of scope you asked in (a short word such as all, person or project, never the person's or project's name), which model, and whether it was a follow-up.
ask_answered
How long it took, how many passages were used, and the retrieval confidence score rounded to two places.
ask_error
Whether the error was recoverable, and which model.
brief_generated
How many passages were used, how long it took, and how many people were named in the meeting's setup. A count of names, never a name.
live_session_orphaned
Sent at most once at launch, and only if the previous run ended with a transcription connection still open. Carries how many channels were open and roughly how many minutes had passed. Never the meeting, never a line of the transcript. It exists because a connection nobody closed keeps costing us until the vendor cuts it off, and a fault we cannot count is a fault we cannot fix.
api_failed
Which of our own endpoints a request failed against, our refusal code, the HTTP status, how long it took, and whether it was tried again.
listen_started
How many channels, and how many milliseconds Listen took to start.
listen_stopped
How many channels, and how many minutes the meeting ran.
listen_failed
Whether it failed before it started or while it was running, and how long it had been going.

The last four are new, and they are about Troctor rather than about you. Our server can only count requests that reached it, so a request that never arrived, a Listen that took twenty seconds to start, and a meeting that died halfway are all invisible from our side. They carry a duration, a count of channels, an HTTP status and our own refusal codes. None of them can carry what a meeting was about, who was in it, or what you asked.

Four names that this page used to list are gone from it. ask_gated measured the confidence gate, and when that gate was removed in v0.1 the event was taken out of the app and out of the server's allow-list in the same change. citation_opened, insight_shown and answer_rated were listed here while nothing in the build sent them, which overstated what is collected, so they are off the list until something actually emits them.

One further event is written by our own server rather than by the app, and it is the only one the switch in Settings does not govern. chat_served is recorded once per answer, and carries our model id and the vendor model string behind it, the credits it cost, the input and output token counts, whether those were measured or estimated, how long it took, and whether it failed. It exists because every answer is money out of our pocket and we need to know how much. No client can send it, and it is stored alongside the rest with the same 90-day expiry. There is no longer a way to opt out of it while still asking questions, because there is no longer a path to a model that does not go through us.

The list is closed, which is a stronger guarantee than filtering. A property not named above is dropped rather than inspected, so question, file, speaker, title, text, email, query and vault cannot reach us on any event, and a test fails the build if any of them is ever added. The same list exists again in the server that receives events and is applied a second time on arrival, so a modified copy of the app cannot send more than an unmodified one. The security page describes how that is enforced and tested.

Events are kept for 90 days and then expire automatically. Turning reporting off in Settings also discards anything queued and not yet sent, rather than letting one last batch go.

One thing the same switch governs is not an event. The report sent after each meeting is a single document with three lists in it rather than a name and a few numbers, so it has its own endpoint, its own closed schema applied on both sides, and its own row in the retention table. It is described in full above, under what leaves after a meeting, because that is where somebody deciding whether to leave the switch on would look.

Our sign-in and dashboard pages in a browser send one more thing, and it is smaller than everything above. When a page cannot reach us, or fails to run, it posts two words: which page it was (signin, action, dashboard or admin) and what happened (network, timeout, server, refused, expired, script or unsupported). No address, no identifier, no message, no page address, no error text. Both lists are closed on the page and again on our server, so nothing outside them can be sent even by a modified copy of the page, and what arrives is added to a counter rather than stored as a record, so there is nothing kept that could describe one visit. This exists because sign-in was once broken for days while every number we had said everything was fine: the failure was in the page, so our server was never called, and a server cannot count a request that never arrived.

What this data cannot tell us: what you asked, what was in any meeting, what your files are called, who you meet with, or what your vault contains. It can tell us that a question took eleven seconds, that an import of forty files produced thirty-eight meetings, and that answers are failing more often on one app version than another. That is what it is for.

How we use it

  • To decide who to let into the beta, and to email you a key.
  • To confirm a licence is valid and to hold it to three machines.
  • To serve you the build and to know which account each download went to.
  • To answer your emails and read your feedback.
  • To find out where the app is slow, where imports fail, and what the answers and the transcription cost us to run.
  • To keep the service from being abused, through rate limits and the hidden field on the waitlist form.
  • To meet legal obligations.

We do not sell personal data. We do not share it with advertisers. We do not build advertising profiles. We do not train models on anything, and we have nothing from your meetings that we could train on.

If you are in the UK, EU or another region applying similar law:

Contract, and steps taken at your request before one
The waitlist submission, your account, your licence, the activation record for each Mac, relaying your question to the model vendor and counting what you have spent of the day's allowance, and, for live mode, issuing the temporary transcription key and counting the minutes it is used for. These are how the thing you asked for is provided at all. The audio itself is not on this list, because it does not reach us: it goes from your Mac to the vendor on a socket we are not part of.
Legitimate interests
Usage reporting, the download audit log, rate limiting and abuse prevention, and support correspondence.
Legal obligation
Where the law requires us to keep or produce something.

On usage reporting specifically, because it is the one that deserves the argument rather than the label: our interest is knowing whether a beta product works before more people rely on it. The balance rests on what the data is. It is counts, durations and short fixed identifiers, tied to a device UUID and a licence rather than to anything you said, and it cannot contain a question, a file name, a person's name or a line of a transcript. You can object at any time by turning it off, the switch is shown at activation before the first event is sent, and turning it off discards what has not been sent.

We do not rely on consent anywhere in this policy, and there is no cookie banner on this site, because nothing here runs on consent.

Who we share with

Here is the list, and what each one receives. The first two are infrastructure providers, bound by contract to process data only on our instructions. The next two are the vendors that do the work a question or a meeting needs, under their own terms as well as ours. The last two exist only if you connect them:

Google (Firebase)
Authentication, database, serverless functions, file storage and hosting. The waitlist, licences, activation records, download log and usage events all live here, and this website is served from it.
Email delivery
Sends the confirmation for the waitlist form, the invite carrying your key, and our replies. Messages are queued in our own database and handed to the delivery service from there.
The model vendors
The vendors behind the models listed under what leaves when you ask, depending on which model you picked. The messages our backend relays are processed by them under our accounts, on our keys, and Troctor Next’s summaries travel the same way. The list changes when the model list does, and this page follows it.
Soniox, the transcription vendor
On this list for the first time, and the change is worth naming. Soniox used to be a company you had an account with, so they were not ours to disclose. The account and the key are now ours, so they are. The audio still goes straight to them and never through us, from your Mac in the app, from your browser in Troctor Next, but it is our key that authorises the stream and our bill that pays for it. What they retain is governed by their own terms, and a deletion request to us cannot reach a stream they have already been sent.
Google, for Calendar and Drive
Only if you connect them in Troctor Next, and only as the Google section describes: events read for display, files written to a folder of the app’s own making, a credential held server-side and revocable by you at any time.
Microsoft, for Outlook Calendar
Only if you connect it, and only as the Microsoft section describes: events read for display, never stored by default, a credential held server-side and deleted on disconnect.
Zoom, for cloud-recording import
Only if you connect it, and only as the Zoom section describes: your recording list read for display, the one recording you import fetched and stored with its conversation, a credential held server-side, revoked and deleted on disconnect.
Dropbox, for folder import
Only if you connect it, and only as the Dropbox section describes: one app folder listed for display, the one file you import fetched and stored with its conversation, a credential held server-side, revoked and deleted on disconnect.
The services you connect through integrations
Slack, Notion, a webhook endpoint of yours, each receives a conversation’s summary material only when you send it or switched auto-send on, as the Next section itemises. These are disclosures you direct to services of yours, under their terms.

What we do not share is anything from your vault, because we do not have it. The passages a question retrieves reach a model vendor by way of our backend and are not written down on either side of that hop by us. Everything else on your Mac, including any recording live mode wrote, stays there.

The current list of providers is available on request from privacy@troctor.com, and we will give notice before adding a new one. We may also disclose information where the law requires it, or to protect our rights, safety or property. If a valid legal request arrives, we will tell you unless we are prohibited from doing so.

How we protect it

Some of what this policy describes is sensitive by any reasonable definition: the words people said in a meeting, and the credentials you grant us for Google, Microsoft, Zoom and Dropbox. This section says what actually protects them, mechanism by mechanism, rather than asserting that we take security seriously.

Encrypted in transit
Every connection is HTTPS with TLS 1.2 or better, enforced by HSTS so a browser will not fall back to plain HTTP. That covers the app, the API, the transcription socket your browser holds to Soniox, and every call we make to Google, Microsoft, Zoom and Dropbox on your behalf. There is no unencrypted path in or out.
Encrypted at rest
Transcripts, summaries, saved recordings and account records live in Google Cloud Firestore and Cloud Storage, encrypted at rest with AES-256 under Google-managed keys as standard for those services. Nothing is stored on servers we operate ourselves; we run no long-lived machines with copies of your data on them.
OAuth credentials are write-only from a browser’s point of view
Refresh and access tokens for Google, Microsoft, Zoom and Dropbox are held in Firestore documents that no client can read at all, under an explicit deny in our security rules. They are used only inside our backend. The app never receives a token back, not even a masked one: it is shown a label such as the connected account’s name, and nothing else. A token a page can read is a token a cross-site scripting bug can steal, so no page can read one.
Secrets never reach the client
Our own API keys for Google, Microsoft, Zoom, Dropbox, Soniox and the model vendors live in Google Secret Manager, injected into server-side functions at runtime and never present in any page, bundle or repository. For transcription the backend does not hand out its key at all: it mints a temporary one that is single-use, expires in about a minute, and can do nothing but open one capped audio stream.
Access is denied by default
Our database rules are a read policy with a deny-all default, so a collection added tomorrow is closed until someone deliberately opens it. No client writes anything anywhere: every change goes through a server function that checks who is asking. A conversation is readable by its owner, by people they invited by email, and, only when they switch link sharing on, by whoever holds the link; turning it off revokes open readers within seconds.
Least privilege in what we ask of you
We request read-only calendar access and, for Drive, only the per-file scope that can touch files our own app created. We cannot read, alter or delete anything else in your Drive, and we cannot write to your calendar at all. Where a narrower permission exists, we ask for the narrower one.
Human access
Troctor is operated by one person, and administrative access to the production project is that single Google account, protected by two-step verification. There are no shared logins, no third-party support tool with a copy of your data, and no routine practice of reading customer content: it is looked at only if you ask us to investigate something, or if we must to fix a specific fault you reported.
Deletion means deletion
Deleting a conversation purges its transcript, its search copy, its access list and its stored audio, not a flag on a row we keep. Disconnecting an integration deletes the stored credential and, for Google, Zoom and Dropbox, also asks the provider to revoke it, so the grant stops existing on their side too.
Isolation between the two products
The Mac app holds its vault on your own machine, and that data has no path to us at all. Nothing in Troctor Next can reach it, which is why a breach of our servers could not expose it.
If something goes wrong
If we discover a breach affecting personal data we will investigate immediately, tell affected users without undue delay and within 72 hours of becoming aware where the law requires it, say plainly what was exposed, and notify the relevant supervisory authority where required. You can report a suspected vulnerability to security@troctor.com.

How long we keep it

Waitlist entry
While the private beta runs, then deleted when it closes. Ask sooner and we will delete it sooner.
Account and licence
While your licence is live, then deleted within 90 days of the beta ending or of you asking us to.
Activation records
For the life of the licence. Releasing a Mac from your dashboard marks it released and frees the seat; ask us and we will delete the row.
Download audit log
180 days, then it expires automatically.
Usage events
90 days, then they expire automatically. The expiry is written onto each event as it is stored, so it does not depend on anyone remembering to run a cleanup. The chat_served records our server writes are ordinary events and expire on the same schedule.
The daily allowance counters
One document per licence per day for answers, holding how many credits were used and what they cost in tokens, and one for transcription, holding the seconds used and how many connections were opened. Each expires 30 days after the day it covers. Neither has a field that could hold anything you wrote, which is the reason their shape is fixed rather than open.
Feedback and support email
Three years from your last message.
Live meeting audio from the Mac app, on our side
Never received and never stored. It goes from your Mac to the vendor on a socket we are not part of. What Soniox keeps from that stream is governed by their terms.
Live meeting audio, on your Mac
Until you delete it, or for ever if you never do. Nothing prunes recordings on a timer, because the recording somebody wants back is usually an old one. The app shows what they occupy and offers Delete, and the audio can be switched off before a meeting so none is written.
Live transcripts
On your Mac, in your vault and in the recording folder, until you delete them. We never receive one unless you turn on the switch that shares them, and then it arrives inside the meeting's report and expires with it.
Meeting behaviour reports
90 days, then they expire automatically, with the expiry written onto each report as it is stored. Whether or not a report carries words, it expires on the same schedule. Turning usage reporting off discards any report not yet sent; it does not reach back and delete ones already received, and you can ask us to.
Your vault and index
Until you delete them. They are on your Mac and we never had a copy.
Troctor Next conversations
Transcript, summary, search copy, sharing lists: until you delete the conversation, which removes all of them for everyone. The bin holds a trashed conversation until you restore it or delete it for good.
Troctor Next recordings, on our side
Until you delete the conversation they belong to; deleting it purges the audio from our storage in the same act.
Integration credentials
Until you disconnect that integration, which deletes the stored credential, and, for Google, Zoom and Dropbox, also asks the provider to revoke it. Microsoft offers no remote revocation, so for Outlook the deletion is the whole of our side and your Microsoft account page is the other half.
Google sign-in nonces
Single-use, spent at the moment you return from Google, and expired after ten minutes regardless.

What you can do yourself

There is no single button in Troctor that erases everything, and we would rather say that plainly than let you go hunting for one. Here is what actually exists:

  • Delete the vault. It is your own folder of your own files. Drag it to the bin like anything else. Nothing of ours has to agree, and nothing breaks elsewhere.
  • Delete the app's folder. Troctor's folder under ~/Library/Application Support holds the search index, the device UUID, the stored licence, any queued usage events and any recordings live mode has written. Removing it removes all of them.
  • Remove the licence from a Mac. Settings, then Licence, then "Remove from this Mac". Your vault and index stay exactly where they are. Note that this does not free the seat: releasing a machine so the seat can be reused is a separate action in your dashboard.
  • Leave live mode off. It arrives off and stays off until you switch it on for a particular meeting. Revoking the microphone and system audio permissions in System Settings, under Privacy and Security, takes the capability away from the app entirely, whatever it is asked to do.
  • Delete a recording, or never make one. Open the meeting, and each recording is listed with its size beside Show in Finder and Delete. The switch beside them stops the audio being written for future meetings, in which case only the transcript is saved.
  • Decide what a meeting may spend. The assistant in a live meeting has three settings, and off means no model call is made for any reason, including a question you type into the panel. That is the control that stops a meeting reaching a model at all.
  • Turn usage reporting off. Settings, then Usage reporting. Anything queued and unsent is discarded at the same time.

For anything we hold on our side, email privacy@troctor.com and we will do it.

Your rights

Depending on where you live, you may have the right to see the data we hold about you, correct it, delete it, receive a copy in a portable format, or object to certain processing. You also have the right to complain to your data protection authority.

If you're a California resident, you have rights under the CCPA and CPRA to know, delete, correct and opt out of sale or sharing. We don't sell or share personal information as those terms are defined, and we won't discriminate against you for exercising any right.

To make a request, email privacy@troctor.com. We'll reply within 30 days and may need to verify who you are first.

Worth knowing what such a request can and cannot reach. Most of what you would want deleted was never ours to hold: your meetings, your questions, the answers you got and any recording of a call all live on your own disk. Questions passed through our backend, but they were relayed rather than stored, so there is no copy of them for us to delete and none for us to produce. A request to us covers the waitlist entry, the account and licence, the activation records for your Macs, the download log, the usage events and the allowance counters. It cannot reach a recording on your Mac, which is yours to delete in the app. Troctor Next is the exception in the other direction: its conversations and recordings are on our servers precisely so they can be shared, so a deletion request, or the Delete button in the product, which is faster, really does reach them, transcript, summary, search copy and audio alike. Audio sent to Soniox during a meeting never passed through us, so there is nothing here to delete; what they hold is governed by their terms, and we will pass on a request if you send us one.

Troctor Voice is the part where your request has two addresses, and it is worth reading before you send it. If you rang a restaurant that uses Voice, what exists is the transcript of that call for its ninety days, a short summary of it, the number the phone network showed us, and whatever you gave the restaurant in order to do business with it: your name, a callback number, an order, a delivery address, a booking. That is the most sensitive material anywhere in this product, and almost none of it is ours to decide about. It belongs to the restaurant. They decide what is kept and what is deleted, and we hold it for them and act on what they tell us, which is the ordinary arrangement between a business and the software it runs its phone on. In the language the law uses, the restaurant is the controller and Troctor is the processor, and the whole of that arrangement is written out in the Voice data terms.

Either address works, and neither is a dead end. Ask the restaurant, and they can cancel a booking or an order themselves in their own console straight away, and tell us to erase what is left of the call. Ask us at privacy@troctor.com, name the venue and roughly when you rang, and we will tell you what is held for that call, put the request to the restaurant, and carry it out as soon as they instruct us, or straight away where the law puts the duty on us rather than on them. Two honesty notes on that. We will not quietly erase a restaurant's records because somebody emailed us claiming to be a caller, so expect to be asked to verify the number you rang from. And we will not let a request die in silence either: if a venue does not answer us, we will tell you that, and tell you who they are, so you can go at it from the other side. What no request can do is find you across venues, because there is nothing to search on. We build no caller profiles, keep no voiceprints, and the consent receipt holds a salted hash rather than your number, so a phone number is not a key that opens anything here.

International transfers

We're based in the United States and our providers may process data there or elsewhere. Where data moves out of the UK or EEA we rely on Standard Contractual Clauses or another approved safeguard.

Children

Troctor isn't intended for anyone under 16, and we don't knowingly collect their data. If you believe a child has given us information, write to us and we'll remove it.

Changes

If we make a material change we'll update the date at the top of this page and, for anything significant, email account holders before it takes effect. If we ever start collecting something new, it will appear in the lists above before it is collected, not after.

Contact

Questions about any of this go to privacy@troctor.com, or by post to Globyskytek LLC, #2150, 207 W Millbrook Road, Suite 210, Raleigh, NC 27609, United States.