🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Apollo + Google Sheets: verified leads, ready to use

Lisa Granqvist Partner Workflow Automation Expert

Your lead sheet starts out clean. Then reality hits. Domains are wrong, companies rebrand, contacts bounce, and someone on the team is stuck playing “detective” across Apollo, LinkedIn, and inbox replies.

This Apollo lead enrichment flow hits growth marketers first, but sales ops and scrappy founders feel it too. You get a Google Sheet that stays current, plus a human approval moment in Slack so bad domains don’t poison your outreach.

Below, you’ll see how the workflow turns a simple “company list” into verified contacts your sales team can actually use, without turning lead gen into a full-time admin job.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Apollo + Google Sheets: verified leads, ready to use

The Problem: Your lead list looks fine until you use it

Company-based prospecting falls apart in small, annoying ways. Someone pastes a domain into a spreadsheet, Apollo returns a “close enough” match, and now you’re enriching the wrong organization. Then you pull decision-makers, but job titles don’t map neatly to departments, so routing gets messy and messaging drifts. And even when you do find good contacts, they end up scattered across tabs, exports, and Slack threads. It’s not hard work. It’s the kind of work that never ends.

The friction compounds. Here’s where it breaks down most often.

  • Domain mistakes slip through, and one bad row can spawn dozens of bad contacts.
  • Manual enrichment turns into a weekly ritual of copying fields between Apollo and Google Sheets.
  • Contacts go stale quickly, so reps lose trust and stop using the list.
  • No simple verification step exists, so the team debates data quality after outreach fails.

The Solution: Apollo + Google Sheets enrichment with Slack verification

This workflow turns Google Sheets into your lead intake and your source of truth. When a company row changes (or gets added), n8n checks if the domain is present and usable. If it needs a lookup, it calls Apollo to find the right company site and pushes that back into the sheet. Then a Slack message asks for a quick approval so a human can catch the obvious “wrong company” matches before they multiply. Once approved, the workflow enriches the organization, summarizes what the business does using an OpenAI chat model, and searches Apollo for decision-makers. Those contacts are written to your Contacts tab, enriched in batches, and only the verified ones show up in your Contacts (Verified) tab. A weekly Slack summary keeps everyone aligned on what was added and confirmed.

The workflow starts in Google Sheets, then Apollo and AI do the heavy lifting, and Slack acts like a quality gate. Your output is simple: a clean list of verified contacts, plus an always-updated company record the whole team can rely on.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you add 40 companies a week to your Google Sheet. Manually, it’s maybe 10 minutes per company to confirm the right domain, enrich the org in Apollo, find 2–3 decision-makers, then copy details back, which is about 6–7 hours weekly. With this workflow, adding the row is the “work,” and Slack approval takes about 1 minute per company, so you’re closer to 40 minutes of review plus background processing. The list still needs judgment. It no longer needs busywork.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store companies, contacts, and verified leads.
  • Slack to approve domains and receive weekly summaries.
  • Apollo API key (get it from your Apollo account settings/API).
  • OpenAI API key (get it from the OpenAI dashboard).

Skill level: Intermediate. You’ll connect accounts, paste API keys, and map the workflow to your sheet tabs and Slack channel.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A company row changes in Google Sheets. The workflow listens for edits in your Companies tab (an Apps Script sets Status to Pending when a domain changes), so it reacts the moment new data appears.

Domain and company details are checked. If the domain is missing, it uses Apollo company lookup to find the best match and writes the website back into the sheet. If the domain exists, it moves that row forward.

Slack acts as a quick quality gate. A message is posted for website approval, so someone can confirm “yes, that’s the right company” before enrichment and contact discovery runs.

Decision-makers are found and enriched. Apollo organization enrichment fills company details, AI summarizes the business, and a people search pulls decision-makers. Contacts are upserted into Google Sheets, enriched in smaller batches, then written into “Contacts (Verified)” for sales-ready use.

You can easily modify the approval rules to auto-approve trusted domains or route certain industries to a specific Slack channel based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Spreadsheet Row Trigger

This workflow starts when a new company row appears, and also runs a weekly summary schedule.

  1. Open Spreadsheet Row Trigger and select the Document as [YOUR_ID] and Sheet as Companies (gid=0).
  2. Set the polling schedule in Spreadsheet Row Trigger to run every X minutes (as configured in Poll Times).
  3. Open Weekly Report Scheduler and confirm it runs weekly with Interval set to weeks and Trigger At Day set to 5.

