Hướng dẫn

Xử Lý 1000+ Lead Tự Động Với AI Trong Google Sheets [Hướng Dẫn Thực Chiến 2026]

Tuân HoangTuân Hoang
9 tháng 6, 2026
11 phút đọc
Ảnh minh họa bài viết: Xử Lý 1000+ Lead Tự Động Với AI Trong Google Sheets [Hướng Dẫn Thực Chiến 2026]

Vấn Đề Thực Tế: 1000 Lead Mà Xử Lý Thủ Công Thì Mất Bao Lâu?

Bạn chạy chiến dịch Facebook Ads và thu về 800 lead trong một tuần. Mỗi lead có tên, công ty, số điện thoại, và một đoạn ghi chú nhu cầu dài dòng. Công việc cần làm: phân loại ngành, chấm điểm tiềm năng, tóm tắt nhu cầu, và làm sạch dữ liệu trước khi đưa vào CRM.

Nếu làm thủ công, mỗi lead mất khoảng 3-5 phút. Với 800 lead, bạn cần 40-70 giờ làm việc. Đó là hơn một tuần làm việc chỉ để xử lý một đợt lead. Và khi đợt tiếp theo đến, câu chuyện lặp lại.

Giải pháp: dùng AI ngay trong Google Sheets để xử lý hàng loạt. Bài viết này hướng dẫn 3 phương pháp batch AI, từ đơn giản nhất đến mạnh nhất, kèm code hoàn chỉnh có thể dùng ngay.

So Sánh 3 Phương Pháp Batch AI

Trước khi đi vào chi tiết, hãy xem bức tranh tổng quan để chọn phương pháp phù hợp với bạn:

Tiêu chí =AI() + ARRAYFORMULA Apps Script + Gemini API Fill with Gemini
Độ khó Dễ (không code) Trung bình (JavaScript) Rất dễ (click chuột)
Giới hạn số lead 350 ô/lần Không giới hạn ~500 hàng/lần
Tự động lặp lịch Không Có (trigger hàng ngày) Không
Tùy chỉnh logic Trung bình Cao nhất Thấp
Chi phí Miễn phí (có Workspace plan) Miễn phí (Gemini free tier) Miễn phí (có Workspace plan)
Phù hợp với <500 lead, xử lý 1 lần >500 lead, chạy định kỳ Logic đơn giản, không code

Phương Pháp 1: =AI() + ARRAYFORMULA (Đơn Giản Nhất)

Đây là cách nhanh nhất để bắt đầu nếu bạn đã có Google Workspace Business Standard trở lên.

Cách áp dụng cho toàn cột lead

Giả sử bạn có dữ liệu lead từ cột A đến D (Tên, Công ty, Nhu cầu, Budget). Để phân loại tất cả lead vào cột E:

=AI("Phân loại lead này là Hot, Warm, hoặc Cold dựa trên nhu cầu và budget. Chỉ trả về 1 từ.", A2:D2)

Sau đó kéo công thức xuống toàn bộ danh sách. Hoặc dùng ARRAYFORMULA để áp dụng toàn bộ cùng lúc:

=ARRAYFORMULA(IF(A2:A<>"", AI("Phân loại lead là Hot/Warm/Cold dựa trên: "&A2:A&" - "&B2:B&" - "&C2:C&" - "&D2:D&". Chỉ trả về 1 từ."), ""))

Lưu ý quan trọng

  • Giới hạn 350 ô/lần: Google chỉ xử lý tối đa 350 ô trong một lần tính. Với 1000 lead, chia thành 3 batch hoặc chuyển sang phương pháp 2.
  • Non-deterministic: AI có thể cho kết quả khác nhau mỗi lần tính lại. Sau khi có kết quả ưng ý, hãy copy → Paste special → Values only để đóng băng kết quả.
  • Tắt auto-recalculate: Vào File > Settings > Calculation, chuyển sang "On change" để tránh AI tính lại liên tục khi bạn chỉnh dữ liệu khác.

Phương Pháp 2: Apps Script + Gemini API (Mạnh Nhất)

Đây là phương pháp dành cho dataset lớn (500+ lead) hoặc khi bạn cần chạy tự động hàng ngày. Bạn sẽ gọi trực tiếp Gemini API qua Apps Script, không bị giới hạn bởi quota của hàm =AI().

Bước 1: Lấy Gemini API Key miễn phí

  1. Truy cập aistudio.google.com và đăng nhập bằng tài khoản Google.
  2. Nhấp "Get API Key" ở thanh bên trái.
  3. Chọn "Create API key" → chọn project (hoặc tạo mới).
  4. Copy API key vừa tạo (dạng: AIza...).

