Everything you'd build yourself, already built.
SEM ships with the unsexy plumbing: OAuth flows, token refresh, RLS, billing, email delivery, audit logs. So you can spend your time on the campaigns, not the wiring.
Connections
OAuth into all five ad networks. Tokens encrypted at rest with AES-256-GCM. Refresh handled automatically.
Reporting
Cross-platform CPA, ROAS, spend, and conversions in one dashboard — refreshed on a schedule.
CRM
Capture leads from ads, segment by source, follow up with email sequences. No external ESP required.
Billing
Stripe-powered subscriptions, customer portal, and invoices. We don't see the card.
Owner portal
Separate admin app for finance, support, and impersonation — gated by a platform-admin role.
Security
Row-level security on every table. Service-role keys never touch the browser. Audit log on impersonation.
One number per metric. Across every platform.
We pull last-30-day spend, clicks, conversions, and conversion value from each network and roll them up. Drill into any campaign to see which platform is pulling weight — and which is dragging.
- Spend, clicks, impressions, conversions, ROAS, CPA
- Per-campaign and platform-level breakdowns
- Auto-refresh on a schedule + on-demand sync
- Currency-aware (each connection keeps its own)
Your ads create leads. Your CRM follows up.
Drop a public lead-capture endpoint into your landing pages, segment contacts by source campaign, and trigger sequences. Sends go through Resend with React Email templates.
- Public POST /api/public/leads/<your-org> with CORS
- Tag-based segments + saved audiences
- One-shot email blasts with open + click tracking
- Drip sequences triggered on tag-add or form submit
- Resend webhook for delivery / bounce / complaint events
Stripe Customer Portal. Built in.
Customers self-serve plan changes, downloads invoices, and updates payment methods. You don't touch a single Stripe screenshot. Subscriptions sync to your DB via webhooks.
- 14-day free trial baked into checkout
- Stripe Customer Portal links from /billing
- Webhook-synced subscriptions table for in-app gating
- Receipt emails with branded React Email templates
Five platforms, one API surface.
Each adapter speaks the same internal contract — connect, refresh, list accounts, list campaigns. Adding a sixth platform later is a day of work, not a quarter.
Owner portal
Separate admin app at admin.sem.cgmimm.com. Search any user, open any organization, view subscription state, impersonate to debug — every action logged.
- Platform-admin role separate from org admin
- Audit log on every impersonation
- Last-admin protection (can't lock yourself out)
- Read-only by default; explicit elevation for writes
Security
Postgres row-level security on every table. OAuth tokens encrypted at rest. Service-role keys live only on the server.
- AES-256-GCM token encryption
- Row-level security on profiles, orgs, members, subs, campaigns, contacts
- Webhook signatures verified for Stripe, Resend, Supabase auth hook
- CORS-controlled public lead endpoint
See it on your own data.
Connect one platform in under two minutes. We'll show you the rest.