Automate Systeme.io Contact & Tag Management with n8n

This n8n workflow helps you efficiently manage contacts and tags in Systeme.io by handling API pagination and rate limits automatically. It streamlines retrieving all contacts, tags, filtered contacts by tags, and bulk-adding contacts, saving hours of manual work and avoiding API errors.
httpRequest
splitOut
stickyNote
Workflow Identifier: 2476
NODES in Use: HTTP Request, Split Out, Sticky Note

Press CTRL+F5 if the workflow didn't load.

Learn how to Build this Workflow with AI:

Visit through Desktop for Best experience

1. Opening Problem Statement

Meet Sarah, a digital marketing specialist who manages thousands of contacts and multiple marketing tags in her Systeme.io CRM account. Each week, she spends hours manually exporting contacts and tags from Systeme.io, filtering contacts based on tags, and importing new leads. Not only is the process tedious, but she constantly hits API rate limits, causing interruptions and repeated attempts. This wastes Sarah valuable time, increases the risk of data inconsistencies, and delays her campaigns.

Imagine losing an entire afternoon just trying to get accurate contact lists segmented by tags, or struggling to upload bulk contacts with customized fields through Systeme.io’s native import tool. On top of that, the chance of missing contacts or misapplying tags is high when done manually, which negatively impacts customer engagement and sales.

2. What This Automation Does

This n8n workflow automatically connects with Systeme.io’s API to streamline contact and tag management for you. Running this workflow will:

  • Retrieve all contacts from your Systeme.io account, regardless of volume, handling pagination and rate limits.
  • Fetch all tags used in your Systeme.io account to easily identify your marketing segments.
  • Get contacts filtered by specific tag IDs, allowing you to target segmented lists effortlessly.
  • Bulk-add multiple contacts with custom fields like “utm_source” via Systeme.io API, bypassing the limitations of Systeme.io’s native import tool.
  • Handle API rate limits by automatically spacing requests to prevent failures or bans.
  • Split the response data into manageable individual items for further processing or export.

By automating these tasks, Sarah can save hours each week, avoid manual errors, and focus on strategic marketing efforts.

3. Prerequisites ⚙️

  • n8n Account (cloud or self-hosted) 🔌
  • Systeme.io account with API access and API key 🔑
  • HTTP Request node configured with Systeme.io API endpoint and authentication 🛠️

For self-hosting n8n, you might consider reliable providers like Hostinger for a smooth setup.

4. Step-by-Step Guide

Step 1: Set Up HTTP Request Node to Get All Contacts

Navigate to the n8n editor. Click + Add Node → Search for HTTP Request → Select it. Name it Systeme | Get all contacts.

Configure the node as follows:

  • URL: https://api.systeme.io/api/contacts
  • Method: GET
  • Authentication: Set to your Systeme.io API key using HTTP Header Auth
  • Query Parameters: Add limit with value 100 to get 100 contacts per request.
  • Enable pagination with parameter startingAfter equal to the last item’s ID from previous response to fetch next page.
  • Set request interval to 1000ms to respect API rate limits.
  • Configure the expression for pagination complete check: {{$response.body.hasMore == false}}

Outcome: This node will fetch all contacts safely without hitting API limits.

Common mistake: Forgetting to configure pagination expressions leads to incomplete data.

Step 2: Use Split Out Node to Separate Each Contact

Click + Add Node → Search Split Out → Select it. Name it Split Out2.

Set the field to split out as items. Connect the output of Systeme | Get all contacts node to this node’s input.

This splits the bulk response into individual contact items for easier processing downstream.

Step 3: Retrieve All Tags with HTTP Request Node

Create another HTTP Request node called Systeme | Get All tags with URL https://api.systeme.io/api/tags and the same pagination and authentication setup as the contacts node.

Follow the same pagination configuration and add a connected Split Out node named Split Out for individual tags.

Step 4: Fetch Contacts by Specific Tag

Add an HTTP Request node named Systeme | Get contacts with tag.

Use URL: https://api.systeme.io/api/contacts and add a query parameter tags with the desired tag ID (e.g. “1012751”).

Configure pagination as before to retrieve all contacts with that tag, and connect it to a Split Out node named Split Out3.

Tip: To filter contacts by multiple tags, separate tag IDs with commas (e.g., “1012751,1012529”).

Step 5: Bulk Add Contacts With Custom Fields

Add an HTTP Request node called Systeme | Add contact.

Configure:

  • Method: POST
  • URL: https://api.systeme.io/api/contacts
  • Batching enabled with batch size 9 (to avoid rate limit issues)
  • Body type: JSON
  • Sample JSON body:
{
  "email": "{{ $json.emails }}",
  "fields": [
    {
      "slug": "utm_source",
      "value": "API"
    }
  ]
}

This allows adding multiple contacts via API where you can customize fields like utm_source for tracking.

Step 6: Add Sticky Notes for Guidance

Place Sticky Note nodes next to each main node for quick tips and explanations. For example, near Systeme | Get all contacts, add a note that says “Use this to get all your contacts 👉”.

