Security

How Facets protects your data.

Facets uses managed hosting and database services. We also manage application permissions, encryption, and operational access.

This page covers where Facets runs, who can reach it, what the backups guarantee, and where our compliance program stands. For who can see what inside the product, including which roles read which data and the one route between feedback and performance records, read who can see your answers and results.

Infrastructure

Facets operates no servers of its own. The database and the application run on two managed platforms, and the certifications below are theirs. Facets holds none of its own (see current status). Application permissions, field-level encryption and operator access are Facets’ controls, described in the sections that follow.

Supabase — database, authentication, storage

Managed PostgreSQL 17 in AWS us-east-1. Supabase states it is SOC 2 Type 2 compliant, ISO 27001 certified and HIPAA compliant, and that customer data is encrypted at rest with AES-256 and in transit via TLS.

Vercel — application hosting

Vercel states it holds a SOC 2 Type 2 attestation, is ISO 27001:2013 certified, holds a PCI DSS SAQ-D Attestation of Compliance, is certified under the EU-U.S. Data Privacy Framework, and encrypts data at rest with AES-256.

Sub-processors

Transactional email through Resend; narrative report text, the project plans and task breakdowns a manager asks for, the plans for new projects a manager asks for, the drafts of project updates a manager asks for, the estimates of how long a project’s tasks will take that a manager asks for, and the themes a manager asks to have suggested for an idea board, through Anthropic, covered below. All are named with their purpose in the privacy policy. In the manager tools, the conversation guides, 1:1 agendas, follow-up actions from notes, measurable wording for goals and draft assessments a manager asks for go through Anthropic too. So do the message drafts and tone checks a manager asks for in Drafts. So does the guide to a growth or stay conversation a manager asks to have adapted to the person.

Field-level encryption

On top of the platforms’ encryption at rest, Facets encrypts its most sensitive free text itself before storing it, with AES-256-GCM under keys kept outside the database: what managers record about the people who report to them, the written answers given in team surveys, 360 reviews and engagement surveys with the comments and facilitator notes that reports keep, shared open links, and Slack and Teams channel addresses. Each value is bound to its column and to the record it belongs to, so a value copied into another column or onto another record will not decrypt. Names, email addresses, job titles, goals, ratings, idea boards and projects are encrypted only at rest by the platforms. This protects what is stored this way against a copy of the database or a backup, not against a compromise of the running application, which holds the keys. The keys are ours; customer-held keys are not offered.

Data residency

Database and hosting are both in the United States for the product as we run it. A dedicated instance can be created in another region. Either way the region is fixed at creation, and customers will be told in advance if that ever changes.

Access control

Administrative access to production is limited to named operator accounts, controlled by an allowlist in the deployment configuration together with a roster we can revoke immediately. Each must also pass a one-time code from an authenticator app. Every access to a released report is logged.

Row-level security is enabled on every table. The tables holding raw ratings, comments and self-assessments have no read policy for any signed-in account at all — they are reachable only by server code holding a service credential, and only after it has verified a single-use participant token or a staff role.

The operator console is blocked at the column level from manager-side records — assessments, goals, 1:1 notes, colleague input — and from what teams write on idea boards and projects. A test fails when a new table is added and nobody has decided which side of that line it belongs on; it runs in continuous integration on pull requests marked ready for review and on changes to the main branch.

Participant links are single-use, randomly generated, and stored only as a one-way hash, so an existing link cannot be looked up or read back by anyone, including us. A lost link is re-issued, which stops the old one at once. On idea boards and projects, every other email that carries a new link — a reminder, a digest, an answer to an idea — leaves the one before it working for up to a day, so a page already open outlasts the email; a survey or rater link stops the moment a new one is issued. An engagement survey’s links are the exception: the link in the first invitation keeps working until the survey closes, alongside the link in the latest reminder, and a link from a reminder in between stops when the next one is sent.

The one exception is a shared open link: the single link that can be switched on for an idea board, a project or a leadership review so that a whole team can join by it. So that it can be copied again later, it may be kept as the link itself, not only as a hash, while it is switched on, and it is shown only to the person who switched it on — not to the team, not to a workspace admin, and not in our operator console. That copy is encrypted, as Infrastructure above describes. It is deleted the moment it is switched off or replaced, when a review’s link reaches its limit, or when its board, project or review closes. Personal links are never kept.

A personal calendar link is a personal link too: stored only as a one-way hash, so it appears once, when it is made. Anyone signed in can make one so that a calendar app they choose, such as Outlook, can fetch their own dates and titles, including the names of the people they manage. Getting a new link ends the old one at once, with no grace period, because a calendar link is replaced when it has leaked; turning it off ends it the same way.

A manager may connect Microsoft Power BI to a read-only feed of what they themselves see. Its key sits in the feed's address, is stored only as a one-way hash, appears once when it is made, and ends at once when it is replaced or stopped; each key may make up to 600 requests an hour.

Each connection, from Slack and Microsoft Teams to Entra ID, Okta and Power BI, is off until someone in your workspace turns it on. Connections lists what each one connects, who turns it on and what it can see.

Backups and recovery

Schedule and retention

