Google Sheets + Claude: enrich leads with firmographics
Your lead sheet starts clean, then slowly turns into a mess. Missing NAICS codes. “Revenue” guessed in random formats. Employee counts pasted from three different sources. And somehow, you’re the one expected to “just fix it.”
This Sheets Claude enrichment automation hits growth marketers first, but sales ops and agency owners feel it too. The outcome is simple: every new or updated company row gets firmographics filled in consistently, without you babysitting the sheet.
Below, you’ll see how the workflow runs, what it changes day-to-day, and what you need to get it live in n8n.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets + Claude: enrich leads with firmographics
flowchart LR
subgraph sg0["Google Sheets Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Valid Rows", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model", pos: "b", h: 48 }
n5["<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/>Code - Format Output"]
n6@{ icon: "mdi:database", form: "rounded", label: "Update Company Row", pos: "b", h: 48 }
n7@{ icon: "mdi:wrench", form: "rounded", label: "Explorium MCP", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Output Parser", pos: "b", h: 48 }
n3 --> n5
n7 -.-> n3
n8 -.-> n3
n2 --> n3
n1 --> n2
n6 --> n2
n4 -.-> n3
n5 --> n6
n0 --> 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 n3,n8 ai
class n4 aiModel
class n7 ai
class n1 decision
class n6 database
class n5 code
classDef customIcon fill:none,stroke:none
class n5 customIcon
The Challenge: Keeping lead firmographics complete and consistent
“Enrich the list” sounds quick until you’re actually doing it. Someone drops 40 new companies into Google Sheets, half with only a name, some with a broken URL, and a few that are subsidiaries with confusing branding. Now you’re juggling lookups, copy-paste, and formatting rules while trying not to overwrite the wrong row. And even when you finish, the data isn’t uniform, which makes filters, routing, and outreach personalization shaky. Honestly, the real cost is the context switching. You lose momentum on work that actually drives pipeline.
The friction compounds. Here’s where it breaks down.
- You end up re-checking the same companies every week because someone edits the name or swaps the website.
- Firmographic fields get filled with mismatched formats, so the sheet looks “done” but can’t be segmented reliably.
- Manual enrichment invites mistakes, like pasting data into the wrong row or mixing parent and child companies.
- When you scale list building, enrichment becomes the bottleneck instead of outreach or analysis.
The Fix: Auto-enrich new Google Sheets rows with Claude + Explorium
This workflow watches your Google Sheet for changes, then enriches only the rows that actually need attention. When a new company is added (or when someone edits the company name or website), n8n validates that the essentials are present. After that, it processes companies one at a time, so a single “no data found” case won’t crash the whole run. The AI Agent uses Claude (Anthropic) with the Explorium MCP tool to pull structured firmographics like business ID, NAICS, employee range, and revenue range. Finally, the workflow formats the result and writes the values back into the exact same row, keeping your sheet as the system of record.
The workflow starts with a Google Sheets change trigger that polls about every minute. From there, rows are validated, enriched via Claude + Explorium MCP, and then updated in place in Google Sheets. You get a living lead list that stays “ready,” even when the input is messy.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team adds 50 companies to a sheet each week. If manual enrichment takes about 10 minutes per company (find NAICS, revenue range, employee range, and a business ID, then paste carefully), that’s roughly 8 hours of busywork. With this workflow, adding the row takes the same time as always, then enrichment runs automatically within about a minute. You still spot-check edge cases, but the default state flips from “blank fields everywhere” to “mostly complete, consistently formatted.”
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store and update company rows.
- Anthropic (Claude) for AI-driven enrichment with an agent.
- Explorium MCP API key (get it from your Explorium account dashboard).
Skill level: Intermediate. You will connect credentials and verify your sheet columns match the expected names.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A row changes in Google Sheets. The workflow polls your sheet about every minute and detects new rows or edits to the company name or website fields.
Only valid rows continue. An “If” check confirms the row has both a company name and a website, because enrichment without those basics is usually junk data.
Companies are handled one at a time. n8n loops through changed rows in batches, then the AI Agent uses Claude (Anthropic) plus the Explorium MCP client to fetch business ID, NAICS, employee range, and revenue range in a structured way.
The same row gets updated. A formatting script shapes the result, and Google Sheets writes the enriched fields back to the original row (using the row number), so your sheet stays the “source of truth.”
You can easily modify which columns trigger re-enrichment or which fields get written back based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
This workflow starts when a spreadsheet row changes, using the Spreadsheet Change Trigger node.
- Add the Spreadsheet Change Trigger node to your canvas.
- Set Document to the target spreadsheet with
[YOUR_ID]. - Set Sheet to
gid=0(Sheet1). - Set Poll Times to
everyMinutefor frequent monitoring. - Credential Required: Connect your Google Sheets credentials.
Step 2: Connect Google Sheets
Configure the update action so the enriched data is written back to the same spreadsheet.
- Add the Modify Company Row node and connect it after Format Result Script.
- Set Operation to
appendOrUpdate. - Set Document to
[YOUR_ID]and Sheet togid=0. - In Columns, keep Mapping Mode as
autoMapInputDataand Matching Columns toname. - Credential Required: Connect your Google Sheets credentials.
Step 3: Set Up Row Validation and Batching
Validate only rows with both name and website values, then process them one by one.
- Add Validate Filled Rows after Spreadsheet Change Trigger.
- Set the first condition leftValue to
{{ $json.name }}and operator tonotEmpty. - Set the second condition leftValue to
{{ $json.website }}and operator tonotEmpty. - Add Iterate Records and connect the true output of Validate Filled Rows to it.
Step 4: Set Up the AI Research Agent
The Research Agent uses Anthropic and Explorium tools to enrich company data and parse structured output.
- Add Research Agent and connect it to the second output of Iterate Records.
- Set Prompt Type to
defineand paste the full prompt from the node parameters, including{{ $json.name }}and{{ $json.website }}expressions. - Attach Anthropic Dialogue Model as the language model for Research Agent.
- Credential Required: Connect your Anthropic credentials in Anthropic Dialogue Model.
- Attach Explorium MCP Client as the tool for Research Agent with SSE Endpoint set to
https://mcp.explorium.ai/sseand Authentication set tobearerAuth. - Credential Required: Connect your Explorium MCP credentials in Research Agent tool configuration (the tool is Explorium MCP Client).
- Attach Structured Output Parser as the output parser for Research Agent, using the provided JSON schema example.
Step 5: Configure Output Formatting and Sheet Update
Format AI output consistently before updating the sheet.
- Add Format Result Script after Research Agent.
- Set JavaScript Code to the provided script that maps output fields like
business_id,naics, and ranges. - Connect Format Result Script to Modify Company Row.
yearly_revenue_range), the script will return empty strings—make sure the prompt format is preserved in Research Agent.Step 6: Test and Activate Your Workflow
Verify the workflow runs end-to-end and enriches your sheet correctly.
- Click Execute Workflow to run a manual test.
- Add or modify a row in your spreadsheet with valid
nameandwebsitevalues. - Confirm Validate Filled Rows passes only filled rows and Iterate Records sends one item at a time to Research Agent.
- Check that Modify Company Row updates the row with
business_id,naics,number_of_employees_range, andyearly_revenue_range. - When successful, switch the workflow Active to enable production polling.
Watch Out For
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Google credential settings and confirm the connected account still has edit access to the sheet.
- 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.
Common Questions
About an hour if your sheet columns are already set up.
Yes. You’ll mostly be connecting accounts and matching the Google Sheet columns the workflow expects.
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 Anthropic (Claude) token usage and your Explorium MCP 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.
You can customize the “Validate Filled Rows” logic to enforce stricter rules (like requiring a full https:// URL), then adjust the “Format Result Script” to write different output formats. If you want more fields, extend the structured output parser to include things like HQ country or a confidence note. And if you prefer a different provider, you can swap the Explorium MCP client tool inside the AI Agent while keeping the same Google Sheets trigger and update pattern.
Usually it’s expired OAuth consent or missing write permissions on the Google account connected in n8n. Reconnect the credential, then confirm the “Modify Company Row” node is pointing at the correct spreadsheet and sheet tab. If it only fails on some rows, check that the workflow is matching on row_number and that your sheet hasn’t been re-sorted in a way that breaks assumptions.
On n8n Cloud, capacity mainly depends on your plan’s monthly executions, and this workflow can consume multiple executions when looping over batches. If you self-host, there’s no execution cap, but throughput depends on your server and API rate limits from Google, Anthropic, and Explorium. Practically, most small teams can enrich hundreds of rows a day without thinking about it, then tune batching if they push beyond that.
Often, yes, but it depends on how picky you are about structure and error handling. n8n is better when you need branching logic (like validating rows), looping through changes safely, and parsing structured AI output without duct-taping steps together. It’s also friendlier if you want self-hosting for unlimited runs. Zapier or Make can be quicker for a basic “new row → call enrichment API → update row” flow, but costs climb when you add logic and retries. If you want a second opinion, Talk to an automation expert and we’ll map the simplest option for your volume.
Once this is running, your sheet stops being a half-finished project and becomes a reliable asset. The workflow handles the repetitive enrichment, so you can focus on targeting and outreach.
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.