π‘Tip: Every time someone texts 682-331-3783 or comments "SEND IT", click + Add Lead and fill in their info. Click any cell to edit it. Your data saves automatically in your browser. Use Export CSV to copy everything into Google Sheets anytime.
π Lead List
0 contacts
#
Name
Phone Number
Source
Date Added
PDF Sent?
Bundle?
Follow-Up 2?
Follow-Up 3?
Interested?
Paid?
Amount
Attended?
Notes
π
No leads yet. Click + Add Lead to add your first contact.
π Google Sheets Setup Script
Follow these steps to auto-build the lead tracker inside a blank Google Sheet β takes about 30 seconds.
1
Go to sheets.google.com and open a blank new spreadsheet.
2
Click Extensions in the top menu bar, then click Apps Script.
3
Delete any existing code in the editor. Then copy and paste the script below.
4
Click the βΆ Run button (the play triangle). Click Review permissions β Allow.
5
Go back to your spreadsheet. Your full Lead Tracker is set up. Boom.
Apps Script Code
function setupLeadTracker() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.setName("Leads - Basics 101");
sheet.clear();
// ββ Column headers ββββββββββββββββββββββββββββββββββ
var headers = [
"#", "Name", "Phone Number", "Source", "Date Added",
"PDF Sent?", "Bundle Bought?", "Follow-Up 2?", "Follow-Up 3?",
"Interested?", "Paid?", "Amount ($)", "Attended?", "Notes"
];
var headerRange = sheet.getRange(1, 1, 1, headers.length);
headerRange.setValues([headers]);
headerRange.setFontWeight("bold");
headerRange.setBackground("#1e2a45");
headerRange.setFontColor("#c7d2fe");
headerRange.setFontSize(10);
headerRange.setHorizontalAlignment("center");
// ββ Column widths βββββββββββββββββββββββββββββββββββ
sheet.setColumnWidth(1, 40); // #
sheet.setColumnWidth(2, 160); // Name
sheet.setColumnWidth(3, 145); // Phone
sheet.setColumnWidth(4, 110); // Source
sheet.setColumnWidth(5, 120); // Date Added
sheet.setColumnWidth(6, 95); // PDF Sent
sheet.setColumnWidth(7, 110); // Bundle Bought
sheet.setColumnWidth(8, 105); // Follow-Up 2
sheet.setColumnWidth(9, 105); // Follow-Up 3
sheet.setColumnWidth(10, 100); // Interested
sheet.setColumnWidth(11, 75); // Paid
sheet.setColumnWidth(12, 95); // Amount
sheet.setColumnWidth(13, 90); // Attended
sheet.setColumnWidth(14, 220); // Notes
// ββ Freeze header row βββββββββββββββββββββββββββββββ
sheet.setFrozenRows(1);
// ββ Dropdown values βββββββββββββββββββββββββββββββββ
var yesNo = ["Yes", "No", "Pending"];
var yesNoInterested = ["Yes", "No", "Maybe"];
var sourceOptions = ["Facebook", "Nextdoor", "Church Referral", "Text/Call", "Referral", "Other"];
var paidOptions = ["Yes - $88", "Yes - $300", "No", "Pending"];
var dataRows = 200; // apply to 200 rows
// Source dropdown (col 4)
var sourceRule = SpreadsheetApp.newDataValidation()
.requireValueInList(sourceOptions, true)
.setAllowInvalid(false).build();
sheet.getRange(2, 4, dataRows).setDataValidation(sourceRule);
// PDF Sent (col 6)
var ynRule = SpreadsheetApp.newDataValidation()
.requireValueInList(yesNo, true)
.setAllowInvalid(false).build();
sheet.getRange(2, 6, dataRows).setDataValidation(ynRule);
// Bundle Bought (col 7)
sheet.getRange(2, 7, dataRows).setDataValidation(ynRule);
// Follow-Up 2 (col 8)
sheet.getRange(2, 8, dataRows).setDataValidation(ynRule);
// Follow-Up 3 (col 9)
sheet.getRange(2, 9, dataRows).setDataValidation(ynRule);
// Interested (col 10)
var intRule = SpreadsheetApp.newDataValidation()
.requireValueInList(yesNoInterested, true)
.setAllowInvalid(false).build();
sheet.getRange(2, 10, dataRows).setDataValidation(intRule);
// Paid (col 11)
var paidRule = SpreadsheetApp.newDataValidation()
.requireValueInList(paidOptions, true)
.setAllowInvalid(false).build();
sheet.getRange(2, 11, dataRows).setDataValidation(paidRule);
// Attended (col 13)
sheet.getRange(2, 13, dataRows).setDataValidation(ynRule);
// ββ Date format column 5 ββββββββββββββββββββββββββββ
sheet.getRange(2, 5, dataRows).setNumberFormat("MM/DD/YYYY");
// ββ Currency format column 12 βββββββββββββββββββββββ
sheet.getRange(2, 12, dataRows).setNumberFormat("$#,##0.00");
// ββ Alternating row colors ββββββββββββββββββββββββββ
for (var r = 2; r <= dataRows + 1; r++) {
var color = (r % 2 === 0) ? "#0f172a" : "#0b1120";
sheet.getRange(r, 1, 1, headers.length).setBackground(color);
}
// ββ Conditional formatting: green for Paid = Yes ββββ
var paidRange = sheet.getRange(2, 11, dataRows);
var greenRule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith("Yes")
.setBackground("#14532d")
.setFontColor("#86efac")
.setRanges([paidRange])
.build();
// Red for No
var redRule = SpreadsheetApp.newConditionalFormatRule()
.whenTextEqualTo("No")
.setBackground("#2d0a0a")
.setFontColor("#fca5a5")
.setRanges([paidRange])
.build();
var rules = sheet.getConditionalFormatRules();
rules.push(greenRule);
rules.push(redRule);
sheet.setConditionalFormatRules(rules);
// ββ Auto row number formula βββββββββββββββββββββββββ
for (var i = 2; i <= 51; i++) {
sheet.getRange(i, 1).setFormula("=IF(B" + i + "<>\"\",ROW()-1,\"\")");
sheet.getRange(i, 1).setHorizontalAlignment("center");
sheet.getRange(i, 1).setFontColor("#6b7280");
}
// ββ Tab color βββββββββββββββββββββββββββββββββββββββ
sheet.setTabColor("#3b82f6");
// ββ Done message ββββββββββββββββββββββββββββββββββββ
SpreadsheetApp.getUi().alert(
"β Lead Tracker is set up!\n\n" +
"Sheet: 'Leads - Basics 101'\n" +
"Dropdowns and formatting are ready.\n\n" +
"Keep it moving! β HiTek Tech"
);
}