Everything you need to install, activate and get the most out of DataX.
Lost your key? It's always on your account dashboard.
From the Download tab you can export your collected leads to:
.xls file.This is a one-time setup (~2 minutes). DataX sends your leads to your own Google Sheet via a small Apps Script — your data never passes through us.
function doPost(e) {
try {
var data = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var tabName = (data.tab && String(data.tab).trim()) || 'Leads';
var sheet = ss.getSheetByName(tabName) || ss.insertSheet(tabName);
var rows = data.rows || [];
var dedup = data.dedup !== false;
var DATECOL = 'Imported On';
var incoming = (data.columns && data.columns.length) ? data.columns.slice() : [];
for (var ri = 0; ri < rows.length; ri++) { for (var key in rows[ri]) if (incoming.indexOf(key) === -1) incoming.push(key); }
var header = sheet.getLastColumn() ? sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0] : [];
if (!header.length) {
header = incoming.concat([DATECOL]);
sheet.getRange(1, 1, 1, header.length).setValues([header]);
} else {
var changed = false;
if (header.indexOf(DATECOL) === -1) { header.push(DATECOL); changed = true; }
for (var ci = 0; ci < incoming.length; ci++) { if (incoming[ci] && header.indexOf(incoming[ci]) === -1) { header.push(incoming[ci]); changed = true; } }
if (changed) sheet.getRange(1, 1, 1, header.length).setValues([header]);
}
var seen = {};
if (dedup && sheet.getLastRow() > 1) {
var existing = sheet.getRange(2, 1, sheet.getLastRow() - 1, header.length).getValues();
for (var i = 0; i < existing.length; i++) {
var o = {}; for (var j = 0; j < header.length; j++) o[header[j]] = existing[i][j];
var ek = keyOf(o); if (ek) seen[ek] = true;
}
}
var now = new Date(), toAppend = [];
for (var r = 0; r < rows.length; r++) {
var row = rows[r];
if (dedup) { var k = keyOf(row); if (k) { if (seen[k]) continue; seen[k] = true; } }
var line = header.map(function (h) { return h === DATECOL ? now : (row[h] == null ? '' : String(row[h])); });
toAppend.push(line);
}
if (toAppend.length) sheet.getRange(sheet.getLastRow() + 1, 1, toAppend.length, header.length).setValues(toAppend);
return out({ ok: true, added: toAppend.length, skipped: rows.length - toAppend.length, total: Math.max(0, sheet.getLastRow() - 1), url: ss.getUrl(), name: ss.getName() });
} catch (err) { return out({ ok: false, error: String(err) }); }
}
function keyOf(r) {
var phone = String(r.phone || r.Phone || '').replace(/\D/g, '');
if (phone.length >= 7) return 'p:' + phone.slice(-10);
var site = String(r.website || r.Website || '').toLowerCase().replace(/^https?:\/\/(www\.)?/, '').replace(/\/+$/, '');
if (site) return 'w:' + site;
var name = String(r.name || r.Name || '').toLowerCase().replace(/\s+/g, ' ').trim();
return name ? 'n:' + name : '';
}
function doGet() { var ss = SpreadsheetApp.getActiveSpreadsheet(); return out({ ok: true, ping: true, url: ss.getUrl(), name: ss.getName() }); }
function out(o) { return ContentService.createTextOutput(JSON.stringify(o)).setMimeType(ContentService.MimeType.JSON); }
/exec), paste it into the extension's Sheet URL box, and click Save URL.dentists - Mumbai).Open your /exec URL in a new browser tab. You should see:
{"ok":true,"ping":true}
If you see that JSON, it's live. If you see a Google sign-in / permission page instead, your access isn't set to "Anyone" — redo the deployment step.
/exec URL.
Your licence runs on one device at a time. To switch computers:
Need DataX on a second machine at the same time? Buy an additional licence from your dashboard.
← DataX · datax.cyberframe.in