Leads by Channel
Visa Categories
Weekly Lead Trend
Lead Status Breakdown
Consultant Performance
ConsultantBookingsLeadsApprovedRate
Recent Activity
Top Campaigns
CampaignChannelLeadsConversionsBudgetCost/LeadStatus
IDNamePhoneVisa Type ChannelCampaignConsultantStatusPriorityDateActions
IDNameDOBNationalityPassport No English TestScoreDestinationIntakeDocsActions
IDNameRelationStudentPhone OccupationIncomeSponsorActions
IDNameEmailPhone SpecializationMax/DayTotal BookingsStatusActions
IDCustomerConsultantDateTime TypeModeStatusActions
App IDStudentVisa TypeCountry AppliedLodgedDecisionStatusConsultantFeesActions
IDCampaign NameChannelStartEnd BudgetLeadsConversionsCPLStatusActions
IDChannel NameDescriptionTotal LeadsStatusActions
Past Reports
WeekPeriodNew LeadsBookingsApprovalsRejectionsActions
IDNameUsernameEmail RoleConsultant LinkLast LoginStatusActions
๐Ÿ”— Google Sheets Integration
๐Ÿ“‹ How it works: Deploy a Google Apps Script Web App linked to your Sheet. Paste the URL below. See Help โ†’ Step 3 for the exact Apps Script code to copy-paste.
From Apps Script โ†’ Deploy โ†’ Manage Deployments โ†’ Copy Web App URL
๐Ÿข Company Details
๐Ÿ—„ Database Mode
Storage Mode
Choose between local browser storage or Google Sheets
๐Ÿ’ก Tip: Use Local mode to start immediately with no setup. Your data saves in the browser. Switch to Google Sheets mode for cloud storage and team collaboration.
๐ŸŽฏ Demo Data

Populate the system with sample data to explore all features.

๐Ÿ“Š Sheet Tabs Required
${['Students','Parents','Consultants','Leads','Campaigns','MarketingChannels','Bookings','VisaApplications','WeeklyReports','Users','ActivityLog'].map(s=>`
โœ“ ${s}
`).join('')}
1

Download & Open the CRM

Save the global-pathways-crm.html file. Open it directly in Chrome/Edge/Firefox, or upload to any web server (cPanel, Netlify, GitHub Pages, Apache, Nginx). No npm, no build step, no backend required.

2

Quick Start โ€” Local Mode (No Setup)

Go to Settings โ†’ Storage Mode โ†’ Local (Browser). All data saves in your browser's localStorage. Click "Load Demo Data" to explore. This works immediately with no Google account needed.

3

Create a Google Sheet & Apps Script

1. Go to sheets.google.com โ†’ Create a blank spreadsheet (name it e.g. GP CRM Data).
2. In that sheet, click Extensions โ†’ Apps Script.
3. Delete all existing code, then paste the entire script below and click Save (๐Ÿ’พ).

function doGet(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var action = e.parameter.action;
  if (action === 'ping') {
    return out({ok:true, sheetName: ss.getName()});
  }
  if (action === 'load') {
    var names = ['leads','students','parents','consultants','bookings',
                 'visa','campaigns','channels','reports','users','activity'];
    var data = {};
    names.forEach(function(name) {
      var sheet = ss.getSheetByName(name);
      if (sheet && sheet.getLastRow() > 1) {
        var rows = sheet.getDataRange().getValues();
        var headers = rows[0];
        data[name] = rows.slice(1).map(function(row) {
          var obj = {};
          headers.forEach(function(h, i) {
            var v = row[i];
            if (typeof v === 'string' && (v.charAt(0)==='{' || v.charAt(0)==='[')) {
              try { v = JSON.parse(v); } catch(e2) {}
            }
            obj[h] = v;
          });
          return obj;
        });
      } else {
        data[name] = [];
      }
    });
    return out({ok:true, data:data});
  }
  return out({ok:false, error:'Unknown action'});
}

function doPost(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var payload = JSON.parse(e.postData.contents);
  if (payload.action === 'save') {
    var db = payload.db;
    Object.keys(db).forEach(function(name) {
      var arr = db[name];
      if (!arr) return;
      var sheet = ss.getSheetByName(name) || ss.insertSheet(name);
      sheet.clearContents();
      if (!arr.length) return;
      var headers = Object.keys(arr[0]);
      sheet.appendRow(headers);
      arr.forEach(function(row) {
        sheet.appendRow(headers.map(function(h) {
          var v = row[h];
          if (v === null || v === undefined) return '';
          if (typeof v === 'object') return JSON.stringify(v);
          return v;
        }));
      });
    });
    return out({ok:true});
  }
  return out({ok:false, error:'Unknown action'});
}

function out(obj) {
  return ContentService
    .createTextOutput(JSON.stringify(obj))
    .setMimeType(ContentService.MimeType.JSON);
}
4

Deploy the Apps Script as a Web App

In Apps Script โ†’ click Deploy โ†’ New Deployment.
โ€ข Type: Web App
โ€ข Execute as: Me
โ€ข Who has access: Anyone
Click Deploy โ†’ Authorize โ†’ Copy the Web App URL.

5

Connect the CRM to Google Sheets

In the CRM go to Settings โ†’ Google Sheets Integration.
Paste the Web App URL โ†’ click Test Connection.
Once it shows โœ… Connected, click Initialize & Push Data to sync all data to the sheet.
From now on every save automatically updates Google Sheets.

6

Add Your Team

Go to User Management โ†’ Add staff with roles: Admin (full access), Manager (reports + leads), Consultant (own records), Data Entry (add/edit leads). Link consultant accounts to their consultant profile.

7

Default Login Credentials

admin / admin123 โ€” Full Admin
Rozan / Ro456 โ€” Admin
Aroosha / Ar678 โ€” Admin
Team / Tm890 โ€” Manager
consultant / consult123 โ€” Consultant
Change passwords in User Management after first login.