<!-- BusyBot node reference — https://busybot.net/tools/emelia/ -->

> Node: Emelia (`emelia`) · Action · v1
> Category: Communication · Credentials: Emelia API (`emeliaApi`)
> Updated: 2026-08-16

# 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](https://busybot.net/credentials/emelia-api/) 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:

```json
{
  "type": "emelia",
  "parameters": {
    "resource": "campaign",
    "operation": "create",
    "campaignName": "New Product Launch Outreach"
  }
}
```

Add a contact to a campaign:

```json
{
  "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:

```json
{
  "type": "emelia",
  "parameters": {
    "resource": "campaign",
    "operation": "start",
    "campaignId": "camp_123456"
  }
}
```

Duplicate a campaign, carrying everything over:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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 `resource` first, as it determines available `operation` values
- **Operation dependencies:** Many parameters only appear after selecting specific operations
- **Pagination control:** Use `returnAll: false` with `limit` for controlled result sets
- **Additional fields:** Both campaign and contact list operations support the same `additionalFields` structure
- **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 with `campaignName` even 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 `_id` if you need the full record.