{"id":17343,"date":"2026-05-14T15:45:27","date_gmt":"2026-05-14T15:45:27","guid":{"rendered":"https:\/\/www.zenmaid.com\/magazine\/?p=17343"},"modified":"2026-05-14T15:48:04","modified_gmt":"2026-05-14T15:48:04","slug":"what-your-cleaning-business-needs-in-a-cancellation-policy","status":"publish","type":"post","link":"https:\/\/www.zenmaid.com\/magazine\/what-your-cleaning-business-needs-in-a-cancellation-policy\/","title":{"rendered":"What Your Cleaning Business Needs in a Cancellation Policy"},"content":{"rendered":"    <div class=\"zm-post-first-section mb-24\">\n        <div class=\"first-section-img-wrapper\">\n            <img decoding=\"async\" src=\"https:\/\/www.zenmaid.com\/magazine\/wp-content\/themes\/zm-theme\/assets\/images\/first-section-img.png\" alt=\"first-section-img\" width=\"40px\">\n        <\/div>\n        <h3 class=\"zm-post-first-section-title mb-10 w-80 w-md-100\">Brought to you by expert maid service owners<\/h3>\n        <div class=\"zm-post-first-section-text-wrapper fs-16 mb-10\">\n            <div>\n                <i class=\"ph-bold ph-check text-primary\"><\/i>\n            <\/div>\n            <div>\n                <div class=\"zm-post-first-section-text\">\n                    <strong>\n                        Tips and advice shared here, have helped us grow our own maid services.\n                    <\/strong>\n                    With eight current and former cleaning business owners in our team, including our CEO and founder Amar, we know the maid service industry inside and out.\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"zm-post-first-section-text-wrapper fs-16 mb-10\">\n            <div>\n                <i class=\"ph-bold ph-check text-primary\"><\/i>\n            <\/div>\n            <div>\n                <div class=\"zm-post-first-section-text\">\n                    <strong>\n                        We partner with amazing leaders in the cleaning industry like Debbie Sardone,\n                    <\/strong>\n                    Angela Brown, Courtney Wisely and Chris Scwap and more, to provide you with the latest industry insights.\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"zm-post-first-section-text-wrapper fs-16 mb-10\">\n            <div>\n                <i class=\"ph-bold ph-check text-primary\"><\/i>\n            <\/div>\n            <div>\n                <div class=\"zm-post-first-section-text\">\n                    <strong>\n                        We\u2019ve built the easiest-to-use scheduling software, built specifically for maid service owners!\n                    <\/strong>\n                    <a class=\"text-primary2 text-decoration-underline\" href=\"https:\/\/zenmaid.com\/\" target=\"_blank\">Check out ZenMaid<\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    \n\n\n\n<p>Cancellation policies can get tricky. This is one of our most-requested topics, and we\u2019ve <a href=\"https:\/\/www.zenmaid.com\/magazine\/when-a-longtime-client-gets-weird-handling-an-awkward-cancellation\/\">covered<\/a> <a href=\"https:\/\/www.zenmaid.com\/magazine\/3-clients-gone-in-one-week-when-to-fight-when-to-let-go-and-when-to-fire\/\">this<\/a> <a href=\"https:\/\/www.zenmaid.com\/magazine\/katie-bradleys-simple-kit-strategy-for-faster-safer-more-profitable-cleans\/\">often<\/a> on our podcast, Filthy Rich Cleaners.&nbsp;<\/p>\n\n\n\n<p>Here&#8217;s the definitive guide to writing your cancellation policy, including a free, downloadable template you can customize and add to your client onboarding materials.<\/p>\n\n\n\n\n\n\n<h2 id=\"heading-1\" class=\"wp-block-heading\">Writing Your Cancellation Policy<\/h2>\n\n\n\n<p>Your cancellation policy should be a formal, professional document that tells clients what you expect from them when they need to cancel or reschedule.<\/p>\n\n\n\n<p>Everyone has emergencies, makes mistakes, or double-books themselves at some point. Your cancellation policy should acknowledge this while protecting your business from repeat issues or frequent cancellations.&nbsp;<\/p>\n\n\n\n<p>You want to be able to accommodate clients who experience something unexpected, while guarding against bad behavior or poor communication. A solid cancellation policy can do both.<\/p>\n\n\n\n<h2 id=\"heading-2\" class=\"wp-block-heading\">Top 8 Cancellation Policy Recommendations<\/h2>\n\n\n\n<p>Here are our top eight recommendations for a solid, fair cancellation policy:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clearly State Your Notice Period and Requirements<\/strong>: Typically, cleaning business owners require a 24\u201348 hour notice period for cancellations before the client incurs a penalty. Be clear whether you mean business hours or calendar hours, and how you prefer notice is given (text, in-app, email, phone call)<br><\/li>\n\n\n\n<li><strong>Show Clients How to Properly Cancel<\/strong>: Choose the method that you\u2019ll most likely see and share it exactly. Some cleaning companies require written notice via email or app only, so there&#8217;s a paper trail. Voicemails and texts to individual cleaners often don&#8217;t count<br><\/li>\n\n\n\n<li><strong>Note Cancellation Fees and How You\u2019ll Collect<\/strong>: When the client violates the notice period, most cleaning businesses charge a cancellation fee. This can be different if they do give notice, but too late, versus when they no-show for an appointment. Common structures are a flat fee (e.g., $50), a percentage of the scheduled service (e.g., 50%), or the full service charge for no-shows. Tell clients during onboarding how you\u2019ll charge fees, whether by charging a card on file automatically, sending an invoice, or requiring payment before the next service is booked. This matters operationally and sets client expectations upfront<br><\/li>\n\n\n\n<li><strong>Include a No-Show and Lockout Policy<\/strong>: If your cleaner arrives and can&#8217;t access the property \u2014 no one is home, the key is missing, your gate code is wrong \u2014 you can\u2019t perform the service, which should be treated as a same-day cancellation and charged at the full rate since your team&#8217;s time was already committed<br><\/li>\n\n\n\n<li><strong>Protect Against Repeat Cancellations<\/strong>: Include a clause that covers clients who cancel frequently. You might reserve the right to require a deposit, move them to a lower-priority scheduling slot, or discontinue service after a set number of cancellations within a rolling period<br><\/li>\n\n\n\n<li><strong>Include Recurring Client Protections<\/strong>: Tell your clients on weekly or biweekly plans that skipping a visit may affect their recurring rate or slot. Some policies bump the price for the next visit if a recurring clean is skipped, since the home will need more time<br><\/li>\n\n\n\n<li><strong>Note Policy Exceptions<\/strong>: In the event of certain circumstances, it might be nice to waive your cancellation fee. Illness, family emergencies, and extreme weather are all pragmatic reasons for late cancellations that protect your employees and clients alike. Keeping this vague gives you discretion. Being too specific creates loopholes.<br><\/li>\n\n\n\n<li><strong>Require a Signature: <\/strong>Ask clients to agree to the policy at the time of booking, whether through a checkbox, a signed form, or a confirmation email. This makes it enforceable<\/li>\n<\/ol>\n\n\n\n<h2 id=\"heading-3\" class=\"wp-block-heading\">Explain How Cancellation Fees Are Structured<\/h2>\n\n\n\n<p>Creating a tiered cancellation fee structure makes it clear and easy to understand when clients trigger different fees. It also gives clients who are regularly on top of things some leeway \u2014 you don&#8217;t want to punish good clients, but you do need to protect your business, your time, and your earnings.<\/p>\n\n\n\n<p>Always outline your fee structure in your cancellation policy and acknowledge it during client onboarding. Here\u2019s an example fee structure:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No fee if 24\u201348 hours\u2019 notice is given<\/li>\n\n\n\n<li>50% of the service fee if less than 24 hours\u2019 notice is given<\/li>\n\n\n\n<li>100% of the service fee if the client no-shows<\/li>\n<\/ul>\n\n\n\n<p>Even this brief explanation gives clients a clear picture of what they\u2019ll be charged if they can\u2019t meet your notice period. As we mentioned earlier, asking clients to acknowledge your fee structure during onboarding specifically gives you a way of enforcing your policies and reduces surprise and upset clients.<\/p>\n\n\n\n<p>Some cleaning companies, especially those who have been burned by repeat offenders or incorrect notifications, charge fees when notice is given improperly. Consider a fee structure to encourage clients to notify properly, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No fee is charged if the appointment is canceled in-app, as well as 24\u201348 hours in advance<\/li>\n\n\n\n<li>A 50% fee is charged if the client just emails or leaves a voicemail<\/li>\n<\/ul>\n\n\n\n<p>Just be careful not to get too specific, as that can create loopholes in your policy. Staying vague gives you discretion to charge fees on a case-by-case basis.<\/p>\n\n\n\n<p>You should also always keep your clients\u2019 credit cards on file before booking. This is one of the highest-leverage things you can do to protect your cleaning business.<\/p>\n\n\n\n<p>A card on file means you can auto-charge fees without confrontation, and it acts as a deterrent: clients who know a fee will be charged automatically are more likely to give proper notice.&nbsp;<\/p>\n\n\n\n<h2 id=\"heading-4\" class=\"wp-block-heading\">Cancellation Policy Template [Free Download]<\/h2>\n\n\n\n<p>Take the guesswork out of writing your own policy and use ours. Fill in your details and generate a downloadable PDF with everything you need, written in plain language that protects you and your business.&nbsp;<\/p>\n\n\n<!-- ZenMaid Cancellation Policy Generator \u2014 embeddable build -->\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\"\/>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\r\n\r\n<style>\r\n\/* Scoped reset *\/\r\n.zm-cpg, .zm-cpg *, .zm-cpg *::before, .zm-cpg *::after { box-sizing:border-box; }\r\n.zm-cpg, .zm-cpg * { margin:0; padding:0; }\r\n\r\n\/* Tokens + base *\/\r\n.zm-cpg{\r\n  --green:#1a9c72; --green-dk:#085038; --green-mid:#0d6b4e;\r\n  --green-lt:#e8f7f1; --green-bd:#b2e4d0; --green-hover:#c6ecdf;\r\n  --white:#ffffff; --off:#f8f8f6;\r\n  --g100:#f0efed; --g200:#e3e3df; --g400:#9b9b95;\r\n  --g600:#58584f; --g900:#1a1a17;\r\n  --font:'Plus Jakarta Sans',system-ui,sans-serif;\r\n  --r-sm:6px; --r-md:9px; --r-lg:14px; --r-xl:18px;\r\n  font-family:var(--font); background:var(--off); color:var(--g900);\r\n  -webkit-font-smoothing:antialiased;\r\n}\r\n\r\n\/* Outer shell *\/\r\n.zm-cpg .shell{max-width:820px;margin:0 auto;padding:2.25rem 1.25rem 5rem;}\r\n\r\n\/* Brand header *\/\r\n.zm-cpg .brand{display:flex;align-items:center;justify-content:space-between;padding-bottom:1.75rem;border-bottom:1px solid var(--g200);margin-bottom:2rem;}\r\n.zm-cpg .brand-left{display:flex;align-items:center;gap:11px;}\r\n.zm-cpg .brand-name{font-size:22px;font-weight:700;color:var(--g900);letter-spacing:-0.4px;}\r\n.zm-cpg .brand-name em{color:var(--green);font-style:normal;}\r\n.zm-cpg .brand-pill{font-size:11px;font-weight:600;padding:4px 11px;background:var(--green-lt);color:var(--green-dk);border-radius:20px;border:1px solid var(--green-bd);}\r\n\r\n\/* Hero *\/\r\n.zm-cpg .hero{margin-bottom:2rem;}\r\n.zm-cpg .hero h1{font-size:28px;font-weight:700;letter-spacing:-0.6px;color:var(--g900);margin-bottom:7px;}\r\n.zm-cpg .hero p{font-size:14px;color:var(--g600);line-height:1.7;max-width:500px;}\r\n\r\n\/* Two-col layout *\/\r\n.zm-cpg .layout{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;align-items:start;}\r\n@media(max-width:680px){.zm-cpg .layout{grid-template-columns:1fr;}}\r\n\r\n\/* Panel *\/\r\n.zm-cpg .panel{background:var(--white);border:1px solid var(--g200);border-radius:var(--r-xl);overflow:hidden;}\r\n.zm-cpg .panel-head{background:var(--green);padding:1.1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;}\r\n.zm-cpg .panel-head h2{font-size:14px;font-weight:600;color:#fff;}\r\n.zm-cpg .panel-head span{font-size:12px;color:rgba(255,255,255,0.65);}\r\n.zm-cpg .panel-body{padding:1.5rem;}\r\n\r\n\/* Form section headers *\/\r\n.zm-cpg .form-sec{font-size:10.5px;font-weight:700;color:var(--green);text-transform:uppercase;letter-spacing:0.9px;padding-bottom:6px;border-bottom:1px solid var(--green-bd);margin:1.4rem 0 0.9rem;}\r\n.zm-cpg .form-sec:first-child{margin-top:0;}\r\n\r\n\/* Fields *\/\r\n.zm-cpg .fg{margin-bottom:0.9rem;}\r\n.zm-cpg .fg label{display:block;font-size:11.5px;font-weight:600;color:var(--g600);margin-bottom:5px;letter-spacing:0.1px;}\r\n.zm-cpg .fg input, .zm-cpg .fg select, .zm-cpg .fg textarea{\r\n  width:100%;padding:8px 11px;\r\n  border:1px solid var(--g200);border-radius:var(--r-md);\r\n  font-size:13px;font-family:var(--font);color:var(--g900);background:var(--white);\r\n  outline:none;transition:border-color 0.15s,box-shadow 0.15s;\r\n  -webkit-appearance:none;appearance:none;\r\n}\r\n.zm-cpg .fg input:focus, .zm-cpg .fg select:focus, .zm-cpg .fg textarea:focus{\r\n  border-color:var(--green);box-shadow:0 0 0 3px rgba(26,156,114,0.13);\r\n}\r\n.zm-cpg .fg textarea{resize:vertical;min-height:72px;line-height:1.55;}\r\n.zm-cpg .fg select{\r\n  background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'\/%3E%3C\/svg%3E\");\r\n  background-repeat:no-repeat;background-position:right 11px center;padding-right:28px;\r\n}\r\n.zm-cpg .row2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}\r\n.zm-cpg .row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;}\r\n\r\n\/* Callout *\/\r\n.zm-cpg .callout{background:var(--green-lt);border-left:3px solid var(--green);border-radius:0 var(--r-md) var(--r-md) 0;padding:10px 13px;font-size:12.5px;color:var(--green-dk);line-height:1.6;margin-bottom:1rem;}\r\n\r\n\/* Generate button *\/\r\n.zm-cpg .btn-gen{\r\n  width:100%;padding:11px;background:var(--green);color:#fff;border:none;\r\n  border-radius:var(--r-md);font-size:14px;font-weight:700;cursor:pointer;\r\n  font-family:var(--font);letter-spacing:0.1px;\r\n  transition:background 0.13s,transform 0.1s;margin-top:0.5rem;\r\n}\r\n.zm-cpg .btn-gen:hover{background:var(--green-mid);}\r\n.zm-cpg .btn-gen:active{transform:scale(0.98);}\r\n\r\n\/* Preview panel *\/\r\n.zm-cpg .preview-head{background:var(--green);padding:1.1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;}\r\n.zm-cpg .preview-head h2{font-size:14px;font-weight:600;color:#fff;}\r\n.zm-cpg .btn-dl{\r\n  padding:7px 16px;background:#fff;color:var(--green-dk);border:none;\r\n  border-radius:var(--r-sm);font-size:12px;font-weight:700;cursor:pointer;\r\n  font-family:var(--font);transition:background 0.12s;\r\n}\r\n.zm-cpg .btn-dl:hover{background:var(--green-lt);}\r\n.zm-cpg .btn-dl:disabled{opacity:0.5;cursor:not-allowed;}\r\n\r\n.zm-cpg .preview-scroll{padding:1.75rem 1.75rem 1.5rem;max-height:680px;overflow-y:auto;}\r\n.zm-cpg .preview-scroll::-webkit-scrollbar{width:4px;}\r\n.zm-cpg .preview-scroll::-webkit-scrollbar-thumb{background:var(--green-bd);border-radius:2px;}\r\n\r\n\/* Document *\/\r\n.zm-cpg .doc{font-size:12.5px;line-height:1.85;color:var(--g900);}\r\n.zm-cpg .doc-top{text-align:center;padding-bottom:1.1rem;border-bottom:2.5px solid var(--green);margin-bottom:1.25rem;}\r\n.zm-cpg .doc-co{font-size:15px;font-weight:700;color:var(--g900);margin-bottom:3px;}\r\n.zm-cpg .doc-title{font-size:19px;font-weight:700;color:var(--green-dk);letter-spacing:-0.4px;margin-bottom:4px;}\r\n.zm-cpg .doc-eff{font-size:11px;color:var(--g400);}\r\n.zm-cpg .doc-sec{font-size:10px;font-weight:700;color:var(--green);text-transform:uppercase;letter-spacing:0.9px;padding-bottom:5px;border-bottom:1px solid var(--green-bd);margin:1.1rem 0 0.6rem;}\r\n.zm-cpg .doc p{margin-bottom:7px;}\r\n.zm-cpg .doc-table{width:100%;border-collapse:collapse;margin:8px 0 10px;font-size:12px;}\r\n.zm-cpg .doc-table th{background:var(--green-lt);color:var(--green-dk);font-weight:600;font-size:11px;padding:6px 9px;text-align:left;border:1px solid var(--green-bd);}\r\n.zm-cpg .doc-table td{padding:6px 9px;border:1px solid var(--g200);}\r\n.zm-cpg .doc-table tr:nth-child(even) td{background:var(--off);}\r\n.zm-cpg .doc-notice{background:var(--green-lt);border-left:3px solid var(--green);padding:8px 12px;border-radius:0 5px 5px 0;font-size:12px;color:var(--green-dk);margin:8px 0;}\r\n.zm-cpg .sig-grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin-top:1.5rem;padding-top:1.1rem;border-top:1px solid var(--g200);}\r\n.zm-cpg .sig-line{border-top:1px solid var(--g600);margin-top:2rem;}\r\n.zm-cpg .sig-label{font-size:10.5px;color:var(--g400);margin-top:4px;}\r\n.zm-cpg .placeholder{color:var(--g400);font-style:italic;}\r\n\r\n\/* Footer *\/\r\n.zm-cpg .footer{text-align:center;margin-top:2.5rem;font-size:12px;color:var(--g400);display:flex;align-items:center;justify-content:center;gap:8px;}\r\n.zm-cpg .footer a{color:var(--green);text-decoration:none;}\r\n.zm-cpg .footer a:hover{text-decoration:underline;}\r\n.zm-cpg .footer-dot{width:3px;height:3px;border-radius:50%;background:var(--g200);}\r\n\r\n\/* Modal *\/\r\n.zm-cpg .modal-backdrop{\r\n  display:none;position:fixed;inset:0;\r\n  background:rgba(15,15,12,0.55);\r\n  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);\r\n  z-index:9999;align-items:center;justify-content:center;padding:1.25rem;\r\n}\r\n.zm-cpg .modal-backdrop.open{display:flex;}\r\n.zm-cpg .modal{\r\n  background:var(--white);border-radius:var(--r-xl);border:1px solid var(--g200);\r\n  width:100%;max-width:400px;overflow:hidden;\r\n  box-shadow:0 20px 60px rgba(0,0,0,0.18);\r\n  animation:zmcpg-modal-in 0.2s cubic-bezier(.34,1.56,.64,1);\r\n}\r\n@keyframes zmcpg-modal-in{from{opacity:0;transform:scale(0.93) translateY(8px);}to{opacity:1;transform:scale(1) translateY(0);}}\r\n.zm-cpg .modal-top{background:var(--green);padding:1.4rem 1.5rem;}\r\n.zm-cpg .modal-top h3{font-size:16px;font-weight:700;color:#fff;margin-bottom:3px;}\r\n.zm-cpg .modal-top p{font-size:12.5px;color:rgba(255,255,255,0.75);line-height:1.5;}\r\n.zm-cpg .modal-body{padding:1.5rem;}\r\n.zm-cpg .modal-body .fg{margin-bottom:1rem;}\r\n.zm-cpg .modal-body .fg label{display:block;font-size:12px;font-weight:600;color:var(--g600);margin-bottom:5px;}\r\n.zm-cpg .modal-body .fg input{\r\n  width:100%;padding:10px 12px;\r\n  border:1px solid var(--g200);border-radius:var(--r-md);\r\n  font-size:13.5px;font-family:var(--font);color:var(--g900);\r\n  outline:none;transition:border-color 0.15s,box-shadow 0.15s;\r\n}\r\n.zm-cpg .modal-body .fg input:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(26,156,114,0.13);}\r\n.zm-cpg .modal-body .fg input.error{border-color:#e05252;box-shadow:0 0 0 3px rgba(224,82,82,0.12);}\r\n.zm-cpg .modal-error{font-size:12px;color:#c0392b;margin-top:4px;display:none;}\r\n.zm-cpg .modal-consent{font-size:11.5px;color:var(--g400);line-height:1.6;margin-bottom:1.25rem;}\r\n.zm-cpg .modal-consent a{color:var(--green);text-decoration:none;}\r\n.zm-cpg .btn-modal-dl{\r\n  width:100%;padding:11px;background:var(--green);color:#fff;border:none;\r\n  border-radius:var(--r-md);font-size:14px;font-weight:700;cursor:pointer;\r\n  font-family:var(--font);transition:background 0.13s,transform 0.1s;\r\n}\r\n.zm-cpg .btn-modal-dl:hover{background:var(--green-mid);}\r\n.zm-cpg .btn-modal-dl:active{transform:scale(0.98);}\r\n.zm-cpg .btn-modal-cancel{\r\n  width:100%;padding:8px;background:transparent;color:var(--g400);border:none;\r\n  font-size:12.5px;cursor:pointer;font-family:var(--font);margin-top:8px;\r\n}\r\n.zm-cpg .btn-modal-cancel:hover{color:var(--g600);}\r\n.zm-cpg .modal-success{display:none;padding:2rem 1.5rem;text-align:center;}\r\n.zm-cpg .modal-success-icon{\r\n  width:52px;height:52px;background:var(--green-lt);border-radius:50%;\r\n  display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;\r\n}\r\n.zm-cpg .modal-success h3{font-size:16px;font-weight:700;color:var(--green-dk);margin-bottom:6px;}\r\n.zm-cpg .modal-success p{font-size:13px;color:var(--g600);line-height:1.6;}\r\n<\/style>\r\n\r\n<div class=\"zm-cpg\">\r\n  <div class=\"shell\">\r\n\r\n    <div class=\"brand\">\r\n      <div class=\"brand-left\">\r\n        <span class=\"brand-name\">Zen<em>Maid<\/em><\/span>\r\n      <\/div>\r\n      <span class=\"brand-pill\">Free Template<\/span>\r\n    <\/div>\r\n\r\n    <div class=\"hero\">\r\n      <h1>Cancellation Policy Generator<\/h1>\r\n      <p>Fill in your details on the left and your policy document updates instantly on the right. Download as a PDF when ready.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"layout\">\r\n\r\n      <div class=\"panel\">\r\n        <div class=\"panel-head\">\r\n          <h2>Your policy details<\/h2>\r\n          <span>Fill in every field<\/span>\r\n        <\/div>\r\n        <div class=\"panel-body\">\r\n\r\n          <div class=\"callout\">\r\n            <strong>Tip:<\/strong> Most cleaning companies require 48 hours' notice. Be specific about fees \u2014 vague policies are hard to enforce.\r\n          <\/div>\r\n\r\n          <div class=\"form-sec\">Company information<\/div>\r\n          <div class=\"fg\"><label>Company name<\/label><input id=\"coName\" placeholder=\"Sparkle Cleaning Co.\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>Contact email<\/label><input id=\"coEmail\" placeholder=\"hello@company.com\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>Phone number<\/label><input id=\"coPhone\" placeholder=\"(555) 000-0000\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <\/div>\r\n          <div class=\"fg\"><label>Effective date<\/label><input id=\"effDate\" type=\"date\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n\r\n          <div class=\"form-sec\">Notice &amp; cancellation window<\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>Required notice (hours)<\/label><input id=\"noticeHrs\" value=\"48\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>How to cancel<\/label><input id=\"cancelHow\" placeholder=\"Email or app\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-sec\">Cancellation fees<\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>Late cancel fee (24\u201348 hrs)<\/label><input id=\"lateFee\" placeholder=\"$50 or 50%\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>Same-day cancel fee<\/label><input id=\"sameFee\" placeholder=\"100% of service\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>No-show \/ lockout fee<\/label><input id=\"lockFee\" placeholder=\"Full charge + $25\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>Fee collection method<\/label>\r\n              <select id=\"feeMethod\" onchange=\"zmcpgUpdate()\">\r\n                <option>Auto-charged to card on file<\/option>\r\n                <option>Invoice sent within 24 hrs<\/option>\r\n                <option>Required before next booking<\/option>\r\n              <\/select>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-sec\">Recurring clients<\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>Skip \/ missed visit surcharge<\/label><input id=\"skipFee\" placeholder=\"$30 next visit\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>Consecutive skips before slot release<\/label><input id=\"skipMax\" value=\"2\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <\/div>\r\n          <div class=\"row2\">\r\n            <div class=\"fg\"><label>Max cancellations per 90 days<\/label><input id=\"maxCancel\" value=\"3\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n            <div class=\"fg\"><label>Penalty for exceeding limit<\/label>\r\n              <select id=\"penaltyType\" onchange=\"zmcpgUpdate()\">\r\n                <option>Deposit required for future bookings<\/option>\r\n                <option>Lower-priority scheduling tier<\/option>\r\n                <option>Service may be discontinued<\/option>\r\n              <\/select>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"form-sec\">Exceptions &amp; waiver window<\/div>\r\n          <div class=\"fg\"><label>Fee waiver request window (hours after cancellation)<\/label><input id=\"waiverHrs\" value=\"48\" oninput=\"zmcpgUpdate()\"\/><\/div>\r\n          <div class=\"fg\"><label>Accepted reasons for waiver (optional)<\/label>\r\n            <textarea id=\"waiverReasons\" placeholder=\"e.g. Medical emergencies, bereavement, severe weather...\" oninput=\"zmcpgUpdate()\"><\/textarea>\r\n          <\/div>\r\n\r\n          <button class=\"btn-gen\" onclick=\"zmcpgGenerateAndScroll()\">Generate &amp; preview policy \u2192<\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"panel\" id=\"previewPanel\">\r\n        <div class=\"preview-head\">\r\n          <h2>Live preview<\/h2>\r\n          <button class=\"btn-dl\" id=\"dlBtn\" onclick=\"zmcpgOpenModal()\">Download PDF<\/button>\r\n        <\/div>\r\n        <div class=\"preview-scroll\">\r\n          <div class=\"doc\" id=\"docContent\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"footer\">\r\n      <span>Powered by<\/span>\r\n      <a href=\"https:\/\/www.zenmaid.com\" target=\"_blank\">ZenMaid<\/a>\r\n      <span class=\"footer-dot\"><\/span>\r\n      <span>Not legal advice \u2014 consult a professional before client use<\/span>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"modal-backdrop\" id=\"emailModal\">\r\n    <div class=\"modal\">\r\n      <div class=\"modal-top\">\r\n        <h3>Almost there \u2014 where should we send your copy?<\/h3>\r\n        <p>Enter your email to download the policy. We'll also send you a copy for safekeeping.<\/p>\r\n      <\/div>\r\n      <div class=\"modal-body\" id=\"modalForm\">\r\n        <div class=\"fg\">\r\n          <label>Your email address<\/label>\r\n          <input type=\"email\" id=\"gateEmail\" placeholder=\"you@yourcompany.com\" onkeydown=\"if(event.key==='Enter')zmcpgConfirmEmail()\"\/>\r\n          <div class=\"modal-error\" id=\"emailError\">Please enter a valid email address.<\/div>\r\n        <\/div>\r\n        <p class=\"modal-consent\">By entering your email you agree to receive occasional tips and resources from ZenMaid. No spam \u2014 <a href=\"https:\/\/www.zenmaid.com\/privacy-policy\" target=\"_blank\">privacy policy<\/a>.<\/p>\r\n        <button class=\"btn-modal-dl\" onclick=\"zmcpgConfirmEmail()\">Download my PDF \u2192<\/button>\r\n        <button class=\"btn-modal-cancel\" onclick=\"zmcpgCloseModal()\">No thanks, go back<\/button>\r\n      <\/div>\r\n      <div class=\"modal-success\" id=\"modalSuccess\">\r\n        <div class=\"modal-success-icon\">\r\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M5 12l5 5L19 7\" stroke=\"#1a9c72\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\r\n        <\/div>\r\n        <h3>Your PDF is downloading!<\/h3>\r\n        <p>We've also noted your email: <strong id=\"confirmedEmail\"><\/strong>.<br\/>Check your inbox shortly for your copy.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  function v(id){ return (document.getElementById(id)||{}).value||''; }\r\n  function ph(val, fallback){\r\n    if(!val || val.trim()==='') return '<span class=\"placeholder\">['+fallback+']<\/span>';\r\n    return val;\r\n  }\r\n  function fmtDate(d){\r\n    if(!d) return '<span class=\"placeholder\">[effective date]<\/span>';\r\n    const p=d.split('-');\r\n    const months=['January','February','March','April','May','June','July','August','September','October','November','December'];\r\n    return months[parseInt(p[1])-1]+' '+parseInt(p[2])+', '+p[0];\r\n  }\r\n\r\n  window.zmcpgUpdate = function(){\r\n    const co = v('coName');\r\n    const email = v('coEmail');\r\n    const phone = v('coPhone');\r\n    const eff = v('effDate');\r\n    const noticeHrs = v('noticeHrs') || '48';\r\n    const cancelHow = v('cancelHow');\r\n    const lateFee = v('lateFee');\r\n    const sameFee = v('sameFee');\r\n    const lockFee = v('lockFee');\r\n    const feeMethod = v('feeMethod');\r\n    const skipFee = v('skipFee');\r\n    const skipMax = v('skipMax') || '2';\r\n    const maxCancel = v('maxCancel') || '3';\r\n    const penaltyType = v('penaltyType');\r\n    const waiverHrs = v('waiverHrs') || '48';\r\n    const waiverReasons = v('waiverReasons');\r\n\r\n    const coDisplay = co || '<span class=\"placeholder\">[Company Name]<\/span>';\r\n    const contactDisplay = (email||phone)\r\n      ? ((email?email:'')+(email&&phone?' or ':'')+(phone?phone:''))\r\n      : '<span class=\"placeholder\">[contact info]<\/span>';\r\n\r\n    document.getElementById('docContent').innerHTML = `\r\n      <div class=\"doc-top\">\r\n        <div class=\"doc-co\">${coDisplay}<\/div>\r\n        <div class=\"doc-title\">Cancellation &amp; Rescheduling Policy<\/div>\r\n        <div class=\"doc-eff\">Effective: ${fmtDate(eff)}<\/div>\r\n      <\/div>\r\n\r\n      <div class=\"doc-sec\">1. Purpose<\/div>\r\n      <p>This policy outlines the cancellation and rescheduling terms for all cleaning services provided by ${coDisplay}. By booking a service, clients confirm they have read and agreed to these terms.<\/p>\r\n\r\n      <div class=\"doc-sec\">2. Notice requirement<\/div>\r\n      <p>Clients must provide a minimum of <strong>${noticeHrs} hours' notice<\/strong> to cancel or reschedule a cleaning appointment without incurring a fee.<\/p>\r\n      <p>Cancellations must be submitted via ${ph(cancelHow,'email \/ app \/ phone')} to ${ph(email,'contact@yourcompany.com')}${phone?' or '+phone:''}. Voicemails or messages sent directly to individual cleaners do not constitute valid notice.<\/p>\r\n\r\n      <div class=\"doc-sec\">3. Cancellation fee schedule<\/div>\r\n      <table class=\"doc-table\">\r\n        <thead><tr><th>Notice given<\/th><th>Fee charged<\/th><\/tr><\/thead>\r\n        <tbody>\r\n          <tr><td>More than ${noticeHrs} hours before appointment<\/td><td>No fee<\/td><\/tr>\r\n          <tr><td>24\u2013${noticeHrs} hours before appointment<\/td><td>${ph(lateFee,'fee amount')}<\/td><\/tr>\r\n          <tr><td>Less than 24 hours before appointment<\/td><td>${ph(sameFee,'100% of service')}<\/td><\/tr>\r\n          <tr><td>No-show or lockout upon arrival<\/td><td>${ph(lockFee,'full charge + travel fee')}<\/td><\/tr>\r\n        <\/tbody>\r\n      <\/table>\r\n      <p>All cancellation fees will be collected via: <strong>${feeMethod}<\/strong>.<\/p>\r\n\r\n      <div class=\"doc-sec\">4. No-show &amp; lockout policy<\/div>\r\n      <p>If a cleaner arrives at the scheduled time and is unable to access the property \u2014 due to no one being home, missing keys, an incorrect entry code, or a secured gate \u2014 the visit will be treated as a same-day cancellation and the full service charge will apply, plus any applicable lockout fee of ${ph(lockFee,'[fee]')}.<\/p>\r\n\r\n      <div class=\"doc-sec\">5. Recurring client policy<\/div>\r\n      <p>Clients on weekly or bi-weekly recurring plans who skip or cancel a visit may be subject to a surcharge of <strong>${ph(skipFee,'[skip surcharge]')}<\/strong> for the following appointment to account for additional cleaning time.<\/p>\r\n      <p>If a client cancels <strong>${skipMax}<\/strong> or more consecutive visits, their recurring time slot may be released to another client. Clients who cancel more than <strong>${maxCancel} times within a 90-day period<\/strong> may be subject to the following: <em>${penaltyType}<\/em>.<\/p>\r\n\r\n      <div class=\"doc-sec\">6. Fee collection<\/div>\r\n      <p>Cancellation fees are collected via <strong>${feeMethod}<\/strong>. If payment is not received, ${coDisplay} reserves the right to withhold future bookings until any outstanding balance is cleared.<\/p>\r\n\r\n      <div class=\"doc-sec\">7. Exceptions &amp; fee waivers<\/div>\r\n      <div class=\"doc-notice\">Fee waiver requests must be submitted within <strong>${waiverHrs} hours<\/strong> of the cancelled appointment${contactDisplay?' to '+contactDisplay:''}. Waivers are granted at the sole discretion of ${coDisplay}.${waiverReasons?'<br\/><br\/>Accepted reasons may include: '+waiverReasons:''}<\/div>\r\n\r\n      <div class=\"doc-sec\">8. Client acknowledgement<\/div>\r\n      <p>By booking a cleaning service with ${coDisplay}, the client confirms they have read, understood, and agreed to this Cancellation &amp; Rescheduling Policy. Continued use of services constitutes acceptance of any updated terms communicated by ${coDisplay}.<\/p>\r\n\r\n      <div class=\"sig-grid\">\r\n        <div>\r\n          <div style=\"font-size:11px;color:var(--g600);margin-bottom:4px;\">Company representative<\/div>\r\n          <div class=\"sig-line\"><\/div>\r\n          <div class=\"sig-label\">Signature &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date<\/div>\r\n          <div class=\"sig-line\" style=\"margin-top:1.25rem;\"><\/div>\r\n          <div class=\"sig-label\">Printed name<\/div>\r\n        <\/div>\r\n        <div>\r\n          <div style=\"font-size:11px;color:var(--g600);margin-bottom:4px;\">Client<\/div>\r\n          <div class=\"sig-line\"><\/div>\r\n          <div class=\"sig-label\">Signature &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date<\/div>\r\n          <div class=\"sig-line\" style=\"margin-top:1.25rem;\"><\/div>\r\n          <div class=\"sig-label\">Printed name<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n  };\r\n\r\n  window.zmcpgGenerateAndScroll = function(){\r\n    zmcpgUpdate();\r\n    document.getElementById('previewPanel').scrollIntoView({behavior:'smooth',block:'start'});\r\n  };\r\n\r\n  window.zmcpgOpenModal = function(){\r\n    document.getElementById('modalForm').style.display='block';\r\n    document.getElementById('modalSuccess').style.display='none';\r\n    document.getElementById('gateEmail').value='';\r\n    document.getElementById('gateEmail').classList.remove('error');\r\n    document.getElementById('emailError').style.display='none';\r\n    document.getElementById('emailModal').classList.add('open');\r\n    setTimeout(()=>document.getElementById('gateEmail').focus(),120);\r\n  };\r\n\r\n  window.zmcpgCloseModal = function(){\r\n    document.getElementById('emailModal').classList.remove('open');\r\n  };\r\n\r\n  window.zmcpgConfirmEmail = function(){\r\n    const emailInput = document.getElementById('gateEmail');\r\n    const val = emailInput.value.trim();\r\n    const valid = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(val);\r\n    if(!valid){\r\n      emailInput.classList.add('error');\r\n      document.getElementById('emailError').style.display='block';\r\n      emailInput.focus();\r\n      return;\r\n    }\r\n    emailInput.classList.remove('error');\r\n    document.getElementById('emailError').style.display='none';\r\n    document.getElementById('confirmedEmail').textContent = val;\r\n    document.getElementById('modalForm').style.display='none';\r\n    document.getElementById('modalSuccess').style.display='block';\r\n    zmcpgDownloadPDF();\r\n    setTimeout(zmcpgCloseModal, 3200);\r\n  };\r\n\r\n  async function zmcpgDownloadPDF(){\r\n    const btn = document.getElementById('dlBtn');\r\n    btn.textContent = 'Generating\u2026';\r\n    btn.disabled = true;\r\n    try {\r\n      const el = document.getElementById('docContent');\r\n      const canvas = await html2canvas(el, { scale: 2.5, backgroundColor: '#ffffff', useCORS: true, logging: false });\r\n      const imgData = canvas.toDataURL('image\/png');\r\n      const { jsPDF } = window.jspdf;\r\n      const pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\r\n      const pw = pdf.internal.pageSize.getWidth();\r\n      const ph = pdf.internal.pageSize.getHeight();\r\n      const mg = 14;\r\n      const cw = pw - mg * 2;\r\n      const imgH = (canvas.height * cw) \/ canvas.width;\r\n      let y = mg, remaining = imgH;\r\n      while (remaining > 0) {\r\n        const sliceH = Math.min(remaining, ph - mg * 2);\r\n        const srcY = (imgH - remaining) * (canvas.height \/ imgH);\r\n        const srcH = sliceH * (canvas.height \/ imgH);\r\n        const sc = document.createElement('canvas');\r\n        sc.width = canvas.width; sc.height = srcH;\r\n        sc.getContext('2d').drawImage(canvas, 0, srcY, canvas.width, srcH, 0, 0, canvas.width, srcH);\r\n        pdf.addImage(sc.toDataURL('image\/png'), 'PNG', mg, y, cw, sliceH);\r\n        remaining -= sliceH;\r\n        if (remaining > 0) { pdf.addPage(); y = mg; }\r\n      }\r\n      const co = (v('coName') || 'cancellation-policy').replace(\/\\s+\/g, '-').toLowerCase();\r\n      pdf.save(co + '-cancellation-policy.pdf');\r\n    } catch(e) {\r\n      alert('PDF generation failed. Please try again.');\r\n    }\r\n    btn.textContent = 'Download PDF';\r\n    btn.disabled = false;\r\n  }\r\n  window.zmcpgDownloadPDF = zmcpgDownloadPDF;\r\n\r\n  function init(){\r\n    const modal = document.getElementById('emailModal');\r\n    if(modal){\r\n      modal.addEventListener('click', function(e){ if(e.target===this) zmcpgCloseModal(); });\r\n    }\r\n    const effEl = document.getElementById('effDate');\r\n    if(effEl) effEl.value = new Date().toISOString().split('T')[0];\r\n    zmcpgUpdate();\r\n  }\r\n  if(document.readyState === 'loading'){\r\n    document.addEventListener('DOMContentLoaded', init);\r\n  } else {\r\n    init();\r\n  }\r\n})();\r\n<\/script>\n\n\n\n<h2 id=\"heading-5\" class=\"wp-block-heading\">FAQs About Enforcing Your Cancellation Policy<\/h2>\n\n\n\n<p><strong>Does a text message count as a valid cancellation notice?<\/strong> <br>You get to decide whether this counts, but whatever you decide should be in your policy. Define exactly what counts \u2014 email to a specific address, a message through your booking app, or a phone call to your main number. Texts to individual cleaners are the most problematic because they&#8217;re easy to miss, hard to track, and give clients a way to claim they notified someone without a central record. Your policy should explicitly state that messages to individual staff don&#8217;t count as valid notice.<\/p>\n\n\n\n<p><strong>What if a client cancels during off-hours or on a weekend?<\/strong> <br>Your policy should clarify whether the notice window is based on calendar hours or business hours. Most small cleaning businesses use calendar hours, so that a cancellation at 11pm on Friday counts just like one at 9am Monday. If you use an app or automated system, time-stamped messages make this easy to enforce. If you track manually, state clearly that weekend notices are processed the next business day.<\/p>\n\n\n\n<p><strong>What if an existing client refuses to sign a new or updated cancellation policy?<\/strong> <br>Sometimes a client objects to a specific clause, rather than the whole policy, so check with them to understand their true concern. An easy conversation can often resolve it. If they refuse to agree to any version of the policy, you have to decide whether to continue service without that protection or part ways. Frame it professionally: &#8220;We&#8217;re updating our agreements with all clients to make sure everyone is on the same page about our terms.&#8221; Most reasonable clients will sign.<\/p>\n\n\n\n<p><strong>What if a client ignores the fee and simply refuses to pay?<\/strong> <br>If you have a card on file, auto-charging is the cleanest approach because you don\u2019t have to confront anyone directly. If there&#8217;s no card on file, your options are: send an invoice with a clear due date, withhold future service until the balance is paid, or write it off and end the relationship. For small amounts, the cost of chasing payment often exceeds the fee itself. This is why requiring a card on file before booking is strongly recommended.<\/p>\n\n\n\n<p><strong>What if a client disputes the cancellation fee with their credit card company?<\/strong> <br>Chargebacks are a real risk. Your best defense is documentation: a signed or electronically acknowledged agreement that clearly states the fee, a timestamp showing when the cancellation was received, and a record of your communication with the client. If you use booking software, make sure it keeps a full audit trail. Most card companies side with businesses that can show a clear, agreed-upon policy was in place.<\/p>\n\n\n\n<p><strong>How do I bring up the cancellation policy without sounding confrontational?<\/strong> <br>This policy applies to everyone \u2014 there is nothing personal about it. Present it as part of your standard onboarding process. This removes the worry that it\u2019s directed at a specific client. When sending a new client their confirmation, include the policy alongside other logistics. Frame it positively: &#8220;Like most service businesses, we hold your time slot exclusively for you. We have a 48-hour cancellation policy to help us manage our team&#8217;s schedule. Here&#8217;s the full policy for your records.&#8221; Everyone should understand you\u2019re respectfully asking for clear communication.&nbsp;<\/p>\n\n\n\n<p><strong>At what point should I fire a client who keeps canceling?<\/strong> <br>If a client cancels more than three times in a 90-day period, they&#8217;re causing more operational disruption than they&#8217;re worth, even if you&#8217;re collecting fees. Before ending the relationship, have one clear conversation: &#8220;We&#8217;ve noticed a pattern of last-minute cancellations that&#8217;s been hard for our scheduling. Going forward, we&#8217;ll require a deposit to hold your slot. If that doesn&#8217;t work for you, I completely understand.&#8221; This gives them a chance to adjust, and you a professional exit if they don&#8217;t.<\/p>\n\n\n\n<p><strong>Should my policy be stricter for commercial vs. residential clients?<\/strong> <br>Generally, yes. Commercial clients typically operate on tighter schedules and expect more formal agreements. A 48-hour notice requirement and deposit are more accepted in B2B contexts. Residential clients tend to expect more flexibility, though your policy can still be firm. The framing and tone of enforcement may need to be softer with residential clients than with commercial ones.<\/p>\n\n\n\n<p><strong>Does my policy need to be reviewed by a lawyer?<\/strong><br>For a basic residential cancellation policy, legal review is helpful but not strictly necessary for most small businesses just getting started. A clear, plainly written policy that covers notice, fees, and how to cancel is far better than no policy at all. As your business grows or you work with more commercial clients, multiple employees, or in states with specific consumer protection laws, a legal review becomes more worthwhile. An hour with a small business attorney can give you peace of mind and catch things you might have missed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cancellation policies can get tricky. This is one of our most-requested topics, and we\u2019ve covered this often on our podcast, Filthy Rich Cleaners.&nbsp; Here&#8217;s the definitive guide to writing your cancellation policy, including a free, downloadable template you can customize and add to your client onboarding materials. Writing Your Cancellation Policy Your cancellation policy should [&hellip;]<\/p>\n","protected":false},"author":35,"featured_media":17335,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"What Your Cleaning Business Needs in a Cancellation Policy","_seopress_titles_desc":"Cancellation policies are a cornerstone of protecting your cleaning business from painful mishaps. Learn how to write and enforce a clear policy in this guide.","_seopress_robots_index":"","_seopress_analysis_target_kw":"","footnotes":""},"categories":[125],"tags":[],"class_list":{"0":"post-17343","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business"},"_links":{"self":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/17343","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\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/comments?post=17343"}],"version-history":[{"count":3,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/17343\/revisions"}],"predecessor-version":[{"id":17349,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/posts\/17343\/revisions\/17349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/media\/17335"}],"wp:attachment":[{"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/media?parent=17343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/categories?post=17343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zenmaid.com\/magazine\/wp-json\/wp\/v2\/tags?post=17343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}