> ## 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.

# SenseData as a data source

> Bring data from SenseData to your Lakehouse.

SenseData is a Brazilian Customer Success platform. It consolidates a company's customers, contracts, billing, product usage and support history into a single view of each account, scores that account with indicators such as Sense Score, Engagement Score and NPS, and drives the CS team's work through playbooks, tasks and portfolio journeys. The connector extracts that whole operation — the accounts and the people in them, the commercial and financial history, the daily indicators, the team's activity, and the survey answers behind the scores — so you can analyse retention and expansion in your Lakehouse.

Each SenseData environment issues its own API key, and the key is what identifies the environment: there is no subdomain or instance setting to fill in.

## Configuring SenseData 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 SenseData option from the list of connectors.

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

### 1. Add account access

SenseData authenticates with an **API key** generated inside the platform. In SenseData, go to **Configurações**, open **Acessos**, and then **Gerenciador de Chave API**. Copy the key from there.

<Warning>Generating a new key **replaces** the current one. Every other integration still using the old key loses access immediately, so check whether a key already exists before creating another.</Warning>

<Note>Keys belong to a single environment. If your company has more than one SenseData environment, each one needs its own key and its own source in Nekt.</Note>

The following configurations are available:

* **API key**: the key copied from Gerenciador de Chave API. Required.

* **Initial sync date**: the earliest date to read from. Leave it empty to read the full history of every table except KPIs — that one always reads a bounded window and starts two years back when this is empty.

* **Page size**: how many records are requested per page. SenseData allows up to 1000, which is the default and the fastest option.

* **Requests per minute**: how fast this source may call the API. SenseData allows 500 calls per minute per key, and that allowance is shared with every other integration using the same key, so the default of 300 leaves room for them. Set it to 0 to remove the limit.

* **KPI window (days)**: how many days of KPI history each request covers. SenseData computes one KPI value per customer per indicator per day, so the default of 1 keeps each request small. Raise it to load history faster if your account has few customers.

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.

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>

## Things to know

**Nested data is stored as JSON text.** Columns whose shape depends on your own configuration — `custom_fields` on customers, contacts and tasks, `data` on custom data, `answers` on form answers, `lanes` on journeys, and `params` and `actions` on rules — are stored as JSON strings rather than as nested columns, so a change in your SenseData configuration never breaks the table. Parse them in a Query when you need the individual values.

**The embedded customer and user blocks become plain columns.** Where SenseData nests a customer, a user or a status inside a record, the connector unpacks it into `customer_id`, `customer_cnpj`, `owner_email`, `status_description` and so on, so you can filter and join on them directly.

**KPIs are read a day at a time.** SenseData refuses to page deeply into the KPI history and asks for a narrower date filter instead, so the connector walks that history in windows. If the KPIs table ever fails with a message about pagination, lower the KPI window or set a more recent initial sync date.

**Support tickets and form answers are always full syncs.** Neither exposes a timestamp that moves when the record changes, so an incremental read would freeze every ticket in the state it had when first seen.

**A module outside your plan skips its table, it does not fail the run.** If SenseData refuses a stream because the module behind it is not part of your plan, the run log says which stream was skipped and the extraction carries on. That table simply is not updated, so check the run log before concluding a table is empty.

# Streams and Fields

Below you'll find all available data streams from SenseData and their corresponding fields. API reference: [SenseData API documentation](https://api.sensedata.io/v2/redoc).

## Available streams

| Stream                   | Slug                   | Sync        | Replication key |
| ------------------------ | ---------------------- | ----------- | --------------- |
| Customers                | `customers`            | INCREMENTAL | `updated_at`    |
| Customer Statuses        | `customers_status`     | FULL\_TABLE | —               |
| Customer Notes           | `customers_notes`      | INCREMENTAL | `updated_on`    |
| Custom Field Definitions | `custom_fields_config` | FULL\_TABLE | —               |
| Contacts                 | `contacts`             | INCREMENTAL | `updated_at`    |
| Contracts                | `contracts`            | INCREMENTAL | `updated_at`    |
| Contract Statuses        | `contracts_status`     | FULL\_TABLE | —               |
| Billing Documents        | `billing`              | INCREMENTAL | `updated_at`    |
| Billing Statuses         | `billing_status`       | FULL\_TABLE | —               |
| Tasks                    | `tasks`                | INCREMENTAL | `updated_at`    |
| Task Statuses            | `tasks_status`         | FULL\_TABLE | —               |
| Task Types               | `tasks_types`          | FULL\_TABLE | —               |
| Task Priorities          | `tasks_priorities`     | FULL\_TABLE | —               |
| Task Check-ins           | `tasks_checkin`        | INCREMENTAL | `checkin_at`    |
| Deleted Tasks            | `deleted_tasks`        | INCREMENTAL | `deleted_at`    |
| Playbooks                | `playbooks`            | FULL\_TABLE | —               |
| KPIs                     | `kpis`                 | INCREMENTAL | `ref_date`      |
| KPI Definitions          | `kpis_types`           | FULL\_TABLE | —               |
| Custom Data              | `custom_data`          | INCREMENTAL | `ref_date`      |
| Custom Data Types        | `custom_data_types`    | FULL\_TABLE | —               |
| Usage Events             | `default_usage`        | INCREMENTAL | `ref_date`      |
| Usage Time               | `usage_time`           | INCREMENTAL | `ref_date`      |
| NPS Answers              | `nps`                  | INCREMENTAL | `updated_at`    |
| Forms                    | `forms`                | INCREMENTAL | `updated_at`    |
| Form Answers             | `form_answers`         | FULL\_TABLE | —               |
| Support Tickets          | `support_tickets`      | FULL\_TABLE | —               |
| Journeys                 | `journeys`             | INCREMENTAL | `updated_at`    |
| Journey Customers        | `journey_customers`    | FULL\_TABLE | —               |
| Journey Movement Log     | `journey_logs`         | FULL\_TABLE | —               |
| Journey Notes            | `journey_notes`        | INCREMENTAL | `updated_at`    |
| Users                    | `users`                | INCREMENTAL | `updated_at`    |
| Rules                    | `rules`                | FULL\_TABLE | —               |

## Fields by stream

