Launching October 7:15-day GHL training —Be first to know ↗
Joshua SanderfordJoshua Sanderfordby Josh Ads
White-label

GHL Logo Switcher

Rebranding a dozen sub-accounts by hand? Swap logos across all of them at once instead of clicking through each account.

← All tools
How the GHL sidebar logo swaps per sub-account
Dynamic logo switching

White-label the sidebar per sub-account.

This tool generates a JavaScript snippet that automatically swaps the GoHighLevel sidebar logo based on which sub-account location is active - perfect for agencies running multiple client brands.

1Default agency logo URL

Used when no location mapping is found.

2Location mappings

Add your sub-account Location IDs and the logo URL each should show.

3Generated code
generated-script.js
<script>
/* ============================================================
   Josh's Sub-Account Logo Switcher for GoHighLevel
   Generated at: 2026-09-24
   ============================================================ */

(() => {
  "use strict";

  /** 1️⃣  Map: sub-account (location) ID → custom logo URL */
  const MAP = {
    "<location_id>": "<logo_url>"
  };

  /** 2️⃣  Default agency logo (used when no mapping found) */
  const DEFAULT_LOGO = "<default_agency_url>";

  /** 3️⃣  Sidebar logo selector (used in GHL's current UI) */
  const SEL = "#sidebar-v2 .agency-logo-container img";

  let lastId = "";

  const getId = () => {
    const parts = location.pathname.split("/");
    const i = parts.indexOf("location");
    return i > -1 ? parts[i + 1] : null;
  };

  function apply() {
    const id = getId();
    if (!id || id === lastId) return;
    lastId = id;
    const url = MAP[id] || DEFAULT_LOGO;
    let tries = 0;
    const t = setInterval(() => {
      const img = document.querySelector(SEL);
      if (img) {
        img.src = url;
        img.removeAttribute("srcset");
        clearInterval(t);
      } else if (++tries > 120) {
        clearInterval(t);
      }
    }, 100);
  }

  const ps = history.pushState, rs = history.replaceState;
  const onNav = () => setTimeout(apply, 0);
  history.pushState = function () { ps.apply(this, arguments); onNav(); };
  history.replaceState = function () { rs.apply(this, arguments); onNav(); };
  window.addEventListener("popstate", onNav);
  new MutationObserver(onNav).observe(document.documentElement, { childList: true, subtree: true });

  apply();
})();
</script>

Paste this into your GHL agency Custom Code section.

FAQ

GoHighLevel logo switcher - common questions

It's a free tool that generates a small JavaScript snippet you paste into your GoHighLevel agency custom code. The snippet reads the current sub-account (location) ID from the URL and swaps the sidebar logo to a different image for each client you map.
Invite only

Request your invite to my private GoHighLevel community

Over 1,700 agencies, beginners, and business owners sharing what actually works in GoHighLevel. Drop your email and I'll send your invite.

One email with your access link. No spam.

Whitelabel the HighLevel logo per sub-account

HighLevel lets you set one agency logo, but agencies that resell to multiple brands often want each sub-account to show its own. This generator produces a small custom-code snippet that swaps the logo based on the location currently open.

The snippet watches URL changes rather than a specific CSS class, so it keeps working through most HighLevel interface updates. Paste it into agency settings under custom code, and every sub-account you mapped shows the right brand.

Host the logo files somewhere stable and public - a CDN, your own site, or HighLevel media storage - and use https URLs so browsers do not block them.