Loading CRM dataβ¦
Sales Task Manager
Loading CRM dataβ¦
Match your file's columns to CRM fields
First time? Download the template first!
Click "Download Template" above β fill your data in that file β upload it here. All columns will auto-match perfectly.
Import, user management & sync
First time? Download the template first!
Click Download Template β fill your data β upload here. All columns auto-match.
Export Data
β Add New User
Go to sheets.google.com β create a new blank sheet β name it CRM Data (or anything you like).
In your Sheet β Extensions β Apps Script β delete all existing code β paste this:
const SHEET = 'CRM_Data';
function doGet(e) {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sh = ss.getSheetByName(SHEET);
if (!sh || sh.getLastRow() <= 1) return out({crm:{}});
const vals = sh.getDataRange().getValues();
const heads = vals[0];
const crm = {};
for (let i = 1; i < vals.length; i++) {
const row = {};
heads.forEach((h,j) => row[h] = vals[i][j]);
const idx = String(row.idx);
try { row.requirementType = JSON.parse(row.requirementType||'[]'); } catch(e){ row.requirementType=[]; }
delete row.idx; delete row.updatedAt;
crm[idx] = row;
}
return out({crm, ts: new Date().toISOString()});
} catch(e) { return out({error: e.message}); }
}
function doPost(e) {
try {
const crm = JSON.parse(e.postData.contents).crm || {};
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sh = ss.getSheetByName(SHEET);
if (!sh) sh = ss.insertSheet(SHEET);
const heads = ['idx','companyName','notes','category','callStatus','callAttempts',
'interestLevel','requirementType','lastContactDate','nextFollowUpDate',
'nextFollowUpTime','followUpStatus','dealProbability','updatedAt'];
const rows = [heads];
for (const idx in crm) {
const c = crm[idx];
rows.push([idx, c.companyName||'', c.notes||'', c.category||'',
c.callStatus||'', c.callAttempts||0, c.interestLevel||0,
JSON.stringify(c.requirementType||[]), c.lastContactDate||'',
c.nextFollowUpDate||'', c.nextFollowUpTime||'',
c.followUpStatus||'', c.dealProbability||0, new Date().toISOString()]);
}
sh.clearContents();
sh.getRange(1,1,rows.length,heads.length).setValues(rows);
return out({status:'ok', rows: rows.length-1});
} catch(e) { return out({error: e.message}); }
}
function out(d) {
return ContentService.createTextOutput(JSON.stringify(d))
.setMimeType(ContentService.MimeType.JSON);
}
Then click Save (Ctrl+S).
Click Deploy β New deployment
Type: Web app
Execute as: Me
Who has access: Anyone
Click Deploy β copy the Web app URL
βοΈ Sync Options
Excel file auto-downloaded once daily on first save. Contains all CRM data + call logs. Use "Download Excel" anytime for manual backup.
Excel file auto-downloaded once daily on first save. Contains all CRM data + call logs.