First, choose a Productized Service type. Then, add Service items. For example, items for a branding service could be “logo design” and “letterhead design”.
Each item has special properties that you can set, like: add-on, quantity or custom.
Don’t waste time on the dull part of your business. Zendo can autogenerate a Quote upon order, send an automatic Payment Request, and issue an Invoice once the payment has been processed.
Each Service can have a unique, fully customizable Order Form that allows you to streamline data collection. Each form has its unique URL so you can link it to a button on your website. You can add an unlimited number of custom input fields.
Once you receive an order and gather all the requirements to estimate the project, you can send a custom Quote to the client (you can even ask for approval to have it on the record). Once you agree to a price and the scope of work, it is time to collect the upfront payment.
Zendo comes with a frictionless payment collection system. It supports instant payments (powered by Stripe) and bank transfers, regardless of the Service type. After collecting your payment, it’s up to you to deliver a great service!
Define the default payment method per service basis or adjust it per client needs.
(function() {
// Global page view and session tracking for UAEL Modal Popup feature
try {
// Session tracking: increment if this is a new session
// Check if any popup on this page uses current page tracking
var hasCurrentPageTracking = false;
var currentPagePopups = [];
// Check all modal popups on this page for current page tracking
if (typeof jQuery !== 'undefined') {
jQuery('.uael-modal-parent-wrapper').each(function() {
var scope = jQuery(this).data('page-views-scope');
var enabled = jQuery(this).data('page-views-enabled');
var popupId = jQuery(this).attr('id').replace('-overlay', '');
if (enabled === 'yes' && scope === 'current') {
hasCurrentPageTracking = true;
currentPagePopups.push(popupId);
}
});
}
// Global tracking: ALWAYS increment if ANY popup on the site uses global tracking
// Current page tracking: increment per-page counters
if (hasCurrentPageTracking && currentPagePopups.length > 0) {
var currentUrl = window.location.href;
var urlKey = 'uael_page_views_' + btoa(currentUrl).replace(/[^a-zA-Z0-9]/g, '').substring(0, 50);
var currentPageViews = parseInt(localStorage.getItem(urlKey) || '0');
currentPageViews++;
localStorage.setItem(urlKey, currentPageViews.toString());
// Store URL mapping for each popup
for (var i = 0; i < currentPagePopups.length; i++) {
var popupUrlKey = 'uael_popup_' + currentPagePopups[i] + '_url_key';
localStorage.setItem(popupUrlKey, urlKey);
}
}
} catch (e) {
// Silently fail if localStorage is not available
}
})();