Building a Compliant and Scalable Email System for a wealth management company

Jakub Pogadl
Our client is an independent wealth management firm based in Austin, Texas. They manage portfolios and financial strategies for high-net-worth individuals, families, and institutions. With a focus on transparency, compliance, and client service, their operations require systems that are secure, auditable, and efficient.
Over the past few months, we have worked closely with their team to design and implement a custom platform for managing marketing and transactional emails. While the initial scope-syncing contacts with SendGrid, managing templates, and enforcing compliance reviews-seemed straightforward we ran into a number of surprising technical challenges which required us to get creative.
This article provides a look at how we tackled the challenge, the architecture we designed, and the tools and principles that helped us create a reliable system.
Contact Syncing That Works, Even When APIs Don’t

One of the first technical challenges involved SendGrid. Despite its popularity, their API has significant limitations. Most notably, it cannot reliably fetch a complete contact list. The API only returns about 50 entries and does not support pagination. The only way of getting the complete list of email addresses is by starting an export job which later returns json or csv, which can’t really be used in this case.
To solve this, we created a PostgreSQL mirror of all contact data. This local database serves as the source of truth. Any frontend filters, queries, or paginated views run against Postgres rather than SendGrid. Two BitSwan automations manage bidirectional sync:
One pulls contacts from SendGrid and updates them in Postgres.
Another sends updates from Postgres back to SendGrid.
This design ensures full visibility and control without depending on unreliable external endpoints.
Single Sign On(SSO) and Roll Based Access Control (RBAC)
Every frontend request goes into BitSwan services through a JWT. This token includes role-based permissions and contextual data to ensure that only authenticated users can view or manipulate contacts and emails.

BitSwan for Frontend Deployment
This was our first time deploying a React-based frontend directly via BitSwan. We usually use BitSwan for backend automation pipelines. In this instance, we containerized the frontend and used the same setup to ship it. The frontend features:
A real-time preview of composed emails.
Interactive contact management — integrated with the SendGrid mirror database, allowing users to search, filter, and manipulate contacts directly from the UI.
Draft and approval workflow — users can create, edit, and submit email drafts for compliance review before sending.
JWT-based authentication — the frontend communicates securely with the backend via JWTs verified through the BitSwan backend
All email templates, headers, and footers are stored on S3. This guarantees scalable asset delivery and keeps content separate.
Review Workflow and Webhook-Driven Approvals
Emails follow a controlled lifecycle to guarantee compliance. Drafts are submitted for review, where each submission is assigned a unique ID. The decision is returned via a secure webhook (approved/denied) and recorded in the audit log with reviewer details and timestamps. Only after explicit approval does the system trigger a SendGrid Single Send.
This ensures full compliance with internal policies, with audit logs maintained for each step.
Modular Design and Automation as Building Blocks
One of BitSwan’s biggest strengths is its modularity. Unlike monolithic systems, each automation is:
Designed as a single logical step, like fetching contacts, validating email HTML, or sending payloads.
Easy to understand and track, even for non-developers.
Reusable in different pipelines.
For our Client project, this meant:
Custom automations for syncing data.
Reusable models for preparing email payloads.
Dynamic routing logic to manage multi-step flows based on context.

Final Thoughts
This project challenged us to integrate frontend deployments, security architecture, content workflows, and backend automations into one unified product.
The result is a secure, auditable, and flexible system that meets complex requirements without unnecessary complications. This translates to faster campaign turnaround, fewer errors, and the reassurance that compliance is built into the process from the beginning.