Credential Required: Connect your Google Sheets credentials in Spreadsheet Row Trigger and all Google Sheets nodes (5 total).

Step 2: Connect Google Sheets

Several nodes read and write to your Companies and Contacts sheets; connect credentials and confirm sheet mappings.

  1. In Write Company Website, set Operation to appendOrUpdate and confirm the mapping includes Domain as {{ $json.organizations[0].primary_domain }} and Website as {{ $json.organizations[0].website_url }}.
  2. In Update Company Details, keep Status mapped to Processed and confirm fields like GPT Company Summary use {{ $json.message.content }}.
  3. In Upsert Contact Records, confirm LinkedIn Profile URL is mapped to {{ $('Split Decision Makers').item.json.linkedin_url }} and GPT Department Classification to {{ $json.message.content }}.
  4. In Update Contact Details, set Email Verified to {{ $json.email_status === 'verified' ? 'Yes' : 'No' }}.
  5. In Fetch Verified Leads, set the filter to Email Verified = Yes on the Contacts (Verified) sheet.

Credential Required: Connect your Google Sheets credentials in Write Company Website, Update Company Details, Upsert Contact Records, Update Contact Details, and Fetch Verified Leads.

Step 3: Set Up Filtering and Domain Routing

This stage filters out processed companies and decides whether to look up missing domains.

  1. In Filter Pending Companies, keep the condition Status notEquals Processed using {{ $json.Status }}.
  2. In Check Domain Provided, ensure the condition checks {{ $json.Domain }} is notEmpty.
  3. Confirm the routing: Spreadsheet Row TriggerFilter Pending CompaniesCheck Domain Provided.
  4. Verify that Check Domain Provided sends domain-ready rows to Merge Domain-Ready Rows, and missing domains to Apollo Company Lookup.

⚠️ Common Pitfall: If the Status column is missing or inconsistent, Filter Pending Companies will skip rows unintentionally.

Step 4: Configure Company Enrichment and Parallel Approval

Company lookup and enrichment happens before AI summarization and sheet updates. Approval and enrichment branches run in parallel after writing the website.

  1. In Apollo Company Lookup, set URL to https://api.apollo.io/api/v1/mixed_companies/search and include the query parameter q_organization_name as {{ $json['Company Name'] }}.
  2. In Apollo Org Enrichment Call, set URL to https://api.apollo.io/api/v1/organizations/enrich and set the domain parameter to {{ $json.Website.extractDomain().replace(/^www\./, '') }}.
  3. Confirm the parallel routing: Write Company Website outputs to both Slack Website Approval and Merge Domain-Ready Rows in parallel.
  4. In Slack Website Approval, keep the message prompting users to review the Companies tab for domain accuracy.

Credential Required: Connect your Slack credentials in Slack Website Approval (OAuth2).

Credential Required: Add your Apollo API key in the JSON headers for Apollo Company Lookup and Apollo Org Enrichment Call (replace [CONFIGURE_YOUR_API_KEY]).

Step 5: Set Up AI Summarization and Contact Classification

Two OpenAI-powered nodes generate a business summary and classify decision-maker departments.

  1. In Summarize Business Line, confirm the model is gpt-4o-mini and the prompt uses {{ $json["Company Description"] }}.
  2. In Classify Contact Department, confirm the model is gpt-4o-mini and the prompt uses {{ $json.title }}.
  3. Ensure the flow continues from Summarize Business Line to Update Company Details, and from Split Decision Makers to Classify Contact Department to Upsert Contact Records.

Credential Required: Connect your OpenAI credentials in Summarize Business Line and Classify Contact Department.

Step 6: Configure Decision Maker Discovery and Enrichment Batches

