Business type — DTC, SaaS, or Leads orientation in Admaxxer
Admaxxer's Phase 0 onboarding splitter asks "what kind of business do you run?" with three tiles — DTC (one-time product sales), SaaS (subscription revenue), and Leads (signups, demos, lead-gen forms). The answer is saved as workspaces.business_type and drives every KPI surface in the app. DTC workspaces see Revenue / Ad Spend / MER / Net Profit / Orders / Sessions on the dashboard ribbon. SaaS workspaces see MRR / ARR / Active subscriptions / Trial → Paid / Net New MRR / Sessions. Leads workspaces see Signups / Sessions / Ad Spend / CAC efficiency / Conversions. The Marketing Acquisition sticky ribbon, the empty-state preview tiles, and the Get Connected hero subtitle all branch on the same signal. One question, four surfaces, three orientations.
What is "business type"?
"Business type" is the answer to the first question Admaxxer asks during onboarding. After you create an account, the very first screen presents three tiles: DTC, SaaS, or Leads. Pick the one that matches your headline business model and Admaxxer:
- Saves your answer on the
workspaces.business_typecolumn (one of three string literals:'dtc','saas','leads'). - Auto-suggests the right KPI presets for the workspace (you can change them later from any dashboard's edit mode).
- Filters the commerce-platform picker on the integrations page so SaaS workspaces see Stripe / Paddle / Lemon Squeezy / Polar first; DTC workspaces see Shopify / WooCommerce; Leads workspaces skip the commerce step entirely.
- Branches the dashboard, Marketing Acquisition ribbon, empty-state tiles, and Get Connected hero copy — explained in the next section.
The splitter is a one-time onboarding step but the value persists on the workspace forever. You can change it at any time from the Workspace settings (see "How do I change my business type" below).
How does it affect my dashboard?
Four surfaces branch on workspaces.business_type. The table below lists what each one renders for each orientation. Every surface re-reads the resolver on switch, so changing your business type updates all four within one render cycle — no reload required.
| Surface | DTC | SaaS | Leads |
|---|---|---|---|
| KPI ribbon (DashboardHero) | Revenue / Ad Spend / MER / Net Profit / Orders / Sessions | MRR / ARR / Active subs / Trial → Paid / Net New MRR / Sessions | Signups / Sessions / Ad Spend / CAC efficiency / Conversions |
| Sticky ribbon (Marketing Acquisition) | Revenue / Net Profit / Spend / MER / Blended ROAS | MRR / ARR / Active subs / Trial → Paid / Net New MRR | Signups / Ad Spend / CAC efficiency / Conversions |
| Empty-state preview tiles | Revenue / MER / Sessions / Conversion Rate | MRR / ARR / Active subs / Trial → Paid | Signups / Conversion Rate / Sessions / CAC efficiency |
| Get Connected hero subtitle | "revenue attribution, blended MER" | "MRR attribution, trial-to-paid conversion by source" | "signup attribution, lead-source quality" |
The data ingest underneath is identical for all three orientations — pixel events, Stripe webhooks, Shopify webhooks, ad-platform syncs all land in the same tables regardless. Only the presentation layer branches. That means switching your business type is safe — you'll never lose data and you can switch back without consequence.
How does the resolver pick between business_type and kpi_type?
Admaxxer has TWO ways to express orientation, and the resolver picks between them with a clear priority order:
- Per-site override wins. If
pixel_websites.kpi_typeis set explicitly on the active pixel site, the resolver uses it. The mapping is:mrr→ SaaS,signups→ Leads,revenueorgoal→ DTC. - Workspace business_type next. If no per-site override is set, the resolver falls back to
workspaces.business_type(the Phase 0 onboarding answer). Direct 1:1 mapping:'dtc'→ DTC,'saas'→ SaaS,'leads'→ Leads. - Default to DTC. Legacy workspaces created before Phase 0 shipped (GL#492) or workspaces where both fields are unset land on DTC. This keeps the most popular orientation as the safe default.
The "per-site wins" rule exists because a single workspace can host multiple pixel sites with different KPIs — for example, an agency-style operator might track one MRR product, one one-time-purchase product, and one lead-gen landing page from the same Admaxxer workspace. The workspace-level business_type sets the default for new sites and the dashboard's primary KPI strip; the per-site kpi_type override lets you label individual sites differently when you need to.
The resolver is a single hook (useEffectiveOrientation()) consumed by every surface that branches — DashboardHero, MaStickyMetricRibbon, DashboardPreviewTiles, GetConnectedPanel. Adding a new surface that branches on orientation is one import, one call, branching for free.
How do I change my business type after onboarding?
Two paths depending on whether you want the change to apply at the workspace level (all sites) or just one specific pixel site:
Workspace-level change (all sites)
Open Settings › Workspace and pick a new value from the Business type dropdown. The change saves immediately and all four surfaces (dashboard ribbon, MA ribbon, empty-state tiles, Get Connected hero) reflect the new orientation on next render — no reload required. You can switch back at any time without consequence; underlying data is unaffected because the ingest is identical for all three orientations.
Per-site override (one specific site)
Open /dashboard/sites/:id/settings and pick a value from the Default KPI dropdown. Per-site KPI takes precedence over workspace business type, so this is the right path when you have one workspace hosting multiple pixel sites with different KPI shapes (e.g., one MRR product, one one-time-purchase product, one lead-gen landing).
How to switch business type — step by step
- Open Settings from the user menu in the top-right corner of any Admaxxer page.
- Pick the Workspace tab.
- Find the Business type dropdown (under the workspace name and slug).
- Select your new orientation: DTC (product sales), SaaS (subscription revenue), or Leads (signups + lead-gen).
- The change saves automatically. The dashboard, Marketing Acquisition page, and Get Connected hero will reflect the new orientation immediately — refresh once if you want to be sure.
- For a per-site override (one specific pixel site only), go to /dashboard/sites/:id/settings and pick a value from the Default KPI dropdown. Per-site override wins over workspace business type.
Related Admaxxer documentation
- Install Admaxxer on a custom SaaS website — the end-to-end install for SaaS workspaces: pixel + Signup goal + identify + Stripe customer.subscription.* events.
- Dashboard analytics card reference — maps every card on /dashboard/analytics to its Tinybird pipe and explains semantics + empty-state causes.
- Dashboard customization — edit mode, saved views (personal vs shared), keyboard shortcuts. Switch KPI presets per saved view.
- Marketing Acquisition deep-dive — the unified Sources & Attribution table where the sticky ribbon lives.
- Stripe revenue connector — for SaaS workspaces wiring the subscription-lifecycle goals.
- Metric Glossary — canonical definitions (formulas + Tinybird pipe paths) for every KPI Admaxxer surfaces, including MRR, ARR, Trial → Paid, MER, CAC efficiency.
- Admaxxer for SaaS (marketing landing) — the SaaS-specific marketing surface with MRR by channel, trial-to-paid by source, CAC payback by cohort.
FAQ
What if I sell BOTH products and subscriptions?
Pick the one that's your headline business. If MRR is what your investors track and what defines your growth, choose SaaS. If you sell mostly one-time products with a few subscriptions on the side, choose DTC. The site-level KPI override at /dashboard/sites/:id/settings lets you mark individual pixel sites differently — so you can have your headline business as SaaS at the workspace level and mark a specific landing-page site as DTC if it sells one-time products.
What if I'm an agency?
Use the workspace switcher (top-left of any Admaxxer page) to create separate workspaces per client or per brand. Each workspace picks its own business_type independently, so you can run a SaaS client and a DTC client side-by-side with no orientation collisions. We dropped the standalone "Agency" tile in GL#497 because agency = multi-workspace, not a distinct orientation — the workspace switcher already gives you the right mental model.
Does business_type affect my data ingest?
No. Pixel events, Stripe webhooks, Shopify webhooks, ad-platform syncs all land in the same tables regardless of business_type. Only the dashboard presentation branches. Switching your business type is safe — you'll never lose data and you can switch back at any time without consequence.
Will the SaaS tiles show real data on day 1?
For Stripe customers, yes. Stripe customer.subscription.* webhooks land in custom_goals per GL#433 and the new p_saas_summary Tinybird pipe reads them directly — no extra phase or migration required. MRR / ARR / Active subscriptions / Trial → Paid all populate as soon as the Stripe restricted-key paste-token is connected and at least one subscription event lands. Paddle, Lemon Squeezy, Polar, and Dodo follow the same pattern.
Can I add a custom "Leads" definition?
Today the Leads tiles use pixel sessions as a signup proxy and any user-defined custom goal (e.g., "Demo Booked", "Newsletter Signup", "Whitepaper Download") counts toward the Signups KPI. A dedicated p_leads_summary.pipe with per-goal-shape splits is on the roadmap — subscribe to the changelog at /changelog to track it. In the meantime, custom goals are the right primitive for defining what "lead" means in your business.
Do I need to install the pixel before I see SaaS tiles?
No. Empty-state preview tiles + ribbon labels swap based on business_type even before the pixel is installed — so a brand-new SaaS workspace sees MRR / ARR / Active subs / Trial → Paid labels in the empty-state preview even before any data lands. Live data arrives when pixel + Stripe (or pixel + Paddle / Lemon Squeezy / Polar / Dodo) are connected and start producing subscription-lifecycle events. The empty state is a preview, not a placeholder — it's wired to the same orientation resolver as the live dashboard.
Where is business_type stored in the database?
On the workspaces.business_type column — a string enum with three valid values: 'dtc', 'saas', or 'leads'. Per-site overrides live on pixel_websites.kpi_type. The resolver (useEffectiveOrientation() in client/src/components/dashboard/SaasKpiCard.tsx) reads both with per-site winning over workspace and DTC as the fallback default.
Ready to ship?
If you're a SaaS founder, the most important next step after picking SaaS as your business type is wiring the Stripe restricted-key paste-token so the Trial Started / Trial Converted / Subscription Cancelled / Trial Ending Soon goals start firing. Walk through /documentation/install/saas for the 5-step install. If you're a DTC merchant, head to /documentation/install/shopify for the Shopify install path. If you're running lead-gen, install the pixel via /documentation/install and start firing custom goals on your form-success handlers.
Pick your business type now · Admaxxer for SaaS (marketing) · Browse all install paths · Custom goals