> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# E-goi as a data source

> Bring data from E-goi to Nekt.

E-goi is a multichannel marketing automation platform. It manages contact lists and segments, sends email, SMS, push, and web push campaigns, and runs marketing automations. This connector reads your lists, contacts, campaigns, and the delivery and engagement report of each campaign through the E-goi Marketing API (v3).

## Before you start

The connection uses your E-goi **API key**. The API is available on every E-goi plan except **GoSend**.

<Steps>
  <Step title="Copy your API key">
    Sign in to E-goi, open the user menu in the top right corner, and click **Integrations**. Copy the value under **API Key**.
  </Step>
</Steps>

<Warning>
  E-goi counts API usage against your plan: each plan includes a monthly number of API requests, and your account also has an hourly limit shared by every integration that uses it. This connector keeps its usage low (see [API usage](#api-usage) below), but the requests it makes still count toward your quota.
</Warning>

## Configuring E-goi as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the E-goi option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

The following configurations are available:

* **API Key**: The key from **Integrations → API Key** in E-goi.

* **Start Date**: The earliest campaign send whose report is read on the first sync. Lists, contacts, campaigns, and the other catalogs are always read in full, whatever this date. Each campaign report costs one API request, so on an account with a long history, leaving this empty makes the first sync read one report per campaign ever sent.

* **Report Lookback Days**: (Default: 30) How many days of already-sent campaigns have their report read again on every sync. Opens, clicks, bounces, and unsubscriptions keep arriving for weeks after a send; this window keeps recent reports up to date. A larger window costs more API requests on every sync.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.

* **Layer**: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **Folder**: a folder can be created inside the selected layer to group all tables being created from this new data source.
* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** to all tables at once and make this process faster!
* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data - which is good if, for example, you want to keep every record ever fetched.
  * Full table: every time the extraction happens, we'll get the current state of the data - which is good if, for example, you don't want to have deleted data in your catalog.

<Note>
  Keep the campaign report streams on **INCREMENTAL**. Each sync only reads the reports of recently sent campaigns, so a full-table sync would replace the table with those recent reports alone.
</Note>

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).

Optionally, you can define some additional settings:

* Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource [here](https://docs.nekt.com/get-started/core-concepts/resource-control).
* Determine when to execute an **Additional [Full Sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync)**. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

## How syncing works

**Catalogs** (lists, contacts, list fields, segments, campaigns, automations, tags, users, senders, and the suppression list) are read in full on every sync. E-goi offers no way to ask only for contacts changed since a date, and a full read costs one request per 1,000 records.

**Campaign reports** sync **incrementally** on `campaign_sent_at`, the time the campaign went out. Each report stream reads only the campaigns of its channel. On the first sync, those are the campaigns sent since **Start Date**. On every later sync, they are the campaigns sent since the latest send already read minus **Report Lookback Days**. Each report is stored under its `campaign_hash`, so reading it again updates its counters, and reports of older campaigns keep their last values.

## API usage

A daily sync of an account with a few lists and a few thousand contacts typically makes a few dozen requests, plus one per campaign inside the report window. What drives the count:

* one request per 1,000 records of each catalog (contacts are the largest);
* one request per campaign report, only for campaigns inside the report window;
* nothing per contact: contact activity and per-contact statistics are not extracted, because they would cost one request per contact on every sync.

When E-goi reports that the hourly limit of your account is spent, the sync pauses until the limit resets and then continues, and the run log says so. If your plan's API quota is used up, the sync stops with a message saying so. It works again once the quota renews or you add requests to your plan.

## Data notes

* E-goi sends dates without a time zone (for example `2026-09-01 10:30:00`). They are stored as UTC, unchanged.
* Empty dates, which E-goi sends as `0000-00-00 00:00:00`, are stored as null.
* Nested data — contact custom fields (`extra`), report breakdowns (`by_date`, `by_url`, and so on), segment rules, and field options — is stored as JSON text.
* Custom field values in `contacts.extra` are keyed by `field_id`. The `list_fields` stream gives the name and format of each one.

## Streams

| Stream                    | Slug                        | Sync        | Description                                                                                                                         |
| ------------------------- | --------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Lists                     | `lists`                     | Full table  | Contact lists of the account.                                                                                                       |
| Contacts                  | `contacts`                  | Full table  | Contacts of every list, with their channel statuses, subscription history, custom fields and tags.                                  |
| List Fields               | `list_fields`               | Full table  | Base and custom fields of every list. Use it to name the `field_id` keys in `contacts.extra`.                                       |
| Segments                  | `segments`                  | Full table  | Segments of every list: automatic, rule-based (saved) and tag segments.                                                             |
| Campaigns                 | `campaigns`                 | Full table  | Campaigns of every channel, with their status and send dates.                                                                       |
| Campaign Groups           | `campaign_groups`           | Full table  | Groups used to organize campaigns.                                                                                                  |
| Email Campaign Reports    | `email_campaign_reports`    | Incremental | Delivery and engagement report of each sent email campaign, with daily, hourly, location, domain, link and email-client breakdowns. |
| SMS Campaign Reports      | `sms_campaign_reports`      | Incremental | Delivery report of each sent SMS campaign, with a breakdown per mobile network.                                                     |
| Push Campaign Reports     | `push_campaign_reports`     | Incremental | Delivery and open report of each sent mobile push campaign, with a breakdown per operating system.                                  |
| Web Push Campaign Reports | `web_push_campaign_reports` | Incremental | Delivery, open and click report of each sent web push campaign, with device, operating system, browser and URL breakdowns.          |
| Automations               | `automations`               | Full table  | Marketing automations of the account.                                                                                               |
| Tags                      | `tags`                      | Full table  | Tags available to label contacts.                                                                                                   |
| Users                     | `users`                     | Full table  | E-goi users of the account and their permission profiles.                                                                           |
| Email Senders             | `email_senders`             | Full table  | Email addresses campaigns can be sent from, and their approval status.                                                              |
| Cellphone Senders         | `cellphone_senders`         | Full table  | SMS senders (numbers or alphanumeric names) and their approval status.                                                              |
| Suppression List          | `suppression_list`          | Full table  | Emails, domains and numbers E-goi never sends to again (unsubscribes, bounces, manual blocks).                                      |

## Fields by stream

<AccordionGroup>
  <Accordion title="Lists">
    Contact lists of the account.

    **Key:** `list_id` — **Sync:** full table

    **Fields:**

    * `list_id` - Unique identifier of the list
    * `internal_name` - Internal name of the list, only visible inside E-goi
    * `public_name` - Public name of the list, shown to contacts (e.g. in forms and emails)
    * `status` - Status of the list (active or blocked)
    * `group_id` - Identifier of the list group the list belongs to
    * `created` - Date and time the list was created (as sent by E-goi, without time zone)
    * `updated` - Date and time the list was last updated (as sent by E-goi, without time zone)
  </Accordion>

  <Accordion title="Contacts">
    Contacts of every list, with their channel statuses, subscription history, custom fields and tags.

    **Key:** `list_id`, `contact_id` — **Sync:** full table

    **Fields:**

    * `list_id` - Identifier of the E-goi contact list the record belongs to
    * `contact_id` - Unique identifier of the contact in the list (10 hexadecimal characters)
    * `status` - Status of the contact in the list (active, inactive, removed or unconfirmed)
    * `consent` - Consents given by the contact
    * `consent_date` - Date and time the contact gave consent
    * `subscription_method` - How the contact joined the list (manual, form, imported, referral or api)
    * `subscription_date` - Date and time the contact joined the list
    * `subscription_form` - Identifier of the form the contact subscribed through
    * `unsubscription_method` - How the contact left the list (manual, form, unsubscribe\_link, bounce or api)
    * `unsubscription_reason` - Reason given for unsubscribing (not\_interested, lack\_of\_time, email\_address\_change, spam or other)
    * `unsubscription_observation` - Free-text comment left when unsubscribing
    * `unsubscription_date` - Date and time the contact unsubscribed (empty while subscribed)
    * `change_date` - Date and time the contact was last modified
    * `first_name` - First name of the contact
    * `last_name` - Last name of the contact
    * `birth_date` - Birth date of the contact
    * `language` - Language of the contact (en, pt, br, es, de, hu or fr)
    * `email` - Email address of the contact
    * `email_status` - Status of the email channel for the contact (active or inactive)
    * `cellphone` - Mobile number of the contact (country code and number split by '-')
    * `cellphone_status` - Status of the SMS channel for the contact (active or inactive)
    * `phone` - Landline number of the contact (country code and number split by '-')
    * `phone_status` - Status of the voice channel for the contact (active or inactive)
    * `push_token_android` - Android push tokens of the contact (JSON array of objects with app\_id and token)
    * `push_token_ios` - iOS push tokens of the contact (JSON array of objects with app\_id and token)
    * `extra` - Custom (extra) fields of the contact (JSON array of objects with field\_id, format, value and, for phone fields, status). Field names are in the list\_fields stream
    * `tags` - Identifiers of the tags attached to the contact (see the tags stream)
  </Accordion>

  <Accordion title="List Fields">
    Base and custom fields of every list. Use it to name the `field_id` keys in `contacts.extra`.

    **Key:** `list_id`, `field_id` — **Sync:** full table

    **Fields:**

    * `list_id` - Identifier of the E-goi contact list the record belongs to
    * `field_id` - Identifier of the field: the field name for base fields (e.g. email), a number for extra fields (matches field\_id in contacts.extra)
    * `type` - Field type: base (built into E-goi) or extra (custom field)
    * `name` - Name of the field
    * `format` - Format of the field (date, text, cellphone, phone, number, email, options or countries)
    * `unique` - Whether the field value must be unique within the list
    * `options` - Options of an 'options' field (JSON array of objects with option\_id and one label per language)
  </Accordion>

  <Accordion title="Segments">
    Segments of every list: automatic, rule-based (saved) and tag segments.

    **Key:** `list_id`, `segment_id` — **Sync:** full table

    **Fields:**

    * `list_id` - Identifier of the E-goi contact list the record belongs to
    * `segment_id` - Unique identifier of the segment
    * `name` - Name of the segment
    * `type` - Type of segment: auto (created by E-goi), saved (rule-based) or tag
    * `match` - How the rules of a saved segment combine: all or any
    * `invert` - Whether a saved segment selects the contacts that do NOT match its rules
    * `rules` - Rules of a saved segment (JSON array of objects with field\_id, operator and value)
    * `created` - Date and time the segment was created (tag segments)
    * `updated` - Date and time the segment was last updated (tag segments)
  </Accordion>

  <Accordion title="Campaigns">
    Campaigns of every channel, with their status and send dates.

    **Key:** `campaign_hash` — **Sync:** full table

    **Fields:**

    * `campaign_hash` - Unique hash of the campaign, used to fetch its report
    * `campaign_id` - Numeric identifier of the campaign
    * `channel` - Channel of the campaign (email, push, sms, smart\_sms, voice or web\_push)
    * `status` - Status of the campaign (draft, canceled, queued, paused, sending or sent)
    * `internal_name` - Internal name of the campaign, only visible inside E-goi
    * `title` - Subject of the campaign (email subject line)
    * `list_id` - Identifier of the contact list the campaign was sent to
    * `group_id` - Identifier of the campaign group (see the campaign\_groups stream)
    * `automation_id` - Identifier of the automation that sends the campaign, when it is part of one
    * `created_by` - Identifier of the E-goi user who created the campaign
    * `processed_messages` - Total number of messages processed for the campaign
    * `thumbnail` - URL of the campaign thumbnail image
    * `created` - Date and time the campaign was created
    * `updated` - Date and time the campaign was last updated
    * `start_date` - Date and time the campaign started sending
    * `end_date` - Date and time the campaign finished sending
    * `schedule_enabled` - Whether the campaign was scheduled
    * `schedule_date` - Date and time the campaign was scheduled to send
  </Accordion>

  <Accordion title="Campaign Groups">
    Groups used to organize campaigns.

    **Key:** `group_id` — **Sync:** full table

    **Fields:**

    * `group_id` - Unique identifier of the group
    * `name` - Name of the campaign group
  </Accordion>

  <Accordion title="Email Campaign Reports">
    Delivery and engagement report of each sent email campaign, with daily, hourly, location, domain, link and email-client breakdowns.

    **Key:** `campaign_hash` — **Sync:** incremental on `campaign_sent_at`

    **Fields:**

    * `campaign_hash` - Hash of the campaign the report belongs to (see the campaigns stream)
    * `campaign_id` - Numeric identifier of the campaign
    * `list_id` - Identifier of the contact list the campaign was sent to
    * `campaign_status` - Status of the campaign when the report was read
    * `campaign_sent_at` - When the campaign went out (start date, else schedule or end date); used as the incremental replication key
    * `sends` - Total number of messages sent
    * `opens` - Total number of opens (a contact can open more than once)
    * `unique_opens` - Number of contacts who opened the email
    * `clicks` - Total number of link clicks
    * `unique_clicks` - Number of contacts who clicked a link
    * `hard_bounces` - Number of permanent delivery failures
    * `soft_bounces` - Number of temporary delivery failures
    * `complaints` - Number of spam complaints
    * `unsubscriptions` - Number of unsubscriptions caused by the campaign
    * `by_date` - Daily stats (JSON array of objects with date in DD-MM-YYYY, sends, opens, clicks, hard\_bounces, soft\_bounces, complaints and unsubscriptions)
    * `by_weekday` - Stats per day of the week (JSON array; weekday 0 is Sunday)
    * `by_hour` - Stats per hour of the day (JSON array; hour 00-23)
    * `by_location` - Stats per location (JSON array of objects with location, region, country and counters)
    * `by_domain` - Stats per recipient email domain (JSON array)
    * `by_url` - Clicks per link of the email (JSON array of objects with url and clicks)
    * `by_reader` - Opens per email client (JSON array of objects with reader, type and opens)
  </Accordion>

  <Accordion title="SMS Campaign Reports">
    Delivery report of each sent SMS campaign, with a breakdown per mobile network.

    **Key:** `campaign_hash` — **Sync:** incremental on `campaign_sent_at`

    **Fields:**

    * `campaign_hash` - Hash of the campaign the report belongs to (see the campaigns stream)
    * `campaign_id` - Numeric identifier of the campaign
    * `list_id` - Identifier of the contact list the campaign was sent to
    * `campaign_status` - Status of the campaign when the report was read
    * `campaign_sent_at` - When the campaign went out (start date, else schedule or end date); used as the incremental replication key
    * `destinations` - Number of destinations of the campaign
    * `sends` - Total number of messages sent
    * `delivered` - Number of messages delivered
    * `error` - Number of messages that failed
    * `invalid` - Number of messages to invalid numbers
    * `pending` - Number of messages still pending delivery
    * `by_network` - Stats per mobile network (JSON array of objects with network, sends, delivered, error, invalid and pending)
  </Accordion>

  <Accordion title="Push Campaign Reports">
    Delivery and open report of each sent mobile push campaign, with a breakdown per operating system.

    **Key:** `campaign_hash` — **Sync:** incremental on `campaign_sent_at`

    **Fields:**

    * `campaign_hash` - Hash of the campaign the report belongs to (see the campaigns stream)
    * `campaign_id` - Numeric identifier of the campaign
    * `list_id` - Identifier of the contact list the campaign was sent to
    * `campaign_status` - Status of the campaign when the report was read
    * `campaign_sent_at` - When the campaign went out (start date, else schedule or end date); used as the incremental replication key
    * `sends` - Total number of notifications sent
    * `opens` - Number of notifications opened
    * `delivered` - Number of notifications delivered
    * `received` - Number of notifications received
    * `bounces` - Number of notifications that bounced
    * `error` - Number of notifications that failed
    * `by_operating_system` - Stats per operating system (JSON array of objects with operating\_systems and counters)
  </Accordion>

  <Accordion title="Web Push Campaign Reports">
    Delivery, open and click report of each sent web push campaign, with device, operating system, browser and URL breakdowns.

    **Key:** `campaign_hash` — **Sync:** incremental on `campaign_sent_at`

    **Fields:**

    * `campaign_hash` - Hash of the campaign the report belongs to (see the campaigns stream)
    * `campaign_id` - Numeric identifier of the campaign
    * `list_id` - Identifier of the contact list the campaign was sent to
    * `campaign_status` - Status of the campaign when the report was read
    * `campaign_sent_at` - When the campaign went out (start date, else schedule or end date); used as the incremental replication key
    * `sends` - Total number of notifications sent
    * `opens` - Number of notifications opened
    * `clicks` - Number of notifications clicked
    * `bounces` - Number of notifications that bounced
    * `by_device` - Stats per device type (JSON array)
    * `by_operating_system` - Stats per operating system and version (JSON array)
    * `by_browser` - Stats per browser and version (JSON array)
    * `by_url` - Stats per website URL (JSON array)
  </Accordion>

  <Accordion title="Automations">
    Marketing automations of the account.

    **Key:** `automation_id` — **Sync:** full table

    **Fields:**

    * `automation_id` - Unique identifier of the automation
    * `title` - Title of the automation
    * `list_id` - Identifier of the contact list the automation runs on
    * `status` - Status of the automation (active or inactive)
    * `created_by` - Identifier of the E-goi user who created the automation
    * `allow_multiple_contacts` - Whether a contact can enter the automation more than once
    * `contact_limit` - Maximum number of contacts the automation accepts (0 means no limit)
    * `created` - Date the automation was created
    * `updated` - Date the automation was last updated
  </Accordion>

  <Accordion title="Tags">
    Tags available to label contacts.

    **Key:** `tag_id` — **Sync:** full table

    **Fields:**

    * `tag_id` - Unique identifier of the tag
    * `name` - Name of the tag
    * `color` - Color of the tag (hex code)
  </Accordion>

  <Accordion title="Users">
    E-goi users of the account and their permission profiles.

    **Key:** `user_id` — **Sync:** full table

    **Fields:**

    * `user_id` - Unique identifier of the user
    * `username` - Login name of the user
    * `is_admin` - Whether the user is an administrator of the account
    * `first_name` - First name of the user
    * `last_name` - Last name of the user
    * `email` - Email address of the user
    * `phone` - Phone number of the user
    * `profile_image` - URL of the user's profile image
    * `status` - Status of the user (active or inactive)
    * `created` - Date and time the user was created
    * `updated` - Date and time the user was last updated
    * `profile` - Permission profiles of the user (JSON array of objects with profile\_id and title)
  </Accordion>

  <Accordion title="Email Senders">
    Email addresses campaigns can be sent from, and their approval status.

    **Key:** `sender_id` — **Sync:** full table

    **Fields:**

    * `sender_id` - Unique identifier of the sender
    * `name` - Display name of the sender
    * `email` - Email address the campaigns are sent from
    * `status` - Approval status of the sender (active, moderation or rejected)
  </Accordion>

  <Accordion title="Cellphone Senders">
    SMS senders (numbers or alphanumeric names) and their approval status.

    **Key:** `sender_id` — **Sync:** full table

    **Fields:**

    * `sender_id` - Unique identifier of the sender
    * `cellphone` - Sender shown on SMS messages (number or alphanumeric name)
    * `type` - Type of SMS sender (alpha\_numeric or numeric)
    * `status` - Approval status of the sender (active, moderation or rejected)
  </Accordion>

  <Accordion title="Suppression List">
    Emails, domains and numbers E-goi never sends to again (unsubscribes, bounces, manual blocks).

    **Key:** `id` — **Sync:** full table

    **Fields:**

    * `id` - Unique identifier of the entry
    * `value` - Suppressed value (email address, email domain, email user or number)
    * `type` - Type of value (email, email\_domain, email\_user, cellphone or phone)
    * `method` - How the value entered the suppression list (unsubscribe, bounce, manual, other or forgotten)
    * `campaign_hash` - Hash of the campaign that caused the suppression, when there is one
    * `created` - Date and time the value was added to the suppression list
  </Accordion>
</AccordionGroup>
