The easiest way to find relevant leads would be to find those who are dissatisfied with your competitors. However, the question is, how can this be done?
Here's a step-by-step guide on how you can build your own automation on n8n which uses Generative AI to find leads who are dissatisfied with your competitors:
Step 1 - Trigger & Input
- Node: Schedule Trigger (or Manual Trigger).
- Input: competitor business name or Google Place ID (single or batch).
------------------------------
Step 2 - Fetch Google Maps Reviews
- Node: HTTP Request to Google Places Details (or provider API).
- Pull the latest reviews (author_name, review_text, rating, time).
- Keep review metadata: review_id, place_id, reviewer name, review text, rating, review_date, review_url
------------------------------
Step 3 - Filter reviews that indicate dissatisfaction (Gemini)
- Node: HTTP Request → Google Gemini.
- Prompt (concise): classify whether the review indicates the reviewer is dissatisfied and potentially open to an alternative. Ask Gemini to return JSON: {dissatisfied: true/false, confidence: 0-100, reason}.
- Filter Node: keep only reviews with dissatisfied=true and confidence >= 70.
------------------------------
Step 4 - Normalize reviewer names
- Node: Function / Set.
- Extract first_name, last_name from author_name; store original author_name for logging and matching.
------------------------------
Step 5 - Search LinkedIn for the reviewer name
- Node: HTTP Request to SerpApi LinkedIn People Search OR use LinkedIn People API / Apollo / ZoomInfo search.
- Query: name + location.
- Output: list of candidate LinkedIn profile URLs and snippet info (headline, current_company, location).
------------------------------
Step 6 - Match prospect profiles to review (Gemini)
- Node: HTTP Request → Gemini per prospect (or batch).
- Prompt (concise): given the review text, competitor business, and a prospect LinkedIn profile snippet (headline, current company, bio), decide match quality and output JSON: {match: true/false, score:0-100, why}. Ask Gemini to prefer prospects whose company/role or review content contextually aligns with the review (e.g., the reviewer references being a customer, an ex-employee, local resident, or having the role that would use/buy that product).
- Keep only candidates with match=true and score >= 75.
------------------------------
Step 7 - Remove duplicates & shortlist
- Node: Set + If.• If multiple high-scoring profiles for same name, keep the highest score; if ties, mark for manual review.
- Output per shortlisted person: reviewer_name, review_text, review_url, rating, profile_name, profile_url, match_score, match_reason.
------------------------------
Step 8 - Create hyper-personalized message (Gemini)
- Node: HTTP Request → Google Gemini.
- Prompt (concise): you are a helpful sales rep. Given reviewer name, company, the competitor they reviewed, the original review text, reviewer role, and your offering (one-line description), produce a short personalized message recommending your business as an alternative and suggesting a quick conversation at a time/format they prefer. Output JSON: {subject, body, suggested_meeting_note}. Keep tone empathetic, acknowledge the bad experience, be value-first, and include no promises you can’t make.
- Save the Gemini output and all metadata to Google Sheets: reviewer_name, review_text, review_url, rating, profile_name, profile_url, match_score, message_subject, message_body, discovered_email (if any), date_found.
------------------------------
Step 9 - Copy the messages from the Google Sheet and send to the prospects manually on LinkedIn.
Please share your feedback and questions in the comments.
We'd be happy to help if you want to customize this workflow and use this for your business.