This phase builds the Apollo search URL, loops through batches, and enriches contacts.

  1. In Build People Search URL, keep the JS code that creates the URL with person_seniorities[], q_organization_domains_list[], and per_page=10.
  2. In Apollo Decision Maker Search, set URL to {{ $json.url }} and keep the headers with your Apollo API key.
  3. In Batch Loop 1000 Items, keep Batch Size at 1000 and confirm it routes to Split Decision Makers and back to Build People Search URL for looping.
  4. In Batch Loop 10 Records, keep Batch Size at 10 and confirm it routes to both Split Enrichment Matches and Compose Enrichment Payload.
  5. In Compose Enrichment Payload, keep the code that maps linkedin_url and domain into a details array.
  6. In Apollo People Enrichment, set URL to https://api.apollo.io/api/v1/people/bulk_match?reveal_personal_emails=false&reveal_phone_number=false and JSON Body to {{ $json }}.

Credential Required: Add your Apollo API key in the JSON headers for Apollo Decision Maker Search and Apollo People Enrichment (replace [CONFIGURE_YOUR_API_KEY]).

Step 7: Configure Weekly Summary Reporting

The weekly report pulls verified leads, computes stats, and posts to Slack.

  1. In Fetch Verified Leads, verify the filter matches Email Verified = Yes.
  2. In Compute Weekly Lead Stats, keep the JS code that outputs message, companies, and contacts.
  3. In Post Weekly Summary, set Text to {{ $json.message }} and choose the correct Slack channel.

Credential Required: Connect your Slack credentials in Post Weekly Summary (OAuth2).

Step 8: Test and Activate Your Workflow

Run a full test to confirm the enrichment, Slack review, and reporting steps.

  1. Manually execute Spreadsheet Row Trigger with a test company row (with and without a domain) to confirm both branches work.
  2. Confirm Write Company Website updates the Companies sheet and that Slack Website Approval receives the approval request.
  3. Verify enrichment updates in Update Company Details and contact writes in Upsert Contact Records and Update Contact Details.
  4. Manually run Weekly Report Scheduler to ensure Post Weekly Summary posts a message like This week we discovered X decision makers from Y companies.
  5. Once testing succeeds, switch the workflow to Active so both triggers run in production.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Apollo credentials can expire or need specific permissions. If things break, check your Apollo API key status and plan access in Apollo settings first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Apollo lead enrichment automation?

About an hour if your sheet and API keys are ready.

Do I need coding skills to automate Apollo lead enrichment?

No coding required. You’ll mostly be connecting accounts and matching your Google Sheet columns to the right fields.

Is n8n free to use for this Apollo lead enrichment workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Apollo API access and OpenAI API usage (usually pennies per run for short summaries).

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Apollo lead enrichment workflow for different approval rules?

Yes, and it’s one of the best tweaks to make. You can route the “Slack Website Approval” message to different channels based on industry, automatically approve domains from a trusted list, or change the condition in the “Check Domain Provided” logic so only certain rows require review. Many teams also adjust the AI prompts in the “Summarize Business Line” and “Classify Contact Department” nodes to match how their CRM segments accounts.

Why is my Apollo connection failing in this workflow?

Usually it’s an expired or wrong Apollo API key. Update the credential in n8n, then re-run one company row and confirm the Apollo endpoints you’re using are enabled on your plan; if they aren’t, the HTTP Request nodes will fail even though the key “works.” Rate limits can also show up when you process large batches, so reducing batch size or spacing runs out can stabilize it.

How many leads can this Apollo lead enrichment automation handle?

A lot, but your limits come from your n8n plan and Apollo API quota, not the spreadsheet. On n8n Cloud Starter you can run a set number of executions per month, and higher plans handle more; if you self-host, there’s no execution limit (your server becomes the limiter). This workflow also batches work (for example, enrichment in groups of 10), which helps it run reliably even when you add hundreds of companies at once. If you routinely add thousands, plan on tuning batch sizes and scheduling to match Apollo rate limits.

Is this Apollo lead enrichment automation better than using Zapier or Make?

Often, yes. This workflow relies on multi-step branching, batching, and HTTP calls to Apollo, and n8n handles that without turning every extra path into a new paid “task.” It’s also easier to keep a clean upsert pattern into Google Sheets, so duplicates don’t creep in. Zapier or Make can be fine for a simple “new row → enrich → post message,” but once you add approval gates, bulk enrichment, and weekly reporting, n8n tends to feel less fragile. Talk to an automation expert if you want help picking the right platform.

The best part is the trust you get back. When sales opens “Contacts (Verified),” they stop wondering if the list is junk and start using it.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal