Onboarding · Workspace · Orientation system · Updated May 17, 2026 · By Admaxxer Team

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:

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:

  1. Per-site override wins. If pixel_websites.kpi_type is set explicitly on the active pixel site, the resolver uses it. The mapping is: mrr → SaaS, signups → Leads, revenue or goal → DTC.
  2. 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.
  3. 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

  1. Open Settings from the user menu in the top-right corner of any Admaxxer page.
  2. Pick the Workspace tab.
  3. Find the Business type dropdown (under the workspace name and slug).
  4. Select your new orientation: DTC (product sales), SaaS (subscription revenue), or Leads (signups + lead-gen).
  5. 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.
  6. 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.

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