{"id":9018,"date":"2026-01-08T20:03:01","date_gmt":"2026-01-08T20:03:01","guid":{"rendered":"https:\/\/www.zenmaid.com\/magazine\/?p=9018"},"modified":"2026-06-03T19:51:28","modified_gmt":"2026-06-03T19:51:28","slug":"how-to-start-a-cleaning-business","status":"publish","type":"post","link":"https:\/\/www.zenmaid.com\/magazine\/how-to-start-a-cleaning-business\/","title":{"rendered":"How to Start a Cleaning Business in 2026: A Step-by-Step Guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Welcome to ZenMaid\u2019s guide to starting a cleaning business. Whether you\u2019re dreaming of starting a cleaning business or looking for more ways to grow, you\u2019re in the right place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the ultimate step-by-step guide to starting a cleaning business, built from expert advice and real-world experience from cleaning business owners.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We\u2019ll walk through choosing your services, setting prices, budgeting, licensing, hiring, marketing, and the systems successful cleaning businesses use to scale.<\/p>\n\n\n\n\n\n\n<h2 id=\"heading-1\" class=\"wp-block-heading\">TL;DR: How to Start a Cleaning Business<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ITL;DR: How to Start a Cleaning Business<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the quick start guide for starting a successful cleaning business:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Start the Right Cleaning Business for You<\/strong>: Decide upfront whether you&#8217;ll serve residential or commercial clients. This shapes everything from licensing to pricing; starting narrow is recommended.<\/li>\n\n\n\n<li><strong>Decide on Your Name<\/strong>: Choose a name that&#8217;s unique, legally available, and trademark-clear before filing any business registrations.<\/li>\n\n\n\n<li><strong>Set Your Business Budget<\/strong>: Adopt a profit-first mindset (Sales \u2013 Profit = Expenses) and set clear income goals, targeting roughly 20% profit margins.<\/li>\n\n\n\n<li><strong>Set Up Proper Licensing for Your Cleaning Business: <\/strong>Register your business, obtain the necessary licenses and tax IDs, and secure liability insurance \u2014 requirements vary by location.<\/li>\n\n\n\n<li><strong>Decide What Cleaning Equipment and Supplies to Purchase<\/strong>: Buy supplies suited to your specific service type, and invest in quality equipment upfront to avoid costly replacements later.<\/li>\n\n\n\n<li><strong>Decide on Your Pricing Structure<\/strong>: Choose between hourly, flat-rate, or hybrid pricing models, and track real job times to set accurate, profitable rates.<\/li>\n\n\n\n<li><strong>Hire and Train Professional Cleaners<\/strong>: Build a structured onboarding and training program \u2014 ideally seven to 10 days \u2014 to ensure quality, reduce turnover, and create reliable brand representatives.<\/li>\n\n\n\n<li><strong>Automate With Cleaning Business Software<\/strong>: Implement scheduling, booking, and payment software early to prevent operational breakdowns as your client and cleaner roster grows.<\/li>\n\n\n\n<li><strong>Market Your Cleaning Services<\/strong>: Use lifecycle marketing to attract, capture, nurture, and convert leads while keeping existing clients engaged and upselling over time.<\/li>\n\n\n\n<li><strong>Generate Referrals and Reviews<\/strong>: Leverage happy clients by automating review requests and running referral reward programs to fuel sustainable growth.<\/li>\n<\/ol>\n\n\n\n<h2 id=\"heading-2\" class=\"wp-block-heading\">Take Our Quiz: Are You Ready to Start a Cleaning Business?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To make the most of this article, take a quick, free quiz to see where you stand. It\u2019ll help you understand where to focus, and more importantly, what you need most from this guide.<\/p>\n\n\n<style>\r\n    #zm-readiness-quiz {\r\n      --zm-teal: #5CC9CA;\r\n      --zm-dark-teal: #2D5B5C;\r\n      --zm-mid-teal: #008689;\r\n      --zm-white: #FFFFFF;\r\n      --zm-light-teal: #EDF8F8;\r\n      --zm-cream: #F2EDDA;\r\n      --zm-sage: #9CBBC0;\r\n      --zm-gold: #ECCC4C;\r\n      --zm-border-light: #D0E8E8;\r\n      --zm-text-primary: #2D3436;\r\n      --zm-text-secondary: #5F6B6E;\r\n      --zm-tier-red: #DC4A1A;\r\n      --zm-tier-red-bg: #FEF2EE;\r\n      --zm-tier-red-border: #FDDCCC;\r\n      --zm-tier-amber: #D97706;\r\n      --zm-tier-amber-bg: #FFFBEB;\r\n      --zm-tier-amber-border: #FDE68A;\r\n      --zm-tier-green: #059669;\r\n      --zm-tier-green-bg: #ECFDF5;\r\n      --zm-tier-green-border: #A7F3D0;\r\n      --zm-shadow-sm: 0 1px 2px rgba(45,91,92,0.06), 0 1px 3px rgba(45,91,92,0.08);\r\n      --zm-shadow-md: 0 4px 6px rgba(45,91,92,0.05), 0 2px 4px rgba(45,91,92,0.06), 0 10px 15px rgba(45,91,92,0.04);\r\n      --zm-shadow-lg: 0 10px 25px rgba(45,91,92,0.08), 0 4px 10px rgba(45,91,92,0.06);\r\n      --zm-shadow-glow: 0 0 0 3px rgba(92,201,202,0.15), 0 0 20px rgba(92,201,202,0.1);\r\n      --zm-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);\r\n      --zm-ease-out: cubic-bezier(0.16, 1, 0.3, 1);\r\n      --zm-ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);\r\n      font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n      background: linear-gradient(180deg, var(--zm-light-teal) 0%, #F4FAFA 100%);\r\n      border-radius: 16px;\r\n      box-shadow: var(--zm-shadow-lg), inset 0 1px 0 rgba(255,255,255,0.8);\r\n      padding: 32px 28px;\r\n      max-width: 580px;\r\n      margin: 32px auto;\r\n      box-sizing: border-box;\r\n      color: var(--zm-text-primary);\r\n      line-height: 1.5;\r\n      position: relative;\r\n      overflow: hidden;\r\n    }\r\n    #zm-readiness-quiz::before {\r\n      content: '';\r\n      position: absolute;\r\n      top: 0; left: 0; right: 0;\r\n      height: 4px;\r\n      background: linear-gradient(90deg, var(--zm-mid-teal), var(--zm-teal), var(--zm-mid-teal));\r\n      border-radius: 16px 16px 0 0;\r\n    }\r\n    #zm-readiness-quiz *,\r\n    #zm-readiness-quiz *::before,\r\n    #zm-readiness-quiz *::after { box-sizing: border-box; }\r\n    #zm-readiness-quiz h2,\r\n    #zm-readiness-quiz h3,\r\n    #zm-readiness-quiz p,\r\n    #zm-readiness-quiz ul { margin: 0; padding: 0; }\r\n    .zm-rq-screen-wrap { position: relative; overflow: hidden; }\r\n    .zm-rq-screen { display: none; will-change: transform, opacity; }\r\n    .zm-rq-screen.zm-rq-active { display: block; }\r\n    .zm-rq-screen.zm-rq-enter-right { animation: zm-rq-slideInRight 0.4s var(--zm-ease-out) forwards; }\r\n    .zm-rq-screen.zm-rq-enter-left { animation: zm-rq-slideInLeft 0.4s var(--zm-ease-out) forwards; }\r\n    .zm-rq-screen.zm-rq-enter-up { animation: zm-rq-slideInUp 0.5s var(--zm-ease-out) forwards; }\r\n    @keyframes zm-rq-slideInRight { from { opacity: 0; transform: translateX(40px); } to { opacity: 1; transform: translateX(0); } }\r\n    @keyframes zm-rq-slideInLeft { from { opacity: 0; transform: translateX(-40px); } to { opacity: 1; transform: translateX(0); } }\r\n    @keyframes zm-rq-slideInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }\r\n    @keyframes zm-rq-fadeIn { from { opacity: 0; } to { opacity: 1; } }\r\n    @keyframes zm-rq-scaleIn { from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: scale(1); } }\r\n    @keyframes zm-rq-popIn { 0% { opacity: 0; transform: scale(0.6); } 70% { transform: scale(1.05); } 100% { opacity: 1; transform: scale(1); } }\r\n    .zm-rq-intro { text-align: center; padding: 24px 0 8px; }\r\n    .zm-rq-intro-icon { width: 64px; height: 64px; margin: 0 auto 20px; position: relative; }\r\n    .zm-rq-intro-icon svg { width: 64px; height: 64px; }\r\n    .zm-rq-intro-icon .zm-rq-icon-bg { fill: var(--zm-white); stroke: var(--zm-border-light); stroke-width: 1.5; }\r\n    .zm-rq-intro-icon .zm-rq-icon-accent { fill: none; stroke: var(--zm-teal); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\r\n    .zm-rq-title { font-size: 24px; font-weight: 700; color: var(--zm-dark-teal); margin-bottom: 10px; line-height: 1.25; letter-spacing: -0.3px; }\r\n    .zm-rq-subtitle { font-size: 15px; color: var(--zm-text-secondary); margin-bottom: 28px; max-width: 420px; margin-left: auto; margin-right: auto; line-height: 1.6; }\r\n    .zm-rq-meta { display: flex; justify-content: center; gap: 10px; margin-bottom: 28px; }\r\n    .zm-rq-meta-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 500; color: var(--zm-dark-teal); background: var(--zm-white); border: 1px solid var(--zm-border-light); border-radius: 100px; padding: 6px 14px; box-shadow: var(--zm-shadow-sm); }\r\n    .zm-rq-meta-pill svg { width: 14px; height: 14px; flex-shrink: 0; }\r\n    .zm-rq-btn-primary { display: inline-flex; align-items: center; justify-content: center; gap: 8px; background: linear-gradient(180deg, #00979A 0%, var(--zm-mid-teal) 100%); color: var(--zm-white); font-family: inherit; font-size: 16px; font-weight: 600; padding: 15px 32px; border: none; border-radius: 12px; cursor: pointer; box-shadow: 0 2px 4px rgba(0,134,137,0.3), 0 8px 16px rgba(0,134,137,0.15), inset 0 1px 0 rgba(255,255,255,0.2); transition: all 0.2s var(--zm-ease-smooth); -webkit-tap-highlight-color: transparent; position: relative; overflow: hidden; }\r\n    .zm-rq-btn-primary::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(180deg, rgba(255,255,255,0.12) 0%, transparent 50%); border-radius: inherit; pointer-events: none; }\r\n    .zm-rq-btn-primary:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(0,134,137,0.35), 0 12px 24px rgba(0,134,137,0.2), inset 0 1px 0 rgba(255,255,255,0.2); }\r\n    .zm-rq-btn-primary:active { transform: translateY(0px) scale(0.98); box-shadow: 0 1px 2px rgba(0,134,137,0.3), 0 4px 8px rgba(0,134,137,0.15), inset 0 1px 0 rgba(255,255,255,0.2); }\r\n    .zm-rq-btn-primary:focus-visible { outline: none; box-shadow: var(--zm-shadow-glow), 0 2px 4px rgba(0,134,137,0.3), 0 8px 16px rgba(0,134,137,0.15); }\r\n    .zm-rq-btn-primary svg { width: 18px; height: 18px; transition: transform 0.2s var(--zm-ease-smooth); }\r\n    .zm-rq-btn-primary:hover svg { transform: translateX(2px); }\r\n    .zm-rq-progress { margin-bottom: 28px; }\r\n    .zm-rq-progress-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }\r\n    .zm-rq-progress-label { font-size: 11px; font-weight: 600; color: var(--zm-sage); text-transform: uppercase; letter-spacing: 0.8px; }\r\n    .zm-rq-progress-count { font-size: 13px; font-weight: 600; color: var(--zm-dark-teal); }\r\n    .zm-rq-segments { display: flex; gap: 4px; }\r\n    .zm-rq-segment { flex: 1; height: 5px; background: var(--zm-border-light); border-radius: 100px; transition: background 0.4s var(--zm-ease-out), box-shadow 0.4s var(--zm-ease-out); position: relative; overflow: hidden; }\r\n    .zm-rq-segment.zm-rq-filled { background: var(--zm-teal); box-shadow: 0 0 8px rgba(92,201,202,0.3); }\r\n    .zm-rq-segment.zm-rq-current { background: linear-gradient(90deg, var(--zm-teal), var(--zm-mid-teal)); box-shadow: 0 0 8px rgba(92,201,202,0.4); }\r\n    .zm-rq-q-header { margin-bottom: 24px; position: relative; }\r\n    .zm-rq-q-number { position: absolute; right: -4px; top: -12px; font-size: 72px; font-weight: 800; color: var(--zm-border-light); line-height: 1; pointer-events: none; user-select: none; opacity: 0.5; }\r\n    .zm-rq-category-pill { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 600; color: var(--zm-mid-teal); text-transform: uppercase; letter-spacing: 0.6px; background: rgba(0,134,137,0.08); border-radius: 100px; padding: 4px 12px; margin-bottom: 12px; }\r\n    .zm-rq-category-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--zm-mid-teal); }\r\n    .zm-rq-question { font-size: 19px; font-weight: 600; color: var(--zm-dark-teal); line-height: 1.4; letter-spacing: -0.2px; position: relative; z-index: 1; }\r\n    .zm-rq-options { display: grid; gap: 8px; list-style: none; }\r\n    .zm-rq-option { background: var(--zm-white); border: 1.5px solid var(--zm-border-light); border-radius: 12px; padding: 14px 16px; cursor: pointer; transition: all 0.2s var(--zm-ease-smooth); display: flex; align-items: center; gap: 14px; -webkit-tap-highlight-color: transparent; min-height: 50px; position: relative; box-shadow: 0 1px 2px rgba(45,91,92,0.04); opacity: 0; transform: translateY(8px); }\r\n    .zm-rq-option.zm-rq-stagger-in { animation: zm-rq-optionIn 0.35s var(--zm-ease-out) forwards; }\r\n    @keyframes zm-rq-optionIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\r\n    .zm-rq-option:hover { border-color: var(--zm-teal); background: var(--zm-light-teal); box-shadow: var(--zm-shadow-sm); transform: translateY(-1px); }\r\n    .zm-rq-option:active { transform: translateY(0) scale(0.99); transition-duration: 0.1s; }\r\n    .zm-rq-option:focus-visible { outline: none; box-shadow: var(--zm-shadow-glow); border-color: var(--zm-teal); }\r\n    .zm-rq-option.zm-rq-selected { border-color: var(--zm-mid-teal); background: var(--zm-light-teal); box-shadow: 0 0 0 1px var(--zm-mid-teal), var(--zm-shadow-sm); }\r\n    .zm-rq-option.zm-rq-selected.zm-rq-just-selected { animation: zm-rq-selectBounce 0.4s var(--zm-ease-spring); }\r\n    @keyframes zm-rq-selectBounce { 0% { transform: scale(1); } 30% { transform: scale(0.97); } 60% { transform: scale(1.02); } 100% { transform: scale(1); } }\r\n    .zm-rq-radio { width: 20px; height: 20px; border-radius: 50%; border: 2px solid var(--zm-sage); flex-shrink: 0; position: relative; transition: all 0.2s var(--zm-ease-smooth); display: flex; align-items: center; justify-content: center; }\r\n    .zm-rq-option:hover .zm-rq-radio { border-color: var(--zm-teal); }\r\n    .zm-rq-option.zm-rq-selected .zm-rq-radio { border-color: var(--zm-mid-teal); background: var(--zm-mid-teal); }\r\n    .zm-rq-radio-check { opacity: 0; transform: scale(0); transition: all 0.25s var(--zm-ease-spring); }\r\n    .zm-rq-option.zm-rq-selected .zm-rq-radio-check { opacity: 1; transform: scale(1); }\r\n    .zm-rq-option-text { font-size: 14px; color: var(--zm-text-primary); line-height: 1.5; flex: 1; }\r\n    .zm-rq-option.zm-rq-selected .zm-rq-option-text { font-weight: 500; }\r\n    .zm-rq-nav { display: flex; justify-content: flex-start; align-items: center; margin-top: 20px; }\r\n    .zm-rq-back { font-family: inherit; font-size: 13px; font-weight: 500; color: var(--zm-sage); background: none; border: none; cursor: pointer; padding: 8px 14px; border-radius: 8px; transition: all 0.2s var(--zm-ease-smooth); -webkit-tap-highlight-color: transparent; display: inline-flex; align-items: center; gap: 4px; }\r\n    .zm-rq-back svg { width: 16px; height: 16px; transition: transform 0.2s var(--zm-ease-smooth); }\r\n    .zm-rq-back:hover { color: var(--zm-dark-teal); background: rgba(45,91,92,0.06); }\r\n    .zm-rq-back:hover svg { transform: translateX(-2px); }\r\n    .zm-rq-back:focus-visible { outline: none; box-shadow: var(--zm-shadow-glow); }\r\n    .zm-rq-back.zm-rq-hidden { visibility: hidden; pointer-events: none; }\r\n    .zm-rq-results { text-align: center; padding: 8px 0; }\r\n    .zm-rq-score-ring-wrap { width: 160px; height: 160px; margin: 0 auto 24px; position: relative; }\r\n    .zm-rq-score-ring-wrap svg { width: 160px; height: 160px; transform: rotate(-90deg); }\r\n    .zm-rq-ring-bg { fill: none; stroke: var(--zm-border-light); stroke-width: 8; }\r\n    .zm-rq-ring-fill { fill: none; stroke-width: 8; stroke-linecap: round; stroke-dasharray: 408; stroke-dashoffset: 408; transition: stroke-dashoffset 1.2s var(--zm-ease-out), stroke 0.3s; }\r\n    .zm-rq-score-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; }\r\n    .zm-rq-score-number { font-size: 46px; font-weight: 700; line-height: 1; letter-spacing: -2px; }\r\n    .zm-rq-score-of { font-size: 13px; color: var(--zm-sage); font-weight: 500; display: block; margin-top: 2px; }\r\n    .zm-rq-tier-badge { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.8px; border-radius: 100px; padding: 6px 16px; margin-bottom: 12px; opacity: 0; }\r\n    .zm-rq-tier-badge.zm-rq-reveal { animation: zm-rq-popIn 0.5s var(--zm-ease-spring) forwards; }\r\n    .zm-rq-tier-badge svg { width: 14px; height: 14px; }\r\n    .zm-rq-tier-name { font-size: 24px; font-weight: 700; margin-bottom: 8px; line-height: 1.2; letter-spacing: -0.3px; opacity: 0; }\r\n    .zm-rq-tier-name.zm-rq-reveal { animation: zm-rq-slideInUp 0.5s var(--zm-ease-out) forwards; }\r\n    .zm-rq-tier-message { font-size: 15px; color: var(--zm-text-secondary); margin-bottom: 32px; max-width: 440px; margin-left: auto; margin-right: auto; line-height: 1.65; opacity: 0; }\r\n    .zm-rq-tier-message.zm-rq-reveal { animation: zm-rq-fadeIn 0.5s var(--zm-ease-out) forwards; }\r\n    .zm-rq-breakdown { text-align: left; margin-bottom: 28px; opacity: 0; }\r\n    .zm-rq-breakdown.zm-rq-reveal { animation: zm-rq-slideInUp 0.5s var(--zm-ease-out) forwards; }\r\n    .zm-rq-section-title { font-size: 11px; font-weight: 600; color: var(--zm-sage); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 12px; text-align: center; }\r\n    .zm-rq-breakdown-list { display: grid; gap: 6px; }\r\n    .zm-rq-cat-row { background: var(--zm-white); border: 1px solid var(--zm-border-light); border-radius: 10px; padding: 12px 16px; display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto; gap: 4px 12px; align-items: center; box-shadow: 0 1px 2px rgba(45,91,92,0.03); }\r\n    .zm-rq-cat-name { font-size: 13px; font-weight: 600; color: var(--zm-dark-teal); grid-column: 1; grid-row: 1; }\r\n    .zm-rq-cat-status { font-size: 12px; font-weight: 600; grid-column: 2; grid-row: 1; display: inline-flex; align-items: center; gap: 5px; }\r\n    .zm-rq-cat-status-dot { width: 7px; height: 7px; border-radius: 50%; }\r\n    .zm-rq-cat-bar-track { grid-column: 1 \/ -1; grid-row: 2; width: 100%; height: 4px; background: var(--zm-border-light); border-radius: 100px; overflow: hidden; }\r\n    .zm-rq-cat-bar-fill { height: 100%; border-radius: 100px; width: 0; transition: width 0.8s var(--zm-ease-out); }\r\n    .zm-rq-nextsteps { text-align: left; margin-bottom: 28px; opacity: 0; }\r\n    .zm-rq-nextsteps.zm-rq-reveal { animation: zm-rq-slideInUp 0.5s var(--zm-ease-out) forwards; }\r\n    .zm-rq-nextstep { background: var(--zm-white); border: 1px solid var(--zm-border-light); border-radius: 10px; padding: 14px 16px; margin-bottom: 6px; display: flex; gap: 12px; align-items: flex-start; box-shadow: 0 1px 2px rgba(45,91,92,0.03); }\r\n    .zm-rq-nextstep-icon { width: 32px; height: 32px; border-radius: 8px; background: rgba(0,134,137,0.08); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\r\n    .zm-rq-nextstep-icon svg { width: 16px; height: 16px; color: var(--zm-mid-teal); }\r\n    .zm-rq-nextstep-content { flex: 1; min-width: 0; }\r\n    .zm-rq-nextstep-label { font-size: 13px; font-weight: 600; color: var(--zm-dark-teal); margin-bottom: 2px; }\r\n    .zm-rq-nextstep-text { font-size: 13px; color: var(--zm-text-secondary); line-height: 1.55; }\r\n    .zm-rq-nextstep-text a { color: var(--zm-mid-teal); text-decoration: none; font-weight: 500; border-bottom: 1px solid rgba(0,134,137,0.2); transition: border-color 0.2s; }\r\n    .zm-rq-nextstep-text a:hover { border-color: var(--zm-mid-teal); }\r\n    .zm-rq-cta-box { border-radius: 12px; padding: 24px 20px; margin-bottom: 20px; text-align: center; opacity: 0; box-shadow: 0 1px 3px rgba(45,91,92,0.04); }\r\n    .zm-rq-cta-box.zm-rq-reveal { animation: zm-rq-slideInUp 0.5s var(--zm-ease-out) forwards; }\r\n    .zm-rq-cta-text { font-size: 14px; line-height: 1.65; margin-bottom: 16px; color: var(--zm-text-secondary); }\r\n    .zm-rq-cta-link { display: inline-flex; align-items: center; justify-content: center; gap: 8px; background: linear-gradient(180deg, #00979A 0%, var(--zm-mid-teal) 100%); color: var(--zm-white); font-family: inherit; font-size: 15px; font-weight: 600; padding: 13px 28px; border: none; border-radius: 10px; cursor: pointer; text-decoration: none; box-shadow: 0 2px 4px rgba(0,134,137,0.3), 0 6px 12px rgba(0,134,137,0.12), inset 0 1px 0 rgba(255,255,255,0.2); transition: all 0.2s var(--zm-ease-smooth); position: relative; }\r\n    .zm-rq-cta-link::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(180deg, rgba(255,255,255,0.1) 0%, transparent 50%); border-radius: 10px; pointer-events: none; }\r\n    .zm-rq-cta-link:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(0,134,137,0.35), 0 10px 20px rgba(0,134,137,0.18), inset 0 1px 0 rgba(255,255,255,0.2); }\r\n    .zm-rq-cta-link:active { transform: translateY(0) scale(0.98); }\r\n    .zm-rq-cta-link:focus-visible { outline: none; box-shadow: var(--zm-shadow-glow), 0 2px 4px rgba(0,134,137,0.3); }\r\n    .zm-rq-cta-link svg { width: 16px; height: 16px; transition: transform 0.2s; }\r\n    .zm-rq-cta-link:hover svg { transform: translateX(2px); }\r\n    .zm-rq-retake { font-family: inherit; font-size: 13px; font-weight: 500; color: var(--zm-sage); background: none; border: none; cursor: pointer; padding: 8px 16px; border-radius: 8px; transition: all 0.2s var(--zm-ease-smooth); -webkit-tap-highlight-color: transparent; }\r\n    .zm-rq-retake:hover { color: var(--zm-dark-teal); background: rgba(45,91,92,0.06); }\r\n    .zm-rq-retake:focus-visible { outline: none; box-shadow: var(--zm-shadow-glow); }\r\n    .zm-rq-footer { text-align: center; margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--zm-border-light); }\r\n    .zm-rq-footer-text { font-size: 12px; color: var(--zm-sage); }\r\n    .zm-rq-footer-text a { color: var(--zm-mid-teal); text-decoration: none; font-weight: 500; transition: color 0.2s; }\r\n    .zm-rq-footer-text a:hover { color: var(--zm-dark-teal); }\r\n    @media (max-width: 768px) {\r\n      #zm-readiness-quiz { padding: 24px 18px; margin: 16px auto; border-radius: 14px; }\r\n      .zm-rq-title { font-size: 21px; }\r\n      .zm-rq-question { font-size: 17px; }\r\n      .zm-rq-q-number { font-size: 56px; right: -2px; top: -8px; }\r\n      .zm-rq-score-ring-wrap { width: 140px; height: 140px; }\r\n      .zm-rq-score-ring-wrap svg { width: 140px; height: 140px; }\r\n      .zm-rq-score-number { font-size: 40px; }\r\n      .zm-rq-tier-name { font-size: 21px; }\r\n      .zm-rq-meta { gap: 6px; flex-wrap: wrap; justify-content: center; }\r\n      .zm-rq-meta-pill { padding: 5px 10px; font-size: 11px; }\r\n      .zm-rq-option { padding: 12px 14px; gap: 12px; }\r\n    }\r\n    @media (prefers-reduced-motion: reduce) {\r\n      .zm-rq-screen.zm-rq-enter-right,\r\n      .zm-rq-screen.zm-rq-enter-left,\r\n      .zm-rq-screen.zm-rq-enter-up,\r\n      .zm-rq-option.zm-rq-stagger-in,\r\n      .zm-rq-tier-badge.zm-rq-reveal,\r\n      .zm-rq-tier-name.zm-rq-reveal,\r\n      .zm-rq-tier-message.zm-rq-reveal,\r\n      .zm-rq-breakdown.zm-rq-reveal,\r\n      .zm-rq-nextsteps.zm-rq-reveal,\r\n      .zm-rq-cta-box.zm-rq-reveal { animation: none !important; opacity: 1 !important; transform: none !important; }\r\n      .zm-rq-ring-fill { transition: none !important; }\r\n      .zm-rq-cat-bar-fill { transition: none !important; }\r\n      .zm-rq-option { opacity: 1 !important; transform: none !important; }\r\n      .zm-rq-option.zm-rq-selected.zm-rq-just-selected { animation: none !important; }\r\n    }\r\n<\/style>\r\n\r\n<div id=\"zm-readiness-quiz\">\r\n\r\n  <div class=\"zm-rq-screen zm-rq-active\" data-screen=\"intro\">\r\n    <div class=\"zm-rq-intro\">\r\n      <div class=\"zm-rq-intro-icon\" aria-hidden=\"true\">\r\n        <svg viewBox=\"0 0 64 64\" fill=\"none\">\r\n          <rect class=\"zm-rq-icon-bg\" x=\"12\" y=\"6\" width=\"40\" height=\"52\" rx=\"6\"\/>\r\n          <line class=\"zm-rq-icon-accent\" x1=\"22\" y1=\"22\" x2=\"36\" y2=\"22\"\/>\r\n          <line class=\"zm-rq-icon-accent\" x1=\"22\" y1=\"30\" x2=\"42\" y2=\"30\"\/>\r\n          <line class=\"zm-rq-icon-accent\" x1=\"22\" y1=\"38\" x2=\"38\" y2=\"38\"\/>\r\n          <polyline class=\"zm-rq-icon-accent\" points=\"22,46 26,50 34,42\" stroke-width=\"2.5\"\/>\r\n        <\/svg>\r\n      <\/div>\r\n      <h2 class=\"zm-rq-title\">How Ready Are You to Start a Cleaning Business?<\/h2>\r\n      <p class=\"zm-rq-subtitle\">Answer 10 quick questions to find out where you stand \u2014 and what to focus on next.<\/p>\r\n      <div class=\"zm-rq-meta\">\r\n        <span class=\"zm-rq-meta-pill\">\r\n          <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><circle cx=\"8\" cy=\"8\" r=\"6\"\/><path d=\"M8 5v3l2 1.5\"\/><\/svg>\r\n          2 minutes\r\n        <\/span>\r\n        <span class=\"zm-rq-meta-pill\">\r\n          <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M3 8.5L6.5 12L13 4\"\/><\/svg>\r\n          10 questions\r\n        <\/span>\r\n        <span class=\"zm-rq-meta-pill\">\r\n          <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M8 2L10 6H14L11 9L12 13L8 10.5L4 13L5 9L2 6H6Z\"\/><\/svg>\r\n          100% free\r\n        <\/span>\r\n      <\/div>\r\n      <button class=\"zm-rq-btn-primary\" id=\"zm-rq-start\" type=\"button\">\r\n        Take the Quiz\r\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 8h10M9 4l4 4-4 4\"\/><\/svg>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"zm-rq-screen\" data-screen=\"question\">\r\n    <div class=\"zm-rq-progress\">\r\n      <div class=\"zm-rq-progress-header\">\r\n        <span class=\"zm-rq-progress-label\" id=\"zm-rq-cat-label\"><\/span>\r\n        <span class=\"zm-rq-progress-count\" id=\"zm-rq-qcount\"><\/span>\r\n      <\/div>\r\n      <div class=\"zm-rq-segments\" id=\"zm-rq-segments\">\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n        <div class=\"zm-rq-segment\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"zm-rq-q-header\">\r\n      <div class=\"zm-rq-q-number\" id=\"zm-rq-q-number\" aria-hidden=\"true\"><\/div>\r\n      <div class=\"zm-rq-category-pill\" id=\"zm-rq-category\">\r\n        <span class=\"zm-rq-category-dot\"><\/span>\r\n        <span id=\"zm-rq-category-text\"><\/span>\r\n      <\/div>\r\n      <h3 class=\"zm-rq-question\" id=\"zm-rq-question-text\"><\/h3>\r\n    <\/div>\r\n    <ul class=\"zm-rq-options\" id=\"zm-rq-options\" role=\"radiogroup\"><\/ul>\r\n    <div class=\"zm-rq-nav\">\r\n      <button class=\"zm-rq-back\" id=\"zm-rq-back\" type=\"button\">\r\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 8H3M7 4L3 8l4 4\"\/><\/svg>\r\n        Back\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"zm-rq-screen\" data-screen=\"results\">\r\n    <div class=\"zm-rq-results\">\r\n      <div class=\"zm-rq-score-ring-wrap\">\r\n        <svg viewBox=\"0 0 160 160\">\r\n          <circle class=\"zm-rq-ring-bg\" cx=\"80\" cy=\"80\" r=\"65\"\/>\r\n          <circle class=\"zm-rq-ring-fill\" id=\"zm-rq-ring\" cx=\"80\" cy=\"80\" r=\"65\"\/>\r\n        <\/svg>\r\n        <div class=\"zm-rq-score-center\">\r\n          <span class=\"zm-rq-score-number\" id=\"zm-rq-score-num\">0<\/span>\r\n          <span class=\"zm-rq-score-of\">out of 100<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"zm-rq-tier-badge\" id=\"zm-rq-tier-badge\"><\/div>\r\n      <h2 class=\"zm-rq-tier-name\" id=\"zm-rq-tier-name\"><\/h2>\r\n      <p class=\"zm-rq-tier-message\" id=\"zm-rq-tier-msg\"><\/p>\r\n      <div class=\"zm-rq-breakdown\" id=\"zm-rq-breakdown\">\r\n        <div class=\"zm-rq-section-title\">Your Breakdown<\/div>\r\n        <div class=\"zm-rq-breakdown-list\" id=\"zm-rq-breakdown-list\"><\/div>\r\n      <\/div>\r\n      <div class=\"zm-rq-nextsteps\" id=\"zm-rq-nextsteps\">\r\n        <div class=\"zm-rq-section-title\">Your Next Steps<\/div>\r\n      <\/div>\r\n      <div class=\"zm-rq-cta-box\" id=\"zm-rq-cta-box\">\r\n        <p class=\"zm-rq-cta-text\" id=\"zm-rq-cta-text\"><\/p>\r\n        <div id=\"zm-rq-cta-btn-wrap\"><\/div>\r\n      <\/div>\r\n      <button class=\"zm-rq-retake\" id=\"zm-rq-retake\" type=\"button\">Retake Quiz<\/button>\r\n    <\/div>\r\n    <div class=\"zm-rq-footer\">\r\n      <p class=\"zm-rq-footer-text\">\r\n        Built by <a href=\"https:\/\/www.zenmaid.com\" target=\"_blank\" rel=\"noopener\">ZenMaid<\/a> \u2014 scheduling software for maid services\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/canvas-confetti@1.9.3\/dist\/confetti.browser.min.js\"><\/script>\r\n\r\n<script>\r\n(function() {\r\n  'use strict';\r\n\r\n  var questions = [\r\n    {\r\n      category: 'Business Fundamentals',\r\n      question: 'Have you decided what type of cleaning you\\'ll offer?',\r\n      options: ['I haven\\'t thought about it yet','I have a general idea (residential or commercial)','I\\'ve decided and researched the differences','I\\'ve chosen my niche AND identified my ideal customer'],\r\n      articleSection: 'Step 1', articleLabel: 'Choosing your cleaning company type', articleAnchor: '#step-1-choose-your-cleaning-company-type'\r\n    },\r\n    {\r\n      category: 'Business Fundamentals',\r\n      question: 'Do you have a business name and legal structure picked out?',\r\n      options: ['Haven\\'t started thinking about this','I have some name ideas but haven\\'t checked availability','I\\'ve picked a name and checked it\\'s available','Name is chosen, legal structure decided, ready to register'],\r\n      articleSection: 'Steps 2 & 4', articleLabel: 'Naming + Licensing & legal setup', articleAnchor: '#step-2-name-your-cleaning-company'\r\n    },\r\n    {\r\n      category: 'Finances',\r\n      question: 'How much startup capital do you have available?',\r\n      options: ['I don\\'t have any savings set aside for this','I have under $1,000','I have $1,000\\u2013$5,000','I have $5,000+ or a clear plan to fund my startup'],\r\n      articleSection: 'Step 3', articleLabel: 'Setting your business budget', articleAnchor: '#step-3-set-your-cleaning-business-budget'\r\n    },\r\n    {\r\n      category: 'Finances',\r\n      question: 'Do you have a pricing strategy?',\r\n      options: ['I have no idea what to charge','I\\'ve looked at what competitors charge in my area','I\\'ve calculated my costs and have a general pricing plan','I have a pricing model with specific rates based on my costs and market'],\r\n      articleSection: 'Step 6', articleLabel: 'Pricing structure', articleAnchor: '#step-6-create-a-pricing-structure-for-your-cleaning-business'\r\n    },\r\n    {\r\n      category: 'Legal & Insurance',\r\n      question: 'Have you researched the licenses and permits required in your state?',\r\n      options: ['I didn\\'t know I needed licenses','I know I need something but haven\\'t researched specifics','I\\'ve identified what\\'s required in my state','I\\'ve identified requirements AND started the application process'],\r\n      articleSection: 'Step 4', articleLabel: 'Licensing and legal setup', articleAnchor: '#step-4-get-your-cleaning-business-license'\r\n    },\r\n    {\r\n      category: 'Legal & Insurance',\r\n      question: 'Do you have a plan for business insurance?',\r\n      options: ['I haven\\'t thought about insurance','I know I need it but haven\\'t gotten quotes','I\\'ve researched options and gotten quotes','I have insurance lined up or already purchased'],\r\n      articleSection: 'Step 4', articleLabel: 'Insurance & bonding', articleAnchor: '#step-4-get-your-cleaning-business-license'\r\n    },\r\n    {\r\n      category: 'Operations',\r\n      question: 'Do you have your equipment and supplies figured out?',\r\n      options: ['I haven\\'t made a supply list yet','I have a basic list but haven\\'t purchased anything','I have most of what I need or know exactly what to buy','I\\'m fully equipped and ready to clean'],\r\n      articleSection: 'Step 5', articleLabel: 'Equipment and supplies', articleAnchor: '#step-5-buy-your-cleaning-business-equipment-and-supplies'\r\n    },\r\n    {\r\n      category: 'Operations',\r\n      question: 'Will you be cleaning solo or hiring a team?',\r\n      options: ['I haven\\'t decided yet','I\\'ve decided but don\\'t have a plan for hiring or training','I know my staffing model and have a rough hiring plan','I have a clear staffing plan with job descriptions, pay rates, and a training process'],\r\n      articleSection: 'Step 7', articleLabel: 'Hiring and training', articleAnchor: '#step-7-hire-and-train-your-cleaning-staff'\r\n    },\r\n    {\r\n      category: 'Marketing & Growth',\r\n      question: 'How will you get your first customers?',\r\n      options: ['I\\'m hoping word of mouth will be enough','I have a few ideas (social media, flyers, etc.) but no real plan','I have a marketing plan with 2\\u20133 specific channels I\\'ll use','I have a detailed plan including online presence, marketing channels, and a budget'],\r\n      articleSection: 'Step 9', articleLabel: 'Marketing', articleAnchor: '#step-9-start-marketing-your-cleaning-business'\r\n    },\r\n    {\r\n      category: 'Marketing & Growth',\r\n      question: 'Do you have systems to manage bookings, scheduling, and payments?',\r\n      options: ['I\\'ll figure that out when I get customers','I\\'m planning to use a spreadsheet or paper calendar','I\\'ve looked into software options but haven\\'t committed','I\\'ve chosen my systems and I\\'m ready to set them up'],\r\n      articleSection: 'Step 8', articleLabel: 'Software automation', articleAnchor: '#step-8-set-up-your-cleaning-business-software'\r\n    }\r\n  ];\r\n\r\n  var categories = [\r\n    { name: 'Business Fundamentals', qIndexes: [0, 1] },\r\n    { name: 'Finances', qIndexes: [2, 3] },\r\n    { name: 'Legal & Insurance', qIndexes: [4, 5] },\r\n    { name: 'Operations', qIndexes: [6, 7] },\r\n    { name: 'Marketing & Growth', qIndexes: [8, 9] }\r\n  ];\r\n\r\n  var tiers = [\r\n    { name: 'Not Ready Yet', min: 0, max: 33, color: '#DC4A1A', bgColor: '#FEF2EE', borderColor: '#FDDCCC', message: 'You\\'ve got the entrepreneurial spirit \\u2014 now let\\'s build the foundation. Focus on the basics before you launch.', ctaText: 'Start with the basics \\u2014 read our complete guide above, then retake the quiz when you\\'re further along.', ctaBtn: null, confetti: false },\r\n    { name: 'Getting There', min: 34, max: 59, color: '#D97706', bgColor: '#FFFBEB', borderColor: '#FDE68A', message: 'You\\'re making progress! A few key areas need attention before you\\'re ready to take the leap.', ctaText: 'You\\'re on the right track. Bookmark this page and come back when you\\'ve closed the gaps below.', ctaBtn: null, confetti: false },\r\n    { name: 'Almost Ready', min: 60, max: 84, color: '#008689', bgColor: '#EDF8F8', borderColor: '#D0E8E8', message: 'You\\'re in great shape. Close a few remaining gaps and you\\'ll be ready to launch with confidence.', ctaText: 'You\\'re almost there! Once you launch, ZenMaid can help you automate scheduling, payments, and customer communication from day one.', ctaBtn: { text: 'Try ZenMaid Free', url: 'https:\/\/www.zenmaid.com\/start-free-trial\/' }, confetti: false },\r\n    { name: 'Ready to Launch!', min: 85, max: 100, color: '#059669', bgColor: '#ECFDF5', borderColor: '#A7F3D0', message: 'You\\'ve done your homework. You\\'re more prepared than most people who start a cleaning business. Time to go!', ctaText: 'You\\'re ready! The #1 thing that separates successful cleaning businesses from the rest? Having systems from day one.', ctaBtn: { text: 'Start Your Free ZenMaid Trial', url: 'https:\/\/www.zenmaid.com\/start-free-trial\/' }, confetti: true }\r\n  ];\r\n\r\n  function getCatStatus(rawScore) {\r\n    if (rawScore <= 1) return { label: 'Needs work', color: '#DC4A1A', barColor: '#DC4A1A' };\r\n    if (rawScore <= 3) return { label: 'Getting there', color: '#D97706', barColor: '#D97706' };\r\n    if (rawScore <= 5) return { label: 'Looking good', color: '#008689', barColor: '#5CC9CA' };\r\n    return { label: 'Ready!', color: '#059669', barColor: '#059669' };\r\n  }\r\n\r\n  var state = {\r\n    currentQuestion: 0,\r\n    answers: new Array(questions.length).fill(-1)\r\n  };\r\n\r\n  var root = document.getElementById('zm-readiness-quiz');\r\n  var screens = root.querySelectorAll('.zm-rq-screen');\r\n  var startBtn = document.getElementById('zm-rq-start');\r\n  var backBtn = document.getElementById('zm-rq-back');\r\n  var retakeBtn = document.getElementById('zm-rq-retake');\r\n  var catLabel = document.getElementById('zm-rq-cat-label');\r\n  var qCount = document.getElementById('zm-rq-qcount');\r\n  var categoryText = document.getElementById('zm-rq-category-text');\r\n  var qNumber = document.getElementById('zm-rq-q-number');\r\n  var questionText = document.getElementById('zm-rq-question-text');\r\n  var optionsList = document.getElementById('zm-rq-options');\r\n  var segments = document.getElementById('zm-rq-segments').children;\r\n\r\n  function showScreen(name, direction) {\r\n    var dir = direction || 'right';\r\n    var animClass = dir === 'right' ? 'zm-rq-enter-right' : dir === 'left' ? 'zm-rq-enter-left' : 'zm-rq-enter-up';\r\n    for (var i = 0; i < screens.length; i++) {\r\n      var s = screens[i];\r\n      s.classList.remove('zm-rq-active', 'zm-rq-enter-right', 'zm-rq-enter-left', 'zm-rq-enter-up');\r\n      if (s.getAttribute('data-screen') === name) {\r\n        s.classList.add('zm-rq-active', animClass);\r\n      }\r\n    }\r\n  }\r\n\r\n  function updateSegments() {\r\n    var idx = state.currentQuestion;\r\n    for (var i = 0; i < segments.length; i++) {\r\n      segments[i].classList.remove('zm-rq-filled', 'zm-rq-current');\r\n      if (i < idx) { segments[i].classList.add('zm-rq-filled'); }\r\n      else if (i === idx) { segments[i].classList.add('zm-rq-current'); }\r\n    }\r\n  }\r\n\r\n  function renderQuestion(dir) {\r\n    var q = questions[state.currentQuestion];\r\n    var num = state.currentQuestion + 1;\r\n    catLabel.textContent = q.category;\r\n    qCount.textContent = num + ' of ' + questions.length;\r\n    updateSegments();\r\n    qNumber.textContent = num;\r\n    categoryText.textContent = q.category;\r\n    questionText.textContent = q.question;\r\n    optionsList.innerHTML = '';\r\n    for (var i = 0; i < q.options.length; i++) {\r\n      var li = document.createElement('li');\r\n      li.className = 'zm-rq-option';\r\n      li.setAttribute('role', 'radio');\r\n      li.setAttribute('tabindex', '0');\r\n      li.setAttribute('aria-checked', state.answers[state.currentQuestion] === i ? 'true' : 'false');\r\n      li.style.animationDelay = (i * 60 + 80) + 'ms';\r\n      if (state.answers[state.currentQuestion] === i) { li.classList.add('zm-rq-selected'); }\r\n      var radio = document.createElement('span');\r\n      radio.className = 'zm-rq-radio';\r\n      radio.setAttribute('aria-hidden', 'true');\r\n      var check = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\r\n      check.setAttribute('class', 'zm-rq-radio-check');\r\n      check.setAttribute('viewBox', '0 0 12 12');\r\n      check.setAttribute('width', '12');\r\n      check.setAttribute('height', '12');\r\n      var path = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'path');\r\n      path.setAttribute('d', 'M2.5 6L5 8.5L9.5 3.5');\r\n      path.setAttribute('fill', 'none');\r\n      path.setAttribute('stroke', 'white');\r\n      path.setAttribute('stroke-width', '2');\r\n      path.setAttribute('stroke-linecap', 'round');\r\n      path.setAttribute('stroke-linejoin', 'round');\r\n      check.appendChild(path);\r\n      radio.appendChild(check);\r\n      var text = document.createElement('span');\r\n      text.className = 'zm-rq-option-text';\r\n      text.textContent = q.options[i];\r\n      li.appendChild(radio);\r\n      li.appendChild(text);\r\n      li.setAttribute('data-value', i);\r\n      li.addEventListener('click', handleOptionClick);\r\n      li.addEventListener('keydown', handleOptionKeydown);\r\n      optionsList.appendChild(li);\r\n      requestAnimationFrame(function(el) {\r\n        return function() { el.classList.add('zm-rq-stagger-in'); };\r\n      }(li));\r\n    }\r\n    if (state.currentQuestion === 0) { backBtn.classList.add('zm-rq-hidden'); }\r\n    else { backBtn.classList.remove('zm-rq-hidden'); }\r\n    showScreen('question', dir || 'right');\r\n  }\r\n\r\n  function handleOptionClick(e) {\r\n    var li = e.currentTarget;\r\n    var value = parseInt(li.getAttribute('data-value'), 10);\r\n    state.answers[state.currentQuestion] = value;\r\n    var allOptions = optionsList.querySelectorAll('.zm-rq-option');\r\n    for (var i = 0; i < allOptions.length; i++) {\r\n      allOptions[i].classList.remove('zm-rq-selected', 'zm-rq-just-selected');\r\n      allOptions[i].setAttribute('aria-checked', 'false');\r\n    }\r\n    li.classList.add('zm-rq-selected', 'zm-rq-just-selected');\r\n    li.setAttribute('aria-checked', 'true');\r\n    setTimeout(function() {\r\n      if (state.currentQuestion < questions.length - 1) { state.currentQuestion++; renderQuestion('right'); }\r\n      else { showResults(); }\r\n    }, 350);\r\n  }\r\n\r\n  function handleOptionKeydown(e) {\r\n    if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); e.currentTarget.click(); }\r\n  }\r\n\r\n  startBtn.addEventListener('click', function() { state.currentQuestion = 0; renderQuestion('right'); });\r\n  backBtn.addEventListener('click', function() { if (state.currentQuestion > 0) { state.currentQuestion--; renderQuestion('left'); } });\r\n  retakeBtn.addEventListener('click', function() {\r\n    state.currentQuestion = 0;\r\n    state.answers = new Array(questions.length).fill(-1);\r\n    var revealEls = root.querySelectorAll('.zm-rq-reveal');\r\n    for (var i = 0; i < revealEls.length; i++) { revealEls[i].classList.remove('zm-rq-reveal'); }\r\n    showScreen('intro', 'left');\r\n  });\r\n\r\n  function showResults() {\r\n    var rawScore = 0;\r\n    for (var i = 0; i < state.answers.length; i++) { rawScore += Math.max(0, state.answers[i]); }\r\n    var normalizedScore = Math.round(rawScore \/ 30 * 100);\r\n    var tier = tiers[0];\r\n    for (var t = 0; t < tiers.length; t++) {\r\n      if (normalizedScore >= tiers[t].min && normalizedScore <= tiers[t].max) { tier = tiers[t]; break; }\r\n    }\r\n    var ring = document.getElementById('zm-rq-ring');\r\n    var circumference = 2 * Math.PI * 65;\r\n    ring.style.stroke = tier.color;\r\n    ring.style.strokeDasharray = circumference;\r\n    ring.style.strokeDashoffset = circumference;\r\n    var scoreNum = document.getElementById('zm-rq-score-num');\r\n    scoreNum.style.color = tier.color;\r\n    showScreen('results', 'up');\r\n    requestAnimationFrame(function() {\r\n      ring.style.strokeDashoffset = circumference * (1 - normalizedScore \/ 100);\r\n      animateScore(scoreNum, normalizedScore);\r\n      var tierBadge = document.getElementById('zm-rq-tier-badge');\r\n      tierBadge.style.background = tier.bgColor;\r\n      tierBadge.style.color = tier.color;\r\n      tierBadge.style.border = '1px solid ' + tier.borderColor;\r\n      tierBadge.innerHTML = '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><circle cx=\"8\" cy=\"8\" r=\"4\"\/><\/svg>' + tier.name;\r\n      setTimeout(function() { tierBadge.classList.add('zm-rq-reveal'); }, 600);\r\n      var tierName = document.getElementById('zm-rq-tier-name');\r\n      tierName.textContent = tier.name;\r\n      tierName.style.color = tier.color;\r\n      setTimeout(function() { tierName.classList.add('zm-rq-reveal'); }, 700);\r\n      var tierMsg = document.getElementById('zm-rq-tier-msg');\r\n      tierMsg.textContent = tier.message;\r\n      setTimeout(function() { tierMsg.classList.add('zm-rq-reveal'); }, 850);\r\n      renderBreakdown();\r\n      setTimeout(function() {\r\n        document.getElementById('zm-rq-breakdown').classList.add('zm-rq-reveal');\r\n        setTimeout(animateBreakdownBars, 100);\r\n      }, 1000);\r\n      renderNextSteps();\r\n      setTimeout(function() { document.getElementById('zm-rq-nextsteps').classList.add('zm-rq-reveal'); }, 1200);\r\n      renderCTA(tier);\r\n      setTimeout(function() { document.getElementById('zm-rq-cta-box').classList.add('zm-rq-reveal'); }, 1400);\r\n      if (tier.confetti && typeof confetti === 'function') {\r\n        setTimeout(function() {\r\n          var rect = root.getBoundingClientRect();\r\n          confetti({ particleCount: 80, spread: 70, origin: { x: (rect.left + rect.width \/ 2) \/ window.innerWidth, y: (rect.top + 80) \/ window.innerHeight }, colors: ['#5CC9CA', '#008689', '#2D5B5C', '#ECCC4C', '#059669'], disableForReducedMotion: true });\r\n        }, 800);\r\n      }\r\n    });\r\n  }\r\n\r\n  function animateScore(el, target) {\r\n    var startTime = null;\r\n    function step(timestamp) {\r\n      if (!startTime) startTime = timestamp;\r\n      var progress = Math.min((timestamp - startTime) \/ 1000, 1);\r\n      el.textContent = Math.round((1 - Math.pow(1 - progress, 3)) * target);\r\n      if (progress < 1) requestAnimationFrame(step);\r\n    }\r\n    requestAnimationFrame(step);\r\n  }\r\n\r\n  function renderBreakdown() {\r\n    var list = document.getElementById('zm-rq-breakdown-list');\r\n    list.innerHTML = '';\r\n    for (var c = 0; c < categories.length; c++) {\r\n      var cat = categories[c];\r\n      var catRaw = 0;\r\n      for (var q = 0; q < cat.qIndexes.length; q++) { catRaw += Math.max(0, state.answers[cat.qIndexes[q]]); }\r\n      var catPct = Math.round(catRaw \/ 6 * 100);\r\n      var status = getCatStatus(catRaw);\r\n      var row = document.createElement('div');\r\n      row.className = 'zm-rq-cat-row';\r\n      row.innerHTML = '<span class=\"zm-rq-cat-name\">' + cat.name + '<\/span><span class=\"zm-rq-cat-status\"><span class=\"zm-rq-cat-status-dot\" style=\"background:' + status.color + '\"><\/span><span style=\"color:' + status.color + '\">' + status.label + '<\/span><\/span><div class=\"zm-rq-cat-bar-track\"><div class=\"zm-rq-cat-bar-fill\" data-width=\"' + catPct + '\" style=\"background:' + status.barColor + ';width:0\"><\/div><\/div>';\r\n      list.appendChild(row);\r\n    }\r\n  }\r\n\r\n  function animateBreakdownBars() {\r\n    var bars = document.querySelectorAll('.zm-rq-cat-bar-fill');\r\n    for (var i = 0; i < bars.length; i++) {\r\n      (function(bar, delay) {\r\n        setTimeout(function() { bar.style.width = bar.getAttribute('data-width') + '%'; }, delay);\r\n      })(bars[i], i * 120);\r\n    }\r\n  }\r\n\r\n  function renderNextSteps() {\r\n    var container = document.getElementById('zm-rq-nextsteps');\r\n    var oldSteps = container.querySelectorAll('.zm-rq-nextstep');\r\n    for (var s = 0; s < oldSteps.length; s++) { oldSteps[s].remove(); }\r\n    var catScores = [];\r\n    for (var c = 0; c < categories.length; c++) {\r\n      var cat = categories[c];\r\n      var catRaw = 0;\r\n      for (var q = 0; q < cat.qIndexes.length; q++) { catRaw += Math.max(0, state.answers[cat.qIndexes[q]]); }\r\n      catScores.push({ cat: cat, raw: catRaw });\r\n    }\r\n    catScores.sort(function(a, b) { return a.raw - b.raw; });\r\n    var shown = 0;\r\n    for (var i = 0; i < catScores.length && shown < 3; i++) {\r\n      if (catScores[i].raw >= 5) continue;\r\n      var weakCat = catScores[i].cat;\r\n      var weakestQ = null;\r\n      var weakestScore = 4;\r\n      for (var qi = 0; qi < weakCat.qIndexes.length; qi++) {\r\n        var qIdx = weakCat.qIndexes[qi];\r\n        var answerScore = Math.max(0, state.answers[qIdx]);\r\n        if (answerScore < weakestScore) { weakestScore = answerScore; weakestQ = questions[qIdx]; }\r\n      }\r\n      if (weakestQ) {\r\n        var stepDiv = document.createElement('div');\r\n        stepDiv.className = 'zm-rq-nextstep';\r\n        stepDiv.innerHTML = '<div class=\"zm-rq-nextstep-icon\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M6 3l5 5-5 5\"\/><\/svg><\/div><div class=\"zm-rq-nextstep-content\"><div class=\"zm-rq-nextstep-label\">' + weakCat.name + '<\/div><div class=\"zm-rq-nextstep-text\">Read <a href=\"' + weakestQ.articleAnchor + '\">' + weakestQ.articleSection + ': ' + weakestQ.articleLabel + '<\/a> in the guide above.<\/div><\/div>';\r\n        container.appendChild(stepDiv);\r\n        shown++;\r\n      }\r\n    }\r\n    if (shown === 0) {\r\n      var allGood = document.createElement('div');\r\n      allGood.className = 'zm-rq-nextstep';\r\n      allGood.innerHTML = '<div class=\"zm-rq-nextstep-icon\"><svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M3 8.5L6.5 12L13 4\"\/><\/svg><\/div><div class=\"zm-rq-nextstep-content\"><div class=\"zm-rq-nextstep-label\">All areas look strong!<\/div><div class=\"zm-rq-nextstep-text\">You\\'ve covered all the major bases. Focus on execution \\u2014 pick your launch date and go for it.<\/div><\/div>';\r\n      container.appendChild(allGood);\r\n    }\r\n  }\r\n\r\n  function renderCTA(tier) {\r\n    var ctaBox = document.getElementById('zm-rq-cta-box');\r\n    ctaBox.style.background = tier.bgColor;\r\n    ctaBox.style.border = '1px solid ' + tier.borderColor;\r\n    document.getElementById('zm-rq-cta-text').textContent = tier.ctaText;\r\n    var btnWrap = document.getElementById('zm-rq-cta-btn-wrap');\r\n    btnWrap.innerHTML = '';\r\n    if (tier.ctaBtn) {\r\n      var btn = document.createElement('a');\r\n      btn.className = 'zm-rq-cta-link';\r\n      btn.href = tier.ctaBtn.url;\r\n      btn.target = '_blank';\r\n      btn.rel = 'noopener';\r\n      btn.innerHTML = tier.ctaBtn.text + ' <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 8h10M9 4l4 4-4 4\"\/><\/svg>';\r\n      btnWrap.appendChild(btn);\r\n    }\r\n  }\r\n\r\n})();\r\n<\/script>\n\n\n\n<h2 id=\"heading-3\" class=\"wp-block-heading\">Step 1: Start the Right Cleaning Business for You<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you set out to start a cleaning business, you have to answer a few critical questions: what services are you actually going to offer, and to whom? Are the services you provide really worth your time?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Say you plan to provide residential cleaning services, and within a month of announcing your business, your calendar is booked solid with monthly recurring clients.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You think you\u2019re ready. You\u2019ve hired a team of rockstar cleaners, you\u2019ve invested in training them well, and you&#8217;ve bought the best cleaning equipment available. But when you review your finances at the end of the month, you realize you\u2019ve lost money \u2014 like, a lot of it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid this by thinking strategically about a few things in advance:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your target market<\/li>\n\n\n\n<li>Your service types<\/li>\n\n\n\n<li>Your frequency of cleanings<\/li>\n<\/ul>\n\n\n\n<h3 id=\"heading-4\" class=\"wp-block-heading\">What\u2019s the difference between residential and commercial cleaning businesses?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A residential cleaning business typically cleans homes and apartments, focusing on floors, bedrooms, kitchens, and bathrooms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A commercial cleaning business handles offices, hospitals, schools, retail spaces, and other commercial facilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your local market will also help you determine whether there\u2019s higher demand for commercial or residential cleaning services.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The choice of business you create will affect the business from end-to-end, including training requirements, licensing and insurance, pricing structure, and profit potential.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our recommendation is to start narrow. You can expand later, but running both from day one is hard.<\/p>\n\n\n\n<h2 id=\"heading-5\" class=\"wp-block-heading\">Step 2: Decide on Your Cleaning Company Name<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your cleaning business name must be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unique<\/li>\n\n\n\n<li>Available in your state<\/li>\n\n\n\n<li>Legally usable<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In the US, you can use tools like <a href=\"http:\/\/trademark.io\">Trademark.io<\/a> to check whether a name is already trademarked. This matters because using another business\u2019s name, even unintentionally, can create costly legal issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You\u2019ll need your business name before filing a DBA (\u201cdoing business as\u201d) or registering your cleaning business.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you don\u2019t have a name yet, start by researching businesses online and checking availability. You can also use our free Cleaning Business Name Generator \u2014 and read more about choosing your name <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-to-choose-the-best-name-cleaning-business\/\">in our guide<\/a>.<\/p>\n\n\n\n<h2 id=\"heading-6\" class=\"wp-block-heading\">Step 3: Set Your Business Budget<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Budgeting is overwhelming, no matter where you are in your cleaning business. But it all comes back to mindset, even when it comes to money.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before numbers, start with the right money mindset:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Understand your WHY<\/strong>: Why are you starting this cleaning business? To make money. Sure, you want to offer cleaning services and hire employees, but you started a business to profit from it. Don\u2019t let that goal fall by the wayside.\u00a0<\/li>\n\n\n\n<li><strong>Define your income goals<\/strong>: Look at your current financial situation and set a realistic target for your business. Income should more than cover your operating expenses \u2014 and as the owner, your profits should cover your monthly personal expenses plus about 30%. For example, if your personal monthly expenses are around $4,000, your profit target should be about $5,200 to include savings.\u00a0<\/li>\n\n\n\n<li><strong>Decide what you\u2019re willing to sacrifice<\/strong>: Your time, energy, money, and sanity are limited resources. Decide what you\u2019re willing to spend on a good day, and what you\u2019re willing to spend or sacrifice to get through a bad one. Those limits will show you where you need to grow.<\/li>\n\n\n\n<li><strong>Understand all levels of your business<\/strong>:\u00a0No matter whether you\u2019re a cleaner-turned-owner or a remote cleaning business owner, you need to know everything that happens day-to-day. That knowledge is what keeps you afloat when trouble arises.\u00a0<\/li>\n\n\n\n<li><strong>Use systems to improve profitability<\/strong>: Automations are worth investing in. Systems keep your business running without you, even when you\u2019re sick or on vacation. Building systems and backing them with software means fewer headaches, less time spent on routine maintenance, and more time for growing your business.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Many owners mistakenly believe that your profits come after you pay out your expenses:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sales \u2013 Expenses = Profit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But the reality is that you need to think about it in the opposite way:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sales \u2013 Profit = Expenses<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is what makes your business profitable for you and gives you more leeway to reinvest in growth and development. Healthy cleaning businesses often aim for these margins:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>~55% cost of goods sold (payroll)<\/li>\n\n\n\n<li>~25% operating expenses (software, cleaning supplies, marketing)<\/li>\n\n\n\n<li>~20% profit<\/li>\n<\/ul>\n\n\n\n<h2 id=\"heading-7\" class=\"wp-block-heading\">Step 4: Set Up Proper Licensing for Your Cleaning Business<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, you do <a href=\"https:\/\/www.zenmaid.com\/magazine\/do-i-need-a-license-to-clean-houses\/\">need a cleaning business license<\/a>. Requirements vary by state, city, and county, so always verify what you need in your local area.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a baseline, most cleaning businesses must:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Register their business with the Secretary of State<\/li>\n\n\n\n<li>Obtain a business license<\/li>\n\n\n\n<li>Register for federal, state, and local taxes<\/li>\n\n\n\n<li>Apply for an EIN from the IRS<\/li>\n\n\n\n<li>Carry liability insurance and bonding<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There are different types of legal business structures to consider: sole proprietor\/DBA, partnership, corporation, and LLC. Most cleaning business owners choose an LLC for flexibility and protection, but always consult a professional if you\u2019re unsure. Refer to the <a href=\"https:\/\/www.sba.gov\/\">U.S. Small Business Administration website<\/a> to determine what business license you need.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You\u2019ll also need to look into any insurance and bonding required in the state where you operate. Take a look at our <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-to-get-a-cleaning-business-license\/\">full guide on licensing your cleaning business<\/a>.<\/p>\n\n\n\n<h2 id=\"heading-8\" class=\"wp-block-heading\">Step 5: Decide What Cleaning Equipment and Supplies to Purchase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your supplies depend on the services you offer \u2014 eco-friendly cleaning, carpet cleaning, residential, or commercial work all require different tools.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Take a look at our <a href=\"https:\/\/www.zenmaid.com\/magazine\/cleaning-business-supplies\/\">full cleaning business supply guide<\/a> to get a sense of what you need based on the type of business you\u2019ll build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our best recommendation: invest in quality equipment. Cheap tools cost more in the long run through inefficiency and replacement, so spend money on good supplies early.<br>As with all things, do additional research to meet the needs of your unique business. For example, we get a lot of questions about vacuums \u2014 so we made a guide to <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-to-choose-a-vacuum\/\">finding the best vacuum<\/a> for your cleaning services and budget.<\/p>\n\n\n\n<h2 id=\"heading-9\" class=\"wp-block-heading\">Step 6: Decide on Your Pricing Structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aside from purchasing vacuums, pricing is by far the most frequently asked question we hear from new owners.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have a <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-much-to-charge-house-cleaning-2026\/\">separate guide about pricing here<\/a>, but here\u2019s the short version. There are three common pricing structures:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hourly pricing (simple and protective)<\/strong>:\u00a0This is best early on or for first-time\/move-in cleans. You charge for time worked, which protects you while you\u2019re still learning how long jobs take.\u00a0<\/li>\n\n\n\n<li><strong>Flat-rate pricing (best for scaling)<\/strong>: Clients pay one set price per job. This model rewards efficiency \u2014 as your team gets faster, your profit grows. The trade-off: you must define scope tightly so extra tasks don\u2019t erode your profit margins.<\/li>\n\n\n\n<li><strong>Hybrid (hourly + flat)<\/strong> \u2014 Use hourly for initial cleans and transition to flat rate for recurring jobs once you\u2019ve confirmed average job times. This balances protection with scalability.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pro tip<\/strong>: Offer limited-hour cleans to win clients who hesitate on a big flat rate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s a table to put them all side-by-side:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Pricing Model<\/strong><\/td><td><strong>Best For<\/strong><\/td><td>K<strong>ey Pros<\/strong><\/td><td><strong>Key Risks<\/strong><\/td><\/tr><tr><td>Hourly<\/td><td>New businesses, first-time cleans<\/td><td>Easy to explain, protects you when jobs take longer than expected<\/td><td>Limits profit as your team gets faster<\/td><\/tr><tr><td>Flat-Rate<\/td><td>Growing &amp; scaling businesses<\/td><td>Higher profit potential, simple for clients<\/td><td>Requires tight scope control to avoid underpricing<\/td><\/tr><tr><td>Hybrid<\/td><td>Most cleaning businesses<\/td><td>Protection early + scalability later<\/td><td>Requires tracking job times to transition correctly<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"heading-10\" class=\"wp-block-heading\">Know your production rates<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond pricing models, knowing your production rate matters even more. Whatever model you choose, track how long your team actually takes to complete jobs. Use those real times to refine pricing, and don\u2019t rely on estimates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ZenMaid makes it easy for cleaners to track job times in the app they use to review and complete cleaning checklists. Over time, that real-time data helps you define tighter pricing rules and maximize profit per job.<\/p>\n\n\n\n<h2 id=\"heading-11\" class=\"wp-block-heading\">Step 7: Hire and Train Professional Cleaners<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Even if you plan to start as a solopreneur, you\u2019ll reach a point where you\u2019ll want or need to hire additional staff. If you want to grow, you will eventually need a team.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make it easy on your future self by thinking now about what kind of employees you want to hire and where they\u2019ll have the greatest impact.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Strong cleaning businesses focus on providing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A strong, consistent onboarding experience<\/strong>:\u00a0Your professionalism during onboarding makes new cleaners feel like they\u2019re in good hands. Consistency means long-term employees can help with onboarding once they\u2019re fully trained, which makes them extra valuable both on the job and in the office.<\/li>\n\n\n\n<li><strong>Clear training processes<\/strong>:\u00a0Train well and train often in the beginning. Give clear feedback and make suggestions for improvement while staying encouraging. Most people will respond well to constructive feedback, which builds trust in your instincts as a leader.<\/li>\n\n\n\n<li><strong>Hands-on learning combined with documentation<\/strong>: Make sure your cleaners feel confident and independent, with documentation as a fallback. Doing is one part of learning; reviewing is the other.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Many cleaning business owners find that a 7\u201310-day structured training plan creates better long-term results. Rushing or skipping cleaner training leads to low-quality work and high turnover.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Think about your cleaners as extensions of your brand: they should feel equipped and ready to handle any situation with the same confidence you would as the owner.<\/p>\n\n\n    <div class=\"zm-quick-tip d-flex flex-column flex-md-row mb-24 mt-24\">\n        <div class=\"zm-quick-tip-content-wrapper\">\n\n            <h4 class=\"zm-quick-tip-title mb-12 text-dark2\">QUICK TIP FROM THE AUTHOR<\/h4>\n            <div class=\"zm-quick-tip-image d-block d-md-none\">\n                <img decoding=\"async\" width=\"200px\" src=\"https:\/\/www.zenmaid.com\/magazine\/wp-content\/themes\/zm-theme\/assets\/cta_images\/zm_interview_questions_cta.png\" alt=\"quick-tip-image\">\n            <\/div>\n            <h5 class=\"zm-quick-tip-sub-title mb-12\">Nail your next hire with the ultimate interview question list<\/h5>\n            <p>Get the go-to guide for cleaning business owners to make sure you\u2019re asking the right questions every time.<\/p>\n            <div>\n                <ul>\n                    <li>What to avoid asking (and why!)<\/li>\n                    <li>Questions for hiring virtual assistants<\/li>\n                    <li>How to gauge a candidate's work ethic and values<\/li>\n                <\/ul>\n            <\/div>\n            <div class=\"zm-quick-tip-content\">\n                Take the guesswork out of interviews and start hiring like a pro. <a target=\"_blank\" href=\"https:\/\/www.zenmaid.com\/ultimate-guide-to-the-best-interview-questions\/\" class=\"text-primary2 text-decoration-underline\">Get your guide now!<\/a>\n            <\/div>\n        <\/div>\n        <div class=\"zm-quick-tip-image d-none d-md-block\">\n            <img decoding=\"async\" width=\"200px\" src=\"https:\/\/www.zenmaid.com\/magazine\/wp-content\/themes\/zm-theme\/assets\/cta_images\/zm_interview_questions_cta.png\" alt=\"quick-tip-image\">\n        <\/div>\n    <\/div>\n\n\n\n\n<h2 id=\"heading-12\" class=\"wp-block-heading\">Step 8: Automate With Cleaning Business Software<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Starting your cleaning business is just one part of the work. Now you have to run it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As you grow and take on more cleaners, clients, and jobs, your manual systems will break. You\u2019ll see cracks emerge under the pressure of new demands: appointments aren\u2019t rescheduled, cancellation fees aren\u2019t collected, and you\u2019re spending more time reconciling payroll and expenses at the end of each month than ever before.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don\u2019t let things get out of control. Most successful owners implement software earlier than they expected, even from day one of their business.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cleaning business software helps you keep up with demand and makes room for more growth than manual processes ever could. This includes:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Booking and quote forms<\/li>\n\n\n\n<li>Scheduling and work orders<\/li>\n\n\n\n<li>Client and job details<\/li>\n\n\n\n<li>Appointment reminders<\/li>\n\n\n\n<li>Contracts and payments<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Need a recommendation? Look no further than <a href=\"https:\/\/get.zenmaid.com\/\">ZenMaid<\/a>.<\/p>\n\n\n\n<h3 id=\"heading-13\" class=\"wp-block-heading\">Why ZenMaid is the #1 choice for cleaning businesses<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ZenMaid is purpose-built cleaning business software \u2014 not a generic CRM adapted for cleaning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cleaning business owners choose ZenMaid because it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Centralizes scheduling, clients, and cleaners<\/li>\n\n\n\n<li>Automates reminders to reduce no-shows<\/li>\n\n\n\n<li>Simplifies booking, quotes, and contracts<\/li>\n\n\n\n<li>Scales as your business grows<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">And the best part? It\u2019s affordable and comes with a two-week free trial. But don\u2019t take our word for it \u2014 over 3,000 cleaning businesses use ZenMaid to run their daily operations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re interested, check out a free ZenMaid demo <a href=\"https:\/\/get.zenmaid.com\/demo\">here<\/a>.<\/p>\n\n\n\n<h2 id=\"heading-14\" class=\"wp-block-heading\">Step 9: Market Your Cleaning Services<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Marketing can feel like a complicated beast to tackle. You know you need it, but it\u2019s overwhelming to figure out where to start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To cut through the noise, start with lifecycle marketing as your roadmap. This will help you find marketing opportunities at many different points throughout your client\u2019s journey:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Attracting interest<\/strong>: Branding, local awareness, and recognition are important to build early. You want potential clients to think of you first when they need cleaning services.\u00a0<\/li>\n\n\n\n<li><strong>Capturing leads<\/strong>: Once you\u2019ve caught someone\u2019s interest, you need to get their contact information. These are called leads, and you can store them in a CRM tool (customer relationship management tool).\u00a0<\/li>\n\n\n\n<li><strong>Nurturing prospects<\/strong>: Some leads book right away, while others need more time. Build their trust with a nurture program \u2014 newsletters that showcase your work, client testimonials, or a peek into your operations.<\/li>\n\n\n\n<li><strong>Converting sales<\/strong>:\u00a0Once you\u2019ve turned a lead into a client, capture their payment information and encourage them to rebook. New clients are great, but recurring clients will mean more to you over time.<\/li>\n\n\n\n<li><strong>Delivering and satisfying clients<\/strong>: It\u2019s appointment time! Now it\u2019s on you (or your cleaner) to prove that your services are worth the price. This is where solid training pays off \u2014 your cleaners need to live up to what you\u2019ve marketed.\u00a0<\/li>\n\n\n\n<li><strong>Upselling clients<\/strong>: Upselling is a great way to increase revenue \u2014 but it\u2019s often overlooked because it\u2019s awkward to ask for more. As you build your business and provide a better experience, costs will rise. Give your clients good reasons for the upsell and make sure they feel like they get something out of it, too.<\/li>\n\n\n\n<li><strong>Getting referrals<\/strong>: Happy clients beget happy clients! Automate your requests for referrals, reviews, and testimonials \u2014 it\u2019s essential for keeping your reputation strong and trustworthy.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is an in-depth strategy and too much to cover here. Take a look at our full <a href=\"https:\/\/www.zenmaid.com\/magazine\/promote-your-maid-service-with-lifecycle-marketing\/\">lifecycle marketing guide<\/a> for more information and detailed instructions.&nbsp;<\/p>\n\n\n\n<h2 id=\"heading-15\" class=\"wp-block-heading\">Step 10: Generate Referrals and Reviews<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your best sales team is often your existing customers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Strong cleaning businesses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ask for referrals directly<\/li>\n\n\n\n<li>Use referral rewards programs<\/li>\n\n\n\n<li>Automate review requests after cleanings<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Make referrals and reviews easy! Friction kills momentum, but good reviews can be reused and repurposed for years to come. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Referrals take a little more time to gather, and you can read more about setting up a <a href=\"https:\/\/www.zenmaid.com\/magazine\/keep-cleaning-business-clients-for-life\/\">referral rewards program that works<\/a> here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are our 10 steps for starting a cleaning business, the ultimate guide written by business owners who have done it. And if you need specific advice for the state you&#8217;re in, we have a list of resources below:<\/p>\n\n\n\n<h2 id=\"heading-16\" class=\"wp-block-heading\">How to Start a Cleaning Business \u2014 FAQs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Still have some questions after reading the article? We\u2019ve got answers!<\/p>\n\n\n\n<h3 id=\"heading-17\" class=\"wp-block-heading\">Getting Started<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How much money do I need to start a cleaning business?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We wrote a <a href=\"https:\/\/www.zenmaid.com\/magazine\/cost-to-start-a-cleaning-business\/\">whole article about this<\/a>. But the short answer is that it takes between $2,000 and $10,000 to start a cleaning business. The lower end applies to residential cleaning businesses, and the higher end applies to commercial cleaning businesses.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can I start a cleaning business with no experience?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Our only recommendation is to work with a cleaning consultant or experienced professional. Having someone you can rely on for expert questions is invaluable and will help you appear more professional and prepared to both employees and clients.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Should I start solo or hire employees right away?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is no right answer \u2014&nbsp;it depends on your goals for the business and whether you want to be doing the cleaning yourself or outsource it while you focus on running your business.<\/p>\n\n\n\n<h3 id=\"heading-18\" class=\"wp-block-heading\">Legal &amp; Licensing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do I need a separate license for each city or county I work in?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In many areas, you\u2019ll need a basic business license and\/or local registration to operate legally. Some places are more lenient, others stricter. While there\u2019s no \u201chouse cleaning license,\u201d you\u2019ll usually need to be registered as a business and comply with local rules. See our <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-to-get-a-cleaning-business-license\/\">full guide on licensing requirements<\/a> here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What&#8217;s the difference between bonding and liability insurance \u2014 do I need both?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, you need both. Bonding protects you, your client, and your employee from mistakes or legal failures. Liability insurance protects your business against claims of bodily injury, property damage, or negligence. Read more here in our <a href=\"https:\/\/www.zenmaid.com\/magazine\/how-to-get-a-cleaning-business-license\/#heading-6\">licensing guide<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Is an LLC always the best business structure, or does it depend on my situation?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It depends. An LLC offers the lowest level of personal liability protection \u2014&nbsp;it shields you financially from legal repercussions and losses. But as your business grows, an S-Corp may suit your needs better.<\/p>\n\n\n\n<h3 id=\"heading-19\" class=\"wp-block-heading\">Pricing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do I know what competitors in my area are charging?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check their website for a ballpark. They may not publish everything, but you can at least get an idea. If you know a client who\u2019s worked with another company, consider asking them about their experience.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What&#8217;s a reasonable rate to charge for a first-time deep clean vs. a recurring clean?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with your numbers: how long a first-time deep clean usually takes, how many cleaners you\u2019ll need, and what supplies will cost are important factors. Add in your profit and operating expenses, and you\u2019ll have a starting point.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recurring cleanings are often discounted from first-time or solo-appointment clients, which gives them the feeling of savings while guaranteeing you recurring income.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do I handle clients who push back on price increases?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We hear this a lot, and luckily, have <a href=\"https:\/\/www.zenmaid.com\/magazine\/when-a-longtime-client-gets-weird-handling-an-awkward-cancellation\/\">a lot to say on the matter<\/a>. Generally speaking, you need to clearly reinforce the value that you provide. Take a look at how Debbie Sardone views it here in <a href=\"https:\/\/www.zenmaid.com\/magazine\/premium-pricing-cleaning-business-debbie-sardone\/\">her talk from the 2025 ZenMaid Maid Summit<\/a>.<\/p>\n\n\n\n<h3 id=\"heading-20\" class=\"wp-block-heading\">Marketing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do I get my first clients when I have no reviews or reputation yet?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ask your friends and family to refer their friends to your business; personal connections convert well. Paid advertising also works, though you\u2019ll need to invest a bit upfront in designing and placing ads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Which marketing channels work best for a local cleaning business?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Location-based marketing channels like <a href=\"https:\/\/www.zenmaid.com\/magazine\/optimize-your-google-business-profile-for-cleaning-company\/\">Google Business<\/a>, Nextdoor, and Yelp require different effort from social media channels like <a href=\"https:\/\/www.zenmaid.com\/magazine\/leads-facebook-groups\/\">Facebook<\/a> and Instagram. You\u2019ll want to be on every location-based channel, but pick only one or two social media channels and post consistently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How much should I budget for marketing as a new business?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">About 10% of your overall budget should be spent on marketing. Where and how you choose to spend this is up to your strategy.<\/p>\n\n\n\n<h3 id=\"heading-21\" class=\"wp-block-heading\">Software &amp; Tools<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What if I can&#8217;t afford cleaning business software right away \u2014 what&#8217;s a good free alternative to start?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Google Sheets, Docs, Forms, and Drive can sometimes fill in for more expensive software like QuickBooks, Square, and Jobber. ZenMaid also has a low-cost tier that gives you access to most features like client booking, payroll management, and automated communications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do I handle online payments and invoicing?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use ZenMaid. We roll payment processing and client management into one place \u2014 handle credit card processing and invoicing alongside cleaner pay, so you always have a clear picture of money coming in and going out.<\/p>\n\n\n\n<h2 id=\"heading-22\" class=\"wp-block-heading\">Have more questions about starting or growing a residential cleaning business?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Join our free <a href=\"https:\/\/www.facebook.com\/groups\/zenmaidmastermind\">ZenMaid Mastermind Facebook group<\/a> of 10,000+ cleaning business owners like you. Ask questions, make connections, and get advice.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welcome to ZenMaid\u2019s guide to starting a cleaning business. Whether you\u2019re dreaming of starting a cleaning business or looking for more ways to grow, you\u2019re in the right place. This is the ultimate step-by-step guide to starting a cleaning business, built from expert advice and real-world experience from cleaning business owners. We\u2019ll walk through choosing [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":16673,"comment_status":"closed","ping_status":"closed","sticky":true,"template":"","format":"standard","meta":{"_seopress_titles_title":"How to Start a Cleaning Business in 2026: A Step-by-Step Guide","_seopress_titles_desc":"Ready to start a cleaning business? This step-by-step guide covers everything: pricing, licensing, hiring, marketing, and the software that helps you scale.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"how to start a cleaning business","footnotes":""},"categories":[125,100],"tags":[345,366],"class_list":["post-9018","post","type-post","status-publish","format-standard","has-post-thumbnail","category-business","category-start-here","tag-cleaning-equipment","tag-starting-a-cleaning-business"],"_links":{"self":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/9018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/comments?post=9018"}],"version-history":[{"count":72,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/9018\/revisions"}],"predecessor-version":[{"id":17400,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/9018\/revisions\/17400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/media\/16673"}],"wp:attachment":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/media?parent=9018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/categories?post=9018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/tags?post=9018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}