Free tier của Gemini API: 15 requests/phút, 1 triệu token/ngày — đủ để xử lý hàng nghìn lead mỗi ngày miễn phí.

Bước 2: Lưu API Key vào Apps Script Properties

Không bao giờ hardcode API key trong code. Thay vào đó, dùng Script Properties:

  1. Mở Google Sheets → Extensions → Apps Script.
  2. Vào Project Settings (biểu tượng bánh răng) → Script Properties.
  3. Thêm property: GEMINI_API_KEY = API key của bạn.

Bước 3: Code phân loại lead hàng loạt

Dán code sau vào Apps Script Editor:

function phanLoaiLeadHangLoat() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const API_KEY = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${API_KEY}`;

  for (let i = 1; i < data.length; i++) {
    // Bỏ qua hàng đã xử lý (cột F không rỗng)
    if (data[i][5]) continue;

    const leadInfo = `Tên: ${data[i][0]}, Công ty: ${data[i][1]}, Nhu cầu: ${data[i][2]}, Budget: ${data[i][3]}`;
    const prompt = `Phân loại lead sau vào 1 trong 3 nhóm: Hot/Warm/Cold. Chỉ trả về 1 từ. Lead: ${leadInfo}`;

    const payload = {
      contents: [{ parts: [{ text: prompt }] }]
    };

    try {
      const response = UrlFetchApp.fetch(url, {
        method: 'post',
        contentType: 'application/json',
        payload: JSON.stringify(payload)
      });
      const result = JSON.parse(response.getContentText());
      const phanLoai = result.candidates[0].content.parts[0].text.trim();
      sheet.getRange(i + 1, 6).setValue(phanLoai);
      Utilities.sleep(500); // tránh rate limit
    } catch(e) {
      sheet.getRange(i + 1, 6).setValue('Error: ' + e.message);
    }
  }

  SpreadsheetApp.getUi().alert('Hoàn tất phân loại ' + (data.length - 1) + ' lead!');
}

Giải thích từng phần code

  • if (data[i][5]) continue; — Kiểm tra cột F (index 5). Nếu đã có giá trị, bỏ qua hàng đó. Điều này giúp resume được nếu script bị dừng giữa chừng.
  • gemini-1.5-flash — Model nhanh và rẻ nhất, đủ tốt cho tác vụ phân loại. Không cần dùng Gemini Pro hay thinking models.
  • Utilities.sleep(500) — Ngủ 500ms giữa mỗi call để tránh vượt rate limit 15 req/phút.
  • UrlFetchApp.fetch — Gọi HTTP request từ Google Apps Script đến Gemini API, không cần addon hay thư viện bên ngoài.

Tối ưu: Xử lý batch 50 lead mỗi lần

Thay vì gọi API cho từng lead riêng lẻ, gom 50 lead vào một prompt để giảm số API calls từ 1000 xuống còn 20:

function phanLoaiBatch50() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const API_KEY = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${API_KEY}`;

  const BATCH_SIZE = 50;

  for (let start = 1; start < data.length; start += BATCH_SIZE) {
    const end = Math.min(start + BATCH_SIZE, data.length);
    const batch = [];
    const rowsToUpdate = [];

    for (let i = start; i < end; i++) {
      if (data[i][5]) continue; // đã xử lý
      batch.push(`${batch.length + 1}. Tên: ${data[i][0]}, Công ty: ${data[i][1]}, Nhu cầu: ${data[i][2]}, Budget: ${data[i][3]}`);
      rowsToUpdate.push(i);
    }

    if (batch.length === 0) continue;

    const prompt = `Phân loại ${batch.length} lead sau. Trả về JSON array với giá trị Hot/Warm/Cold cho từng lead theo đúng thứ tự. Ví dụ: ["Hot","Warm","Cold"]

${batch.join('
')}`;

    const payload = {
      contents: [{ parts: [{ text: prompt }] }],
      generationConfig: { responseMimeType: 'application/json' }
    };

    try {
      const response = UrlFetchApp.fetch(url, {
        method: 'post',
        contentType: 'application/json',
        payload: JSON.stringify(payload)
      });
      const result = JSON.parse(response.getContentText());
      const classifications = JSON.parse(result.candidates[0].content.parts[0].text);

      for (let j = 0; j < rowsToUpdate.length; j++) {
        sheet.getRange(rowsToUpdate[j] + 1, 6).setValue(classifications[j] || 'Unknown');
      }

      Utilities.sleep(2000); // 2 giây giữa mỗi batch
    } catch(e) {
      console.error('Batch error:', e.message);
    }
  }
}

