GHL Command See plans

Workflow Builder login help

The Workflow Builder needs your GoHighLevel login. Claude normally captures it for you. If that doesn't work on your computer, this page gets it in about two minutes.

Try this first. Say to Claude: "Unlock the Workflow Builder." A Chrome window opens, you log into GoHighLevel as usual, and Claude saves the login itself. No copying, no pasting.

Use the steps below only if that window doesn't open or the login doesn't save, for example on a work computer with locked-down settings.

1. Open GoHighLevel in Chrome

Go to app.gohighlevel.com and log in. Open any sub-account (not the agency view). Use Chrome, Edge or Brave.

2. Open the Console

Press Cmd + Option + I on a Mac, or F12 on Windows. A panel opens. Click the Console tab at the top of it.

3. Paste this script and press Enter

Copy the script, paste it next to the > in the Console, and press Enter. If Chrome asks you to type "allow pasting" first, type it and paste again.

(async () => {
  try {
    const db = await new Promise((res, rej) => {
      const r = indexedDB.open('firebaseLocalStorageDb');
      r.onsuccess = () => res(r.result);
      r.onerror = () => rej(r.error);
    });
    const tx = db.transaction('firebaseLocalStorage', 'readonly');
    const store = tx.objectStore('firebaseLocalStorage');
    const rows = await new Promise((res, rej) => {
      const r = store.getAll();
      r.onsuccess = () => res(r.result);
      r.onerror = () => rej(r.error);
    });
    const candidates = rows.filter(r => typeof r?.fbase_key === 'string' && r.fbase_key.startsWith('firebase:authUser:AIza') && r?.value?.apiKey && r?.value?.uid && r?.value?.stsTokenManager?.refreshToken);
    if (!candidates.length) {
      console.log('%cGHL Command: no Firebase login found.', 'color:red;font-weight:bold');
      console.log('Open a tab logged into your GHL account, then run this again in that tab.');
      return;
    }
    // Multi-account safety (v3.26.0): if the browser has more than one
    // GHL Firebase login cached, show the buyer which one we're using and
    // how to pick a different one. The first matching row is the freshest
    // login per Firebase's storage order, but it isn't always the buyer's
    // CURRENT account if they recently switched.
    if (candidates.length > 1) {
      console.log('%cGHL Command: ' + candidates.length + ' Firebase logins found in this browser:', 'color:orange;font-weight:bold');
      candidates.forEach((c, i) => {
        const v = c.value || {};
        const lastLogin = v.lastLoginAt ? new Date(Number(v.lastLoginAt)).toISOString() : '(no timestamp)';
        console.log('  [' + i + '] ' + (v.email || '(no email)') + ' — uid ' + (v.uid || '').slice(0, 8) + '… — last login ' + lastLogin);
      });
      console.log('Using [0] (most recently active). If that is the wrong account, log out of the others in their GHL tabs and re-run this script.');
    }
    const v = candidates[0].value;
    const out = {
      ghl_firebase_api_key: v.apiKey,
      ghl_user_id: v.uid,
      ghl_firebase_refresh_token: v.stsTokenManager.refreshToken,
    };
    const json = JSON.stringify(out, null, 2);
    console.log('%cGHL Command: paste this into setup_ghl_mcp (firebase_paste field):', 'color:green;font-weight:bold');
    if (v.email) console.log('Account: ' + v.email);
    console.log(json);
    try {
      await navigator.clipboard.writeText(json);
      console.log('%cAlready copied to your clipboard — Cmd+V / Ctrl+V to paste.', 'color:green');
    } catch (e) {
      console.log('%cCopy it manually from above (clipboard access not granted).', 'color:orange');
    }
  } catch (err) {
    console.log('%cGHL Command: script error.', 'color:red;font-weight:bold');
    console.log(err);
  }
})();

When it works, the Console shows a green message and a block of text in curly brackets. That block is already copied for you. If you are logged into more than one GoHighLevel account in this browser, the Console lists them and tells you which one it used.

4. Paste it into Claude

Go back to Claude and say:

Run enable_workflow_builder:
  firebase_paste: PASTE_THE_BLOCK_HERE

Approve the tool call, then quit Claude completely and open it again. The Workflow Builder is ready.

Setting up GHL Command for the first time? Follow the install guide in the Members Hub instead: it does this step for you.

If the Workflow Builder stops working later

GoHighLevel renews this login from time to time. If workflow tools stop working, ask Claude to run a health check. If it shows the Workflow Builder login failing, say "Unlock the Workflow Builder" again, or repeat steps 1 to 4.

If the script doesn't work in your browser

Some locked-down browsers block the script. You can copy the three values by hand:

  1. In the panel, click the Application tab and open IndexedDB in the left sidebar.
  2. Open firebaseLocalStorageDb, then firebaseLocalStorage.
  3. Find the row whose key starts with firebase:authUser:.
  4. API key: the part of that key after firebase:authUser: and before :[DEFAULT]. It starts with AIza.
  5. User ID: in the row's value, the uid field.
  6. Refresh token: in the same value, open stsTokenManager and copy refreshToken.

Then say to Claude:

Run enable_workflow_builder:
  ghl_user_id: THE_USER_ID
  ghl_firebase_api_key: THE_API_KEY
  ghl_firebase_refresh_token: THE_REFRESH_TOKEN

These values stay on your computer, saved by GHL Command. Never put them in Claude's settings file by hand. Questions? Write [email protected].