How to Create, Update, and Get an e-goi Subscriber in n8n
If you use e-goi to manage your subscribers and n8n to automate your workflows, you probably don’t want to manually add or update contacts all day, right? In this guide, we’ll walk through a simple but powerful n8n workflow template that handles the whole flow for you: it creates a contact in e-goi, updates that contact, then fetches it again so you can confirm everything worked.
Think of it as a reusable pattern for subscriber management. You can plug it into signup forms, CRM syncs, onboarding sequences, or any process where you need to create and keep subscriber data in sync.
What this n8n + e-goi workflow actually does
The template follows a clear, linear flow:
- Start the workflow manually (or with another trigger you choose).
- Create a new contact in e-goi.
- Update that same contact with new details.
- Fetch the contact from e-goi to verify the changes.
Under the hood, it passes the list ID and contact ID from one node to the next using n8n expressions. That means you don’t have to copy-paste IDs or hardcode values, the workflow automatically pulls what it needs from previous steps.
Here are the four nodes involved:
- Manual Trigger – kicks off the workflow when you click Execute.
- e-goi node – Create contact – creates a new subscriber in a specific list.
- e-goi node – Update contact – edits that subscriber’s information.
- e-goi node – Get contact – retrieves the full contact record so you can double-check the update.
When you’d use this template
This pattern is handy in a bunch of situations, for example:
- New user signups that should automatically land in an e-goi list.
- Keeping your CRM and e-goi in sync without manual exports and imports.
- Running list hygiene or enrichment flows where you tweak subscriber data over time.
- Testing e-goi integrations in a safe, controlled way before rolling out bigger automations.
If you ever find yourself thinking, “I just want n8n to create or update this subscriber and show me the result,” this template is exactly what you need.
Before you start: prerequisites
You only need a few things in place to follow along:
- An n8n instance (either n8n Cloud or self-hosted).
- An e-goi account with valid API credentials.
- Basic familiarity with n8n expressions, so you know how to reference values from previous nodes.
Step-by-step: building the workflow in n8n
1. Add a Manual Trigger node
Start a new workflow in n8n and drop in a Manual Trigger node. This makes it really easy to test the flow as you build it, since you can just hit Execute and see what happens.
Later, you can swap this out for a webhook, schedule, or any other trigger that fits your use case, but for now Manual Trigger keeps things simple.
2. Create a contact with the e-goi node
Next, add an e-goi node and connect it to the Manual Trigger.
Configure it like this:
- Operation:
create
Example fields used in the template:
list: 1
email: nathan@testmail.com
additionalFields: { first_name: "Nathan" }
Make sure you select or create your e-goi credentials in this node (API key or OAuth, depending on how you’ve set it up in n8n).
When this node runs, e-goi responds with a JSON object that includes the new contact’s ID. In this template, that ID is typically found at:
json.base.contact_id
This contact ID is the key we’ll reuse in the next steps so we always update and fetch the correct subscriber.
3. Update that same contact using expressions
Now add another e-goi node and connect it after the create node. This one will handle the update operation.
Instead of typing in the list ID and contact ID manually, you’ll use n8n expressions to pull them from the previous node. That way, the workflow stays dynamic and works for any contact created by the first step.
Configure the node like this:
list: ={{$node["e-goi"].parameter["list"]}}
contactId: ={{$node["e-goi"].json["base"]["contact_id"]}}
updateFields: { first_name: "Nat" }
A couple of notes here:
listis read from the parameters of the first e-goi node. So if you change the list ID there, it automatically carries through.contactIdis read from the JSON output of the create node. That’s how we know we’re updating the exact contact we just created.updateFieldscan include multiple properties. In the example, we just changefirst_namefrom"Nathan"to"Nat", but you can add more fields as needed.
If your e-goi response structure looks a bit different, just adjust the JSON path accordingly. You can always run the create node once and inspect its output in the execution log to confirm where contact_id lives.
4. Get the contact to confirm the update
Finally, add one more e-goi node to retrieve the updated subscriber and verify that everything worked.
Set it to use the get operation and again use expressions to reference the correct list and contact ID:
list: ={{$node["e-goi"].parameter["list"]}}
contactId: ={{$node["e-goi1"].json["base"]["contact_id"]}}
operation: get
Here, the example assumes your nodes are named in a certain way, such as e-goi for the create node and e-goi1 for the update node. Feel free to rename them in n8n, just remember to update the expressions to match.
When you run the workflow, this Get node will return the full contact object. In the execution panel, you should now see the updated first name and any other fields you changed.
Understanding n8n expressions and data mapping
If you’re newer to n8n, the expression syntax can look a bit intimidating at first, but it’s really just a way of saying “grab this value from that node.”
This template shows two very common patterns:
- Reading a parameter from an earlier node
{{$node["e-goi"].parameter["list"]}}
This pulls thelistparameter that you configured on the first e-goi node. - Reading a value from a node’s JSON output
{{$node["e-goi"].json["base"]["contact_id"]}}
This pulls thecontact_idfrom the response returned by the create node.
To make this easier, use the expression editor in n8n. You can click into a field, switch to expression mode, and then browse or click values from previous nodes to insert the correct path.
If something doesn’t work or a value is missing, try this quick check:
- Run the workflow until the create node executes.
- Open that node’s output and look at the raw JSON.
- Find the exact path to the ID, for example
json.contact_idorjson.base.contact_id. - Update your expression to match that path.
How to test your workflow
Once everything is wired up, it’s time to see it in action.
- Click Execute Workflow on the Manual Trigger node.
- Open the create e-goi node output. Confirm you see a
contact_idin the JSON. - Check the update node. The response should either show success or include the updated contact data.
- Inspect the get node output. Verify that the first name (and any other fields you changed) now reflect the updated values, such as
"Nat".
If all three steps look good, your create-update-get loop is working.
Troubleshooting common issues
Missing contact_id in the create response
If you don’t see contact_id where you expect it:
- Open the create node output and inspect the entire JSON object.
- Look under both
jsonandjson.basefor any field that looks like an ID. - Check if the node returned an error instead of a successful response.
- Update your expressions to match the actual JSON path where the ID is stored.
Invalid list ID errors
If e-goi complains about the list ID:
- Double-check that the list exists in your e-goi account.
- Confirm your API user has access to that specific list.
- Use the correct numeric ID or identifier required by the e-goi API.
API rate limits or network problems
Sometimes calls fail for reasons outside your control, such as rate limits or temporary network issues. To make your workflow more robust, you can:
- Add a Retry or Error Workflow pattern in n8n.
- Use a Wait node between calls if you suspect propagation delays in e-goi.
- Log errors so you can review them later.
Dealing with duplicate contacts
What if the same email tries to sign up twice? You have a couple of options:
- Use a search endpoint or node first to check if the contact already exists.
- Add an IF node to branch the workflow: one path for new contacts, another for existing ones.
- Rely on e-goi’s built-in deduplication rules if that fits your strategy.
Decide on your approach early so your lists stay clean and consistent.
Best practices & easy enhancements
Once the basic flow works, you can start polishing it. Here are a few ideas:
- Use a Set node for input validation
Add a Set node before the create step to normalize and validate data, such as email format or required fields. - Guard against failures
Insert an IF node after the create call to make sure it succeeded before you run the update and get steps. - Avoid hardcoding sensitive values
Store list IDs and credentials in n8n credentials or environment variables instead of plain text inside nodes. - Log responses for auditing
Save responses to a database or log system if you need an audit trail of subscriber changes. - Respect GDPR and privacy rules
Capture consent fields, opt-in timestamps, and handle PII securely according to your local regulations.
Conceptual view of the template JSON
Curious how the template looks in JSON form? Here is a simplified conceptual version that shows how the nodes connect and how the contact ID flows through:
{ "nodes": [ { "type": "Manual Trigger" }, { "type": "e-goi", "operation": "create", "parameters": { "email": "nathan@testmail.com", "list": 1 } }, { "type": "e-goi", "operation": "update", "parameters": { "contactId": "={{$node[\"e-goi\"].json.base.contact_id}}" } }, { "type": "e-goi", "operation": "get", "parameters": { "contactId": "={{$node[\"e-goi1\"].json.base.contact_id}}" } } ]
}
In your actual n8n instance, you’ll have full node configs, credentials, and more parameters, but this gives you the gist of how the IDs are passed around.
Security and compliance tips
Since you’re working with contact data, it’s worth keeping security in mind:
- Always store e-goi API keys inside n8n credentials, not in plain text fields.
- If you store PII in databases or logs, make sure it’s encrypted or handled according to your security policies.
- Review your workflow for GDPR or other data protection compliance, especially around consent and data retention.
Why this pattern makes your life easier
This simple create-update-get pattern might look basic, but it scales nicely. Once you trust it, you can plug it into:
- Onboarding journeys where new users get added to e-goi and enriched over time.
- CRM enrichment flows where you keep marketing and sales tools aligned.
- List hygiene processes where you regularly update or correct subscriber data.
All of that without writing custom code, just using n8n nodes and expressions.
Try the n8n e-goi workflow template
Ready to see it in your own setup?
- Import the workflow template into your n8n instance.
- Connect your e-goi credentials in the e-goi nodes.
- Hit Execute on the Manual Trigger.
- Inspect each node in the execution log to confirm the contact is created, updated, and retrieved correctly.
From there, you can customize it: add conditional logic, “upsert” behavior, or integrate with other systems like CRMs, forms, or payment tools.
