Series learn AI from 0: Cách mình build luồng để tự động enrich data khách hàng trên n8n
Mấy tuần này task dồn dập quá nên giờ mình mới lại ngoi lên để share với mọi người một bài toán mà mình vừa xử lý xong nhưng khá là hay ^^ nhất là với ai đang tìm hiểu về automation.
Bạn có thể đọc các post trước của mình trong series learn AI from 0 & tham khảo templates n8n mình đã build.
Chuyện là mình đang làm phần prepare data để chuyển CRM cho công ty. Tuần này mình cần xử lý lại toàn bộ data khách hàng B2B trước khi import sang hệ thống mới.
Vấn đề nằm ở chỗ:
Data B2B hiện tại trên CRM khá “nghèo nàn”, chỉ có tên công ty và vài thông tin lặt vặt. Không có website, không biết ngành, không biết quy mô,… nói chung là không có gì để team Sales/Marketing có thể khai thác sau này.
Để không lộ data, mình có nhờ ChatGPT fake hộ mấy dòng, mục đích là để bạn hình dung được rõ data gốc của mình trông thế nào.
Nhìn vào là thấy ngay: không enrich lại thì sau này build dashboard hay làm nurture là… chịu chết luôn 😅
Nhiệm vụ của mình trước khi import là phải bổ sung thêm thông tin quan trọng cho từng công ty, bao gồm:
LinkedIn profile
Website
Company Size
Industry
Description
Nhưng khổ nỗi số lượng cũng hơi nhiều 😅 Hơn 500 contact khách hàng B2B, mình mà ngồi mò tay từng cái thì đến mùa quýt cũng không xong mất.
Nên là nhân dịp đang học về n8n, mình mới nghĩ thử xem có cách nào để có thể tự động tìm được thông tin.
Vậy là mình dành hai ngày cuối tuần để mò mẫm đủ kiểu: thử scrape, thử API, thử tool này tool kia. Cuối cùng mình đã tìm ra được cách mà có thể giúp mình lấy được tương đối đầy đủ thông tin của công ty, chỉ dựa vào thông tin về tên công ty mà mình có trong danh sách.
Trong bài viết này mình sẽ share lại toàn bộ cách mình làm với bạn ^^
Với bài toán này mình sử dụng 2 workflow trong n8n (tải 2 workflow tại đây):
Workflow 1: Dựa vào tên công ty, tự động tìm LinkedIn của công ty
Ở workflow đầu tiên, mục tiêu của mình rất rõ ràng:
Từ một danh sách chứa chỉ tên công ty, mình muốn tự động tìm ra đúng URL LinkedIn Company Page tương ứng mà không cần phải search Google.
Lý do mình chọn LinkedIn là vì mình cũng thử lấy ra URL website rồi Facebook của công ty rồi, nhưng mà mình thấy không chính xác lắm, khá nhiều link click vào bị lỗi. Có mỗi LinkedIn mình thấy phần lớn kết quả trả về khá ổn.
Ngoài ra ở trang about trên LinkedIn có khá nhiều thông tin mà sau này mình có thể lấy ra được, không cần phải đi search web quá nhiều lần.
Đây là workflow trông khá đơn giản của mình :))) mình sẽ giải thích từng bước bên dưới:
Bước 1: Đọc từng dòng trong Google Sheet
Mình dùng node Get row(s) in sheet để lấy toàn bộ danh sách công ty.
Sau đó thêm node Loop Over Items & Wait để xử lý từng dòng một. Lý do là nếu gửi hàng chục request cùng lúc, API rất dễ rate-limit hoặc trả về kết quả lỗi, nên mình chọn cách chạy tuần tự từng item để tránh lỗi.
Bước 2: Gọi API Tavily để tìm LinkedIn
Sau khi đã lấy tên của từng công ty, mình dùng Tavily để tìm ra LinkedIn URL của công ty.
Giới thiệu qua chút Tavily một AI Search API giúp tự động hóa việc tìm kiếm. Chỉ cần nhập query tìm kiếm, Tavily sẽ trả về các kết quả tìm kiếm.
Ở đây mình sử dụng prompt:
{
“query”: “official LinkedIn page of {{ $(’Get row(s) in sheet’).item.json[’Account name *’] }} company OR school OR university OR organization”,
“search_depth”: “advanced”,
“max_results”: 15
}Hiểu đơn giản thì Tavily sẽ đi tìm:
official LinkedIn page of [tên công ty] company OR school OR university OR organization
trên toàn bộ web, sau đó trả về danh sách kết quả tìm kiếm giống như ở hình bên dưới.
Có thể thấy LinkedIn của công ty mà mình muốn tìm nằm ở kết quả thứ 2, với URL và title rất rõ ràng.
Bước 3: Chọn ra LinkedIn chính xác của doanh nghiệp từ kết quả API Tavily trả về
Việc còn lại chỉ là chọn đúng dòng trong JSON và cập nhật vào Google Sheet thôi. Ở đây mình sử dụng code JavaScript để lọc ra các URL có chứa /company hoặc /school
Đây là pattern URL chuẩn của LinkedIn dành cho tổ chức/doanh nghiệp/trường học. Chỉ cần match đúng 1 dòng → mình lấy URL đó đưa sang bước tiếp theo.
Bước 4: Update kết quả vào Google Sheet
Cuối cùng, mình update lại vào Google Sheet:
match theo tên công ty
ghi thêm LinkedIn URL vào cột tương ứng
Vậy là hoàn tất vòng enrichment đầu tiên: từ một file chỉ có tên công ty, giờ mình đã tự động lấy được URL LinkedIn Page một cách hoàn toàn tự động, không cần mở bất kỳ tab Google nào.
Đây là ví dụ về 1 row trong file Google Sheet sau khi mình đã chạy luồng automation này:
Lưu ý: Có một số công ty sẽ không có LinkedIn, nên kết quả Tavily trả về có thể sẽ ra sai, nên sau bước 1 sẽ cần rà qua 1 lướt các link. Nếu cái nào sai thì nên bỏ đi để không ảnh hưởng đến workflow 2.
Đây cũng là lý do mà mình tách thành 2 workflow chứ không để làm một. Nếu bạn có cách nào tối ưu hơn thì có thể thử suggest cho mình nha ^^
Workflow 2: Workflow 2: Từ LinkedIn URL → Tự động scrape & enrich toàn bộ thông tin công ty
Sau khi Workflow 1 đã tìm ra đúng URL LinkedIn Company Page cho mỗi doanh nghiệp, bước tiếp theo rất đơn giản:
Dùng URL LinkedIn này để scrape toàn bộ thông tin còn thiếu.
Đây là workflow hoàn chỉnh, mình sẽ giải thích từng bước bên dưới:
Bước 1: Lấy danh sách LinkedIn URL từ Google Sheet
Mình dùng node Get row(s) in sheet để lấy toàn bộ danh sách LinkedIn URL mà Workflow 1 vừa tạo.
Sau đó tiếp tục chạy Loop Over Items + Wait để xử lý từng công ty một.
Lý do vẫn như cũ: tránh gửi quá nhiều request cùng lúc, kẻo API lại rate-limit và workflow lỗi cả loạt.
Bước 2: Gọi Apify LinkedIn Company Profile Scraper
Ban đầu mình đã thử tự viết script Python để crawl LinkedIn, nhưng LinkedIn chặn đủ kiểu. Mình ngồi cả buổi tối mò mà vẫn không bypass được.
Cuối cùng chị sếp gợi ý dùng một tool của Apify. Mình thử mò mò thế mà được thật :))) Đúng là những gì mình không làm được kiểu gì cũng có ông nào đó làm được và đang bán rồi :))))
Mình dùng node HTTP Request để gọi API của Apify LinkedIn Company Profile Scraper.
Đây là kết quả sau khi chạy xong. Bạn có thể thấy ở phần output mình đã lấy được các thông tin trên LinkedIn như
company_name
domain
category
number_employees
description
Quá là đỉnh ^^
Bước 3: Update dữ liệu enriched vào Google Sheet
Cuối cùng, mình dùng node Update row in sheet để ghi ngược toàn bộ thông tin mới vào đúng hàng của công ty tương ứng.
Website
LinkedIn
Company size
Industry
Description
Và mình đã có đủ data để sẵn sàng import vào hệ thống CRM mới ^^
Tạm kết
Càng mò n8n, mình mới thật sự cảm nhận rõ sức mạnh của automation và AI trong công việc hằng ngày ^^
Trước đây, nhìn một file data hơn 500 công ty là mình chỉ muốn… đóng laptop lại 😅 vì tưởng tượng cảnh ngồi mở từng website, copy từng dòng thông tin đã thấy mệt. Nhưng khi thử nghĩ theo một cách khác, thử automation chút, tự nhiên mọi thứ trở nên dễ dàng hơn rất nhiều.
Mình ngẫm ra, khi bạn chia nhỏ thành từng bước, biết rõ mỗi bước cần Input gì – Black Box xử lý ra sao – Output cần đạt mức nào → thì gần như bất kỳ task thủ công nào cũng có thể tự động hóa được.
Nếu thích bài này, hãy share cho mọi người cùng đọc với nhé ^^
Bạn có thể đọc các post trước của mình trong series learn AI from 0 & tham khảo templates n8n khác mình đã build.
Vẫn là 1s quảng cáo, nếu bạn hứng thú với một chương trình đào tạo về AI bài bản có thể thử tham khảo AI Professional Program mà công ty mình đang cung cấp nha ^^
Chúc bạn có một buổi tối cuối tuần vui vẻ ^^
















Hi Zoe, mình rất thích bài viết này của bạn. Bạn có thể cho mình biết thêm về impact/tác động của file này sau khi import vào CRM được ko, VD đội MKT & Sales đã tận dụng nguồn dữ liệu này tốt hơn như thế nào á? Rất mong được nghe bạn chia sẻ thêm