Trust

Security at Narrative

Last updated: October 5, 2026

Narrative AI, LLC handles CRM records, business contact data, meeting content you choose to record, and the research and drafts your team builds on top of them. This page describes how that data is protected, how changes reach production, where we stand on compliance, and how to report a vulnerability.

We write this page the way we answer security questionnaires: only what is true today. Where a control is not in place yet, it is named in What we do not claim yet rather than quietly left out. We would rather lose a deal on truth than win one on a claim we cannot defend.

Infrastructure and subprocessors

Narrative runs entirely on managed infrastructure. We operate no data center and no office network, so physical and environmental security is inherited from the providers below, each of which publishes its own third-party attestations.

  • Heroku (a Salesforce company) — the application API, the PostgreSQL database, and the Redis cache and job queue. US region.
  • Vercel — the web application and its edge network.
  • Cloudflare — DNS and the edge in front of our domains, plus R2 object storage for call-recording audio and data-export bundles.
  • Nango — brokers the Salesforce and HubSpot OAuth connections and holds those tokens. Nango publishes a SOC 2 Type II report.
  • Stripe — subscription billing and payment processing.
  • Sentry — application error monitoring, with PII scrubbing configured on both the web and API projects.

Beyond that infrastructure, Narrative uses subprocessors in a defined set of roles: AI model providers for research and drafting, B2B contact and public-profile enrichment, speech-to-text and meeting transcription (only for customers who turn on call recording), product analytics, e-signature, telephony, and transactional email. The complete current register — each vendor, the data it receives, its region, and its data processing addendum — is available on request at security@getnarrativeai.com. We give 30 days' notice to a customer's billing contact before adding a subprocessor that processes regulated personal data.

How your data is protected

The strongest protections are the ones that are structural — properties of how the system is built, not settings that can be left misconfigured.

  • We do not store the mail we read. When you authorize Narrative to read a thread, it produces summaries, context, and suggestions, and keeps only that derived result — the bodies of your incoming messages are not retained in our database. Outreach your reps compose and send through Narrative is a different thing and is stored, because the record of what was sent to a customer is the point of it.
  • We never hold your CRM credentials. Salesforce and HubSpot OAuth tokens are held by Nango, not by us. They are not in Narrative's database, so a compromise of Narrative does not yield a token that can call your CRM.
  • We never see card data. Stripe collects and processes payments. No card number reaches our systems at any point.
  • Encrypted in transit. Every public endpoint is served over HTTPS, and both the web application and the API send HSTS with the preload directive, so compliant browsers refuse to talk to us over plaintext at all.
  • Encrypted at rest. The PostgreSQL database and R2 object storage are encrypted at the disk level with AES-256 by the hosting providers. On top of that, the Google and Microsoft OAuth tokens we hold on your behalf, and the seeds behind authenticator-app codes, are encrypted at the application layer with Fernet before they are written. Recovery codes are stored only as hashes, and passkeys are stored as public keys, so for those there is nothing in the database to decrypt at all. A database dump alone does not yield a usable second factor.
  • Tenant partitioning. Customer records are partitioned by company: list and retrieve queries resolve the caller's company through a single canonical resolver, and a cross-tenant request returns 404 rather than 403, so the existence of another organization's record is never disclosed. We re-verified this directly against the production database in October 2026 and found no cross-tenant data.
  • No secrets in source. The application repositories carry no credentials; secrets exist only in the per-environment configuration of Heroku and Vercel. This was independently re-scanned in October 2026.
  • Your data is not a product. We do not sell customer data, do not share it for advertising, and do not use your content to train third-party foundation models for anyone else's benefit.

On the application surface: database access is parameterized throughout, uploads are validated and size-limited, a Content-Security-Policy is set on both tiers, CORS and CSRF origins are explicit allowlists rather than wildcards, and every inbound webhook endpoint verifies the provider's signature before acting on a payload.

Our sending domain is covered by SPF, DKIM, and DMARC at p=reject, and the domain itself is DNSSEC-signed with registrar transfer and delete locks in place. A forged email claiming to come from Narrative is rejected by the receiving mail server rather than delivered to your team.

