n8n is a node-based workflow tool for connecting apps and automating repetitive tasks. I use it to join simple building blocks together: pull rows from a sheet, transform the data, then send an email. It runs on a single machine or a server. You can self-host it and keep the data local.
It cuts out copy-paste and the late-night send button. A workflow keeps a newsletter repeatable. It pulls fresh data from Google Sheets, formats the content, and sends batches without manual clicks. That saves time and avoids mistakes. It also leaves room for AI-generated newsletter content later by dropping a content node in before the send step.
I use n8n email automation for weekly digests, drip sequences and triggered alerts. Common patterns:
- Read rows tagged “send” in Google Sheets and email each row.
- Pull content through an AI step, merge it into a template, then send.
- Collect replies into a spreadsheet and mark rows as processed.
You need:
- A machine or VM with Docker, or a server where you can run n8n.
- A Google account with a spreadsheet for recipients and content.
- SMTP credentials or an API key from an email provider such as SendGrid or Mailgun.
- Basic comfort with the n8n editor.
Installation process
The quickest way is Docker. Example command for a test instance:
docker run -it --rm -p 5678:5678 -e N8N_BASIC_AUTH_ACTIVE=true -e N8N_BASIC_AUTH_USER=admin -e N8N_BASIC_AUTH_PASSWORD=changeme n8nio/n8n
That starts n8n on http://localhost:5678. Use a proper production setup for live runs.
If you prefer docker-compose, create a small compose file with the n8n image, persistent volumes, and environment variables for auth and SMTP. Start the stack with docker-compose up -d.
In the n8n editor:
- Click the plus icon, search for “Google Sheets”, and add the node.
- Click Credentials, then Create New and choose OAuth2.
- In Google Cloud Console, create an OAuth client ID and set the authorised redirect URI to the callback URL n8n shows on the credential screen.
- Back in n8n, click Connect and complete the Google account consent.
Once authorised, point the node at your spreadsheet and sheet name. Run it once to read a few rows.
Creating your first workflow
- Create a new workflow.
- Add a Google Sheets node. Set it to Read Rows and use a range or query such as A2:C100. Save the credentials.
- Add a Function node if you need to transform rows. Example JavaScript to map columns:
return items.map(i => ({ json: { email: i.json.Email, name: i.json.Name, body: `Hello ${i.json.Name}` } }));
- Add an Email node, either SMTP or SendGrid.
- Connect the Function node to the Email node.
- Configure the Email node fields:
- From: newsletter@yourdomain.com
- To: {{$json[“email”]}}
- Subject: Weekly digest for {{$json[“name”]}}
- HTML: {{$json[“body”]}}
Save the workflow. Leave Active off during tests.
For SMTP:
- Host: smtp.yourprovider.com
- Port: 587
- Secure: false, or true for 465
- User and Password: the SMTP account
For API providers like SendGrid:
- Use the SendGrid node or the HTTP Request node with the header Authorization: Bearer.
- In the node UI, click Credentials, create a new credential, and paste the API key.
Exact UI clicks:
- Open the Email node, click Credentials, Create New, choose SMTP or SendGrid, fill in the fields, and click Save.
- Test with the Test button in the node. The node returns a success object when the provider accepts the message.
Testing the workflow
- In the top bar, click Execute Workflow to run once.
- Watch the node colours. Green means success, red means failure.
- Click the Email node’s output to inspect the response data. Expect a provider status like “250 OK” for SMTP or a JSON response with message_id for APIs.
- Check the recipient inbox for the message and inspect headers to confirm delivery.
Verification expected output:
- n8n node status: success (green) for every node.
- SMTP response: a 250 OK response in the node output.
- Email received with the correct subject and personalised body.
If the workflow will send real emails, leave it disabled until the tests are done. Sending live emails is a state change.
Monitoring workflow performance
Use the Executions view in n8n to watch runs and timings. Turn on environment logging for more detail:
- Set N8N_LOG_LEVEL=info, or debug for deeper traces.
- Keep an eye on memory and CPU if you batch large lists. Break big sends into chunks to avoid provider rate limits.
Check the n8n documentation and community forum for node-specific quirks. Search the node error text; most times someone has hit the same issue. If you used the Google API, confirm the project and OAuth consent screen settings. For SMTP problems, check the provider dashboard and bounce logs.
The useful bit is building the flow in small, testable steps. Read rows, transform, send. Test each node and keep an export of the working workflow. That gives you a quick rollback path and keeps newsletter runs predictable.