Step 7: Connect Nodes and Test

Make sure each HTTP Request node connects to its matching Split Out node. Trigger the workflow manually to see data retrieval and splitting working correctly.

Expected: You should see lists of contacts or tags split into individual items.

5. Customizations ✏️

  • Filter by multiple tags: In the Systeme | Get contacts with tag node, modify the tags query parameter to include comma-separated tag IDs (e.g., “1012751,1012529”) for more flexible segmentation.
  • Change batch size for adding contacts: In the Systeme | Add contact node’s batching settings, adjust batchSize to optimize for your API limits or data size.
  • Include additional custom fields: Modify the JSON body in Systeme | Add contact node to add more fields by replicating the “fields” array objects, like {"slug": "phone", "value": "{{ $json.phone }}"}.
  • Dynamic tags input: Use a function or Set node before the Systeme | Get contacts with tag node to dynamically pass tag IDs from other workflows.
  • >

6. Troubleshooting 🔧

Problem: “Pagination expression error or incomplete data retrieval.”
Cause: Incorrect pagination completion expression or misconfigured startingAfter parameter.
Solution: Verify the expression {{$response.body.hasMore == false}} is exactly added, and the pagination parameters reference the correct last item ID in the response.

Problem: “HTTP Request rate limit errors or request failures.”
Cause: Too many requests sent too quickly.
Solution: Use the requestInterval parameter set to 1000ms in the pagination options to space out requests, preventing API bans.

7. Pre-Production Checklist ✅

  • Ensure your Systeme.io API key is valid and has sufficient permissions.
  • Test each HTTP Request node individually to confirm successful data retrieval.
  • Verify pagination returns complete data sets by comparing with Systeme.io dashboard exports.
  • Check Split Out nodes to confirm they produce individual items.
  • For bulk add, validate the JSON structure in a small test batch before full run.

8. Deployment Guide

Once tested, activate the workflow in n8n. Schedule it to run on demand or via a trigger depending on your use case (e.g., time-based trigger for regular updates).

Monitor executions via n8n’s execution history and logs to catch any API errors.

9. FAQs

Q: Can I use this workflow with other CRM tools?
A: This workflow is specifically built for Systeme.io’s API, but the approach and node configurations can be adapted for other APIs with pagination and rate limits.

Q: Does this workflow consume lots of API credits?
A: It depends on your Systeme.io plan. Pagination helps optimize requests, but large datasets will naturally consume more API calls.

Q: Is my contact data kept secure?
A: Yes, the data flows only between n8n and Systeme.io servers using authenticated HTTPS requests.

10. Conclusion

By implementing this n8n workflow, you have automated the heavy lifting of managing contacts and tags in Systeme.io, saving Sarah—and you—hours of manual labor every week. You can now retrieve all contacts and tags, filter contacts by tags, and add contacts in bulk with customized fields safely and efficiently.

Next steps? Consider extending this automation by syncing contact data to Google Sheets, sending notification emails via Gmail when new contacts are added, or integrating with your marketing platforms for seamless campaign automation.

Start now and transform your contact management with powerful, tailored automation.

Promoted by BULDRR AI

Related Workflows

Automate Viral UGC Video Creation Using n8n + Degaus (Beginner-Friendly Guide)

Learn how to automate viral UGC video creation using n8n, AI prompts, and Degaus. This beginner-friendly guide shows how to import, configure, and run the workflow without technical complexity.
Form Trigger
Google Sheets
Gmail
+37
Free

AI SEO Blog Writer Automation in n8n (Beginner Guide)

A complete beginner guide to building an AI-powered SEO blog writer automation using n8n.
AI Agent
Google Sheets
httpRequest
+5
Free

Automate CrowdStrike Alerts with VirusTotal, Jira & Slack

This workflow automates processing of CrowdStrike detections by enriching threat data via VirusTotal, creating Jira tickets for incident tracking, and notifying teams on Slack for quick response. Save hours daily by transforming complex threat data into actionable alerts effortlessly.
scheduleTrigger
httpRequest
jira
+5
Free

Automate Telegram Invoices to Notion with AI Summaries & Reports

Save hours on financial tracking by automating invoice extraction from Telegram photos to Notion using Google Gemini AI. This workflow extracts data, records transactions, and generates detailed spending reports with charts sent on schedule via Telegram.
lmChatGoogleGemini
telegramTrigger
notion
+9
Free

Automate Email Replies with n8n and AI-Powered Summarization

Save hours managing your inbox with this n8n workflow that uses IMAP email triggers, AI summarization, and vector search to draft concise replies requiring minimal review. Automate business email processing efficiently with AI guidance and Gmail integration.
emailReadImap
vectorStoreQdrant
emailSend
+12
Free

Automate Email Campaigns Using n8n with Gmail & Google Sheets

This n8n workflow automates personalized email outreach campaigns by integrating Gmail and Google Sheets, saving hours of manual follow-up work and reducing errors in email sequences. It ensures timely follow-ups based on previous email interactions, optimizing communication efficiency.
googleSheets
gmail
code
+5
Free