Access control and authentication

  • Sign-in is by email and password or by single sign-on. Passwords are stored only as salted hashes and are checked against length, complexity, and common-password rules.
  • Multi-factor authentication is available to every user, in three forms: TOTP (Google Authenticator and equivalents), WebAuthn security keys and passkeys, and single-use backup codes. Enrollment is self-service from account settings.
  • Session tokens are not reachable from JavaScript. The web application keeps its tokens in __Host--prefixed, httpOnly, Secure cookies, so there is no readable token for a cross-site scripting bug to steal. Access tokens are short-lived, refresh tokens rotate, and a refresh token is blacklisted on logout.
  • Deactivation is immediate. Every authenticated request re-checks that the account is still active, so removing a user takes effect on their next request rather than whenever their token happens to expire.
  • Authorization is default-deny. The API refuses unauthenticated access unless an endpoint explicitly opts out, and every endpoint that does opt out has been individually reviewed for what it exposes.
  • Sensitive operations require fresh proof of identity. Security-relevant actions prompt for re-authentication even inside a live session, and the internal administrative interface is gated behind multi-factor authentication.
  • Support access is impersonation-based and audited. When we need to see what you see in order to help, it happens through an impersonation path, and every action taken under it is written to the audit trail with the operator's identity attached.
  • The browser extension holds no credentials of its own. It authenticates off your existing Narrative web session and has no separate login.

How changes reach production

This is the control we lean on hardest, so it is worth describing exactly. Nobody pushes to production. Development lands on a staging trunk that deploys to an isolated staging environment; the production branch is written only by a single promote workflow. The direct production-write commands are additionally blocked at the tooling layer by a deny list, so they cannot be run by hand even deliberately.

  • Blocking gates on every push. A staging deploy happens only if all of these pass: framework system checks, a migration-graph consistency check, a registry membership gate that fails the deploy when a changed product surface is missing from the checked-in workflow registry, dependency CVE scanning on both tiers (pip-audit --strict on the API, a production-dependency audit on the web application), lint and type checking, the scoped test selection executed against PostgreSQL with migrations applied, and a real authenticated login round-trip against the deployed environment. A red gate stops the deploy.
  • Every landed change is reviewed, and the verdict is permanent. Each landed commit range carries an automated code-review verdict recorded as a GitHub commit status, which cannot be rewritten after the fact.
  • Production has exactly one door. Promotion runs only through a single gate script, behind a GitHub deployment environment with a required reviewer. Approvals are pinned to a specific commit and recorded immutably in the workflow run history.
  • What ships is what was tested. The production deploy reuses the artifact already built and tested on staging — the API slug is promoted, the web build is redeployed — so the code running in production is byte-identical to the code the gates passed.
  • Automatic rollback on a failed deploy. Production is health-checked immediately after every promote, and a failed check rolls back to the previous release without waiting for a human. This is not theoretical: it fired on 20 September 2026 and completed the rollback and its verification in 62 seconds.
  • Risk is assessed per change. All 130 product workflows carry a risk tier in a checked-in registry, and the engineering ceremony required for a change scales to the tier of whatever it touches.
  • Dependencies. Dependabot runs weekly against both application repositories, CVE-driven upgrades land within days, and the full test suite runs nightly against the staging tip.

Audit trail and monitoring

Every sensitive API request is written to an audit table in the application database — who acted, on what, and with what outcome. It is a durable database record rather than a log line, which means it is queryable after the fact and is not subject to the lifetime of a platform log stream. At the time of writing it holds a continuous five-month history.

Runtime errors are captured by Sentry on both the web and API projects, with PII scrubbing configured, including a deep scrubber for nested payloads.

Data retention, export, and deletion

Your organization can export its data and request deletion from within the product; the export path has been exercised in production. A deletion request opens a 30-day grace window during which the account becomes read-only, so you can still export or cancel, after which a scheduled job purges the data and writes a completion record to an erasure ledger. That ledger entry records who requested the deletion and how many records of each type were removed — not the personal data itself. Several caches expire on their own schedules, and requests we cannot serve through the product go to the address at the bottom of this page. The Privacy Policy covers what we collect and why.

Compliance posture

  • SOC 2. Narrative is not SOC 2 certified and has no SOC 2 report. A SOC 2 Type 2 readiness program is underway, with the Security (Common Criteria) category in scope for the first report. No auditor has been engaged and no observation period has begun. We will update this page when either changes, and we will not describe a report before one exists.
  • GDPR. We act as a processor for the customer data you put into Narrative. A data processing addendum is available on request, export and deletion paths are implemented in the product, and completed deletions are recorded in an erasure ledger.
  • CCPA. We do not sell personal information and do not share it for cross-context behavioral advertising.
  • PCI DSS. Out of scope for Narrative. Stripe handles payment collection and processing; no card data reaches our systems.

What we do not claim yet

Most of what breaks trust in a security review is not a missing control — it is a claimed control that turns out not to exist. These are ours, stated plainly so you do not have to find them in a questionnaire.

  • No SOC 2 report. The program is in readiness, not in observation, and no auditor is engaged. See above.
  • No third-party penetration test. We have not engaged an external tester. Claiming a pentest we have not done would be the worst possible answer to a security questionnaire, so we do not. In the meantime we rely on the automated gates described above and on the disclosure channel below.
  • No availability, recovery-time, or recovery-point commitment. Narrative does not sell an uptime SLA, and the Availability criteria are deliberately out of scope for our first SOC 2 report. Operational resilience is active engineering work; we will publish a commitment here when we have one we can keep.
  • No field-level encryption of personal data at rest. Data at rest is protected by the providers' full-disk AES-256 encryption, plus application-layer encryption on OAuth tokens and multi-factor secrets. Individual personal-data columns are not separately encrypted. Customers who require field-level at-rest encryption today should not assume Narrative meets that bar.

Vulnerability disclosure policy

We welcome reports from security researchers, and we would rather hear about a problem from you than from an incident. This policy tells you what we will do, what we ask of you, and what we will not do to you.

How to report

Email security@getnarrativeai.com. Please do not open a public issue, post the finding publicly, or raise it through a sales or support channel. A useful report includes a description of the issue, the steps to reproduce it, what an attacker could actually do with it, and a suggested fix if you have one. Machine -readable details are published at /.well-known/security.txt.

What we commit to

  • We acknowledge your report within three business days.
  • We give you an initial assessment — whether we reproduced it, how we rate it, and what we intend to do — within ten business days.
  • While a report is open we send a progress update at least every 30 days, and we tell you when the fix is live.
  • We will credit you by name when we fix the issue if you want the credit, and keep you anonymous if you prefer.

Narrative is a small team. These are timeframes we can actually meet, which is why they are the ones we publish rather than a faster number we would miss. We do not operate a paid bug bounty.

Safe harbor

If you make a good-faith effort to follow this policy, we will treat your research as authorized conduct. We will not pursue or support legal action against you for it, and we will not report you to law enforcement. If a third party brings an action against you for research conducted within this policy, we will make it known that your activity was authorized. If you are unsure whether a particular test is within scope, ask us first at the address above — asking is always in scope.

In scope

  • The Narrative web application and its API.
  • The Narrative Chrome extension.
  • This website, getnarrativeai.com.

Ground rules

  • Test against your own account and your own data. Do not access, modify, or retain data belonging to anyone else, and stop as soon as you have enough to demonstrate the issue.
  • If you encounter someone else's data by accident, stop, do not save a copy, and tell us what you saw so we can measure the exposure.
  • No denial of service, load testing, or automated scanning heavy enough to degrade the service for other customers.
  • No social engineering, phishing, or physical attempts against Narrative, our staff, our vendors, or our customers.
  • Give us reasonable time to remediate before disclosing publicly, and coordinate the timing with us. We will not ask you to stay quiet indefinitely.

Out of scope

  • Automated scanner output with no demonstrated impact.
  • Missing headers, cookie flags, or TLS configuration preferences without a working exploit.
  • Vulnerabilities in the third-party services we consume — Heroku, Vercel, Cloudflare, Stripe, Nango and the like. Report those to the provider; tell us as well if a Narrative customer is affected.
  • Self-XSS, and anything that requires a victim to paste attacker-supplied code into their own browser.
  • Clickjacking on pages with no sensitive state-changing action.
  • Software version disclosure without a demonstrated vulnerability in that version.
  • Attacks requiring a compromised device, a privileged network position, or physical access to a user's machine.
  • Denial of service, volumetric testing, and resource-exhaustion findings.
  • Findings about domains or systems we do not operate.

Contact

security@getnarrativeai.com — vulnerability reports, security questionnaires, and requests for our data processing addendum or the full subprocessor register. It is a monitored inbox, not a pager; use the timeframes above.

hello@getnarrativeai.com — everything else. See also the Privacy Policy and the Terms of Service.