The short version
Isolation between clubs is structural, not a policy setting: every conversation belongs to a membership at one club, and no query shape reaches another club's rows.
Your roster is the source of truth. Nobody holds a password — members, your staff and our own team all prove a mailbox instead — and a member's standing comes from your export.
The concierge answers only from what you gave it, treats everything it reads as untrusted text, and hands the member to your staff rather than guessing.
We keep the minimum, encrypt it at rest and in transit, and write an append-only audit record for every change your staff make and every time we look at a member on your behalf.
We have no SOC 2 report and no third-party penetration test. What we have instead is on this page, in detail, including the parts that are unfinished.
17 controls, four honest states
Most trust pages show a wall of green checks. This one uses four states, because 3 of ours are not green — and a club's IT review is faster when the gaps are named up front rather than found later.
One club cannot reach another
The question every club asks first, and the one where a policy answer isn't good enough.
A club cannot reach another club's data, and cannot learn which other clubs a member belongs to.
- A person is one row globally; a membership is that person at one club. Every member-facing record hangs off the membership, and a conversation's membership is a non-null foreign key — there is no transcript without a member behind it, at exactly one club.
- Everything club-owned is read through the current club's own associations, explicitly, at every call site. There is no default scope to forget, and no record's owning club is ever inferred from a URL.
- The club identifier in the address bar authorizes nothing on its own. Access comes from a membership or a staff assignment looked up in the requester's own records.
- A person's list of clubs is unreachable from any club or staff context. If a member belongs to three clubs, none of the three can learn about the other two.
- Members, club staff and our own team each work on a separate origin, with separate sessions and separate gates. A session on one is not a session on another.
Nobody holds a password
There is no self-service signup anywhere in the product. Your roster decides who exists.
- A member signs in with a six-digit code or a link from an email: ten minutes, one use, five guesses, and bound to the browser that asked for it — so a forwarded code is inert.
- Continue with Google verifies the token's signature against Google's published keys and every claim separately. It only ever binds to an account your roster already contains, on a verified address, and it never creates one.
- That Google binding is cut the moment the account's email changes, and whenever the owner disconnects it from their own page — so a mailbox someone loses control of cannot keep signing in as them.
- Your staff sign in the same way, and so do we. There is no staff password to guess, reuse, phish or relay — and nothing for anyone to hand a new colleague, because adding someone creates an account with no way into it but their own mailbox. Staff who prefer Google can use it, and bring Google's second factor with them.
- Rate limits on every sign-in endpoint, per requester and per address, so one inbox cannot be flooded from rotating machines. A staff sign-in link issued by a colleague for a member reaches one club, once, for a week, and is audited when used.
- Removing a staff assignment revokes that person's staff sessions immediately. A departing employee is signed out, not merely un-listed.
What the model may see, and may do
The section a board in 2026 reads first, and the one most vendors answer with a sentence.
It answers from your knowledge only, and everything it reads is fenced off from its instructions.
- Every retrieved passage, past conversation, preference, newsletter section and document excerpt is wrapped in a per-turn random marker before it reaches the model, with instructions that text inside the marker is reference material and never an instruction.
- A newsletter is trusted only as far as its DKIM or SPF alignment proves the sender. Anything applied from one that no staffer has read is delivered separately, marked unverified, and never as the club's own word.
- If the knowledge base doesn't cover a question, the concierge hands off to your staff rather than answering. A confidently wrong answer about a guest fee costs a club more than "let me check with the team."
The concierge acts only where you have connected a system, and only within what you granted it.
- It reaches your systems through a service account you provision, scoped to what you decide it may do, revocable in one click, and never displayed back to anyone once stored. What it may do is a closed list of specific actions — there is no general-purpose access and nothing that executes arbitrary instructions.
- Every action is taken as the member who asked, through their own membership at your club — never an identity the model supplied. There is nothing for it to reach across by construction.
- Actions are budgeted per conversation turn, so a confused exchange cannot become a run of duplicate bookings, and each one is written to your audit trail with the member and the request behind it.
- Anything the concierge cannot do confidently it hands to your staff, and it never reports something as done that it has not confirmed in your system.
We measure the answering, not only the retrieval.
- Much of what keeps a member safe is written in the concierge's instructions rather than in code, so we test the instructions themselves — a suite of adversarial cases run against the live model, covering grounding, refusal, disclosure, prompt injection, restraint about acting, and how it handles what it has been told to remember. It runs before any change to those instructions ships.
- Across every run to date, none has produced a wrong fee, a wrong rule, or a fact your knowledge base does not contain. The failures we do record are the concierge deferring too little or overstating what it had done — both of which we treat as failures rather than relax.
- We would rather tell you what the suite covers than quote a percentage. A score without its test set behind it is a number, not an assurance.
What actually leaves for the model, each turn.
- Sent: the club's published knowledge, the passages retrieved for the question, the member's display name, their stated preferences, a short summary of what the club has done for them, and the last twenty turns.
- Not sent: the member's email address, phone number or member number. No billing data — we hold none. No other club's anything.
- The provider is Anthropic's commercial API, whose terms exclude training on customer inputs and outputs. There is no BagDrop model being trained on anything.
- Embeddings and voice transcription run in-process on our own machine. Dictation audio is deleted inside the request that transcribed it and is never stored.
What we hold, by class
Everything BagDrop stores about a member or a club. Nothing off this list exists.
| Class | Fields | Source | Who sees it |
|---|---|---|---|
| Who your members are | the identifying and membership details your roster carries — name, contact details, member number, category, standing | your roster | the member; your staff; our team |
| Their directory profile | the biographical and contact fields your own directory publishes, each shown only where your export marks it visible | your directory | other members of your club, under your club's own permissions; your staff |
| What they've asked | conversations with the concierge and with your staff, and a short subject line for each | the member, at your club | the member; your staff; our team; our AI provider, per turn |
| What they've told us | preferences a member states, and notes your staff record for them — staff-entered ones stay with your club until the member chooses otherwise | the member; your staff | the member; your staff; the model, per turn |
| What your club publishes | the knowledge the concierge answers from: your documents, hours, events, closures, newsletter and the facts drawn from them | your club | members according to your visibility rules; your staff; the model |
| Your system credentials | a service account you provision, encrypted, with a record of who at your club authorized it | your club | nobody — used by the integration, never displayed back |
| Technical records | the sessions and notification endpoints needed to keep someone signed in and reachable, and an audit trail of staff and internal actions | the device | your staff, for your club's audit trail; our team |
| Not held | payment or billing details · live balances or statements · dictation audio · any club's data inside another club's context | ||
Every third party that receives data
The complete list, all 5 of them. We will give a club thirty days' notice before adding one.
| Processor | Receives | Purpose | Note |
|---|---|---|---|
| DigitalOcean |
everything, at rest | server, managed database, object storage for uploads, encrypted queue replica, archive storage | single region; database and object storage encrypted at rest by the provider; daily backups and point-in-time recovery |
| Anthropic |
per turn: club knowledge, retrieved passages, member display name, preferences, service summary, recent turns. In the background: a finished conversation, to record what it was about; and, where a club has turned that on, one member's recent conversations when a staffer asks for a working note about them | the model behind the concierge | commercial API; inputs and outputs excluded from model training under Anthropic's terms |
| MailerSend |
member name and email for sign-in and notification mail; your newsletter inbound | transactional email and newsletter routing | inbound webhook signed with HMAC over the exact body |
| Google |
sign-in identity where a member or staffer chooses Google; IP and user agent when a page loads fonts | Continue with Google; web fonts | the only request a member's browser makes to anyone but our own infrastructure provider |
| GitHub |
source code and the container image | source hosting, CI, image registry | no member data; the image carries encrypted credential files only |
| Never | no advertising or marketing pixels · no third-party tracking of members · no data brokers · no sale or sharing of personal information · and thirty days' notice to your club before anything joins the list above | ||
Where it runs
One managed database off the box, one box, both encrypted, all in a single US region.
- TLS everywhere with HSTS. Member and club data lives in a DigitalOcean managed Postgres cluster in New York, encrypted at rest by the provider, with daily backups and point-in-time recovery.
- The operational stores on the server — job queue, cache, error log — sit on a LUKS2-encrypted volume. Uploaded documents and photos are not on the server at all: they live in object storage in the same region, reachable only through links that expire.
- A club's own vendor credentials are encrypted at the column level, cannot exist without a record of who at the club authorized them, and are never readable back — not by staff, not by us.
- No secret has ever been committed to the repository. Keys live in encrypted credential files, and the git history has been checked for this specifically.
- A club whose review requires stronger separation can be run on dedicated infrastructure — its own database, backups and keys. It is available on request, priced accordingly, and worth raising early so we can scope it against your timeline.
How each store is backed up, and who holds the key
Not one answer but four, because they genuinely differ — and the difference a reviewer cares about is who holds the key, so that is a column rather than a footnote.
| Store | How it's backed up | Key held by | Recovery point |
|---|---|---|---|
| The database — everything a club and its members give us | managed by our infrastructure provider: encrypted at rest, backed up daily, recoverable to any point inside the retention window | the provider's | to the minute |
| Documents and photos | encrypted object storage, reachable only through links that expire; copied nightly to separate storage, AES-256-GCM encrypted on our own machines before it leaves them | the provider's for the store; ours for the nightly copy | to the minute; 24 hours for the second copy |
| Work in flight — queued jobs and operational records | on encrypted storage, replicated continuously and encrypted by us before it leaves the machine, with the restore verified nightly rather than assumed | ours, held offline | about one minute |
Every backup we make ourselves is encrypted on our own host before it leaves — the queue replica and the nightly copy of your documents — so those buckets hold ciphertext and nothing else. The stores themselves are a different answer: the managed database and the object storage holding uploads are both encrypted at rest by DigitalOcean, under DigitalOcean's keys, and we hold no key that would let us decrypt them independently. That is the ordinary arrangement for managed infrastructure, and it is the same arrangement for your members' conversations as for their club's handbooks — we would rather be consistent about it than claim a stronger guarantee for the documents than for the transcripts. A club that needs the stronger one should ask about dedicated infrastructure with its own keys.
What ages out, and when
A window marked like this is read from the constant the nightly sweep actually uses, not typed into this page. Change the code and this table changes; there is no second copy to forget.
| What | Kept for | Counted from | How it's enforced |
|---|---|---|---|
| Conversations | 12 months | the end of the membership | nightly sweep, once the roster marks a member lapsed or resigned |
| Roster record, profile, preferences, push subscriptions, the team's working note | 30 days | your export dropping the member | nightly sweep |
| The working note we write about a member for your team | 90 days | it being written | nightly sweep, whether or not anyone asks — and at once if the member clears it, which also stops another being written until they say otherwise |
| A member who asks to be deleted | 7 days | the request | out of the product at once; erased after the grace window, with a suppression record so your next export does not resurrect them |
| Inbound newsletter, raw | 1 day | routing and reading it | incinerated on schedule, not the 30 days the mail framework would keep by default |
| Uploads archives offsite | 30 days | the archive being written | pruned on each nightly run, which is what keeps the privacy policy's backup window true |
| Document links | 6 days | issue | signed URLs expire; a roster upload file is purged once imported |
| Audit events | 7 years | the event | kept by policy — never updated or deleted, and a member's identity within them is redacted to a token on erasure |
Audit, and who at BagDrop can see what
Every staff and operator mutation writes an append-only record.
- Facts, documents, hours, closures, roster imports, member profile edits, staff sign-in links, integration credentials, club settings, every sign-in and sign-out, and every feature-flag change — each writes an audit event with actor, IP address and request identifier. The table is never updated and never deleted from.
- Directory lookups, where a club enables the directory, are audited on every attempt including the refusals, mirror your own directory permissions, never widen them, require the asking member to be in good standing, and are capped per day.
- A club's staff console gates on named capabilities rather than job titles, so what someone can do is visible on one page and revocable there.
Our own team can read member conversations. We would rather say so than imply otherwise.
- Access is limited to named people on our team, through a console that cannot write, on a database role that cannot write, with every query recorded. The other route in is being given a staff assignment at your club — which appears on your own team page, where you can remove it.
- There is no encryption on shared infrastructure that hides conversation content from us. Almost no vendor in this category can honestly claim otherwise; a club that needs that guarantee should ask about dedicated infrastructure with its own keys, and we will put the access policy and an audit review into the contract.
How the software is built
With no SOC 2 report to hand you, this is the evidence we do have — and it's more specific than a badge.
Every commit passes four gates before it can merge.
- Static security analysis of the application, a check against known vulnerabilities in every Ruby dependency, the same for JavaScript dependencies, and the full test suite. A failure blocks the build; there is no override.
- Deployment runs from a pinned pipeline to a single host whose SSH host keys are pinned rather than trusted on first use.
The security invariants are tests, not documentation.
- Five invariants sit at the top of the repository — tenant scoping is explicit, a conversation belongs to a membership, a person's other clubs are unreachable, the concierge answers only from supplied context, and staff-entered preferences stay club-local until the member elevates them. Each is enforced by specs. A change that breaks one fails the build.
- An architecture decision record is written in the same change that makes the decision, so the reason a control exists is recoverable years later. This page cites them by number throughout.
We review our own systems adversarially, and fix what it finds before we call it done.
- The whole application is examined against an attacker's goals rather than a checklist — tenancy, authentication, what the model can be talked into, what an upload can carry, what a compromised session reaches. Last completed September 2026, and re-run when the architecture changes materially.
- Everything it surfaced was remediated as part of the review rather than logged for later. Where we decided against a change, that decision is written down with its reasoning, and the ones a club would care about are in the gaps below.
- We will walk your security team through the review and its outcomes under NDA.
If something goes wrong.
- We notify an affected club within 72 hours of confirming a breach that touches its information, and notify members directly where the law requires it. This is a term of service, not a courtesy.
- Exceptions are grouped and alerted on, and a failed backup check emails the operators inline rather than through the queue it is checking.
- Report a vulnerability to security@bagdrop.ai. We will acknowledge within two business days, we will not pursue anyone acting in good faith, and we will credit you if you want the credit.
What we don't have yet
A trust page that lists only strengths tells a reviewer nothing they can act on. These are the things a club's IT reviewer will find anyway, put here so the conversation starts past them.
We hold no certification today. What we offer in its place: this page, a walkthrough of our own security review under NDA, a completed security questionnaire in your format, and contractual commitments on the controls that matter to you. If certification is a firm requirement for your board, raise it early — it is a question of when we start, not whether we would.
Our own adversarial review is the closest equivalent, and it is thorough. An independent test is a reasonable thing to write into a contract, and we would welcome one your side commissions.
Our own internal sessions expire daily. Member and staff sessions are deliberately long-lived, because the concierge and the staff console are installed on phones and carry notifications — an expiring session would silently stop those. Leaving a club, or having a staff assignment removed, ends the relevant sessions at once.
Named people on our team, read-only, audited, on a database role that cannot write. Stated plainly here because you would find it in diligence anyway, and because the alternative — dedicated infrastructure with your own keys — is a real option we would rather discuss than have you assume away.
The managed database and the object storage holding your documents are both encrypted at rest by DigitalOcean, under DigitalOcean's keys. The backups we make ourselves — the queue replica and the nightly copy of your documents — are encrypted on our own host under keys we hold, but for the live stores we rely on the provider. That is the ordinary arrangement for managed infrastructure, and we apply it consistently rather than claiming a stronger guarantee for handbooks than for the conversations they inform. Worth knowing rather than discovering.
The only request a member's browser makes to a company that isn't our own infrastructure provider. Documents and photos are fetched straight from our object storage, which is DigitalOcean — the same company already running the server and the database, so it learns nothing from that request it could not already see. There is no analytics, no tracking pixel and no advertising script anywhere in BagDrop. Self-hosting the fonts is a small change if a club cares, and some do.
Questions we're asked
Grouped the way a review usually runs. If yours isn't here, security@bagdrop.ai answers it.
Not today. We will complete your security questionnaire, walk your team through our own security review under NDA, and make contractual commitments on the specific controls you care about. If certification is a board requirement, tell us early and we will scope it against your timeline.
Not by an independent firm. We review the application ourselves against an attacker's goals rather than a checklist — tenancy, authentication, what the model can be talked into, what a compromised session reaches — and remediate what it finds before the review closes. Last completed September 2026. An independent test is a reasonable thing to put in a contract.
Yes. Most of the answers are on this page, which is why it exists in this much detail — send it over and we will fill it in rather than pointing you back here.
Ask us for our current coverage and limits in writing, and we will provide a certificate. We are not going to state a figure on a page that may age.
No. Isolation is in the schema rather than in a filter: every member record hangs off a membership at one club, and there is no query shape that crosses. It is enforced by tests that fail the build, and the September review found no path around it from inside a club.
No. A person's list of clubs is unreachable from any club or staff context — a specific invariant, tested specifically, precisely because reciprocal and multi-club membership is sensitive in this market.
A single United States region: DigitalOcean, New York. Our subprocessors may process elsewhere under their own terms. There is no EU or UK region today.
In transit, TLS everywhere with HSTS. At rest, a managed Postgres cluster and object storage both encrypted by the provider, the server's own operational stores on a LUKS2 volume, offsite backup copies encrypted on the host before they leave it, and your vendor credentials encrypted at the column and never readable back.
No. We do not sell personal information and do not share it for cross-context behavioral advertising, ever. We run no advertising or third-party tracking. The subprocessor table above is the complete list of who receives anything, and we give thirty days' notice before adding to it.
Members' and staff's access ends with the club's. Ask us for an export and you get a single archive: your club's record, every member as your roster describes them, every conversation they had with the concierge in order, and the knowledge it answered from — with the documents themselves alongside it. It carries a manifest saying what is in it and what we deliberately left out, and why. Everything is then deleted on the schedule in the retention table, or sooner if you ask in writing. Audit records are retained for seven years with identities redacted.
No. There is no BagDrop model to train. The concierge runs on Anthropic's commercial API, whose terms exclude training on customer inputs and outputs. The only model on our own machine is a pre-trained embedding model doing inference.
Ask us for the current retention term on our account rather than taking a number from this page. Zero-retention terms exist and are available; if your review needs one, raise it and we will confirm the arrangement in writing.
It is instructed and structured to answer only from your published knowledge, to say what it is unsure of, and to hand off to your staff otherwise. We test that against the live model before shipping any change to its instructions, and no run has yet produced a wrong fee, a wrong rule, or a fact your own knowledge base doesn't contain.
Everything the model reads — retrieved passages, past turns, documents, your newsletter — is fenced off from its instructions and labelled as reference material, never as something to obey. Prompt injection is one of the categories in the behavioral suite that gates every change, and no case in it has ever failed.
Every tool reads through the asking member's own membership, so there is nothing to leak by construction. The one place members can learn anything about each other is the directory, which exists only if you turn it on, shows only what your own export marks visible, and audits every lookup including refusals.
Only what you connect it to and authorize it for. It reaches your systems through a service account you provision and can revoke in one click, limited to a closed list of specific actions, budgeted per conversation turn, and written to your audit trail every time. It never invents an action you did not enable, and it will not report something as done that it has not confirmed in your system. BagDrop takes no payment and holds no payment details.
A newsletter is trusted only as far as its DKIM or SPF alignment proves the sender. Anything applied from an unverified one is kept separate, marked unverified, and never presented as the club's own word until a staffer confirms it.
With a six-digit code or link emailed to the address on your roster: ten minutes, one use, five guesses, bound to the browser that requested it, and using either one retires the other. Nobody holds a password with us — members, your staff, or our own team. There is no self-service signup: if they aren't on your roster, they don't exist.
There is no staff password for a second factor to sit on top of. Signing in means proving the mailbox on your own records — which at most clubs is already behind your identity provider's MFA — or using Google, which brings Google's second factor. So the control you're asking about is inherited from whoever runs your email rather than bolted on by us, and there is no credential of ours to phish or reuse.
Yes — we're building it now. Members sign in from your own member portal, and staff from your identity provider: you assert who someone is, we verify the assertion, and nobody holds a second password. Tell us which provider you use and we will confirm the timeline against your rollout date.
Remove their assignment from your team page and their staff sessions are revoked immediately, on every device. They are signed out, not merely un-listed.
Their standing follows your roster. On the next import a lapsed or resigned member drops to publicly visible knowledge only, and 12 months after the membership ends their conversations are removed by the nightly sweep.
Named members of our own team, and nobody else. Access is on a read-only database role with a query timeout, and every query is recorded. We will name them, and put the access policy and an audit review into the contract.
Yes, both, and without going through you. An "About you" page inside the concierge shows what we hold; a member can leave one club or delete their whole account, and erasure follows after a 7 days grace period. A suppression record means your next roster export won't resurrect them without their say-so.
BagDrop isn't directed to children under 13 and we don't knowingly collect their information. A club that enrolls a minor is responsible for the parental consent its own junior memberships and the law require. Tell us if a child's information reached us and we will delete it.
Our privacy policy grants access, correction, deletion, portability and non-discrimination rights to every member regardless of where they live, and we verify a request against the email on your roster. Data is processed in the United States. If you need a data processing addendum, ask and we will sign one.
Your club decides what is collected and why; we process it to run the concierge for you. Most of what we hold about a member came from your roster, which is why we may ask you to confirm a member's request before acting on it.
Availability is something we set in your agreement rather than publish as a blanket figure, so it reflects what your club actually needs. Raise it during the contract and we will commit to something we can genuinely stand behind.
Daily managed backups with point-in-time recovery; the job queue replicated every minute and its restore verified nightly by a job that writes a sentinel and reads it back out of the replica; uploads archived nightly, encrypted on the host, offsite.
A full database restore was rehearsed end to end on 8 September 2026: recovered to a timestamp six hours old rather than the newest backup, then checked for the vector extension, every migration rather than just the latest, and the row counts of the tables whose loss is the reason any of it exists. The rehearsal cluster was destroyed afterwards. We re-run it when the database's provisioning changes.
We do, for the backups we make ourselves: the queue replica is age-encrypted and the nightly copy of your documents is AES-256-GCM, both on our host before anything is uploaded, so those buckets hold ciphertext and nothing else. The stores themselves are the provider's — the managed database and the object storage holding uploads are encrypted at rest under DigitalOcean's keys, which is the same arrangement for your handbooks as for your members' conversations. The table above sets this out store by store, and a dedicated instance is the answer if you need the stronger guarantee.
Within 72 hours of confirming one that touches your information, to your named contact, in our terms of service rather than as a courtesy. Members are notified directly where the law requires it.
Write to security@bagdrop.ai. We acknowledge within two business days, we will not pursue anyone acting in good faith, and we credit reporters who want it.
Yes, on request and at additional cost: your own database, backups and keys, on our domain or yours, running the same software. Raise it early if your review requires it, so we can scope it against your timeline.
Each property stays a full tenant with its own members, staff, knowledge and audit log. A group console reaches only the group's own properties, sees aggregates and never transcripts, and group staff get real, visible, revocable assignments at each property. A property can narrow a group's settings, never widen them. Ask for the design document.
What we'll send you
Available on request, most of it under a mutual NDA: the September adversarial review with its remediation status, a completed security questionnaire in your own format, our subprocessor list with change notice, a data processing addendum, our insurance certificate, and the group-of-properties design.
bagdrop.ai/terms
What changed, when
A trust page nobody updates is worse than none. This log is the proof that this one is maintained.