Client Portal | First Coast Property Experts


Your Plan


Upcoming Services



Service History



Your Property Photos




Pending Quotes


Pending Invoices


Refer a Neighbor

We grow by word of mouth from homeowners like you. When a neighbor books, you earn:

$50
Interior referral
Any housekeeping or interior service booking.

$100 – $400
Exterior referral
Scaled by project size — annual plans pay out the top tier.

Get your referral link



Continue Reading

From Our Field Notes.

Every post is written by the crew that does the work — not a copywriter working from a brief. Here’s what we’re seeing on estates this season.

Start Your Estimate

— The Gold Standard, Every Time.

(function () { 'use strict'; var CONFIG = { mainNumber: '9044661622', mainFormatted: '(904) 466-1622', numberMap: { google_ads: { tel: '9045786367', display: '(904) 578-6367' }, google_organic: { tel: '9043528390', display: '(904) 352-8390' }, facebook_ads: { tel: '9046649709', display: '(904) 664-9709' }, facebook_organic: { tel: '9046649709', display: '(904) 664-9709' }, nextdoor: { tel: '9044686416', display: '(904) 468-6416' }, yelp: { tel: '9048678667', display: '(904) 867-8667' }, bing: { tel: '9044661622', display: '(904) 466-1622' }, referral: { tel: '9045872009', display: '(904) 587-2009' }, direct: { tel: '9044661622', display: '(904) 466-1622' }, other: { tel: '9044661622', display: '(904) 466-1622' } }, cookieName: 'fcpe_dni_source', cookieDays: 30, textPatterns: [ '(904) 466-1622', '904-466-1622', '904.466.1622', '904 466 1622', '9044661622', '(904) 569-5582', '904-569-5582', '904.569.5582', '904 569 5582', '9045695582' ], telPatterns: [ 'tel:+19044661622', 'tel:19044661622', 'tel:9044661622', 'tel:+1-904-466-1622', 'tel:904-466-1622', 'tel:+19045695582', 'tel:19045695582', 'tel:9045695582', 'tel:+1-904-569-5582', 'tel:904-569-5582' ] }; var params = new URLSearchParams(window.location.search); var debug = params.get('dni_debug') === '1'; function log() { if (debug) { var args = ['[FCPE-DNI]'].concat(Array.prototype.slice.call(arguments)); console.log.apply(console, args); } } function setCookie(name, value, days) { var d = new Date(); d.setTime(d.getTime() + days * 86400000); document.cookie = name + '=' + encodeURIComponent(value) + ';expires=' + d.toUTCString() + ';path=/;SameSite=Lax'; } function getCookie(name) { var pairs = document.cookie.split('; '); for (var i = 0; i < pairs.length; i++) { var idx = pairs[i].indexOf('='); if (idx !== -1 && pairs[i].substring(0, idx) === name) { return decodeURIComponent(pairs[i].substring(idx + 1)); } } return null; } function detectSource() { var referrer = document.referrer || ''; var host = window.location.hostname; if (params.get('gclid')) return 'google_ads'; if (params.get('fbclid')) return 'facebook_ads'; var utmSource = (params.get('utm_source') || '').toLowerCase(); if (utmSource === 'nextdoor') return 'nextdoor'; if (utmSource === 'yelp') return 'yelp'; if (referrer) { try { var refHost = new URL(referrer).hostname.toLowerCase(); if (refHost.indexOf('google.') !== -1) return 'google_organic'; if (refHost.indexOf('facebook.') !== -1 || refHost.indexOf('fb.') !== -1) return 'facebook_organic'; if (refHost.indexOf('instagram.') !== -1) return 'facebook_organic'; if (refHost.indexOf('bing.') !== -1) return 'bing'; if (refHost.indexOf('nextdoor.') !== -1) return 'nextdoor'; if (refHost.indexOf('yelp.') !== -1) return 'yelp'; if (refHost === host || refHost.indexOf(host) !== -1) return 'direct'; return 'referral'; } catch (e) {} } return 'direct'; } function resolveSource() { var existing = getCookie(CONFIG.cookieName); if (existing && CONFIG.numberMap[existing]) { log('Source from cookie:', existing); return existing; } var detected = detectSource(); log('Source detected:', detected); setCookie(CONFIG.cookieName, detected, CONFIG.cookieDays); return detected; } /* Phone swap re-enabled 2026-04-21 after Twilio DNI cutover. */ function replaceInTextNodes(root, mapping) { var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false); var node, count = 0; while ((node = walker.nextNode())) { var text = node.nodeValue; if (!text) continue; var replaced = text; for (var i = 0; i < CONFIG.textPatterns.length; i++) { if (replaced.indexOf(CONFIG.textPatterns[i]) !== -1) { replaced = replaced.split(CONFIG.textPatterns[i]).join(mapping.display); } } if (replaced !== text) { node.nodeValue = replaced; count++; } } return count; } function replaceTelLinks(mapping) { var links = document.querySelectorAll('a[href^="tel:"]'); var count = 0; for (var i = 0; i < links.length; i++) { var href = links[i].getAttribute('href').toLowerCase(); var isMatch = false; for (var j = 0; j < CONFIG.telPatterns.length; j++) { if (href === CONFIG.telPatterns[j]) { isMatch = true; break; } } if (!isMatch && (href.indexOf(CONFIG.mainNumber) !== -1 || href.indexOf('9045695582') !== -1)) isMatch = true; if (isMatch) { links[i].setAttribute('href', 'tel:+1' + mapping.tel); count++; } } return count; } function pushToDataLayer(source, mapping) { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'fcpe_dni_source', fcpe_dni_source: source, fcpe_dni_number: mapping.display }); log('dataLayer push:', source, mapping.display); } function init() { log('Initializing...'); var source = resolveSource(); var mapping = CONFIG.numberMap[source] || CONFIG.numberMap['other']; var textCount = replaceInTextNodes(document.body, mapping); var linkCount = replaceTelLinks(mapping); log('Source:', source, '| text swaps:', textCount, '| link swaps:', linkCount); pushToDataLayer(source, mapping); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
HOA-Ready Service. HOA-conscious scheduling and arrival protocols are standard practice in the communities we serve. We coordinate around community access requirements, contractor parking rules, and arrival windows before the first visit. Communicate your community’s specific requirements at booking and we will confirm them before we arrive.