DataX Help & Setup Guide

Everything you need to install, activate and get the most out of DataX.

Jump to: Install & activate Export your leads Connect Google Sheets Move to a new computer Support

1. Install & activate

  1. Download DataX from your account dashboard and load it in Chrome.
  2. Open the extension. On the activation screen, enter the email and licence key shown in your account.
  3. Click Activate. You're ready to extract leads.

Lost your key? It's always on your account dashboard.

2. Export your leads

From the Download tab you can export your collected leads to:

3. Connect Google Sheets

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.

  1. Create or open a Google Sheet → Extensions ▸ Apps Script.
  2. Delete any code in the editor, then paste the script below (use the Copy button) and click Save (💾).
    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); }
  3. Deploy ▸ New deployment ▸ gear ⚙️ ▸ Web app. Set:
    • Execute as: Me
    • Who has access: Anyone  (this exact option — not "Anyone with a Google account")
    Click Deploy.
  4. Authorize when prompted. On the "Google hasn't verified this app" screen, click Advanced ▸ Go to project ▸ Allow. It's your own script, so it's safe.
  5. Copy the Web app URL (ends in /exec), paste it into the extension's Sheet URL box, and click Save URL.
  6. Click Send all to Sheet, or tick auto-send before a run. Each search writes to a tab named after your keyword (e.g. dentists - Mumbai).

✅ Test it works

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.

Getting "Sheet rejected the data: unknown error"?
That means the script replied with a sign-in page instead of data. Fix it by re-deploying with Who has access: Anyone (Deploy ▸ Manage deployments ▸ ✏️ ▸ Version: New version ▸ set access to Anyone ▸ Deploy), then paste the fresh /exec URL.

4. Move to a new computer

Your licence runs on one device at a time. To switch computers:

  1. Go to your account dashboardYour devices.
  2. Click Remove next to the old device.
  3. Activate DataX on the new computer.

Need DataX on a second machine at the same time? Buy an additional licence from your dashboard.

5. Support

Questions or stuck? We're happy to help.
💬 WhatsApp / Call: +91 7527007005  ·  ✉️ [email protected]

← DataX · datax.cyberframe.in