Hey everyone!! ![]()
I built an n8n workflow that works as a pay-as-you-go alternative to pricey monthly enrichment tools. It takes a raw list of company names in Google Sheets, checks if they match your ICP and have active buying signals, and only then drafts an email in Gmail.
The template just got published in the library:
What it does
-
Queue and batching (every 30 mins):
Reads a Google Sheet, picks up to 10 rows per run, and marks them asProcessingright away so overlapping runs do not pick the same rows. Fresh leads always go first, and rows enriched in the last 30 days are skipped. -
Domain resolution, tech stack, and MX check:
Resolves raw company names (Company+Country) to official domains, checks MX/SPF/DMARC records, and pulls the tech stack and public contact details using Company Domain, Tech Stack & MX/DNS Enricher.
If a domain has no MX record, it routes it to aNo MX (LinkedIn / Call Only)status instead of wasting enrichment credits on it. -
Parallel buying signals (hiring + paid ads):
For verified domains with working MX, two HTTP nodes run in parallel:
- B2B Hiring Signals & Multi-ATS Job Scraper (
company_signalsmode) checks Greenhouse, Ashby, Lever, Workday, Workable, SmartRecruiters, and Recruitee for open roles and 30-day hiring velocity. - Google Ads Transparency Scraper checks if the company is actively running Search, Display, or YouTube ads (and how many creatives have been running for 30+ days).
-
Separate Fit and Intent scores (0 to 100):
Instead of lumping everything into one number, a Code node calculatesFit_Score(0-50, based on target country, tech stack match, and GTM pages) andIntent_Score(0-50, based on recent hires and active ad spend), plus a plain-text breakdown of why each lead got its score. -
Guarded Gmail drafts:
Leads scoring 55+ get a short 3-sentence draft viagpt-4o-minithat references the actual signals found (and switches language if the company is in DE/FR/NL/ES/IT). It filters outprivacy@,legal@,support@, andnoreply@addresses, creates the draft in Gmail first, and then updates the row status in Google Sheets.
Happy to answer any questions or hear how you handle signal scoring in your own outbound workflows