Complete Cleaning CRM Software
Grow Business
Engage Clients
Cleaning Franchises
We Serve
Maid/Home Cleaning
Landscaping
Chimney Sweeps
Pressure Washing
Commercial Cleaning
Tree Service
Pool Cleaning
Air Duct Cleaning
Carpet Cleaning
Blinds Cleaning
Industrial Cleaning
Window Cleaning
Grow Business
Outreach with Power Dialer
Call hundreds per day using power dialer
Set up call lists with one click
Superior call quality without any “dead air”
Take notes and set appointments during calls
Set up follow-up tasks with a click
Email us to find out more
Engage Using Text Marketing
Personalize text messages
Send customized text offers with one click
Create and manage text templates
Contact us to find out more
Email us to find out more
Capture Online Leads and Appointments
Design professional landing pages with embedded forms
Design web forms to collect visitor data
Capture leads directly into CRM
Send automatic follow-up emails
Assign a campaign to captured leads
Offer an appointment link
Contact Us &
Find Out More
(function () {
"use strict";
var EMPTY_STRING = "";
var UNDEFINED = "undefined";
var NULL = "null";
function WebForm() {
};
if ( !window.sf ) window.sf || (window.sf = function () {
var a = {
version: "1.0",
webform: new WebForm()
};
return a;
}());
(function($) {
$.extend(WebForm.prototype, {
checkParam: function( s ) {
var validParam = false;
if( s != null && typeof s !== UNDEFINED ) {
s = $.trim(s);
s = s.toLowerCase();
if( s != EMPTY_STRING && s != UNDEFINED && s != NULL ) {
validParam = true;
}
}
return validParam;
},
getRequestBody: function(oForm) {
var params = new Array();
var fieldParam;
for(var i = 0; i < oForm.elements.length; i++){
fieldParam = encodeURIComponent(oForm.elements[i].name);
fieldParam += "=";
if(oForm.elements[i].getAttribute('data')!=null){
fieldParam += encodeURIComponent( $.trim(oForm.elements[i].getAttribute('data')) );
}else{
fieldParam += encodeURIComponent( $.trim(oForm.elements[i].value) );
}
params.push(fieldParam);
}
return params.join("&");
},
checkEmailId: function(value){
var regex = /^([a-zA-Z0-9_.+-])+\\@(([a-zA-Z0-9-])+\\.)+([a-zA-Z0-9]{2,})+$/;
return regex.test(value);
},
checkInt: function(s){
var validInt = false;
if( this.checkParam(s) ) {
var intregstr = /(^[\\d+]$)|(^\\d+,?\\d{1,2}$)/ ;
var result = -1;
result = s.search(intregstr);
if( result != "-1" ) {
validInt = true;
}
}
return validInt;
},
checkUrl: function( url ) {
var validUrl = false;
var urlregstr = /((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)?(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(:[\\d]{1,5})?(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)(&([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?/;
var result = -1;
result = url.search(urlregstr);
if( result != "-1" ) {
validUrl = true;
}
return validUrl;
},
processResponse: function(resp){
try{
console.log("resp>>"+resp);
}catch(e) {}
if(resp){
var _this = this;
if(resp.hasOwnProperty('status')){
if(resp.status == '-1'){
if(resp.hasOwnProperty('message')){
alert(resp.message);
}
}else if(resp.status == '0'){
var rUrl = "";
if(resp.hasOwnProperty('returnUrl')){
rUrl = resp.returnUrl;
}
if(rUrl == "" || rUrl == null || rUrl == undefined){
alert('Your request has been submitted. You will hear from us within 24hrs.');
}
if(resp.hasOwnProperty('webAnalytics') && resp.hasOwnProperty('userName') && resp.hasOwnProperty('email')){
var webAnalytics = resp.webAnalytics;
var userName = resp.userName;
var email = resp.email;
if(webAnalytics!=null && webAnalytics!='' && webAnalytics == "true" && email!=null && email!=''){
_this.setCookieValue(userName, email);
}
}
if(resp.hasOwnProperty('returnUrl')){
var returnUrl = resp.returnUrl;
if(returnUrl && (returnUrl.indexOf("http://") < 0)){
if(returnUrl.indexOf("https://") < 0){
returnUrl = "https:\\/\\/"+returnUrl;
}
}
window.top.location = returnUrl;
}
}
}else{
alert('Error in processing.')
}
}
},
processWebForm: function(wfForm){
var $form = $( wfForm );
var _this = this;
if( $form.length == 0 ) $form = $("form[name=SoffrontSMBWebForm]");
if( $form.length > 0 ){
var webformUrl = $form.attr("action");
var webformMethod = $form.attr("WSMethod");
if( _this.checkParam(webformMethod) ){
if( webformUrl.indexOf("processwebform") < 0 ) {
webformUrl = webformUrl + "/" + webformMethod;
}
}
var oForm = $form[0];
if(oForm) {
if( webformUrl ) {
var canProcess = true;
var element, value, label, name, multiple;
for(var i = 0; i < oForm.elements.length; i++){
element = oForm.elements[i];
if( element ) {
value = $.trim( element.value );
label = element.getAttribute('label');
name = element.getAttribute('name');
multiple = element.getAttribute('multiple');
if( ( element.getAttribute('emailField') == '1' || element.getAttribute('fieldtype') == '218' ) && _this.checkParam(value) && !_this.checkEmailId(value) ){
alert('Please enter a valid email id!');
element.focus();
canProcess = false;
return false;
} else if( element.getAttribute('fieldtype') == '217' && _this.checkParam(value) && !_this.checkUrl(value) ) {
alert('Please enter a valid url!');
element.focus();
canProcess = false;
return false;
} else if( element.getAttribute('fieldtype') == '202' && _this.checkParam(value) && !_this.checkInt(value) ) {
alert('Please enter a valid integer!');
element.focus();
canProcess = false;
return false;
} else if( element.getAttribute('required') == 'required' && _this.checkParam(value) == false ){
alert(label + ' can not be blank!');
element.focus();
canProcess = false;
return false;
}else if( name == "webFormDefault" && value!=null && value!=''){
canProcess = false;
return false;
}
/*get multi select value from element*/
if( multiple!= null && multiple!='' && multiple!=undefined && multiple == "multiple"){
var values = "";
$.each($("#"+name+" option:selected"), function(){
if(values == ""){
values = $(this).val();
}else{
values+=","+$(this).val();;
}
});
if(values!=null && values!=''){
if(oForm.elements[i].getAttribute('name') == name){
oForm.elements[i].setAttribute('data', values);
}
}
}
}
}
if(canProcess){
if( oForm.subscribe ) {
if( oForm.email_status ) {
if( oForm.subscribe.checked ) {
oForm.subscribe.value = true;
oForm.email_status.value = "Opted-in Confirmed";
} else {
oForm.subscribe.value = false;
oForm.email_status.value = "Unknown";
}
}
}
var webUrl = $(location).attr('href');
if(webUrl!= null && webUrl!=''){
if( oForm.webUrl ) {
oForm.webUrl.value = webUrl;
}
}
var data = _this.getRequestBody(oForm);
var submit = oForm.button;
$(submit).attr({"disabled":true}).css({'cursor':'default'}).val('Processing...');
_this.callSMBAPI( webformUrl, data, function(resp) {
_this.processResponse(resp);
$(submit).attr({"disabled": false}).css({'cursor': 'pointer'}).val('Submit');
});
}
}
}
}
return false;
},
callSMBAPI: function( url, data, callback ){
$.ajax({
url: url,
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
async: true,
cache: true,
contentType: "application/json; charset=utf-8",
jsonpCallback: "callback",
data: data,
beforeSend: function(xhrObj,options){
xhrObj.setRequestHeader("Content-Type","application/json");
xhrObj.setRequestHeader("Accept","application/json");
},
success: function (resp) {
if( callback ) callback(resp);
},
failure: function (err) {
try{
console.log("Error connecting to SMB API");
}catch(e){}
},
error: function(request, status, error) {
alert(status);
try{
console.log(request);
console.log(status);
}catch(e){}
}
});
},
setCookieValue: function(userName, email){
setCookie('_custom_data_username', userName);
setCookie('_custom_data_email', email);
}
});
})(jQuery);
})();
function processWebForm(wfForm) {
if( window.sf ) {
window.sf.webform.processWebForm(wfForm);
}
}
Your request has been submitted. You will hear from us within 24 hours.
Software Integrations
Supercharge Your Productivity
Engage Clients
Email us to find out more
Manage Clients
See all customer communication in one place
Communicate with email, phone or text
Store customer agreements and documents in one place
Retain customers with coupons and offers
Rank customers and create special groups
Send Email Newsletters
Manage email templates with merge fields
Personalize email messages and add personal appointment link to your calendar
Test messages with a/b tests
Rank leads based on several criteria
Auto-respond timely
Engage leads with an email and text sequence
Provide Estimates
Create estimates with all work details
Send estimates with your company branding
Get your estimates approved online
Convert estimates to invoices
Contact Us to find out more
Our Customers Get Results
We needed a way to internally run our business so that franchisees didn’t have to … We chose the team at Soffront. It’s a full massive CRM, stronger on an enterprise level than others.
We use BrandWide by Soffront to manage and communicate with our franchisees and customers across the globe.
We chose BrandWide after a rigorous selection process. We look forward to using BrandWide to standardize our processes and improve collaboration between our locations.
Email us to find out more
Get Leads From Social Media
Create contents with little effort
Schedule in advance using social calendar
Reply to all social comments
Generate leads from social media
Review social reach and insights