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

# Fathom as a data source

> Bring data from Fathom to your Lakehouse.

Fathom is an AI notetaker that joins calls on Zoom, Google Meet, Microsoft Teams and Slack huddles and turns each meeting into structured content: a summary, a full transcript, action items, highlighted moments and, when a CRM is connected, the CRM records the meeting was matched to. Nekt extracts this data through the Fathom External API.

For more info on the streams and permissions, check the [Fathom API documentation](https://developers.fathom.ai/).

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

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

### 1. Add account access

The connector authenticates with an API key issued from your own Fathom account. To create one, open Fathom, go to **Settings > API Access** — the direct link is [fathom.video/customize](https://fathom.video/customize#api-access-header) — and generate a key.

<Warning>API keys are scoped to the user who creates them: the key reaches the meetings that user recorded plus the ones shared with them or their team, and never other users' private meetings. To sync the whole organization, generate the key with an account admin whose [view permissions](https://help.fathom.video/en/articles/10783489#understanding_permissions) cover every team. The `users` stream is admin-only and is skipped with a warning when the key belongs to a regular user.</Warning>

The following configuration is required:

* **API key**: The key generated under Settings > API Access.

Optionally, under advanced settings:

* **Initial sync date**: The earliest date from which recordings will be synced. When omitted, the first sync fetches the full history.
* **Lookback (days)**: How far back before the last sync each incremental run re-reads, so content Fathom generates after a meeting ends is picked up. Defaults to 1 day.

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/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).

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>

## Incremental sync

The meeting streams are replicated incrementally on `created_at`, the moment the recording was created in Fathom. Because Fathom writes the summary, transcript, action items and highlights only after a meeting ends, every run also re-reads a short lookback window before the last sync so that content is picked up once it exists. Records are keyed by `recording_id`, so re-reading a window never duplicates rows.

## Rate limits

Fathom allows 60 requests per minute overall, and a tighter 30 per minute for the requests that carry summaries and transcripts — a budget Fathom may temporarily lower during periods of high load. The connector paces itself below both limits and retries rate-limited requests, so the `Meeting summaries` and `Meeting transcripts` streams extract more slowly than the others. Selecting only the streams you need keeps extractions short.

# Streams and Fields

Below you'll find all available data streams from Fathom and their corresponding fields. The meeting streams are synced incrementally through the `created_at` field; the organization streams (meeting types, teams, team members, users) are extracted as full tables.

Fields holding nested data — invitees, transcripts and CRM matches — are delivered as JSON strings, ready to be parsed in a Query or Notebook.

<AccordionGroup>
  <Accordion title="Meetings">
    Meetings recorded by Fathom, with their calendar, recording and ownership metadata. This is the base stream and the cheapest one to extract. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, used as the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `meeting_title` - Title of the calendar event the meeting was recorded from
    * `meeting_type` - Name of the meeting type assigned to this meeting, or empty when none is assigned
    * `url` - URL of the recording in the Fathom web app
    * `meeting_url` - Join URL of the underlying meeting (Zoom, Google Meet, Microsoft Teams or Slack huddle) taken from the calendar event. Empty when there is no associated calendar meeting
    * `share_url` - Public share URL of the recording
    * `scheduled_start_time` - Timestamp when the meeting was scheduled to start (UTC)
    * `scheduled_end_time` - Timestamp when the meeting was scheduled to end (UTC)
    * `recording_start_time` - Timestamp when the recording actually started (UTC)
    * `recording_end_time` - Timestamp when the recording actually stopped (UTC)
    * `recording_duration_seconds` - Length of the recording in seconds, computed from the recording start and end timestamps
    * `scheduled_duration_seconds` - Length the meeting was scheduled for, in seconds, computed from the scheduled start and end timestamps
    * `transcript_language` - Language code of the meeting transcript, for example `en`
    * `calendar_invitees_domains_type` - Whether the calendar invitee list includes external email domains: `only_internal` or `one_or_more_external`
    * `shared_with` - Who the meeting is shared with inside the organization: `no_teams` (private to the recorder), `single_team`, `multiple_teams` or `all_teams`
    * `recorded_by_name` - Display name of the Fathom user who recorded the meeting
    * `recorded_by_email` - Email address of the Fathom user who recorded the meeting
    * `recorded_by_email_domain` - Email domain of the Fathom user who recorded the meeting
    * `recorded_by_team` - Team the user who recorded the meeting belongs to
    * `calendar_invitees` - People invited to the calendar event, as a JSON array of objects with name, email, email domain and whether they are external
    * `invitee_count` - Number of people invited to the calendar event
    * `external_invitee_count` - Number of invitees whose email domain is external to the organization
  </Accordion>

  <Accordion title="Meeting summaries">
    Fathom's generated write-up of each meeting, one row per recording. Fathom produces the summary only after the meeting ends, so it is empty for recordings still in progress. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, used as the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `summary_template_name` - Name of the summary template Fathom used to write the summary, for example `general`
    * `summary_markdown` - Summary of the meeting in Markdown. Fathom always writes it in English, regardless of the language spoken in the meeting
  </Accordion>

  <Accordion title="Meeting transcripts">
    Full transcript of each meeting, one row per recording. The speaking turns are available both as a JSON array and as a plain-text rendering. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, used as the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `transcript_language` - Language code of the transcript, for example `en`
    * `transcript` - Speaking turns of the meeting, as a JSON array of objects with the speaker (display name and matched calendar invitee email), the spoken text and the timestamp relative to the start of the meeting
    * `transcript_text` - Full transcript of the meeting as plain text, with each line prefixed by the timestamp and the name of the speaker
    * `speaker_count` - Number of distinct speakers detected in the transcript
    * `line_count` - Number of speaking turns in the transcript
  </Accordion>

  <Accordion title="Meeting action items">
    Follow-up tasks identified in each meeting, one row per action item. Fathom does not give action items an identifier of their own, so rows are keyed by the recording plus the position of the item in the meeting's list. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, part of the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `action_item_index` - Position of the action item within the meeting's list, part of the primary key
    * `description` - What has to be done. Fathom always writes it in English, regardless of the language spoken in the meeting
    * `user_generated` - Whether a person created the action item, as opposed to Fathom detecting it automatically
    * `completed` - Whether the action item has been marked as done
    * `recording_timestamp` - Moment of the recording the action item came from, as HH:MM:SS relative to the start of the recording
    * `recording_playback_url` - URL that opens the recording in Fathom at the moment the action item came from
    * `assignee_name` - Display name of the person the action item is assigned to
    * `assignee_email` - Email address of the person the action item is assigned to
    * `assignee_team` - Team of the person the action item is assigned to
  </Accordion>

  <Accordion title="Meeting highlights">
    Moments bookmarked during each meeting, one row per highlight. Fathom does not give highlights an identifier of their own, so rows are keyed by the recording plus the position of the highlight in the meeting's list. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, part of the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `highlight_index` - Position of the highlight within the meeting's list, part of the primary key
    * `type` - Label of the bookmark the highlight was created from, for example `Objection`
    * `summary` - Short summary of the highlighted moment
    * `text` - Full text of the highlight. Only present when it differs from the summary
    * `start_time` - Start of the highlight, in seconds from the start of the recording
    * `end_time` - End of the highlight, in seconds from the start of the recording
  </Accordion>

  <Accordion title="Meeting CRM matches">
    Contacts, companies and deals Fathom matched to each meeting in the CRM linked to your account or team. When no CRM is connected, the reason is reported in `crm_error` instead of the matches. Incremental sync is supported through the `created_at` field.

    **Fields:**

    * `recording_id` - Unique identifier of the meeting recording, used as the primary key
    * `created_at` - Timestamp when the recording was created in Fathom (UTC), used as the incremental replication key
    * `title` - Title Fathom gave the recording
    * `crm_contacts` - CRM contacts matched to the meeting, as a JSON array of objects with name, email and the URL of the record in the CRM
    * `crm_companies` - CRM companies matched to the meeting, as a JSON array of objects with name and the URL of the record in the CRM
    * `crm_deals` - CRM deals matched to the meeting, as a JSON array of objects with name, amount and the URL of the record in the CRM
    * `crm_contact_count` - Number of CRM contacts matched to the meeting
    * `crm_company_count` - Number of CRM companies matched to the meeting
    * `crm_deal_count` - Number of CRM deals matched to the meeting
    * `crm_deal_amount_total` - Sum, in dollars, of the amounts of the CRM deals matched to the meeting
    * `crm_error` - Reason Fathom could not return CRM matches, for example when no CRM is connected to the workspace
  </Accordion>

  <Accordion title="Meeting types">
    Meeting types configured for the organization, used to categorize meetings. Both active and inactive types are returned: inactive ones are no longer assignable but may still appear on historical meetings. Extracted as a full table.

    **Fields:**

    * `name` - Name of the meeting type, used as the primary key and as the value that identifies it on a meeting
    * `status` - Whether the meeting type is currently assignable: `active` types can be assigned to new meetings, `inactive` ones only appear on historical ones
    * `created_at` - Timestamp when the meeting type was created (UTC)
  </Accordion>

  <Accordion title="Teams">
    Teams configured in the Fathom organization. Extracted as a full table.

    **Fields:**

    * `name` - Name of the team, used as the primary key and as the value that identifies it on a meeting
    * `created_at` - Timestamp when the team was created (UTC)
  </Accordion>

  <Accordion title="Team members">
    People belonging to the teams of the Fathom organization. Extracted as a full table.

    **Fields:**

    * `email` - Email address of the team member, used as the primary key
    * `name` - Display name of the team member
    * `created_at` - Timestamp when the team member joined the team (UTC)
  </Accordion>

  <Accordion title="Users">
    Users of the Fathom account with their permissions. Fathom restricts this endpoint to account admins: when the API key belongs to a regular user, the stream is skipped with a warning instead of failing the extraction. Extracted as a full table.

    **Fields:**

    * `email` - Email address of the user, used as the primary key
    * `name` - Display name of the user. Empty for users who have not accepted their invite yet
    * `status` - Current state of the user in the account: `active`, `deactivated` or `invited`
    * `created_at` - Timestamp when the user joined the account (UTC). For invited users, the date the invite was sent
    * `settings_access_level` - How much of the account settings the user can manage: `none`, `team_admin` or `account_admin`. Empty for invited users
    * `settings_access_teams` - Teams the settings access applies to: every team for an account admin, the administered teams for a team admin, empty otherwise
    * `view_access_level` - Whose meetings the user can view: `own_meetings`, `team`, `multiple_teams` or `all_teams`. Empty for invited users
    * `view_access_teams` - Teams whose meetings the user can view: every team for `all_teams`, the granted teams for `team` and `multiple_teams`, empty for `own_meetings`
  </Accordion>
</AccordionGroup>
