AutomationFlowsEmail & Gmail › Sync New Subscribers From Google Sheets to Mailerlite Without Duplicates

Sync New Subscribers From Google Sheets to Mailerlite Without Duplicates

ByIntuz @intuz on n8n.io

Marketing Teams Email Marketers Small Business Owners Community Managers Read from Google Sheets: The workflow begins by reading all contact rows from your designated Google Sheet. Check for Existing Subscribers: For each contact, it performs a search in MailerLite to check if a…

Event trigger★★★☆☆ complexity11 nodesGoogle SheetsMailer LiteHTTP Request
Email & Gmail Trigger: Event Nodes: 11 Complexity: ★★★☆☆ Added:

This workflow corresponds to n8n.io template #7681 — we link there as the canonical source.

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "CQVAcWFM8iCOPZG5",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Create and assign subscriber in Mailerlite from Google Sheet",
  "tags": [],
  "nodes": [
    {
      "id": "a43ee8b3-37b3-4f0c-bcf0-60511054a2d7",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -220,
        40
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{YOUR_GOOGLE_SHEETS_DOCUMENT_ID}/edit#gid=0",
          "cachedResultName": "{YOUR_GOOGLE_SHEETS_SHEET_NAME}"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{YOUR_GOOGLE_SHEETS_DOCUMENT_ID}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{YOUR_GOOGLE_SHEETS_DOCUMENT_ID}/edit?usp=drivesdk",
          "cachedResultName": "{YOUR_GOOGLE_SHEETS_DOCUMENT_NAME}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "fbf4d989-1c36-40a1-b6f1-52ee12bde18a",
      "name": "Get a subscriber",
      "type": "n8n-nodes-base.mailerLite",
      "onError": "continueErrorOutput",
      "position": [
        260,
        40
      ],
      "parameters": {
        "operation": "get",
        "subscriberId": "={{ $json.Email }}"
      },
      "credentials": {
        "mailerLiteApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "23910947-2fe9-4391-945a-d5c080c90ac6",
      "name": "Create subscriber and assign to group",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1180,
        400
      ],
      "parameters": {
        "url": "https://connect.mailerlite.com/api/subscribers",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"email\": \"{{ $json.Email }}\",\n  \"fields\": {\n    \"name\": \"{{ $json.first_name }}\",\n    \"last_name\": \"{{ $json.last_name }}\",\n    \"company\": \"{{ $json.Company }}\",\n    \"country\": \"{{ $json.Country }}\"\n  },\n  \"groups\": [\"{{ $json.group_id }}\"]\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "mailerLiteApi"
      },
      "credentials": {
        "mailerLiteApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c26b4872-32ab-4b48-9a20-2d4be5b6baed",
      "name": "Start Workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -720,
        40
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "bc39a624-695d-48c7-a295-e40c3a7b84fa",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        180
      ],
      "parameters": {
        "color": 3,
        "width": 460,
        "height": 300,
        "content": "### Step 1: Manual Trigger \ud83d\udd90\ufe0f\u26a1\n\nThis node acts as a **Manual Trigger** to start the workflow on demand.\n\nWhy this step is important:\n\n- \ud83d\udd90\ufe0f Allows you to control when the workflow runs.\n- \ud83e\uddea Useful for testing and debugging automation.\n- \u26a1 Ensures the workflow only executes when you explicitly start it.\n\nIt\u2019s the step that gives you full control to kick off the process whenever needed. \ud83d\ude80\u2728\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cbce1376-b59f-4a7d-a6a6-ac410ae1ca39",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -420,
        -300
      ],
      "parameters": {
        "width": 460,
        "height": 300,
        "content": "### Step 2: Get Rows from Google Sheets \ud83d\udcca\ud83d\udce5\n\nThis node uses the **Get Rows** operation to fetch data from Google Sheets.\n\nWhy this step is important:\n\n- \ud83d\udccb Retrieves the latest rows of data for processing.\n- \ud83d\udd04 Keeps the workflow updated with current sheet entries.\n- \u26a1 Serves as the data source for the rest of the automation.\n\nIt\u2019s the step that pulls information from your Google Sheet into the workflow. \ud83d\udd17\u2728\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3a331aef-f9c8-4368-984f-6221cd1a4a5b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        200
      ],
      "parameters": {
        "color": 4,
        "width": 540,
        "height": 360,
        "content": "### Step 3: Get Subscriber from MailerLite \ud83d\udce7\ud83d\udd0d\n\nThis node uses the **Get a Subscriber** operation to fetch details of subscribers from the MailerLite system.\n\n- **Success Branch:** Subscribers that are already present in MailerLite.  \n- **Error Branch:** Subscribers that are not found in MailerLite.  \n\nWhy this step is important:\n\n- \ud83d\udd0e Identifies which subscribers exist in your MailerLite list.\n- \u2705 Allows the workflow to handle existing and new subscribers differently.\n- \u26a1 Ensures accurate and targeted subscriber management.\n\nIt\u2019s the step that separates known subscribers from new ones for smarter automation. \u2728\ud83d\udcec\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bf9b2275-debd-4113-830c-736d74cb135a",
      "name": "End workflow",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1160,
        -400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "7a52a415-bd9d-4b39-85d6-d3cb8e0b4b8a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -760
      ],
      "parameters": {
        "width": 500,
        "height": 280,
        "content": "### Step 4: End Workflow for Existing Users \ud83d\uded1\u2705\n\nThis **End Workflow** node provides a safe and clean exit for subscribers who are already present in MailerLite.\n\nWhy this step is important:\n\n- \ud83d\udee1\ufe0f Prevents duplicate subscriber creation.\n- \ud83d\udd04 Ensures the workflow only continues for new subscribers.\n- \ud83e\uddf9 Keeps workflow logic clear and organized.\n\nIt\u2019s the step that gracefully ends the process for existing users. \ud83d\udeaa\u2728\n"
      },
      "typeVersion": 1
    },
    {
      "id": "55e7ee44-8deb-4c24-ba01-2cf8dc065acb",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        600
      ],
      "parameters": {
        "color": 5,
        "width": 540,
        "height": 300,
        "content": "### Step 4: Create Subscriber & Assign to Group (HTTP Request) \ud83c\udd95\ud83d\udc65\n\nThis node sends an **HTTP Request** to MailerLite to create a new subscriber and assign them to the required group.\n\nWhy this step is important:\n\n- \ud83c\udd95 Adds new subscribers seamlessly into your MailerLite system.\n- \ud83d\udc65 Automatically assigns them to the correct group for segmentation.\n- \u26a1 Ensures proper organization and targeted email campaigns.\n\nIt\u2019s the step that grows your audience while keeping your mailing lists structured. \ud83d\udce7\u2728\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5357d0af-ef67-4a17-b5c9-a861a948d478",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -940,
        -1220
      ],
      "parameters": {
        "color": 6,
        "width": 560,
        "height": 540,
        "content": "## Prerequisites \u2699\ufe0f\n\nBefore running this workflow, ensure the following setup is complete:\n\n### Google Sheets\n- \u2705 Create and connect your **Google credentials** with both **Google Sheets** and **Google Drive** enabled.  \n- \u2705 Your Google Sheet must include the following header columns:\n  - **Email**\n  - **first_name**\n  - **last_name**\n  - **Company**\n  - **Country**\n  - **group_id**\n\n### MailerLite\n- \u2705 Create and add your **MailerLite API Key**.  \n- \u2705 Use this key in both:\n  - **Get a Subscriber** node  \n  - **Create Subscriber** node  \n\nOnce these are set up, your workflow can fetch data from Google Sheets and sync it with MailerLite subscribers seamlessly. \ud83d\ude80\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3043305e-b7ac-47b3-a36a-cefdb7cd9e74",
  "connections": {
    "Start Workflow": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a subscriber": {
      "main": [
        [
          {
            "node": "End workflow",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create subscriber and assign to group",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Get a subscriber",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Marketing Teams Email Marketers Small Business Owners Community Managers Read from Google Sheets: The workflow begins by reading all contact rows from your designated Google Sheet. Check for Existing Subscribers: For each contact, it performs a search in MailerLite to check if a…

Source: https://n8n.io/workflows/7681/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Gumroad sale trigger. Uses httpRequest, gumroadTrigger, googleSheets, stickyNote. Event-driven trigger; 8 nodes.

HTTP Request, Gumroad Trigger, Google Sheets +1
Email & Gmail

When someone makes a purchase on your Gumroad store, this n8n workflow instantly adds that customer to the right MailerLite group (so your nurture sequence starts on time) and writes the sale details

HTTP Request, Gumroad Trigger, Google Sheets +1
Email & Gmail

Submit any YouTube, Vimeo, or Zoom webinar URL using a simple form and the workflow handles everything from there. It runs a two-phase pipeline: first identifying the top viral moments in your video w

Form Trigger, HTTP Request, Google Sheets +1
Email & Gmail

This workflow allows to : scrape Google Maps data using SerpAPI discovery generic email addresses like contact@ using EmailListVerify API

Google Sheets, HTTP Request, Item Lists
Email & Gmail

🚀 What this template does

HTTP Request, HubSpot, Gmail +2