Google Sheets to Icypeas, cleaner lead lists fast
Your lead sheet looks “fine” until your campaign starts bouncing, replies dry up, and your deliverability takes a hit. Then you’re stuck doing the same painful routine: export a list, run checks somewhere else, re-import, and hope you didn’t miss a row.
This is the kind of mess that slows down marketers before a launch. A sales ops person trying to protect sender reputation feels it too. And if you run an agency, you’re probably tired of clients blaming “email performance” when the real problem was list quality. This Google Sheets Icypeas automation gets you back to one trusted sheet.
Below you’ll see exactly how the workflow verifies domains in bulk, what results you can expect, and what you need to connect it in n8n.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to Icypeas, cleaner lead lists fast
flowchart LR
subgraph sg0["When clicking "Execute Workflow" Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking 'Execute Workf..", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Authenticates to your Icypea.."]
n2@{ icon: "mdi:database", form: "rounded", label: "Reads lastname,firstname and..", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Run bulk search (domain-sear.."]
n0 --> n2
n1 --> n3
n2 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2 database
class n3 api
class n1 code
classDef customIcon fill:none,stroke:none
class n1,n3 customIcon
The Problem: Dirty domains quietly wreck campaigns
Most teams don’t “choose” to send to bad domains. It happens because lists get stitched together from forms, scrapes, events, old CRM exports, and partner spreadsheets. A few broken domains slip in. A few more are catch-all traps. Someone fat-fingers a company website. The next thing you know, you’re looking at bounces and thinking it’s your copy, your offer, or your sending tool. Meanwhile the real cost is time (manual checks), stress (second-guessing every send), and lost opportunity (pausing outreach right when you should be scaling).
It adds up fast. Here’s where it usually breaks down.
- People run verification “when they remember,” so the same list gets reused long after it’s gone stale.
- Manual spot-checking misses patterns, like one bad source feeding dozens of sketchy domains.
- Exports and re-imports create version chaos, which means nobody trusts the “final” sheet.
- Teams end up sending smaller campaigns out of caution, because they’re not confident in the data.
The Solution: Verify domains from Google Sheets in Icypeas
This n8n workflow pulls company or domain fields directly from a formatted Google Sheet, then sends that data to Icypeas to run a bulk scan using an HTTP request. You start it with a manual click in n8n, which is perfect for list prep before a campaign or as a quick “clean-up pass” after importing new leads. Inside the workflow, a small code step handles your Icypeas authentication details (API Key, API Secret, and User ID) so every scan request is properly signed. Once the request runs, you have a consistent verification action you can repeat whenever the sheet changes, without juggling exports or one-off checks.
The workflow starts when you execute it in n8n. It reads your Google Sheet rows, prepares the Icypeas credentials, and submits the domains/companies to Icypeas for bulk scanning. From there, you can use the results to keep one clean “source of truth” sheet for every campaign.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you’re prepping a 500-row outbound list in Google Sheets for next week’s campaign. Manually, you might spend about 1 minute per row between copying domains into a verifier, running batches, downloading results, and stitching them back into your sheet. That’s roughly 8 hours of tedious work. With this workflow, you click execute, wait for the scan to run, and review the output in one place. Realistically, you’re spending about 10 minutes setting it up and checking results, not a whole day.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing company/domain rows
- Icypeas to run bulk domain verification
- Icypeas API credentials (get API Key, Secret, User ID in Icypeas)
Skill level: Beginner. You’ll connect Google Sheets, paste API credentials, and map the right column.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Manual run when you’re ready. You click “Execute” in n8n to kick things off, which is handy for list cleanups right before a campaign or after a fresh import.
Google Sheets rows are pulled in. The workflow reads your sheet and grabs the contact fields you’ve formatted (typically a company name or domain column). If your sheet is messy, fix the column names once and you’re done.
Icypeas authentication is prepared. A code step uses your Icypeas API Key, API Secret, and User ID so the next request is authorized and repeatable.
Domains are submitted for bulk scanning. The HTTP request sends your list to Icypeas to scan domains/companies in one go, instead of checking them one-by-one by hand.
You can easily modify the sheet columns you pull to match your lead format based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually so you can control when the domain scan runs.
- Add and open Manual Launch Trigger.
- Leave the default settings as-is to enable manual executions from the editor.
- Confirm the execution flow begins with Manual Launch Trigger and connects to Fetch Sheet Contact Fields.
Step 2: Connect Google Sheets
Pull company domain data from your spreadsheet before generating the API payload.
- Open Fetch Sheet Contact Fields.
- Select the spreadsheet by setting Document and Sheet to your target Google Sheet (these are blank by default).
- Credential Required: Connect your Google Sheets credentials.
⚠️ Common Pitfall: If Document and Sheet are left empty, the node will return no rows and downstream API requests will fail.
Step 3: Set Up the API Signature Builder
This step constructs the request body and authentication signature for Icypeas.
- Open Icypeas Auth Setup.
- Replace the placeholder values in jsCode for
API_KEY,API_SECRET, andUSER_ID. - Confirm the script maps your sheet data with
$input.all().map((x) => [ x.json.company])so the input includes acompanyfield. - Ensure Fetch Sheet Contact Fields outputs the company field used in the code.
Tip: If your sheet column name is not company, update the mapping in Icypeas Auth Setup to match your column.
Step 4: Configure the Domain Scan Request
This node sends the authenticated bulk domain scan request to Icypeas.
- Open Execute Domain Bulk Scan.
- Set URL to the expression
={{ $json.api.url }}. - Set Method to
POSTand enable Send Body and Send Headers. - Under Body Parameters, confirm the values: task =
domain-search, name =dernierT, user =={{ $json.api.userId }}, data =={{ $json.data }}. - Under Header Parameters, set X-ROCK-TIMESTAMP to
={{ $json.api.timestamp }}. - Credential Required: Connect your HTTP Header Auth credentials (generic
httpHeaderAuth) in Execute Domain Bulk Scan.
⚠️ Common Pitfall: If your HTTP Header Auth credentials don’t include the required Icypeas headers (e.g., API key/signature), the request will be rejected.
Step 5: Test and Activate Your Workflow
Validate the end-to-end flow from the sheet to the Icypeas API.
- Click Execute Workflow and manually run Manual Launch Trigger.
- Verify Fetch Sheet Contact Fields outputs rows with a
companyfield. - Check Icypeas Auth Setup for a populated
apiobject anddataarray. - Confirm Execute Domain Bulk Scan returns a successful response from Icypeas.
- When ready for production, switch the workflow to Active.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Google Sheets connection and sharing access to the sheet 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
About 30 minutes if your sheet and Icypeas account are ready.
No. You’ll mostly connect accounts and map the domain/company column from your sheet. The “code” step is already part of the template, so you’re just pasting credentials and testing.
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 Icypeas subscription and API usage based on your plan.
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.
Yes, and it’s one of the easiest tweaks. You typically change which Google Sheets columns are selected in “Fetch Sheet Contact Fields,” then adjust the payload built before “Execute Domain Bulk Scan.” Common customizations include scanning a “Website” column instead of “Domain,” filtering out blank rows, adding a campaign tag to each scan, or splitting scans into smaller batches when you’re working with very large sheets.
Most of the time it’s an API Key/API Secret/User ID mismatch, or an expired credential that needs to be regenerated in Icypeas. Double-check what’s stored in the n8n credential fields used by the “Icypeas Auth Setup” step, then re-run with a tiny test list (like 5 rows) to confirm the request format. If the request is correct but still fails, you may be hitting plan limits or rate limits on the Icypeas side. Honestly, logging the raw HTTP response in n8n usually tells you what’s wrong in a few seconds.
A lot, but the real limit is your Icypeas plan and how big your sheet is. On n8n Cloud, the Starter plan supports a monthly execution cap, while higher plans handle more; self-hosting removes execution limits but your server still needs enough memory for big runs. In practice, many teams scan hundreds or thousands of rows per run and simply split the list if the API starts timing out.
Often, yes, because this kind of verification flow benefits from flexible request building and handling edge cases. n8n is also easier to self-host, which matters when you want unlimited runs without watching task counts. Zapier or Make can still work if you’re doing a very simple “send row, get response” pattern and your volume is low. If you’re unsure, Talk to an automation expert and get a quick recommendation for your setup.
Clean domains aren’t glamorous, but they keep campaigns alive. Run the workflow, trust your sheet again, and move on to the work that actually grows revenue.
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.