<AccordionGroup>
  <Accordion title="Customers">
    The accounts SenseData tracks — the table every other stream joins back to. Includes the lifecycle stage, the assigned CS analyst and manager, and the churn date and reason once an account is cancelled.

    Primary key: `id`

    | Field                | Type     | Description                                                                                                                                                                      |
    | :------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                 | Integer  | SenseData's own identifier of the customer.                                                                                                                                      |
    | `id_legacy`          | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.                                                   |
    | `group`              | String   | Economic group the customer belongs to.                                                                                                                                          |
    | `name_contract`      | String   | Legal name of the customer, as it appears on the contract.                                                                                                                       |
    | `name`               | String   | Trading name of the customer.                                                                                                                                                    |
    | `cnpj`               | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                                                         |
    | `status_id`          | Integer  | Internal identifier of the customer status.                                                                                                                                      |
    | `status_description` | String   | Display name of the customer status.                                                                                                                                             |
    | `status_enabled`     | Boolean  | Whether this customer status counts as active. SenseData treats inactive statuses as churn for reporting purposes.                                                               |
    | `state`              | String   | Brazilian state (UF) of the customer.                                                                                                                                            |
    | `city`               | String   | City of the customer.                                                                                                                                                            |
    | `country`            | String   | Country of the customer.                                                                                                                                                         |
    | `address`            | String   | Street address of the customer.                                                                                                                                                  |
    | `address_number`     | String   | Street number of the customer's address.                                                                                                                                         |
    | `size`               | String   | Size band of the customer, as classified in SenseData.                                                                                                                           |
    | `industry`           | String   | Industry segment of the customer.                                                                                                                                                |
    | `stage`              | String   | Lifecycle stage the customer is currently in, such as onboarding or adoption.                                                                                                    |
    | `dt_stage`           | Date     | Date the customer last moved to a different lifecycle stage.                                                                                                                     |
    | `dt_register`        | Date     | Date the customer relationship started, as recorded by the business — distinct from created\_at, which is when the row reached SenseData.                                        |
    | `salesperson`        | String   | Salesperson responsible for the account.                                                                                                                                         |
    | `cs_id`              | Integer  | Internal identifier of the user assigned as the customer's Customer Success analyst.                                                                                             |
    | `cs_name`            | String   | Full name of the user assigned as the customer's Customer Success analyst.                                                                                                       |
    | `cs_username`        | String   | Login name of the user assigned as the customer's Customer Success analyst.                                                                                                      |
    | `cs_email`           | String   | Email address of the user assigned as the customer's Customer Success analyst.                                                                                                   |
    | `csm_id`             | Integer  | Internal identifier of the user assigned as the customer's Customer Success manager.                                                                                             |
    | `csm_name`           | String   | Full name of the user assigned as the customer's Customer Success manager.                                                                                                       |
    | `csm_username`       | String   | Login name of the user assigned as the customer's Customer Success manager.                                                                                                      |
    | `csm_email`          | String   | Email address of the user assigned as the customer's Customer Success manager.                                                                                                   |
    | `dt_cancel`          | Date     | Date the customer churned. Empty while the customer is active.                                                                                                                   |
    | `cancel_tag`         | String   | Tag classifying why an inactive customer churned.                                                                                                                                |
    | `cancel_description` | String   | Free-text explanation of why the customer churned.                                                                                                                               |
    | `badge`              | String   | Badges displayed on the customer in SenseData (JSON object).                                                                                                                     |
    | `custom_fields`      | String   | Custom fields configured for customers in this environment, as a JSON object keyed by the field's internal name. The custom\_fields\_config table describes what each key means. |
    | `created_at`         | Datetime | Timestamp the customer record was first inserted in SenseData.                                                                                                                   |
    | `updated_at`         | Datetime | Timestamp of the last change to the customer, used as the incremental replication key.                                                                                           |
  </Accordion>

  <Accordion title="Customer Statuses">
    The customer statuses configured in your environment. `enabled` marks which of them SenseData counts as active.

    Primary key: `id`

    | Field         | Type    | Description                                                                                                                |
    | :------------ | :------ | :------------------------------------------------------------------------------------------------------------------------- |
    | `id`          | Integer | Internal identifier of the customer status.                                                                                |
    | `description` | String  | Display name of the customer status.                                                                                       |
    | `enabled`     | Boolean | Whether customers in this status count as active. SenseData treats the remaining statuses as churn for reporting purposes. |
  </Accordion>

  <Accordion title="Customer Notes">
    Notes written on a customer's timeline. Deleted notes keep coming back from the API, so filter on `deleted` for reporting.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                                |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer  | Internal identifier of the note.                                                                                                           |
    | `id_legacy`              | String   | Identifier of the note in the system it was imported from.                                                                                 |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                                         |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.             |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                                    |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                                 |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                              |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                   |
    | `description`            | String   | Body of the note.                                                                                                                          |
    | `created_by_id`          | Integer  | Internal identifier of the user who wrote the note.                                                                                        |
    | `created_by_name`        | String   | Full name of the user who wrote the note.                                                                                                  |
    | `created_by_username`    | String   | Login name of the user who wrote the note.                                                                                                 |
    | `created_by_email`       | String   | Email address of the user who wrote the note.                                                                                              |
    | `created_on`             | Datetime | Timestamp the note was written.                                                                                                            |
    | `updated_on`             | Datetime | Timestamp the note was last edited, used as the incremental replication key.                                                               |
    | `deleted`                | Boolean  | Whether the note is hidden in the product. Deleted notes keep coming back from the API, so this flag is what excludes them from reporting. |
    | `deleted_on`             | Datetime | Timestamp the note was marked as deleted.                                                                                                  |
    | `deleted_by_id`          | Integer  | Internal identifier of the user who deleted the note.                                                                                      |
    | `deleted_by_name`        | String   | Full name of the user who deleted the note.                                                                                                |
    | `deleted_by_username`    | String   | Login name of the user who deleted the note.                                                                                               |
    | `deleted_by_email`       | String   | Email address of the user who deleted the note.                                                                                            |
  </Accordion>

  <Accordion title="Custom Field Definitions">
    What each key inside the `custom_fields` JSON column means, for customers, contacts and tasks. Read this table to interpret those columns.

    Primary key: `identity`, `name`

    | Field                      | Type    | Description                                                                                                                          |
    | :------------------------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------- |
    | `identity`                 | String  | Entity the custom field belongs to: customer, contact or task. Taken from the request, since one call returns one entity's fields.   |
    | `name`                     | String  | Internal name of the field. This is the key it appears under in the custom\_fields JSON object of the matching table.                |
    | `title`                    | String  | Label shown in SenseData, as a JSON object with one entry per interface language (pt-br, en-us, es).                                 |
    | `field_type`               | String  | Type of the field: text, date, number, checklist, select or user\_list. checklist and select draw their values from selection\_list. |
    | `description`              | String  | Help text describing what the field is for.                                                                                          |
    | `enabled`                  | Boolean | Whether the field is currently in use.                                                                                               |
    | `editable`                 | Boolean | Whether users can change the field's value in SenseData.                                                                             |
    | `required`                 | Boolean | Whether the field must be filled in.                                                                                                 |
    | `hidden`                   | Boolean | Whether the field is hidden from the interface.                                                                                      |
    | `mask`                     | String  | Input mask applied to the field's value.                                                                                             |
    | `source`                   | String  | Where the field's value comes from.                                                                                                  |
    | `integration_overwritable` | Boolean | Whether an integration writing to SenseData is allowed to overwrite a value a user typed.                                            |
    | `is_restricted`            | Boolean | Whether editing the field is restricted to certain profiles.                                                                         |
    | `selection_list`           | String  | Allowed values for checklist and select fields (JSON). Empty for the other field types.                                              |
    | `created_by_id`            | Integer | Internal identifier of the user who created the field.                                                                               |
    | `created_by_name`          | String  | Full name of the user who created the field.                                                                                         |
    | `created_by_username`      | String  | Login name of the user who created the field.                                                                                        |
    | `created_by_email`         | String  | Email address of the user who created the field.                                                                                     |
  </Accordion>

  <Accordion title="Contacts">
    The people registered against each customer, with their role, contact details and whether they are the account's main sponsor.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                                                                     |
    | :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `id`                     | Integer  | Internal identifier of the contact.                                                                                                                                             |
    | `id_legacy`              | String   | Identifier of the contact in the system it was imported from.                                                                                                                   |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                                                                              |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.                                                  |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                                                                         |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                                                                      |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                                                                   |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                                                        |
    | `name`                   | String   | Full name of the contact.                                                                                                                                                       |
    | `nickname`               | String   | Short name the contact goes by.                                                                                                                                                 |
    | `email`                  | String   | Email address of the contact.                                                                                                                                                   |
    | `occupation`             | String   | Job title of the contact at the customer.                                                                                                                                       |
    | `phone`                  | String   | Primary phone number of the contact.                                                                                                                                            |
    | `phone2`                 | String   | Secondary phone number of the contact.                                                                                                                                          |
    | `address`                | String   | Address of the contact.                                                                                                                                                         |
    | `skype`                  | String   | Skype username of the contact.                                                                                                                                                  |
    | `types`                  | String   | Contact types assigned to this person, as a JSON array of objects with id and name. A contact can hold several at once.                                                         |
    | `is_main_sponsor`        | Boolean  | Whether this contact is the account's main sponsor.                                                                                                                             |
    | `is_favorite`            | Boolean  | Whether this contact is starred as the preferred one to reach.                                                                                                                  |
    | `is_active`              | Boolean  | Whether the contact is still active at the customer.                                                                                                                            |
    | `email_unsubscribe`      | Boolean  | Whether the contact has opted out of emails. Surveys and campaigns skip contacts with this set.                                                                                 |
    | `unsubscribe_reason`     | String   | Reason the contact gave for opting out of emails.                                                                                                                               |
    | `obs_info`               | String   | Free-text notes about the contact.                                                                                                                                              |
    | `custom_fields`          | String   | Custom fields configured for contacts in this environment, as a JSON object keyed by the field's internal name. The custom\_fields\_config table describes what each key means. |
    | `created_at`             | Datetime | Timestamp the contact was created.                                                                                                                                              |
    | `updated_at`             | Datetime | Timestamp of the last change to the contact, used as the incremental replication key.                                                                                           |
  </Accordion>

  <Accordion title="Contracts">
    Contract line items. One contract produces one row per item, numbered by `item_sequence`. Unlike other entities, SenseData does not treat `id_legacy` as the unique key here — `id` is.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                                       |
    | :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `id`                     | Integer  | Internal identifier of the contract item.                                                                                                         |
    | `id_legacy`              | String   | Identifier of the contract in the system it was imported from. Unlike other entities, SenseData does not treat this as the contract's unique key. |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                                                |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.                    |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                                           |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                                        |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                                     |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                          |
    | `item_sequence`          | Integer  | Position of this item within the contract.                                                                                                        |
    | `paper_contract`         | String   | Reference code of the signed contract document.                                                                                                   |
    | `description`            | String   | Description of what the contract item covers.                                                                                                     |
    | `model`                  | String   | Revenue model of the item: MRR (monthly recurring), ARR (annual recurring) or OTR (one-time revenue).                                             |
    | `type`                   | String   | Type of the contract, as classified in SenseData.                                                                                                 |
    | `plan`                   | String   | Commercial plan the contract item is on.                                                                                                          |
    | `cycle`                  | String   | Billing cycle of the contract item.                                                                                                               |
    | `instalments`            | Integer  | Number of instalments the payment is split into.                                                                                                  |
    | `monthly_payment`        | Number   | Monthly amount charged for the contract item.                                                                                                     |
    | `license_qty`            | Integer  | Number of user licences the contract item covers.                                                                                                 |
    | `is_subscription`        | Boolean  | Whether the contract item is a subscription.                                                                                                      |
    | `auto_renewal`           | Boolean  | Whether the contract renews automatically at the end of its term.                                                                                 |
    | `status_id`              | Integer  | Internal identifier of the contract status.                                                                                                       |
    | `status_description`     | String   | Display name of the contract status.                                                                                                              |
    | `status_enabled`         | Boolean  | Whether this contract status counts as active. SenseData treats inactive statuses as churn for reporting purposes.                                |
    | `start_date`             | Date     | Date the contract item's term starts.                                                                                                             |
    | `end_date`               | Date     | Date the contract item's term ends. Empty on an open-ended contract.                                                                              |
    | `created_on`             | Datetime | Timestamp the contract was issued by the business.                                                                                                |
    | `created_at`             | Datetime | Timestamp the contract item reached SenseData.                                                                                                    |
    | `updated_at`             | Datetime | Timestamp of the last change to the contract item, used as the incremental replication key.                                                       |
  </Accordion>

  <Accordion title="Contract Statuses">
    The contract statuses configured in your environment.

    Primary key: `id`

    | Field         | Type    | Description                                       |
    | :------------ | :------ | :------------------------------------------------ |
    | `id`          | Integer | Internal identifier of the contract status.       |
    | `description` | String  | Display name of the contract status.              |
    | `enabled`     | Boolean | Whether contracts in this status count as active. |
  </Accordion>

  <Accordion title="Billing Documents">
    Financial documents raised against a customer: what was invoiced, when it falls due, and when it was paid.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                    |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer  | Internal identifier of the financial document.                                                                                 |
    | `id_legacy`              | String   | Identifier of the document in the system it was imported from.                                                                 |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `ref_doc`                | String   | Reference code of the document.                                                                                                |
    | `ref_item`               | String   | Reference code of the item within the document.                                                                                |
    | `ref_invoice`            | String   | Number of the fiscal invoice the document was billed under.                                                                    |
    | `type`                   | String   | Type of the financial document.                                                                                                |
    | `amount`                 | Number   | Amount of the document.                                                                                                        |
    | `due_date`               | Date     | Date the document falls due.                                                                                                   |
    | `payment_date`           | Date     | Date the document was paid. Empty while it is outstanding.                                                                     |
    | `invoice_date`           | Date     | Date the document was invoiced.                                                                                                |
    | `legacy_status`          | String   | Status as a plain string, kept by SenseData for backwards compatibility. Prefer the status\_\* columns.                        |
    | `status_id`              | Integer  | Internal identifier of the billing status.                                                                                     |
    | `status_description`     | String   | Display name of the billing status.                                                                                            |
    | `status_enabled`         | Boolean  | Whether this billing status counts as active. SenseData treats inactive statuses as churn for reporting purposes.              |
    | `status_billing_factor`  | Integer  | Weight SenseData applies to documents in this status when it computes billing indicators.                                      |
    | `created_at`             | Datetime | Timestamp the document reached SenseData.                                                                                      |
    | `updated_at`             | Datetime | Timestamp of the last change to the document, used as the incremental replication key.                                         |
  </Accordion>

  <Accordion title="Billing Statuses">
    The billing statuses configured in your environment, with the weight SenseData gives each one when it computes billing indicators.

    Primary key: `id`

    | Field            | Type    | Description                                                                               |
    | :--------------- | :------ | :---------------------------------------------------------------------------------------- |
    | `id`             | Integer | Internal identifier of the billing status.                                                |
    | `description`    | String  | Display name of the billing status.                                                       |
    | `enabled`        | Boolean | Whether documents in this status count as active.                                         |
    | `billing_factor` | Integer | Weight SenseData applies to documents in this status when it computes billing indicators. |
  </Accordion>

  <Accordion title="Tasks">
    The activities the Customer Success team carries out on an account — the core of the workload. Includes which playbook or rule generated the task, who owns it, and both the planned and actual dates.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                                                                  |
    | :----------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer  | Internal identifier of the task.                                                                                                                                             |
    | `id_legacy`              | String   | Identifier of the task in the system it was imported from.                                                                                                                   |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                                                                           |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.                                               |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                                                                      |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                                                                   |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                                                                |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                                                     |
    | `description`            | String   | Title of the task.                                                                                                                                                           |
    | `notes`                  | String   | Free-text notes recorded against the task.                                                                                                                                   |
    | `group`                  | String   | Group the task belongs to.                                                                                                                                                   |
    | `tags`                   | String   | Tags applied to the task.                                                                                                                                                    |
    | `type_id`                | Integer  | Internal identifier of the task type.                                                                                                                                        |
    | `type_description`       | String   | Internal name of the task type.                                                                                                                                              |
    | `type_caption`           | String   | Label of the task type as shown in SenseData.                                                                                                                                |
    | `status_id`              | Integer  | Internal identifier of the task status.                                                                                                                                      |
    | `status_description`     | String   | Display name of the task status.                                                                                                                                             |
    | `priority_id`            | Integer  | Internal identifier of the task priority.                                                                                                                                    |
    | `priority_description`   | String   | Display name of the task priority.                                                                                                                                           |
    | `owner_id`               | Integer  | Internal identifier of the user responsible for completing the task.                                                                                                         |
    | `owner_name`             | String   | Full name of the user responsible for completing the task.                                                                                                                   |
    | `owner_username`         | String   | Login name of the user responsible for completing the task.                                                                                                                  |
    | `owner_email`            | String   | Email address of the user responsible for completing the task.                                                                                                               |
    | `created_by_id`          | Integer  | Internal identifier of the user who created the task.                                                                                                                        |
    | `created_by_name`        | String   | Full name of the user who created the task.                                                                                                                                  |
    | `created_by_username`    | String   | Login name of the user who created the task.                                                                                                                                 |
    | `created_by_email`       | String   | Email address of the user who created the task.                                                                                                                              |
    | `updated_by_id`          | Integer  | Internal identifier of the user who last changed the task.                                                                                                                   |
    | `updated_by_name`        | String   | Full name of the user who last changed the task.                                                                                                                             |
    | `updated_by_username`    | String   | Login name of the user who last changed the task.                                                                                                                            |
    | `updated_by_email`       | String   | Email address of the user who last changed the task.                                                                                                                         |
    | `contact_id`             | Integer  | Internal identifier of the contact the task is about.                                                                                                                        |
    | `contact_id_legacy`      | String   | External identifier of the contact the task is about.                                                                                                                        |
    | `contact_name`           | String   | Name of the contact the task is about.                                                                                                                                       |
    | `contact_email`          | String   | Email address of the contact the task is about.                                                                                                                              |
    | `playbook_id`            | Integer  | Internal identifier of the playbook that generated the task.                                                                                                                 |
    | `playbook_name`          | String   | Name of the playbook that generated the task.                                                                                                                                |
    | `playbook_deleted`       | Boolean  | Whether that playbook has since been deleted.                                                                                                                                |
    | `rule_id`                | Integer  | Internal identifier of the rule that generated the task.                                                                                                                     |
    | `rule_description`       | String   | Description of the rule that generated the task.                                                                                                                             |
    | `parent_id`              | Integer  | Internal identifier of the parent task. Playbooks create a parent task with one child per step.                                                                              |
    | `parent_id_legacy`       | String   | External identifier of the parent task.                                                                                                                                      |
    | `parent_description`     | String   | Title of the parent task.                                                                                                                                                    |
    | `parent_group`           | String   | Group of the parent task.                                                                                                                                                    |
    | `progress`               | Integer  | Completion percentage recorded on the task.                                                                                                                                  |
    | `favorite`               | Boolean  | Whether the task is starred.                                                                                                                                                 |
    | `custom_value`           | Number   | Numeric value recorded against the task for custom reporting.                                                                                                                |
    | `hours_planned`          | Number   | Hours planned for the task.                                                                                                                                                  |
    | `hours_spent`            | Number   | Hours actually spent on the task.                                                                                                                                            |
    | `paused_count`           | Integer  | Number of days the task has been paused.                                                                                                                                     |
    | `paused_at`              | Date     | Date the task was paused.                                                                                                                                                    |
    | `planned_start_date`     | Date     | Date the task was planned to start.                                                                                                                                          |
    | `planned_due_date`       | Date     | Date the task was planned to finish.                                                                                                                                         |
    | `start_date`             | Date     | Date the task actually started.                                                                                                                                              |
    | `start_time`             | String   | Time of day the task started, as HH:MM:SS.                                                                                                                                   |
    | `due_date`               | Date     | Date the task is due.                                                                                                                                                        |
    | `due_time`               | String   | Time of day the task is due, as HH:MM:SS.                                                                                                                                    |
    | `end_date`               | Datetime | Timestamp the task was completed, as recorded by the user.                                                                                                                   |
    | `system_end_date`        | Datetime | Timestamp SenseData itself registered the completion. Differs from end\_date when a user back-dates the closing of a task.                                                   |
    | `custom_fields`          | String   | Custom fields configured for tasks in this environment, as a JSON object keyed by the field's internal name. The custom\_fields\_config table describes what each key means. |
    | `created_on`             | Datetime | Timestamp the task was created.                                                                                                                                              |
    | `created_at`             | Datetime | Timestamp the task reached SenseData.                                                                                                                                        |
    | `updated_at`             | Datetime | Timestamp of the last change to the task, used as the incremental replication key.                                                                                           |
  </Accordion>

  <Accordion title="Task Statuses">
    The task statuses configured in your environment.

    Primary key: `id`

    | Field         | Type    | Description                             |
    | :------------ | :------ | :-------------------------------------- |
    | `id`          | Integer | Internal identifier of the task status. |
    | `description` | String  | Display name of the task status.        |
  </Accordion>

  <Accordion title="Task Types">
    The task types configured in your environment.

    Primary key: `id`

    | Field         | Type    | Description                                               |
    | :------------ | :------ | :-------------------------------------------------------- |
    | `id`          | Integer | Internal identifier of the task type.                     |
    | `description` | String  | Internal name of the task type.                           |
    | `caption`     | String  | Label of the task type as shown in SenseData.             |
    | `enabled`     | Boolean | Whether the task type is available for new tasks.         |
    | `is_default`  | Boolean | Whether new tasks get this type unless another is chosen. |
  </Accordion>

  <Accordion title="Task Priorities">
    The task priorities configured in your environment.

    Primary key: `id`

    | Field         | Type    | Description                               |
    | :------------ | :------ | :---------------------------------------- |
    | `id`          | Integer | Internal identifier of the task priority. |
    | `description` | String  | Display name of the task priority.        |
  </Accordion>

  <Accordion title="Task Check-ins">
    Check-in and check-out events recorded in the SenseData mobile app during field visits, with the coordinates and the distance travelled.

    Primary key: `id`

    | Field                 | Type     | Description                                                                    |
    | :-------------------- | :------- | :----------------------------------------------------------------------------- |
    | `id`                  | Integer  | Internal identifier of the check-in.                                           |
    | `task_id`             | Integer  | Internal identifier of the task the check-in belongs to.                       |
    | `task_id_legacy`      | String   | External identifier of that task.                                              |
    | `task_group`          | String   | Group of that task.                                                            |
    | `task_description`    | String   | Title of that task.                                                            |
    | `checkin_at`          | Datetime | Timestamp the analyst checked in, used as the incremental replication key.     |
    | `checkout_at`         | Datetime | Timestamp the analyst checked out.                                             |
    | `auto_checkout`       | Boolean  | Whether the check-out was registered automatically rather than by the analyst. |
    | `lat_target`          | Number   | Latitude of the address the visit was meant to reach.                          |
    | `lon_target`          | Number   | Longitude of the address the visit was meant to reach.                         |
    | `lat_checkin`         | Number   | Latitude recorded at check-in.                                                 |
    | `lon_checkin`         | Number   | Longitude recorded at check-in.                                                |
    | `lat_checkout`        | Number   | Latitude recorded at check-out.                                                |
    | `lon_checkout`        | Number   | Longitude recorded at check-out.                                               |
    | `checkin_address`     | String   | Address resolved from the check-in coordinates.                                |
    | `checkout_address`    | String   | Address resolved from the check-out coordinates.                               |
    | `distance_m`          | Integer  | Total distance travelled during the visit, in metres.                          |
    | `linear_distance_m`   | Integer  | Straight-line distance between check-in and check-out, in metres.              |
    | `timezone`            | String   | Time zone the check-in timestamps were recorded in.                            |
    | `created_by_id`       | Integer  | Internal identifier of the user who registered the check-in.                   |
    | `created_by_name`     | String   | Full name of the user who registered the check-in.                             |
    | `created_by_username` | String   | Login name of the user who registered the check-in.                            |
    | `created_by_email`    | String   | Email address of the user who registered the check-in.                         |
    | `updated_by_id`       | Integer  | Internal identifier of the user who registered the check-out.                  |
    | `updated_by_name`     | String   | Full name of the user who registered the check-out.                            |
    | `updated_by_username` | String   | Login name of the user who registered the check-out.                           |
    | `updated_by_email`    | String   | Email address of the user who registered the check-out.                        |
  </Accordion>

  <Accordion title="Deleted Tasks">
    Tasks that were deleted, with the task body as it stood at deletion. SenseData notes that references inside a deleted task come back empty when the entity they pointed at no longer exists.

    Primary key: `deleted_task_id`

    | Field             | Type     | Description                                                                                                                                |
    | :---------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
    | `deleted_task_id` | Integer  | Internal identifier of the task that was deleted.                                                                                          |
    | `deleted_at`      | Datetime | Timestamp the task was deleted, used as the incremental replication key.                                                                   |
    | `task`            | String   | The deleted task as a JSON object, with the same fields as the tasks table. References to entities that no longer exist come back as null. |
  </Accordion>

  <Accordion title="Playbooks">
    The playbooks that generate a sequence of tasks on an account.

    Primary key: `id`

    | Field        | Type    | Description                                                 |
    | :----------- | :------ | :---------------------------------------------------------- |
    | `id`         | Integer | Internal identifier of the playbook.                        |
    | `name`       | String  | Name of the playbook.                                       |
    | `created_on` | Date    | Date the playbook was created.                              |
    | `status`     | Boolean | Whether the playbook is active and can still be dispatched. |
    | `deleted`    | Boolean | Whether the playbook has been deleted.                      |
  </Accordion>

  <Accordion title="KPIs">
    One row per customer, per indicator, per day — Sense Score, Engagement Score, NPS, overdue invoices and any custom indicator your team defined. This is the widest table in the connector.

    Primary key: `id_customer`, `ref_date`, `type_id`

    | Field                    | Type    | Description                                                                                                                            |
    | :----------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------- |
    | `id_customer`            | Integer | SenseData identifier of the customer the indicator is about.                                                                           |
    | `customer_id`            | Integer | SenseData's own identifier of the customer this record belongs to.                                                                     |
    | `customer_id_legacy`     | String  | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.         |
    | `customer_group`         | String  | Economic group the customer belongs to.                                                                                                |
    | `customer_name_contract` | String  | Legal name of the customer, as it appears on the contract.                                                                             |
    | `customer_name`          | String  | Trading name of the customer.                                                                                                          |
    | `customer_cnpj`          | String  | Brazilian company tax identifier (CNPJ) of the customer.                                                                               |
    | `ref_date`               | Date    | Day the indicator refers to, used as the incremental replication key. SenseData computes one value per customer per indicator per day. |
    | `value`                  | Number  | Value of the indicator on that day.                                                                                                    |
    | `type_id`                | Integer | Internal identifier of the indicator.                                                                                                  |
    | `type_name`              | String  | Internal name of the indicator, such as sense\_score.                                                                                  |
    | `type_description`       | String  | Display name of the indicator, such as Sense Score.                                                                                    |
    | `type_unit`              | String  | Unit the indicator is measured in.                                                                                                     |
    | `type_inv_proportional`  | Boolean | Whether a lower value is better for this indicator, which is how SenseData colours it in the product.                                  |
    | `type_is_custom`         | Boolean | Whether the indicator was defined by your team rather than shipped by SenseData.                                                       |
    | `type_active`            | Boolean | Whether the indicator is still being computed.                                                                                         |
  </Accordion>

  <Accordion title="KPI Definitions">
    The definition of every indicator computed in your environment. Join it to the KPIs table on `type_id`.

    Primary key: `id`

    | Field              | Type    | Description                                                                      |
    | :----------------- | :------ | :------------------------------------------------------------------------------- |
    | `id`               | Integer | Internal identifier of the indicator.                                            |
    | `name`             | String  | Internal name of the indicator, used to join against kpis.                       |
    | `description`      | String  | Display name of the indicator.                                                   |
    | `unit`             | String  | Unit the indicator is measured in.                                               |
    | `inv_proportional` | Boolean | Whether a lower value is better for this indicator.                              |
    | `is_custom`        | Boolean | Whether the indicator was defined by your team rather than shipped by SenseData. |
    | `active`           | Boolean | Whether the indicator is still being computed.                                   |
  </Accordion>

  <Accordion title="Custom Data">
    Free-form records your team pushes into SenseData for use in rules and indicators. Every custom data type shares one physical table, which is why `type` is what separates them.

    Primary key: `id`

    | Field                    | Type    | Description                                                                                                                               |
    | :----------------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer | Internal identifier of the custom data record.                                                                                            |
    | `id_legacy`              | String  | Identifier of the record in the system it came from. It is only unique within a type, since every type shares one table.                  |
    | `id_customer`            | Integer | SenseData identifier of the customer the record belongs to.                                                                               |
    | `customer_id`            | Integer | SenseData's own identifier of the customer this record belongs to.                                                                        |
    | `customer_id_legacy`     | String  | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.            |
    | `customer_group`         | String  | Economic group the customer belongs to.                                                                                                   |
    | `customer_name_contract` | String  | Legal name of the customer, as it appears on the contract.                                                                                |
    | `customer_name`          | String  | Trading name of the customer.                                                                                                             |
    | `customer_cnpj`          | String  | Brazilian company tax identifier (CNPJ) of the customer.                                                                                  |
    | `type`                   | String  | Name of the custom data type, which is what separates one kind of record from another in this table.                                      |
    | `ref_date`               | Date    | Day the record refers to, used as the incremental replication key.                                                                        |
    | `data`                   | String  | Body of the record as a JSON object. The shape is whatever your team defined for this type, so it is kept as JSON rather than as columns. |
  </Accordion>

  <Accordion title="Custom Data Types">
    The names of the custom data types defined in your environment, one row each.

    Primary key: `type`

    | Field  | Type   | Description                                                                                                    |
    | :----- | :----- | :------------------------------------------------------------------------------------------------------------- |
    | `type` | String | Name of a custom data type configured in this environment, matching the type column of the custom\_data table. |
  </Accordion>

  <Accordion title="Usage Events">
    Product-usage events per customer, end user, module and action, with how many times each action happened on the day.

    Primary key: `id`

    | Field                    | Type    | Description                                                                                                                    |
    | :----------------------- | :------ | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer | Internal identifier of the usage record.                                                                                       |
    | `id_legacy`              | String  | Identifier of the record in the system it came from.                                                                           |
    | `id_customer`            | Integer | SenseData identifier of the customer the usage belongs to.                                                                     |
    | `customer_id`            | Integer | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String  | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String  | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String  | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String  | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String  | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `ref_date`               | Date    | Day the usage refers to, used as the incremental replication key.                                                              |
    | `user`                   | String  | Name or email of the end user who performed the action.                                                                        |
    | `product`                | String  | Product the action happened in.                                                                                                |
    | `module`                 | String  | Module of that product the action happened in.                                                                                 |
    | `action`                 | String  | Action that was performed.                                                                                                     |
    | `amount`                 | Integer | Number of times the action was performed on that day.                                                                          |
  </Accordion>

  <Accordion title="Usage Time">
    Daily licence and session totals per customer: how many users are registered, how many were active, how many were contracted, and how long the product was used.

    Primary key: `id`

    | Field              | Type     | Description                                                                                                       |
    | :----------------- | :------- | :---------------------------------------------------------------------------------------------------------------- |
    | `id`               | Integer  | Internal identifier of the usage-time record.                                                                     |
    | `id_customer`      | Integer  | SenseData identifier of the customer the totals belong to.                                                        |
    | `ref_date`         | Datetime | Day the totals refer to, used as the incremental replication key.                                                 |
    | `registered_users` | Integer  | Number of users registered at the customer on that day.                                                           |
    | `active_users`     | Integer  | Number of those users who were active on that day.                                                                |
    | `contracted_users` | Integer  | Number of user licences the customer contracted, which is what active\_users is measured against to get adoption. |
    | `usage_time`       | Integer  | Total time spent in the product on that day, in seconds.                                                          |
  </Accordion>

  <Accordion title="NPS Answers">
    NPS survey answers, with the score, the classification into detractor, neutral or promoter, and the respondent's comment.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                    |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer  | Internal identifier of the NPS answer.                                                                                         |
    | `id_legacy`              | String   | Identifier of the answer in the system it came from.                                                                           |
    | `id_customer`            | Integer  | SenseData identifier of the customer who was surveyed.                                                                         |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `form_id`                | Integer  | Internal identifier of the form the answer came from.                                                                          |
    | `form_name`              | String   | Name of that form.                                                                                                             |
    | `form_form_type`         | String   | Type of that form.                                                                                                             |
    | `form_is_active`         | Boolean  | Whether that form is still active.                                                                                             |
    | `form_deleted`           | Boolean  | Whether that form has been deleted.                                                                                            |
    | `score`                  | Integer  | Score the respondent gave, on the survey's own scale.                                                                          |
    | `nps_status`             | String   | Classification of the score: detractor, neutral or promoter. This is the column NPS is calculated from.                        |
    | `comments`               | String   | Free-text comment the respondent left.                                                                                         |
    | `respondent`             | String   | Person who answered the survey.                                                                                                |
    | `role`                   | String   | Job role of the respondent.                                                                                                    |
    | `medium`                 | String   | Channel the survey was sent through.                                                                                           |
    | `stage`                  | String   | Lifecycle stage the customer was in when surveyed.                                                                             |
    | `group`                  | String   | Group the survey belongs to.                                                                                                   |
    | `category`               | String   | Category of the survey.                                                                                                        |
    | `tags`                   | String   | Tags applied to the answer.                                                                                                    |
    | `ref_date`               | Datetime | Day the answer is accounted to.                                                                                                |
    | `survey_date`            | Datetime | Timestamp the survey was sent.                                                                                                 |
    | `created_at`             | Datetime | Timestamp the answer reached SenseData.                                                                                        |
    | `updated_at`             | Datetime | Timestamp of the last change to the answer, used as the incremental replication key.                                           |
  </Accordion>

  <Accordion title="Forms">
    The forms configured in SenseData, including the ones that collect NPS.

    Primary key: `id`

    | Field                 | Type     | Description                                                                        |
    | :-------------------- | :------- | :--------------------------------------------------------------------------------- |
    | `id`                  | Integer  | Internal identifier of the form.                                                   |
    | `name`                | String   | Name of the form.                                                                  |
    | `form_type`           | String   | Type of the form, which is what decides how it is used.                            |
    | `is_active`           | Boolean  | Whether the form is currently active.                                              |
    | `deleted`             | Boolean  | Whether the form has been deleted.                                                 |
    | `created_by_id`       | Integer  | Internal identifier of the user who created the form.                              |
    | `created_by_name`     | String   | Full name of the user who created the form.                                        |
    | `created_by_username` | String   | Login name of the user who created the form.                                       |
    | `created_by_email`    | String   | Email address of the user who created the form.                                    |
    | `updated_by_id`       | Integer  | Internal identifier of the user who last changed the form.                         |
    | `updated_by_name`     | String   | Full name of the user who last changed the form.                                   |
    | `updated_by_username` | String   | Login name of the user who last changed the form.                                  |
    | `updated_by_email`    | String   | Email address of the user who last changed the form.                               |
    | `created_at`          | Datetime | Timestamp the form was created.                                                    |
    | `updated_at`          | Datetime | Timestamp of the last change to the form, used as the incremental replication key. |
  </Accordion>

  <Accordion title="Form Answers">
    Answers submitted to open (non-NPS) forms. The answers themselves stay as JSON, because the shape depends on how each form was built.

    Primary key: `id_legacy`

    | Field                    | Type     | Description                                                                                                                                                                                             |
    | :----------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `id_legacy`              | String   | Identifier of the answer in the system it came from. SenseData exposes no internal id for this entity.                                                                                                  |
    | `form_id`                | Integer  | Internal identifier of the form that was answered.                                                                                                                                                      |
    | `form_name`              | String   | Name of that form.                                                                                                                                                                                      |
    | `form_form_type`         | String   | Type of that form.                                                                                                                                                                                      |
    | `form_is_active`         | Boolean  | Whether that form is still active.                                                                                                                                                                      |
    | `form_deleted`           | Boolean  | Whether that form has been deleted.                                                                                                                                                                     |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                                                                                                      |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth.                                                                          |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                                                                                                 |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                                                                                              |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                                                                                           |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                                                                                                |
    | `contact_id`             | Integer  | Internal identifier of the contact who answered.                                                                                                                                                        |
    | `contact_id_legacy`      | String   | External identifier of that contact.                                                                                                                                                                    |
    | `contact_name`           | String   | Name of that contact.                                                                                                                                                                                   |
    | `contact_email`          | String   | Email address of that contact.                                                                                                                                                                          |
    | `respondent`             | String   | Email address the answer was submitted from.                                                                                                                                                            |
    | `medium`                 | String   | Channel the form was answered through.                                                                                                                                                                  |
    | `answers`                | String   | The answers themselves, as a JSON array of objects with the question's id, component\_type, title, description and the value given. The shape depends on how the form was built, so it is kept as JSON. |
    | `created_at`             | Datetime | Timestamp the answer record was created.                                                                                                                                                                |
    | `answered_at`            | Datetime | Timestamp the form was actually answered. Empty while the form is still outstanding.                                                                                                                    |
  </Accordion>

  <Accordion title="Support Tickets">
    Support tickets imported into SenseData from your helpdesk, with the SLA date each one is measured against.

    Primary key: `id`

    | Field              | Type     | Description                                                                                            |
    | :----------------- | :------- | :----------------------------------------------------------------------------------------------------- |
    | `id`               | Integer  | Internal identifier of the ticket in SenseData.                                                        |
    | `id_legacy`        | String   | Identifier of the ticket in the helpdesk it came from.                                                 |
    | `id_ticket_legacy` | String   | Ticket number as shown to agents in that helpdesk.                                                     |
    | `id_customer`      | Integer  | SenseData identifier of the customer who raised the ticket.                                            |
    | `title`            | String   | Subject of the ticket.                                                                                 |
    | `description`      | String   | Body of the ticket.                                                                                    |
    | `group`            | String   | Group the ticket was routed to.                                                                        |
    | `type`             | String   | Type of the ticket.                                                                                    |
    | `category`         | String   | Category of the ticket.                                                                                |
    | `status`           | String   | Current status of the ticket.                                                                          |
    | `priority`         | String   | Priority of the ticket.                                                                                |
    | `created_by`       | String   | Who opened the ticket.                                                                                 |
    | `assigned_to`      | String   | Who is responsible for resolving the ticket.                                                           |
    | `ticket_link`      | String   | URL of the ticket in the originating helpdesk.                                                         |
    | `created_on`       | Datetime | Timestamp the ticket was opened.                                                                       |
    | `expire_date`      | Datetime | Timestamp the ticket is expected to be resolved by, which is what SLA indicators are measured against. |
    | `end_date`         | Datetime | Timestamp the ticket was resolved.                                                                     |
  </Accordion>

  <Accordion title="Journeys">
    The portfolio journeys configured in your environment, with their phases.

    Primary key: `id`

    | Field                 | Type     | Description                                                                                                                                                                                                   |
    | :-------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `id`                  | String   | Identifier of the journey, as a UUID.                                                                                                                                                                         |
    | `name`                | String   | Name of the journey.                                                                                                                                                                                          |
    | `status`              | Boolean  | Whether the journey is active.                                                                                                                                                                                |
    | `deleted`             | Boolean  | Whether the journey has been deleted.                                                                                                                                                                         |
    | `lanes`               | String   | Phases of the journey, as a JSON array of objects with uuid, name, deleted and estimated\_time.                                                                                                               |
    | `created_by_id`       | Integer  | Internal identifier of the user who created the journey.                                                                                                                                                      |
    | `created_by_name`     | String   | Full name of the user who created the journey.                                                                                                                                                                |
    | `created_by_username` | String   | Login name of the user who created the journey.                                                                                                                                                               |
    | `created_by_email`    | String   | Email address of the user who created the journey.                                                                                                                                                            |
    | `updated_by_id`       | Integer  | Internal identifier of the user who last changed the journey.                                                                                                                                                 |
    | `updated_by_name`     | String   | Full name of the user who last changed the journey.                                                                                                                                                           |
    | `updated_by_username` | String   | Login name of the user who last changed the journey.                                                                                                                                                          |
    | `updated_by_email`    | String   | Email address of the user who last changed the journey.                                                                                                                                                       |
    | `created_at`          | Datetime | Timestamp the journey was created.                                                                                                                                                                            |
    | `updated_at`          | Datetime | Timestamp of the last change to the journey, used as the incremental replication key. The endpoint takes no date filter, so the whole list is read and the cursor only decides what the target has to update. |
  </Accordion>

  <Accordion title="Journey Customers">
    Which customers are currently in which journey, and in which phase.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                    |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | String   | Identifier of this customer's placement in the journey, as a UUID. Distinct from the customer id and from the journey id.      |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `journey_id`             | String   | Identifier of the journey, as a UUID.                                                                                          |
    | `journey_name`           | String   | Name of the journey.                                                                                                           |
    | `lane_uuid`              | String   | Identifier of the phase (lane) of the journey.                                                                                 |
    | `lane_name`              | String   | Name of that phase.                                                                                                            |
    | `active`                 | Boolean  | Whether the customer is currently active in the journey.                                                                       |
    | `deleted`                | Boolean  | Whether the customer was removed from the journey.                                                                             |
    | `start_date`             | Datetime | Timestamp the customer entered the journey.                                                                                    |
    | `end_date`               | Datetime | Timestamp of the customer's most recent move between phases.                                                                   |
  </Accordion>

  <Accordion title="Journey Movement Log">
    Every movement of a customer between journey phases, and who moved them.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                    |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | Integer  | Internal identifier of the movement record.                                                                                    |
    | `sysdate`                | Datetime | Timestamp the customer was moved.                                                                                              |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `journey_id`             | String   | Identifier of the journey, as a UUID.                                                                                          |
    | `journey_name`           | String   | Name of the journey.                                                                                                           |
    | `lane_uuid`              | String   | Identifier of the phase (lane) of the journey.                                                                                 |
    | `lane_name`              | String   | Name of that phase.                                                                                                            |
    | `created_by_id`          | Integer  | Internal identifier of the user who moved the customer.                                                                        |
    | `created_by_name`        | String   | Full name of the user who moved the customer.                                                                                  |
    | `created_by_username`    | String   | Login name of the user who moved the customer.                                                                                 |
    | `created_by_email`       | String   | Email address of the user who moved the customer.                                                                              |
  </Accordion>

  <Accordion title="Journey Notes">
    Notes written against a customer while they are in a journey.

    Primary key: `id`

    | Field                    | Type     | Description                                                                                                                    |
    | :----------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
    | `id`                     | String   | Identifier of the note, as a UUID.                                                                                             |
    | `note`                   | String   | Body of the note.                                                                                                              |
    | `deleted`                | Boolean  | Whether the note was removed from the customer.                                                                                |
    | `customer_id`            | Integer  | SenseData's own identifier of the customer this record belongs to.                                                             |
    | `customer_id_legacy`     | String   | Identifier of the customer in the system it was imported from, used to match SenseData customers against your source of truth. |
    | `customer_group`         | String   | Economic group the customer belongs to.                                                                                        |
    | `customer_name_contract` | String   | Legal name of the customer, as it appears on the contract.                                                                     |
    | `customer_name`          | String   | Trading name of the customer.                                                                                                  |
    | `customer_cnpj`          | String   | Brazilian company tax identifier (CNPJ) of the customer.                                                                       |
    | `journey_id`             | String   | Identifier of the journey, as a UUID.                                                                                          |
    | `journey_name`           | String   | Name of the journey.                                                                                                           |
    | `lane_uuid`              | String   | Identifier of the phase (lane) of the journey.                                                                                 |
    | `lane_name`              | String   | Name of that phase.                                                                                                            |
    | `created_by_id`          | Integer  | Internal identifier of the user who wrote the note.                                                                            |
    | `created_by_name`        | String   | Full name of the user who wrote the note.                                                                                      |
    | `created_by_username`    | String   | Login name of the user who wrote the note.                                                                                     |
    | `created_by_email`       | String   | Email address of the user who wrote the note.                                                                                  |
    | `updated_by_id`          | Integer  | Internal identifier of the user who last changed the note.                                                                     |
    | `updated_by_name`        | String   | Full name of the user who last changed the note.                                                                               |
    | `updated_by_username`    | String   | Login name of the user who last changed the note.                                                                              |
    | `updated_by_email`       | String   | Email address of the user who last changed the note.                                                                           |
    | `created_at`             | Datetime | Timestamp the note was written.                                                                                                |
    | `updated_at`             | Datetime | Timestamp the note was last changed, used as the incremental replication key.                                                  |
  </Accordion>

  <Accordion title="Users">
    The people with a SenseData login — your own analysts and managers, not your customers.

    Primary key: `id`

    | Field           | Type     | Description                                                                        |
    | :-------------- | :------- | :--------------------------------------------------------------------------------- |
    | `id`            | Integer  | Internal identifier of the user.                                                   |
    | `name`          | String   | Full name of the user.                                                             |
    | `username`      | String   | Login name of the user.                                                            |
    | `email`         | String   | Email address of the user.                                                         |
    | `profile_name`  | String   | Name of the permission profile the user belongs to.                                |
    | `profile_role`  | String   | Role the profile grants, which is what decides what they see.                      |
    | `active`        | Boolean  | Whether the user can still sign in.                                                |
    | `registered_on` | Datetime | Timestamp the user was registered.                                                 |
    | `created_at`    | Datetime | Timestamp the user record was created.                                             |
    | `updated_at`    | Datetime | Timestamp of the last change to the user, used as the incremental replication key. |
  </Accordion>

  <Accordion title="Rules">
    The automation rules: what SenseData watches for and what it does when the condition is met.

    Primary key: `id`

    | Field                   | Type     | Description                                                |
    | :---------------------- | :------- | :--------------------------------------------------------- |
    | `id`                    | Integer  | Internal identifier of the rule.                           |
    | `id_company`            | Integer  | Identifier of the company the rule belongs to.             |
    | `description`           | String   | Description of what the rule does.                         |
    | `rule_type`             | String   | Type of the rule.                                          |
    | `status`                | Boolean  | Whether the rule is active.                                |
    | `_deleted`              | Boolean  | Whether the rule has been deleted.                         |
    | `hidden`                | Boolean  | Whether the rule is hidden from the interface.             |
    | `portfolio_restricted`  | Boolean  | Whether the rule only applies to the user's own portfolio. |
    | `params`                | String   | Conditions the rule evaluates, as JSON.                    |
    | `actions`               | String   | Actions the rule takes when it matches, as JSON.           |
    | `customer_freq`         | Integer  | How often the rule may fire again for the same customer.   |
    | `execution_freq`        | String   | How often the rule runs.                                   |
    | `custom_execution_freq` | String   | Custom schedule for the rule, as JSON, when one is set.    |
    | `stop_after`            | Integer  | Number of firings after which the rule stops.              |
    | `end_date_condition`    | String   | Condition that ends the rule.                              |
    | `start_date`            | Date     | Date the rule starts running.                              |
    | `end_date`              | Date     | Date the rule stops running.                               |
    | `last_execution`        | Datetime | Timestamp the rule last ran.                               |
    | `folder_id`             | Integer  | Identifier of the folder the rule is filed under.          |
    | `folder_name`           | String   | Name of that folder.                                       |
    | `created_by_id`         | Integer  | Internal identifier of the user who created the rule.      |
    | `created_by_name`       | String   | Full name of the user who created the rule.                |
    | `updated_by_id`         | Integer  | Internal identifier of the user who last changed the rule. |
    | `updated_by_name`       | String   | Full name of the user who last changed the rule.           |
    | `created_on`            | Datetime | Timestamp the rule was created.                            |
    | `updated_at`            | Datetime | Timestamp of the last change to the rule.                  |
  </Accordion>
</AccordionGroup>
