# Data Overview

Coupler.io pulls data from 10 GoHighLevel entities, covering your full CRM lifecycle — from lead capture to invoicing. Custom fields are supported on Contacts, Opportunities, and Companies, and each custom field is returned as its own column.

## Entities and what they return

| Entity        | Key data returned                                                                      |
| ------------- | -------------------------------------------------------------------------------------- |
| Opportunities | Deal name, stage, pipeline ID, status, value, assigned user, close date, custom fields |
| Orders        | Order ID, contact, amount, status, line items, created date                            |
| Pipelines     | Pipeline ID, pipeline name, stages list                                                |
| Invoices      | Invoice ID, contact, amount due, amount paid, status, issue date                       |
| Companies     | Company name, address, industry, custom fields                                         |
| Contacts      | Name, email, phone, tags, source, assigned user, custom fields, created date           |
| Conversations | Contact ID, channel type, last message date, unread count                              |
| Transactions  | Transaction ID, amount, currency, contact, created date                                |
| Appointments  | Appointment ID, contact ID, calendar, start/end time, status                           |
| Tasks         | Task ID, contact ID, title, due date, status, assigned user                            |

## Metrics and dimensions

#### Opportunities

| Field           | Type      | Description                                 |
| --------------- | --------- | ------------------------------------------- |
| name            | Dimension | Opportunity/deal name                       |
| pipelineId      | Dimension | ID of the parent pipeline                   |
| pipelineStageId | Dimension | ID of the current stage                     |
| status          | Dimension | open, won, lost, abandoned                  |
| monetaryValue   | Metric    | Deal value                                  |
| assignedTo      | Dimension | User ID of the assigned team member         |
| closeDate       | Dimension | Expected or actual close date               |
| createdAt       | Dimension | Date opportunity was created                |
| customFields    | Dimension | Flattened into individual columns per field |

#### Contacts

| Field                | Type      | Description                                 |
| -------------------- | --------- | ------------------------------------------- |
| firstName / lastName | Dimension | Contact name                                |
| email                | Dimension | Primary email address                       |
| phone                | Dimension | Phone number                                |
| source               | Dimension | Lead source                                 |
| tags                 | Dimension | Comma-separated tag list                    |
| assignedTo           | Dimension | Assigned user ID                            |
| dateAdded            | Dimension | Contact creation date                       |
| customFields         | Dimension | Flattened into individual columns per field |

#### Appointments

| Field               | Type      | Description                                   |
| ------------------- | --------- | --------------------------------------------- |
| contactId           | Dimension | Linked contact                                |
| calendarId          | Dimension | Calendar the appointment belongs to           |
| startTime / endTime | Dimension | Appointment window                            |
| status              | Dimension | booked, confirmed, showed, no-show, cancelled |

#### Invoices & Transactions

| Field                 | Type      | Description                         |
| --------------------- | --------- | ----------------------------------- |
| amount / amountDue    | Metric    | Invoice total or amount outstanding |
| amountPaid            | Metric    | Amount already collected            |
| status                | Dimension | draft, sent, paid, void             |
| contactId             | Dimension | Linked contact                      |
| issueDate / createdAt | Dimension | Date created or issued              |

## Common metric combinations

* **Opportunities + Pipelines (Join)** — Join on `pipelineId` to replace pipeline IDs with readable pipeline names in your reports.
* **Contacts + Opportunities (Join)** — Join on `contactId` to enrich deal data with contact details like email, tags, and source.
* **Invoices + Contacts (Join)** — Combine billing data with contact info for revenue reporting per client.
* **Appointments + Contacts (Join)** — Match appointments to contacts to analyze booking rates by source or tag.

## Use cases by role

{% tabs %}
{% tab title="Sales teams" %}

* Track open opportunities by stage and pipeline to identify bottlenecks.
* Monitor deal values and close dates in a live Looker Studio or Google Sheets dashboard.
* Join Opportunities with Pipelines to show pipeline names instead of raw IDs.
* Use the Contacts entity to report on lead sources and assigned-user performance.
  {% endtab %}

{% tab title="Agency owners" %}

* Pull data from multiple sub-accounts using Append to create a single consolidated view.
* Combine Invoices and Transactions to monitor revenue per client.
* Export Conversations to track channel engagement across accounts.
* Use AI destinations (Claude, ChatGPT) to auto-generate weekly performance summaries.
  {% endtab %}

{% tab title="Operations" %}

* Sync Tasks and Appointments to a spreadsheet to manage team workload.
* Use the `contactIds` parameter to pull tasks or appointments for a specific set of contacts.
* Monitor invoice statuses to flag overdue payments.
* Schedule automated refreshes so dashboards always reflect the latest CRM state.
  {% endtab %}
  {% endtabs %}

## Platform-specific notes

* **Custom fields** are supported on Contacts, Opportunities, and Companies. Each custom field appears as a separate column — not a JSON blob.
* **Custom fields on other objects** (e.g., Tasks, Appointments) are not exposed via the GoHighLevel API and won't appear.
* **Appointments and Tasks** support two filter parameters: a start date (fetches records for contacts created after that date) or a list of specific Contact IDs. If Contact IDs are provided, the start date is ignored.
* **Pipelines** returns stage definitions but not opportunity counts — join with Opportunities to get deal metrics per stage.
* **Date fields** like `createdAt` and `dateAdded` reflect GoHighLevel's stored timezone. If timestamps appear off by one hour, this is likely a timezone offset — adjust in your destination or transformation layer.
* **AssignedTo** fields return a user ID. To get the display name, you may need to cross-reference with your GHL user list manually, as a dedicated Users entity is not currently available.
