Skip to main content
This guide walks you through building an n8n workflow that reads contacts from a Google Sheet, finds professional emails with the Email Finder endpoint, verifies them with the Email Verifier endpoint, and writes the results back to the sheet — automatically, on a schedule. New to n8n with Enrow? Start with the n8n getting started guide.

What will you build?

You’ll build an automated workflow that:
  1. Reads contacts from a Google Sheet
  2. Finds emails using the Enrow Email Finder
  3. Verifies emails for deliverability with the Enrow Email Verifier
  4. Writes results back to the Google Sheet
Time to build: 15 minutes Difficulty: Intermediate

What do you need before starting?

Before building the workflow, make sure you have the following:
  • n8n installed (get n8n)
  • An Enrow API key — see Authentication for how to get and use your key
  • A Google Account with a Sheet of contacts
Each search consumes credits, so confirm your balance first. See Credits & billing for per-endpoint costs.

How do you set up the Google Sheet?

Create a Google Sheet with these columns:
First NameLast NameCompany DomainEmailStatusVerified
JohnDoeapple.com
JaneSmithmicrosoft.com
BobJohnsonmeta.com
Sheet name: “Contacts” URL: Save and copy the Sheet URL

What does the workflow look like?

The workflow runs on a schedule, reads each contact, finds and verifies the email, then updates the sheet:

How do you build the workflow step by step?

Follow these steps to assemble each node in n8n.

Step 1: Set up the Google Sheets connection

  1. Add “Google Sheets” node
  2. Operation: “Read”
  3. Authenticate with Google
  4. Select your spreadsheet
  5. Sheet Name: “Contacts”
  6. Range: “A:F” (all columns)

Step 2: Add the Cron trigger

  1. Add “Cron” node as trigger
  2. Mode: “Every Hour” (or custom schedule)
  3. Connect to Google Sheets node
This will automatically process new rows every hour.

Step 3: Filter empty emails

  1. Add “IF” node after Google Sheets
  2. Condition:
    • Value 1: {{$json["Email"]}}
    • Operation: Is Empty
  3. Route “true” to next step (only process contacts without emails)

Step 4: Find the email with Enrow

Send each contact to the Email Finder endpoint. Authenticate with your API key in the x-api-key header.
  1. Add “HTTP Request” node
  2. Configure:
Method: POST
URL: https://api.enrow.io/email/find/single
Authentication: Header Auth
  Name: x-api-key
  Value: YOUR_ENROW_API_KEY

JSON Body:
{
  "company_domain": "{{$json["Company Domain"]}}",
  "fullname": "{{$json["First Name"]}} {{$json["Last Name"]}}"
}

Step 5: Wait for the result

The Email Finder runs asynchronously, so you either wait for a webhook or poll the GET endpoint for the result. Option A: Webhook (Recommended)
  1. Add “Webhook” node
  2. Path: enrow-email-webhook
  3. Copy webhook URL
  4. Update Find Email JSON body:
{
  "company_domain": "{{$json["Company Domain"]}}",
  "fullname": "{{$json["First Name"]}} {{$json["Last Name"]}}",
  "settings": {
    "webhook": "YOUR_WEBHOOK_URL"
  }
}
For the payload Enrow sends and how to register endpoints, see How webhooks work. Option B: Wait & Poll
  1. Add “Wait” node: 5 seconds
  2. Add “HTTP Request” node:
    • Method: GET
    • URL: https://api.enrow.io/email/find/single?id={{$json["id"]}}
  3. Add “IF” node to check status
  4. Loop back if still ongoing
See the Get Single Result endpoint for the full response format.

Step 6: Verify the email

Pass the found email to the Email Verifier to confirm deliverability before writing it back.
  1. Add “HTTP Request” node after email is found
  2. Configure:
Method: POST
URL: https://api.enrow.io/email/verify/single
Authentication: Header Auth (reuse Enrow credential)

JSON Body:
{
  "email": "{{$json["email"]}}"
}

Step 7: Update the Google Sheet

  1. Add “Google Sheets” node
  2. Operation: “Update”
  3. Select same spreadsheet
  4. Sheet Name: “Contacts”
  5. Range: Match row (use row index from original data)
  6. Map fields:
    • Email: {{$json["email"]}}
    • Status: {{$json["confidence"]}}
    • Verified: {{$json["status"]}}

Where is the complete workflow JSON?

Import the JSON below to get the full workflow in one step.
Import this workflow to get started immediately. Just update your API keys!

How can you improve the workflow?

Once the base workflow runs, these additions make it more robust and cost-efficient.

Add error handling

  1. Add “Error Trigger” node
  2. Add “Send Email” or “Slack” node to notify on errors
  3. Log failed rows to a separate sheet
For the status codes you may encounter and how to react to them, see Error handling and Status codes.

Process in bulk

For better performance with many contacts, switch from single searches to a batch:
  1. Change Find Email node to use /email/find/bulk
  2. Batch contacts into groups of 100
  3. Process all at once instead of one-by-one
Example bulk request:
{
  "searches": [
    {
      "company_domain": "{{$json[\"Company Domain\"]}}",
      "fullname": "{{$json[\"First Name\"]}} {{$json[\"Last Name\"]}}"
    }
  ]
}
The Find Bulk Emails endpoint accepts up to 5,000 searches per batch.

Add conditional verification

Only verify high-confidence emails to save credits:
// In IF node
{{$json["confidence"]}} === "high"
This saves credits by skipping verification for uncertain emails.

When should you use this workflow?

This workflow is a good fit for:
  • Sales teams: Enrich prospect lists before outreach
  • Recruiters: Find candidate contact information
  • Marketers: Build email lists from company databases
  • Data teams: Clean and enrich CRM data

What are the best practices?

If processing large lists (1000+ contacts):
  • Use bulk endpoints
  • Add delays between batches
  • Or upgrade your Enrow plan
See Rate limits for the current request thresholds.
  • Always verify emails before using them
  • Check confidence scores
  • Remove low-quality results
  • Deduplicate contacts before processing
  • Cache results to avoid re-searching
  • Use conditional logic to skip unnecessary API calls
  • Log all API responses
  • Track failed enrichments
  • Retry failed searches automatically

How do you troubleshoot common problems?

Workflow not running automatically?
  • Check that the Cron trigger is activated
  • Verify the schedule is correct
No emails found?
  • Check that company domains are correct
  • Verify names are spelled correctly
  • Try with just company domain (without names)
Sheet not updating?
  • Check Google Sheets permissions
  • Verify the range matches your data
  • Test the Update node manually

FAQ

Both work. The Email Finder runs asynchronously, so you can either register a webhook in the settings.webhook field (Option A) or poll the Get Single Result endpoint on a timer (Option B). Webhooks are recommended because they avoid wasted polling requests and return results as soon as the search completes. See How webhooks work.
Each Email Finder search and each Email Verifier check consumes credits per call. Running both on every contact uses more credits than finding alone, so add conditional verification to skip uncertain emails. For exact per-endpoint costs, see Credits & billing.
Use n8n’s Header Auth credential with the header name x-api-key and your Enrow API key as the value, then reuse the same credential across every Enrow node. Full details are in Authentication.
Switch the Find Email node to the Find Bulk Emails endpoint, which accepts up to 5,000 searches per batch, and stay within your plan’s rate limits.

Next steps

Verification Workflow

Verify existing email lists with n8n and Enrow.

Find Single Email

Explore the Email Finder endpoint used in this workflow.

Verify Single Email

Check whether an email address is valid and deliverable.

Webhooks

Get notified automatically when a search completes.