Tracking cold email engagement metrics using Smartlead and Google Sheets
Workflow: Track Email Campaign Engagement Analytics with Smartlead and Google Sheets Automatically fetch lead-level email engagement analytics (opens, clicks, replies, unsubscribes, bounces) from Smartlead and update them in Google Sheets. Use this to keep a single, always-fresh source of truth for campaign performance and sequence effectiveness. --- Summary Pull Smartlead campaign analytics on a schedule and write them to a Google Sheet (append or update). Works with pagination, avoids duplic
At a glance
Tracking cold email engagement metrics using Smartlead and Google Sheets is a ready-made n8n workflow you import as a workflow JSON file — no build required. It connects HubSpot, Google Sheets, Salesforce. It's free to download. Follow the 5-step import below to go live in minutes.
- Platform
- n8n
- Connects
- HubSpot, Google Sheets, Salesforce
- Modules
- 6
- Price
- Free
- Version
- v1.0

About this workflow
Workflow: Track Email Campaign Engagement Analytics with Smartlead and Google Sheets Automatically fetch lead-level email engagement analytics (opens, clicks, replies, unsubscribes, bounces) from Smartlead and update them in Google Sheets. Use this to keep a single, always-fresh source of truth for campaign performance and sequence effectiveness. --- Summary Pull Smartlead campaign analytics on a schedule and write them to a Google Sheet (append or update). Works with pagination, avoids duplicates via a stable key, and is ready for dashboards, pivots, or BI tools. --- What This Workflow Does - Collects campaign stats from Smartlead (per-lead, per-sequence). - Handles pagination safely (offset/limit). - Writes to Google Sheets using appendOrUpdate with a matching column to prevent duplicates. - Can run on a schedule for near real-time analytics. --- Node Structure Overview | Step | Node | Purpose | |---|---|---| | 1️⃣ | Schedule Trigger | Starts the workflow on a cadence (e.g., hourly) | | 2️⃣ | Code (Pagination Generator) | Emits {offset, limit} pairs (e.g., 0..9900, step 100) | | 3️⃣ | Split in Batches | Sends each pagination pair to the API sequentially | | 4️⃣ | HTTP Request (Smartlead) | GET /campaigns/{campaignid}/statistics with offset/limit | | 5️⃣ | Split Out | Turns the API data[] array into one item per lead record | | 6️⃣ | Google Sheets (appendOrUpdate) | Upserts rows by statsid into EngagedLeads tab | | 7️⃣ | Loop Back | Continues until all batches have been processed | --- Step-by-Step Setup 1. Prerequisites - Smartlead account + API key with access to campaign statistics. - Google account + Google Sheets OAuth connected in n8n. 2. Create the Google Sheet - Spreadsheet name: Email Analytics (can be anything). - Tab name: EngagedLeads. - Add these exact headers (first row): 3. Configure the Schedule Trigger - Choose a frequency (e.g., every 2 hours). - If you’re testing, set a single run or a short cadence. 4. Configure the Code Node (Pagination) - Emit N items like: - 100 is a good default limit. For up to 10,000 records, generate 100 offsets. 5. Configure the Smartlead API Node - Method: GET - URL: - Query parameters: - apikey = <YOURSMARTLEADAPIKEY> - offset = {{ $json.offset }} - limit = {{ $json.limit }} - Map response to JSON. 6. Split Out the Response - Use a Split Out (or similar) to iterate over data[] so each lead record is one item. 7. Google Sheets Node (Append or Update) - Operation: appendOrUpdate. - Document: Your Email Analytics sheet. - Sheet/Tab: EngagedLeads. - Matching Column: statsid. - Map fields from Smartlead response to sheet columns: - leadname ← lead name (or composed from first/last if provided) - leademail ← email - leadcategory ← category/type if available - sequencenumber ← sequence step number - statsid ← stable identifier (e.g., Smartlead statsid or message id) - emailsubject ← subject - senttime, opentime, clicktime, replytime ← timestamps - opencount, clickcount ← integers - isunsubscribed, isbounced ← booleans - If the same statsid arrives again, the row is updated, not appended. 8. Test and Activate - Run once manually to verify API and sheet mapping. - Check the sheet for new/updated rows. - Activate the workflow to run automatically. --- Smartlead API Reference (Used by This Workflow) - Endpoint GET - Required query parameters - apikey (string) - offset (number) - limit (number) - Typical response (trimmed example) Google Sheets Structure (Recommended) Spreadsheet: Email Analytics Tab: EngagedLeads Columns:leadname, leademail, leadcategory, sequencenumber, statsid, emailsubject, senttime, opentime, clicktime, replytime, opencount, clickcount, isunsubscribed, isbounced Matching Column: statsid (prevents duplicates and allows updates) Customization Tips - Multiple Campaigns Duplicate the workflow and set a different {campaignid} and/or write results to a separate tab in your Google Sheet. - Batch Size Increase or decrease the limit value (e.g., 200) in your Code node if you want fewer or more API calls. - Filtering Add a Code or IF node to skip rows where isbounced = true or isunsubscribed = true. - Dashboards Create a new tab named Dashboard in Google Sheets and visualize your data using built-in charts or connect it to Looker Studio for advanced visualization. - Enrichment Join this dataset with your CRM data (e.g., HubSpot or Salesforce) using leademail as a key to gain deeper customer insights. --- Security and Publishing Notes - Do not hardcode your Smartlead API key in the workflow export. Use n8n credentials or environment variables instead. - When sharing the template publicly, replace sensitive values with placeholders like: <YOURSMARTLEADAPIKEY> and <YOURGOOGLESHEETID>. - Keep your Google Sheet private unless you intentionally want to share it publicly. --- Troubleshooting - No rows in Sheets Verify that the API response includes data[], confirm that the Split Out node is configured correctly, and check field mappings. - Duplicates Ensure the Google Sheets node has its matching column set to statsid. - Rate Limits Increase the schedule interval, add a short Wait node between batches, or reduce the limit size. - Mapping Errors Ensure that column names in Sheets exactly match your field mappings — they are case-sensitive. - Timezone Differences Smartlead timestamps are in UTC. Convert them downstream if your local timezone is different. --- Example Use Case Run this workflow hourly to maintain a live, company-wide Email Engagement Sheet. - Sales teams can monitor replies and active leads. - Marketing teams can track open and click rates by sequence. - Operations can export monthly summaries — no Smartlead login required. --- Tags Smartlead EmailMarketing Automation GoogleSheets Analytics CRM MarketingOps
How to import this n8n workflow
- 1
Download the workflow JSON file after purchase.
- 2
Open n8n → click the menu → Import from File.
- 3
Select the downloaded JSON and import.
- 4
Set up credentials for each node that requires them.
- 5
Click Execute Workflow to test, then activate.
Setup guide
Setup guide included
Purchase to unlock the full step-by-step guide
Related N8n workflows
Send replies to Telegram messages using Google Docs, ChatGPT and Google Sheets for storage
Create a new issue in Redmine from a new submission in Google Forms
When a contact is updated on Mautic a new Google Sheets row is added
Verify a phone number from a Google Sheets row using Veriphone
Generate and store AI images with Sora GPT, Google Drive and Sheets
Add a new HubSpot CRM contact to a Thanks.io mailing list
Use skills In n8n agent node
AI-powered WhatsApp chatbot for text, voice, images, and PDF with RAG
Reviews
No reviews yet
Be the first to buy and share your experience.
Leave a review
Sign in to share your experience with this workflow.
Create a free account to purchase workflows.
- JSON blueprint — instant download
- Setup guide PDF included
- 5 downloads · valid 30 days
- Works with n8n
Need help setting this up?
Book a 3-hour live setup session with an Agility consultant.
- Configure live on Google Meet / Zoom
- Free follow-up if workflow has defects
- Platform expert assigned to you