Tự động hóa: Chạy định kỳ mỗi ngày

Để script tự chạy lúc 7h sáng mỗi ngày, thêm trigger trong Apps Script:

function taoTriggerHangNgay() {
  // Xóa trigger cũ nếu có
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(t => ScriptApp.deleteTrigger(t));

  // Tạo trigger mới: chạy lúc 7-8h sáng mỗi ngày
  ScriptApp.newTrigger('phanLoaiBatch50')
    .timeBased()
    .everyDays(1)
    .atHour(7)
    .create();

  SpreadsheetApp.getUi().alert('Đã tạo trigger chạy lúc 7h sáng mỗi ngày!');
}

Phương Pháp 3: Fill with Gemini (Nhanh, Không Cần Code)

Fill with Gemini là tính năng mới ra mắt tháng 4/2026, cho phép AI học từ ví dụ của bạn và điền tự động xuống toàn bộ danh sách.

Cách sử dụng

  1. Nhập 3-5 hàng ví dụ mẫu vào cột kết quả (ví dụ: cột E "Phân loại").
  2. Chọn toàn bộ cột E cần điền.
  3. Vào menu Insert → Fill with Gemini (hoặc click vào icon ngôi sao trong thanh công cụ).
  4. Gemini tự học từ 3-5 ví dụ và điền phần còn lại.

Ví dụ mẫu để nhập vào 3 hàng đầu:

  • Hàng 2: Budget 500 triệu, cần mua trong 1 tháng → Hot
  • Hàng 3: Cá nhân, budget 20 triệu, đang so sánh giá → Cold
  • Hàng 4: Doanh nghiệp 50 người, quan tâm nhưng chưa có ngân sách cụ thể → Warm

Giới hạn của Fill with Gemini:

  • Chỉ hỗ trợ dữ liệu dạng text, chưa hỗ trợ số và ngày tháng.
  • Logic đơn giản — không thể customize prompt chi tiết như 2 phương pháp trên.
  • Phù hợp cho phân loại, nhãn đơn giản — không phù hợp cho tóm tắt hay extract thông tin phức tạp.

7 Tác Vụ AI Thực Tế Với 1000 Lead

Dưới đây là các tác vụ phổ biến nhất khi xử lý lead hàng loạt, kèm prompt mẫu cho từng tác vụ:

1. Phân Loại Ngành Kinh Doanh

Từ tên công ty, AI tự suy ra ngành:

const prompt = `Dựa vào tên công ty "${tenCongTy}", phân loại vào 1 trong các ngành: Bán lẻ, F&B, Công nghệ, Bất động sản, Giáo dục, Tài chính, Sản xuất, Dịch vụ. Chỉ trả về tên ngành.`;

2. Chấm Điểm Tiềm Năng 1-10

Chấm điểm dựa trên nhiều yếu tố kết hợp:

const prompt = `Chấm điểm tiềm năng mua hàng từ 1-10 cho lead sau. 10 = rất cao. Chỉ trả về số nguyên.
Budget: ${budget}
Timeline: ${timeline}
Nhu cầu: ${nhuCau}
Quy mô công ty: ${quiMo}`;

3. Tóm Tắt Nhu Cầu Thành 1 Câu

Biến ghi chú dài dòng thành câu tóm tắt ngắn gọn để sales đọc nhanh:

const prompt = `Tóm tắt nhu cầu của khách hàng này thành đúng 1 câu, tối đa 20 từ, dành cho sales đọc nhanh:
${ghiChu}`;

4. Chuẩn Hóa Địa Chỉ

Biến địa chỉ viết tắt thành địa chỉ đầy đủ chuẩn:

const prompt = `Chuẩn hóa địa chỉ sau thành định dạng đầy đủ (số nhà, đường, phường/xã, quận/huyện, tỉnh/thành). Chỉ trả về địa chỉ đã chuẩn hóa:
${diaChi}`;

5. Detect Ngôn Ngữ Khách Hàng

Phân loại ngôn ngữ để route đúng team hỗ trợ:

const prompt = `Detect ngôn ngữ chính trong email sau. Trả về: Vietnamese, English, Chinese, Japanese, hoặc Other.
${noiDungEmail}`;

6. Làm Sạch và Chuẩn Hóa Tên

Sửa "nguyen van a", "NGUYỄN VĂN A", "NgUyEn VaN a" về chuẩn "Nguyễn Văn A":

