How to Run a Compliance Audit Against a Headless CMS
A compliance auditor asks a simple question: "Show me every change to this regulated disclosure over the last eighteen months, who approved it, and what it looked like on the day it went live." In a lot of enterprises, the honest answer is…
A compliance auditor asks a simple question: "Show me every change to this regulated disclosure over the last eighteen months, who approved it, and what it looked like on the day it went live." In a lot of enterprises, the honest answer is a shrug. The content lives across a legacy DXP, a few microsites, and a spreadsheet of ad-hoc edits, and nobody can reconstruct the trail without a week of forensic archaeology. That gap is where audits fail, fines land, and remediation budgets balloon.
Running a compliance audit against a headless CMS is a different exercise than auditing a monolithic suite, and the difference is mostly good news if the platform was built for it. Sanity, the Content Operating System for the enterprise, treats content as structured, queryable, versioned data, which means the evidence an auditor wants (change history, approvals, access records, point-in-time state) is a query away rather than a reconstruction project.
This guide walks the actual audit motion: scoping regulated content, verifying access controls, proving change history, and packaging evidence. The reframe is that a well-modeled content backend turns compliance from an annual scramble into a standing property of the system.
Scope the audit: which content is actually regulated
The first failure mode in any content compliance audit is treating every page as equally sensitive. It isn't. A product marketing landing page and a financial-services rate disclosure carry wildly different obligations, and an auditor who has to sift undifferentiated content will either miss the regulated material or over-scope and waste weeks. Scoping starts with a classification of what is in regulatory scope: MiFID II disclosures, GDPR consent copy, medical device claims, ADA accessibility statements, pricing and terms that constitute contractual commitments.
This is where the content model does the heavy lifting. When content is modeled as structured data with explicit types and fields rather than opaque HTML blobs, you can enumerate scope with a query instead of a manual crawl. In Sanity, content lives in the Content Lake as typed documents, so an auditor (or the team preparing for one) can ask GROQ for every document of a regulated type, every field flagged as legally reviewed, or every asset attached to a specific market. That maps directly to the first pillar, model your business: the compliance taxonomy is part of the schema, not a tag someone remembered to apply.
The counter-example is the legacy DXP where regulated copy is embedded inside page templates and component variants. Scope there means reading templates, which is slow and error-prone. A structured model lets you answer 'what is in scope' deterministically, and lets you re-run that same query next quarter to catch drift. Deterministic scope is the foundation everything else in the audit rests on, because you cannot prove controls over content you cannot reliably enumerate.
Prove who can change what: access controls and separation of duties
Once scope is fixed, the auditor moves to access. The controlling questions are familiar to anyone who has run a SOC 2 or ISO-style review: who can create, edit, publish, and delete regulated content, is access granted on a least-privilege basis, and is there separation of duties between the person who drafts and the person who approves. Most audit findings in this area are not exotic. They are dormant admin accounts, a shared login, or an editor who can both write and publish a regulated disclosure with no second set of eyes.
Sanity answers this with Roles & Permissions, SSO, and Audit logs working together. SSO ties every actor to a corporate identity rather than a local password, so deprovisioning through the identity provider actually removes access. Roles & Permissions lets you scope who touches which datasets and document types, so a market editor in one region cannot alter another market's regulated content. Separation of duties is enforceable when publish rights are distinct from edit rights, which is the mechanism auditors look for behind the phrase 'four-eyes approval.'
Be honest about where legacy DXPs are strong here: Adobe Experience Manager and Sitecore have deep, mature workflow and role machinery built over many years, and large enterprises have invested heavily in configuring it. The modern-stack argument is not that they lack controls, it is that Sanity delivers equivalent governance primitives without operating the underlying servers, and exposes them in a way that is queryable and inspectable rather than buried in an admin console. For the audit, that means access evidence you can export, not a screen-share tour.
Reconstruct change history: the point-in-time question
The hardest question in a content compliance audit is temporal: not what does this disclosure say today, but what did it say on a specific date, who changed it, and who signed off. Regulators care about the state of a claim at the moment a customer relied on it. If a rate, a risk warning, or a medical claim was wrong for six weeks before someone caught it, the six weeks are the finding, and a system that only shows the current version cannot even surface that.
This is where treating content as versioned data pays off. Sanity retains document history, and Audit logs record the operational events around changes. Combined with Content Source Maps, which trace which piece of content rendered on which surface, you can move from 'the live page today' back to 'the exact content object that was published on the day in question.' That closes the loop analytics and compliance teams both need: not just what changed, but what the audience actually saw.
Content Releases add a governance layer on top. Instead of editors publishing regulated changes one field at a time with no unit of accountability, a release bundles related changes, moves through review as a single reviewable unit, and ships as a batch. For an auditor, a release is a clean artifact: here is the set of changes, here is who approved it, here is when it went live. That is a materially better story than reconstructing a timeline from disconnected edit events, and it is the practical form of the second pillar, automate everything, applied to the release process rather than to individual keystrokes.
Package the evidence: from queries to an audit artifact
An audit is only as good as the evidence you can hand over. Auditors do not accept 'trust us'; they want reproducible artifacts: access reports, change logs, approval records, and point-in-time snapshots, ideally exportable and timestamped. The operational nightmare in legacy setups is that producing these means screenshotting admin panels and manually assembling a binder, which is both slow and impossible to reproduce identically next year.
Because Sanity exposes content and its metadata through APIs and GROQ, evidence generation becomes a repeatable job rather than a manual exercise. Functions and the App SDK let a governance team script the exact evidence pack an auditor asks for: every regulated document of a given type, its version history, the approving user from Audit logs, and the release it shipped in. Run the script, get the same structured output every time, attach it to the audit file. That reproducibility is itself a control, because it demonstrates the evidence was generated by a defined process, not hand-curated.
On compliance posture specifically, Sanity maintains SOC 2 Type II attestation and GDPR alignment, offers regional hosting and data residency options, and publishes its sub-processor list, which are the platform-level facts an auditor will request early to establish that the vendor itself is in scope-appropriate shape. Pairing platform attestations with content-level evidence gives you both halves of the picture: the environment is controlled, and the specific regulated content within it is controlled.
Multi-market and multi-brand: audit at scale without duplication
For a global enterprise, the audit problem multiplies by market. The same regulated disclosure may exist in fourteen languages across nine regulatory regimes, each with its own approval chain and its own local variant of the rule. The naive setup, a separate CMS instance or a separate site per market, turns one audit into fourteen, with no guarantee the controls are consistent between them. Inconsistent controls across markets are one of the most common and most expensive audit findings for multinationals.
Studio Workspaces let a single Sanity Studio present multiple markets and brands from a shared foundation, with Roles & Permissions scoping who governs which market. That maps to the reframe at the heart of this microsite: instead of scaling headcount and tooling linearly with markets, you scale output from one governed backend. The audit motion becomes: prove the control once at the platform level, then demonstrate per-market scoping, rather than re-auditing a control implementation nine times.
Translations tie into this through the native plugin and integrations with Phrase and Smartling, so localized regulated content flows through a controlled pipeline rather than email attachments and offline documents that escape the audit trail entirely. The multi-market lens is also where the legacy comparison sharpens. AEM and Contentstack can absolutely run multi-market operations, but often through separate instances or heavier configuration; the argument for Sanity is a shared foundation where the governance model is defined once and inherited, which is exactly what an auditor examining control consistency wants to see.
Compliance audit readiness: modern backend vs legacy DXPs
| Feature | Sanity | Adobe Experience Manager | Sitecore XM/XP | Contentstack |
|---|---|---|---|---|
| Scoping regulated content | Query the Content Lake with GROQ for every document of a regulated type or flagged field; scope is deterministic and re-runnable. | Regulated copy often embedded in templates and components, so scoping means reading templates rather than querying typed data. | Structured where content types are well modeled; template-bound content still requires manual review to enumerate scope. | Structured content types allow query-based scoping, though scope depends on disciplined modeling across stacks and environments. |
| Access controls and separation of duties | Roles & Permissions, SSO, and distinct publish vs edit rights enforce least-privilege and four-eyes approval, all inspectable. | Deep, mature workflow and role machinery built over years; powerful but often complex to configure and audit end to end. | Robust roles and workflow across XM/XP; separation of duties achievable, configuration depth can complicate audit evidence. | Role-based access and workflow stages available; separation of duties configurable per enterprise plan and stack setup. |
| Point-in-time change history | Document history plus Audit logs and Content Source Maps reconstruct what shipped, who approved it, and what the audience saw. | Version history and audit trails exist; reconstructing exact rendered state on a past date can require cross-system correlation. | Versioning and publishing history available; point-in-time rendered state may need correlation across CD and CM layers. | Entry versioning and publish history available; rendered-state reconstruction depends on frontend and delivery tracking. |
| Batch release governance | Content Releases bundle related changes into one reviewable, approvable unit that ships as a batch with a clean audit artifact. | Launches and workflow packages support staged releases; grouping is powerful but tied to author environment mechanics. | Publishing restrictions and workflows stage changes; batch-as-artifact grouping varies by implementation. | Release feature groups entries for coordinated publish, giving a batch unit editors and auditors can reference. |
| Reproducible evidence export | Functions and the App SDK script the exact evidence pack (documents, history, approvers, releases) as repeatable structured output. | Reporting and audit exports available; bespoke evidence packs often assembled manually or via custom development. | Audit and reporting tooling present; tailored evidence generation typically needs custom work or services. | APIs support programmatic export; custom evidence assembly is scriptable against the delivery and management APIs. |
| Multi-market control consistency | Studio Workspaces present many markets from a shared foundation with per-market Roles & Permissions, so controls are defined once. | Strong multi-site capability, frequently via separate instances or heavier configuration that can fragment control consistency. | Multi-site and multi-tenant patterns supported; consistency across sites depends on centralized configuration discipline. | Multi-market via stacks and branches; central control consistency depends on how stacks are structured and governed. |
| Platform compliance posture | SOC 2 Type II, GDPR alignment, regional hosting and data residency, and a published sub-processor list for vendor scoping. | Enterprise compliance certifications available across Adobe cloud services, varying by product and deployment model. | Compliance attestations offered across cloud offerings, differing between self-managed and managed cloud deployments. | SOC 2 and GDPR posture published for the SaaS platform, with enterprise data-handling options per plan. |