Automatic daily backups, kept on a rolling seven-day window, held in the same region as the database.

Recovery point

Up to 24 hours of writes could be lost in a restore. Point-in-time recovery is not currently enabled. No recovery time is published, because none has been measured.

Deletion, end to end

Raw answers are deleted from the live database within 90 days of a team or organization leaving the service. A backup taken before that deletion retains them until it expires, at most seven days later — so the end-to-end figure is 97 days. Leaving is either closing the workspace yourself, which starts the clock that day, or your last subscription or purchase lapsing, which starts it from the date the entitlement ended rather than the date we noticed. A nightly job does the deletion and records what it removed.

Scope

Backups are held within the same platform as the database. There is no independent off-site copy today.

AI

Scoring is entirely deterministic. No model decides a number, a threshold, or whether a result is shown to anyone. Where a model is involved it writes narrative, drafts a project plan, a task breakdown or an update about a project for a manager to review, drafts the plan for a new project from what a manager describes, estimates for a project’s manager how long its tasks might take, or suggests themes that group an idea board’s ideas for its manager to read; who can see what sets out exactly what it receives in each case.

In the manager tools, a model also prepares, when a manager asks, a conversation guide, a 1:1 agenda, follow-up actions from their notes, measurable wording for a goal or a draft assessment for someone who reports to them, for the manager to review. When a manager’s AI credits are used up, and whenever model-written output is off or no AI provider is configured, each of the five answers from its standard template instead, and nothing is sent. It also adapts, when a manager asks, the guide to a growth or stay conversation to the person, from their role, the kind of work they do and what they said in the last such conversation; when the credits are used up, or model-written output is off, the guide’s own words are used and nothing is sent.

In Drafts, a model also writes a message a manager asks for, an email, a text or a chat message for them to send themselves, and checks how a message’s tone reads. Facets keeps no draft on the website and sends nothing on the manager’s behalf; in the iPhone and iPad app a finished draft or tone check is held, encrypted, for 24 hours so the app can collect it. Drafts has no template: when a manager’s AI credits are used up, and whenever model-written output is off or no AI provider is configured, it writes nothing, and nothing is sent.

The provider is Anthropic, whose commercial terms state that Anthropic may not train models on customer content from the services. Nothing written in Facets trains a model.

With no AI provider configured, a deterministic template writes the report instead, and writes a complete one. A customer who does not want a model near their data is asking for a supported configuration rather than an exception.

Theme suggestions on an idea board have no template behind them. They run only on a board opened with them switched on, which its team is told before anybody posts, and only when its manager asks; with no provider configured, or with model-written output turned off, there are none, and nothing stands in for them.

Application security

Standard hardening headers on every route, with an enforced Content-Security-Policy. Participant link routes sit behind rate limiting at the network edge. No analytics, tag manager, chat widget or advertising script runs anywhere in the product, and fonts are self-hosted. The public pages of this site, this one included, carry Google's measurement tag, as the privacy policy describes; it never loads in the app or on any page where somebody answers a question.

In September 2026 the application went through a full internal security review covering authentication and sessions, database-level tenancy rules, participant routes, server actions, billing and model prompts, and web hardening and supply chain. Everything it found has been fixed. Each fix was tested by reproducing the problem on a database without it, then checking that the fix blocked it.

Reporting a vulnerability

Write to security@facets.team. You will get a human reply and be told what happened to what you sent. Testing against your own data is welcome; testing against another customer’s is not, and neither is anything that degrades the service for people using it. There is no bug bounty. Credit on this page is offered to anyone who wants it.

Current status

Where the compliance program stands today.

  • No SOC 2 or ISO 27001 of our own. The platforms underneath hold theirs.
  • No external penetration test. The September 2026 review was internal.
  • Two-step verification is available on every account. Sign-in is a one-time link by email, a Google account or a passkey. Facets does not require a separate password, so there is none of ours to reuse or leak. With two-step on, a new browser also needs a six-digit code from an authenticator app. The session cookie cannot be read by scripts on the page. Our own operator accounts carry the same second factor.
  • SAML single sign-on is supported and set up per customer: we configure it with your identity provider, so it is not self-serve. SCIM provisioning covers the survey roster, not accounts: Microsoft Entra ID or Okta can push who is invited to a cycle through SCIM 2.0, and the changes are applied when an owner or admin confirms; an account is still created on first sign-in, and removing someone is done in Facets. A single sign-on session skips our own two-step check: your identity provider’s second factor, if it requires one, stands in for it.
  • No self-serve deletion of a single run or a single person’s answers. Export is self-serve — an owner or admin downloads the workspace’s rosters, team packs and engagement summaries from Settings → Workspace, a manager downloads any person’s record from their page, and closing a workspace starts the ninety-day deletion described above. Ask through the contact form for anything narrower than that, or to delete an account that is the sole owner of a workspace still holding data. It reaches us directly, with no account needed.
  • No off-site backup copy, and a seven-day retention window.
  • No published uptime figure, as none is measured. A service level agreement is available in a negotiated annual contract; there is no standing one.

Questions

Send a security questionnaire through the contact form, or pick the privacy reason instead for data protection, access and deletion.