const prompt = `Chuẩn hóa tên người Việt Nam sau về định dạng Họ Tên chuẩn (viết hoa chữ cái đầu mỗi từ, đúng dấu tiếng Việt). Chỉ trả về tên đã chuẩn hóa:
${ten}`;

7. Extract Thông Tin Từ Ghi Chú Tự Do

Lấy số điện thoại, email, tên công ty ẩn trong đoạn text ghi chú:

const prompt = `Từ đoạn ghi chú sau, trích xuất thông tin và trả về JSON:
{"sdt": "...", "email": "...", "cong_ty": "...", "nhu_cau_chinh": "..."}
Nếu không tìm thấy thông tin nào, để giá trị là null.
Ghi chú: ${ghiChu}`;

Tối Ưu Tốc Độ Xử Lý

Với 1000 lead, tốc độ xử lý là yếu tố quan trọng. Dưới đây là các kỹ thuật tối ưu:

Kỹ thuật 1: Batch prompt thay vì từng lead

Gom 50 lead vào một lần gọi API thay vì 50 lần riêng lẻ. Kết quả: giảm thời gian từ ~8 phút xuống còn ~1 phút cho 1000 lead.

Kỹ thuật 2: Cache kết quả đã xử lý

Luôn kiểm tra cột kết quả trước khi gọi API. Dùng dòng if (data[i][5]) continue; để bỏ qua lead đã có kết quả.

Kỹ thuật 3: Dùng gemini-1.5-flash thay vì các model mạnh hơn

Với tác vụ phân loại, chấm điểm, gemini-1.5-flash cho kết quả chính xác 90%+ và nhanh gấp 3-5 lần so với gemini-1.5-pro. Chỉ dùng model mạnh hơn khi cần suy luận phức tạp.

Kỹ thuật 4: Giải phóng rate limit với sleep thông minh

// Thay vì sleep cố định 500ms
Utilities.sleep(500);

// Dùng sleep động: tăng lên nếu gặp lỗi rate limit
function callWithRetry(url, payload, maxRetries = 3) {
  let delay = 1000;
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const response = UrlFetchApp.fetch(url, payload);
      if (response.getResponseCode() === 200) return response;
    } catch(e) {
      if (attempt < maxRetries - 1) {
        Utilities.sleep(delay);
        delay *= 2; // exponential backoff
      }
    }
  }
  return null;
}

Lưu Ý Về Chi Phí

Gemini API free tier đủ cho hầu hết nhu cầu cá nhân và SMB:

Tier Giới hạn Chi phí Phù hợp với
Free (Gemini 1.5 Flash) 15 req/phút, 1M token/ngày $0 <5,000 lead/ngày
Pay-as-you-go (Flash) Không giới hạn $0.075/1M input token 5,000-100,000 lead/ngày
Pay-as-you-go (Pro) Không giới hạn $1.25/1M input token Cần độ chính xác cao nhất

Ước tính chi phí thực tế: Xử lý 10,000 lead với prompt ~100 token/lead = 1 triệu token input = khoảng $0.075 (chưa đến 2,000 VNĐ). Rẻ hơn rất nhiều so với nhân công thủ công.

Checklist Trước Khi Chạy Batch AI

  • Sao lưu sheet gốc trước khi chạy script (File → Make a copy).
  • Test với 10 hàng đầu trước khi chạy toàn bộ.
  • Kiểm tra API key đã được lưu trong Script Properties chưa.
  • Xem xét có cần chạy nhiều tác vụ AI song song không — nếu có, tạo nhiều cột riêng biệt.
  • Sau khi hoàn tất, copy-paste values only để đóng băng kết quả.

Kết Luận

Xử lý 1000+ lead bằng AI trong Google Sheets không còn là kỹ năng nâng cao — đây là công cụ thực tế mà bất kỳ đội sales/marketing nào cũng có thể triển khai trong vài giờ.

Nếu bạn mới bắt đầu: dùng phương pháp 1 (=AI() + ARRAYFORMULA) với dataset nhỏ hơn 300 lead. Khi quen, chuyển sang phương pháp 2 (Apps Script + Gemini API) để xử lý không giới hạn và tự động hóa hoàn toàn.

7 tác vụ AI trong bài — phân loại ngành, chấm điểm, tóm tắt, chuẩn hóa địa chỉ, detect ngôn ngữ, làm sạch tên, extract thông tin — có thể áp dụng ngay với dữ liệu thực của bạn. Bắt đầu từ tác vụ đơn giản nhất: làm sạch tên hoặc phân loại ngành, rồi mở rộng dần.

Nguồn tham khảo: Google Apps Script — UrlFetchApp | Gemini API Documentation | Google AI Studio

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận