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

# Elephan.ai as a data source

> Bring data from Elephan.ai to your Lakehouse.

Elephan.ai is a revenue intelligence platform for B2B teams. It records, transcribes and analyzes sales meetings — online or in person — and WhatsApp conversations, producing AI summaries, scorecards, detected objections and insights on top of them. The External API exposes those meetings, conversations, insights and scorecard aggregates so they can be analyzed alongside the rest of your data.

<Note>Elephan.ai (no trailing "t") is the revenue intelligence platform at [elephan.ai](https://www.elephan.ai/). It is a different product from Elephant.ai, an unrelated chatbot builder. This connector reads from the Elephan.ai External API.</Note>

## 1. Add your Elephan.ai access

1. 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 Elephan.ai option from the list of connectors.

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

* **API Key:** Your Elephan.ai API key, in the `elk_prod_...` format. Generate it inside Elephan.ai under **Configurações → API / Integrações → Gerar nova API Key**.

* **Start Date:** (Optional, advanced) The earliest record date to sync on the first run. Leave it empty to sync the full history of your team.

* **Requests per Minute:** (Optional, advanced) How many API requests per minute the connector is allowed to make. The default of 15 is deliberately conservative. Only raise it after confirming your account's real limit with Elephan.ai.

<Warning>The API key grants read access to the data of the whole team it belongs to, including meeting transcriptions and summaries. Treat it as a secret.</Warning>

3. Click **Next**.

## 2. Select your Elephan.ai streams

1. The next step is letting us know which streams you want to bring. You can select entire groups of streams or only a subset of them.

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

<Info>If you don't see a stream you were expecting to find, please check if your access key has access to it. If that's not the issue, then it's probably because we still haven't implemented it. Feel free to get in touch and request it!</Info>

2. Click **Next**.

## 3. Configure your Elephan.ai data streams

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

* **Layer**: choose between the existing [layers](https://docs.nekt.com/get-started/core-concepts/catalog-layers) on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **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**: depending on the data you are bringing to the lake, you can choose between INCREMENTAL and FULL\_TABLE. Read more about Sync Types [here](https://docs.nekt.com/get-started/core-concepts/types-of-sync).

2. Click **Next**.

## 4. Configure your Elephan.ai data source

1. Describe your data source for easy identification within your organization. You can inform things like what data it brings, to which team it belongs, etc.

2. To define your [Trigger](https://docs.nekt.com/get-started/core-concepts/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).

3. Optionally, you can define some additional settings (if available).

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

### Check your new source!

1. Click **Next** to finalize the setup. Once completed, you'll receive confirmation that your new source is set up!

2. You can view your new source on the [Sources](https://app.nekt.ai/sources) page. Now, for you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you have to wait for the pipeline to run. You can now monitor it on the [Sources](https://app.nekt.ai/sources) page to see its execution and completion. If needed, manually trigger the pipeline by clicking on the refresh icon. Once executed, your new table will appear in the Catalog section.

> If you encounter any issues, reach out to us via Slack, and we'll gladly assist you!

## How the data is replicated

**Meetings, conversations and insights** replicate incrementally on `date_included`, the timestamp when the record was added to Elephan.ai. Each sync asks the API for everything included after the highest `date_included` already extracted.

<Warning>Because the filter is on when a record was **added**, later edits to an older meeting — for example a re-run of the AI analysis, which updates `date_modified` — are not picked up by an incremental sync. Schedule an Additional Full Sync if you need those revisions reflected in your tables.</Warning>

**Users, prompts and the scorecard aggregates** are extracted in full on every run, since they describe the current state of your team rather than a stream of events.

**The scorecard aggregates** (`scorecard_by_seller` and `scorecard_by_question`) are recomputed by Elephan.ai over a period rather than being an event log. The connector asks for the window that starts at your configured Start Date — or the last 365 days when none is set — and ends at the moment of the sync. Every row records the exact window it was computed over in `period_start` and `period_end`.

**Nested data is delivered as JSON strings.** Fields holding lists or objects — such as `answers`, `competitors`, `reasons`, `transcript_speakers`, `distribution` and `by_question` — arrive as JSON strings, so you can parse them in a Query when you need the individual keys. Simple lists of text, such as `keywords` and `tags`, remain regular arrays.

<Info>The API never returns the body of WhatsApp messages. The `conversation_messages` stream carries only metadata — timestamp, direction, author and message type. The AI-generated summary of a WhatsApp conversation is likewise not exposed by the listing endpoint.</Info>

## Rate limits

Elephan.ai does not publish a documented rate limit. The connector therefore throttles itself to 15 requests per minute by default and automatically waits and retries when the API asks it to. If Elephan.ai confirms a higher limit for your account, raise the **Requests per Minute** setting to speed up large extractions.

<Warning>The `conversation_messages` stream makes one API request per conversation synced. On accounts with many WhatsApp conversations it is significantly slower than the other streams — select it only if you need the message-level timeline.</Warning>

# Streams and Fields

Below you'll find all available data streams from Elephan.ai and their corresponding fields.

<AccordionGroup>
  <Accordion title="Transcribes">
    Meetings recorded, transcribed and analyzed by Elephan.ai. This is the core entity of the platform.

    **Key Fields:**

    * `id` - Unique identifier of the meeting
    * `title` - Title of the meeting
    * `date_included` - Timestamp when the meeting was added to Elephan.ai, used as the incremental replication key
    * `date_modified` - Timestamp when the meeting record was last updated
    * `status` - Processing status of the transcription, where D means done
    * `duration` - Length of the recorded audio in seconds
    * `user_id` - Identifier of the user who owns the meeting
    * `user_name` - Name of the user who owns the meeting
    * `user_email` - Email address of the user who owns the meeting
    * `prompt_id` - Identifier of the meeting type applied to the analysis
    * `prompt_name` - Name of the meeting type applied to the analysis
    * `prompt_type` - Category of the meeting type, such as sales
    * `deal_id` - Identifier of the CRM record linked to the meeting, as it exists in the CRM
    * `deal_type` - Kind of CRM record linked to the meeting: deal, contact or company
    * `deal_crm_url` - Direct link to the linked record in the CRM, when a CRM integration is configured
    * `transcript_text` - Full text of the meeting transcription
    * `transcript_speakers` - Per-speaker breakdown of the transcription, with the spoken text, its offsets in seconds and its sentiment, as a JSON string
    * `answers` - Scorecard answers produced for the meeting, as a JSON string
    * `keywords` - Keywords detected in the meeting
    * `competitors` - Competitors mentioned during the meeting, with how often and the position taken, as a JSON string
    * `reasons` - Reasons detected in the meeting, such as objections, as a JSON string
    * `tags` - Tags applied to the meeting
    * `important_points` - Key points the AI highlighted from the meeting
    * `sentiment_total` - Overall sentiment of the meeting
    * `sentiment_by_speaker` - Sentiment attributed to each speaker, as a JSON string
    * `summary` - Plain-text summary of the meeting generated by the AI
  </Accordion>

  <Accordion title="Conversations">
    WhatsApp conversations tracked by Elephan.ai, with metadata and scorecard statistics.

    **Key Fields:**

    * `id` - Unique identifier of the conversation
    * `contact_name` - Name of the contact on the other side of the conversation
    * `phone_number` - Phone number of the contact, in international format
    * `picture_url` - URL of the contact's profile picture
    * `user_id` - Identifier of the team member who owns the conversation
    * `user_name` - Name of the team member who owns the conversation
    * `user_email` - Email address of the team member who owns the conversation
    * `message_count` - Number of messages exchanged in the conversation
    * `last_message_at` - Timestamp of the most recent message in the conversation
    * `scorecard_total_answers` - Number of scorecard answers evaluated for the conversation
    * `scorecard_average` - Average scorecard score across the conversation's answers
    * `date_included` - Timestamp when the conversation was added to Elephan.ai, used as the incremental replication key
  </Accordion>

  <Accordion title="Conversation messages">
    Metadata of the messages exchanged in a WhatsApp conversation. Message bodies are never returned by the API.

    **Key Fields:**

    * `conversation_id` - Identifier of the conversation the message belongs to
    * `id` - Identifier of the message. When the API does not provide one, a deterministic hash of the message metadata is used instead
    * `date` - Timestamp when the message was sent
    * `direction` - Direction of the message: in for messages received from the contact, out for messages sent by the team
    * `from_me` - Whether the message was sent by the team member rather than the contact
    * `author` - Phone number of whoever sent the message
    * `type` - Kind of message, such as text
    * `scorecard` - Per-message scorecard statistics, as a JSON string. Reserved by the API and currently always empty
  </Accordion>

  <Accordion title="Insights">
    Individual observations the AI extracted from meetings, such as objections, churn signals or feature requests.

    **Key Fields:**

    * `id` - Unique identifier of the insight
    * `source` - Area the insight belongs to: product, sale or cs (customer success)
    * `type` - Kind of insight, such as objection, churn\_signal, closing\_signal or feature\_request. The possible values depend on the source
    * `description` - Short description of the insight
    * `details` - Extended explanation of the insight
    * `label` - Name of the cluster the insight was grouped into
    * `cluster_id` - Identifier of the cluster the insight belongs to
    * `category` - Additional categorization, present only on some objection types
    * `date_included` - Timestamp when the insight was generated, used as the incremental replication key
    * `transcribe_id` - Identifier of the meeting the insight was extracted from
    * `transcribe_name` - Title of the meeting the insight was extracted from
    * `deal_id` - Identifier of the CRM deal linked to the insight
    * `deal_name` - Name of the CRM deal linked to the insight
  </Accordion>

  <Accordion title="Insight clusters">
    Team insights aggregated by cluster, showing the recurring themes across meetings.

    **Key Fields:**

    * `cluster_key` - Primary key of the row: the cluster identifier as text, or unclustered for insights without one
    * `cluster_id` - Identifier of the cluster
    * `label` - Name given to the cluster, such as the recurring objection it captures
    * `count` - Number of insights grouped under the cluster
    * `types` - Breakdown of the insight types inside the cluster, each with its own count, as a JSON string
    * `first_date` - Timestamp of the earliest insight in the cluster
    * `last_date` - Timestamp of the most recent insight in the cluster
    * `samples` - Up to three example descriptions taken from the cluster's insights
  </Accordion>

  <Accordion title="Scorecard by seller">
    Average scorecard results per seller over the extracted period.

    **Key Fields:**

    * `user_id` - Identifier of the seller the scores are aggregated for
    * `user_name` - Name of the seller
    * `user_email` - Email address of the seller
    * `meetings_count` - Number of meetings the seller had in the period
    * `answers_count` - Number of scorecard answers evaluated for the seller in the period
    * `average` - Average scorecard score of the seller across the period
    * `by_question` - Per-question breakdown of the seller's scores, as a JSON string
    * `period_start` - Start of the period the aggregate was computed over
    * `period_end` - End of the period the aggregate was computed over
  </Accordion>

  <Accordion title="Scorecard by question">
    Average scorecard results per question over the extracted period.

    **Key Fields:**

    * `question` - Text of the scorecard question the scores are aggregated for
    * `question_type` - Kind of question: range for numeric scores, yesno for boolean answers, text for free-form ones
    * `average` - Average score of the question across the period
    * `count` - Number of answers the average is based on
    * `distribution` - How the answers were spread out, as a JSON string: counts per band for range questions, or per answer for yes/no questions
    * `period_start` - Start of the period the aggregate was computed over
    * `period_end` - End of the period the aggregate was computed over
  </Accordion>

  <Accordion title="Users">
    Members of the Elephan.ai team the API key belongs to.

    **Key Fields:**

    * `id` - Unique identifier of the user
    * `name` - Full name of the user as registered in Elephan.ai
    * `email` - Email address the user signs in with
    * `status` - Current account status of the user, such as active
    * `type` - Permission level of the user inside the team: super\_admin, admin or user
    * `role` - Business role assigned to the user, such as Vendedor
    * `date_created` - Timestamp when the user was created
    * `last_login` - Timestamp of the user's most recent sign-in
  </Accordion>

  <Accordion title="Prompts">
    Meeting types available to the team, both built-in and custom. A prompt is the analysis template Elephan.ai applies to a meeting, driving its scorecard questions and summary.

    **Key Fields:**

    * `id` - Unique identifier of the meeting type
    * `name` - Display name of the meeting type
    * `type` - Category of the meeting type, such as sales
    * `description` - Description of what the meeting type analyzes
    * `active` - Whether the meeting type is currently available for new meetings
    * `is_default` - Whether this is the meeting type applied when none is chosen
    * `date_created` - Timestamp when the meeting type was created
  </Accordion>

  <Accordion title="API usage stats">
    Daily usage of the Elephan.ai API by your API key, over the last 30 days. Useful for keeping an eye on your account's request quota.

    **Key Fields:**

    * `date` - Day the usage figures refer to
    * `count` - Total number of API calls made with the API key that day
    * `avg_response_time` - Average response time of those calls, in milliseconds
    * `success_count` - Number of calls that succeeded that day
    * `error_count` - Number of calls that failed that day
  </Accordion>
</AccordionGroup>
