Reference · Tools
Emelia
Manage cold email outreach campaigns and contact lists on the Emelia platform
The Emelia node lets you automate cold email outreach directly from BusyBot workflows — create and duplicate campaigns, add contacts, and start or pause campaigns programmatically. You could, for example, build a workflow that adds a new CRM lead to an Emelia contact list and triggers a campaign start the moment they meet a qualification condition.
- Node type
- Action
- Parameters
- 21
- Outputs
- Output, Error
- Credentials
- Emelia API
Emelia
Manage Emelia cold email campaigns and contact lists
Overview
Emelia is a cold email outreach platform. This tool interacts with Emelia’s GraphQL API to manage campaigns (create, get, list, start, pause, duplicate, add contacts) and contact lists (add contacts, list). All operations use GraphQL queries/mutations sent to https://graphql.emelia.io/graphql with the API key in the Authorization header (no Bearer prefix). The API returns all results in a single call (no server-side pagination), so getAll operations apply client-side slicing when a limit is set.
Category: Communication
Tool Name: emelia
Version: 1
Appearance: Icon: lucide-Mail | Color: #FC636B
Node Type
Action — processes input items and produces output
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Emelia API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Campaign | campaign |
| Contact List | contactList |
Operations
| Operation | Value | Description |
|---|---|---|
| Add Contact | addContact | Add a contact to a campaign (Campaign resource) |
| Create | create | Create a campaign (Campaign resource) |
| Duplicate | duplicate | Duplicate a campaign (Campaign resource) |
| Get | get | Get a campaign (Campaign resource) |
| Get Many | getAll | Get many campaigns (Campaign resource) |
| Pause | pause | Pause a campaign (Campaign resource) |
| Start | start | Start a campaign (Campaign resource) |
| Add | add | Add a contact to a contact list (Contact List resource) |
| Get Many | getAll | Get many contact lists (Contact List resource) |
Parameters
Campaign: Add Contact
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign ID | string | Yes | — | The ID of the campaign to add the contact to. Find in Emelia dashboard URL or via the Get Many operation. Supports expressions like {{ $json.campaignId }}. |
| Contact Email | string | Yes | — | The email address of the contact to add to the campaign. Supports expressions. |
| Additional Fields | collection | No | {} | Optional contact attributes. Add only the ones you need. |
| — Custom Fields | fixedCollection | No | {} | Custom fields to set on the contact. Add one entry per field. |
| — — Field Name | string | No | — | The name of the custom field. |
| — — Value | string | No | — | The value to set on the custom field. |
| — First Name | string | No | — | First name of the contact. |
| — Last Contacted | dateTime | No | — | Last contacted date of the contact. |
| — Last Name | string | No | — | Last name of the contact. |
| — Last Open | dateTime | No | — | Last opened date of the contact. |
| — Last Replied | dateTime | No | — | Last replied date of the contact. |
| — Mails Sent | number | No | 0 | Number of emails sent to the contact. |
| — Phone Number | string | No | — | Phone number of the contact. |
Campaign: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign Name | string | Yes | — | The name of the campaign to create. Supports expressions. |
Campaign: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign ID | string | Yes | — | The ID of the campaign to retrieve. Supports expressions. |
Campaign: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
Campaign: Pause
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign ID | string | Yes | — | The ID of the campaign to pause. The campaign must be in RUNNING mode. Supports expressions. |
Campaign: Start
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign ID | string | Yes | — | The ID of the campaign to start. Email provider and contacts must be set. Supports expressions. |
Campaign: Duplicate
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Campaign ID | string | Yes | — | The ID of the source campaign to duplicate. Find in Emelia dashboard URL or via the Get Many operation. Supports expressions. |
| New Campaign Name | string | Yes | — | The name for the new duplicated campaign. Set it as campaignName in a JSON config. Supports expressions. |
| Options | collection | No | {} | Choose what carries over from the original campaign. |
| — Copy Contacts | boolean | No | false | Whether to copy all the contacts from the original campaign. |
| — Copy Email Provider | boolean | No | true | Whether to set the same email provider as the original campaign. |
| — Copy Email Sequence | boolean | No | true | Whether to copy all the steps of the email sequence from the original campaign. |
| — Copy Global Settings | boolean | No | true | Whether to copy all the general settings from the original campaign. |
Contact List: Add
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Contact List ID | string | Yes | — | The ID of the contact list to add the contact to. Find in Emelia dashboard or via the Get Many operation. Supports expressions. |
| Contact Email | string | Yes | — | The email address of the contact to add to the contact list. Supports expressions. |
| Additional Fields | collection | No | {} | Optional contact attributes. Add only the ones you need. |
| — Custom Fields | fixedCollection | No | {} | Custom fields to set on the contact. Add one entry per field. |
| — — Field Name | string | No | — | The name of the custom field. |
| — — Value | string | No | — | The value to set on the custom field. |
| — First Name | string | No | — | First name of the contact. |
| — Last Contacted | dateTime | No | — | Last contacted date of the contact. |
| — Last Name | string | No | — | Last name of the contact. |
| — Last Open | dateTime | No | — | Last opened date of the contact. |
| — Last Replied | dateTime | No | — | Last replied date of the contact. |
| — Mails Sent | number | No | 0 | Number of emails sent to the contact. |
| — Phone Number | string | No | — | Phone number of the contact. |
Contact List: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 100 | Max number of results to return. (shown when Return All is false) |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. |
Output Data
The Emelia result is merged into the incoming item JSON at the top level, so the fields you sent in pass through and binary data is forwarded.
| Operation | What lands on the item |
|---|---|
campaign / addContact | contactId — the identifier Emelia assigned to the new campaign contact. |
campaign / create | The created campaign record. |
campaign / get | The campaign record. |
campaign / getAll | Fans out — one output item per campaign. Return All returns every campaign; otherwise the list is trimmed to Limit. |
campaign / pause, start | success: true. |
campaign / duplicate | _id — the ID of the newly created copy. |
contactList / add | contactId — the identifier Emelia assigned to the new list contact. |
contactList / getAll | Fans out — one output item per contact list, trimmed to Limit unless Return All is on. |
Emelia returns everything in one call, so Limit is applied after the fetch rather than by the API.
Usage Examples
- Create a new cold email campaign in Emelia
- Add a contact to an Emelia campaign
- List all campaigns with their statistics
- Start a paused Emelia campaign
- Duplicate a campaign with all settings
- Add a contact to an Emelia contact list
- Get all contact lists from Emelia
Example Configuration
Create a campaign:
{
"type": "emelia",
"parameters": {
"resource": "campaign",
"operation": "create",
"campaignName": "New Product Launch Outreach"
}
}
Add a contact to a campaign:
{
"type": "emelia",
"parameters": {
"resource": "campaign",
"operation": "addContact",
"campaignId": "camp_newproduct123",
"contactEmail": "{{ $json.email }}",
"additionalFields": {
"firstName": "Alex",
"lastName": "Johnson"
}
}
}
Start the campaign once contacts and a provider are in place:
{
"type": "emelia",
"parameters": {
"resource": "campaign",
"operation": "start",
"campaignId": "camp_123456"
}
}
Duplicate a campaign, carrying everything over:
{
"type": "emelia",
"parameters": {
"resource": "campaign",
"operation": "duplicate",
"campaignId": "camp_123456",
"campaignName": "Duplicated Campaign - Q1 2024",
"options": {
"copyContacts": true,
"copyProvider": true,
"copyMails": true,
"copySettings": true
}
}
}
Add a fully described contact to a contact list:
{
"type": "emelia",
"parameters": {
"resource": "contactList",
"operation": "add",
"contactListId": "list_789012",
"contactEmail": "jane.smith@example.com",
"additionalFields": {
"firstName": "Jane",
"lastName": "Smith",
"phoneNumber": "+1987654321",
"lastContacted": "2024-01-15T10:30:00Z",
"mailsSent": 5,
"customFieldsUi": {
"customFieldsValues": [
{ "fieldName": "industry", "value": "Technology" }
]
}
}
}
}
List every contact list:
{
"type": "emelia",
"parameters": {
"resource": "contactList",
"operation": "getAll",
"returnAll": true
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Use Emelia to manage cold email campaigns and contact lists — create campaigns, add contacts, start/pause campaigns, and list contact lists.
Parameter Dependencies
- Resource selection: Always set
resourcefirst, as it determines availableoperationvalues - Operation dependencies: Many parameters only appear after selecting specific operations
- Pagination control: Use
returnAll: falsewithlimitfor controlled result sets - Additional fields: Both campaign and contact list operations support the same
additionalFieldsstructure - Campaign state: Pause/Start operations require campaigns to be in appropriate states
Notes
- New Campaign Name is written as
campaignName. Duplicate reuses the same internal name as Create, so a JSON config sets the copy’s name withcampaignNameeven though the panel labels it “New Campaign Name”. - Start has prerequisites. A campaign needs an email provider and at least one contact before it will start; Pause only works on a campaign that is currently running.
- Duplicate returns only an ID. Follow it with Campaign: Get on the returned
_idif you need the full record.
Frequently asked questions
What credential does this node require, and how does authentication work?
You need an Emelia API credential (type: emeliaApi), which is your Emelia API key. The node sends it in the Authorization header without a Bearer prefix — just the raw key. Make sure your key is active in your Emelia account before connecting.
Can I start a campaign immediately after creating it in the same workflow?
Not instantly — Emelia requires a campaign to have an email provider configured and at least one contact added before the Start operation will succeed. A safe workflow sequence is: Create campaign → Add contact(s) → Start campaign. Skipping those prerequisites will result in an error on the Start step.
I'm duplicating a campaign and want to set the copy's name. What parameter controls that?
Use the `campaignName` parameter. Even though the UI labels it 'New Campaign Name' on the Duplicate operation, it uses the same internal parameter name as the Create operation. If you're building the step in JSON config, set `campaignName` and it will apply to the duplicated campaign's name.
The Duplicate operation only returned an ID — how do I get the full campaign details?
That's expected behavior. The Duplicate operation returns only the new campaign's `_id`. To retrieve the full record, follow it with a Campaign: Get operation using that returned `_id` as the identifier.
How does result pagination work when listing campaigns or contact lists?
Emelia's API returns all results in a single response — there is no server-side pagination. When you set `returnAll: false` and provide a `limit`, BusyBot applies that limit client-side by slicing the full result set after it arrives. If you need a controlled batch size, set `returnAll` to false and specify your desired `limit`.
Build with the Emelia node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Emelia API credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.