For the complete documentation index, see llms.txt. This page is also available as Markdown.

GoHighLevel

GoHighLevel is an all-in-one CRM and marketing platform built for agencies and businesses. It combines contacts, pipelines, conversations, appointments, invoices, and more into a single workspace. Connecting it to Coupler.io lets you pull that data into spreadsheets, dashboards, or AI tools automatically.

Why connect GoHighLevel to Coupler.io?

  • Centralize your CRM data — export contacts, opportunities, pipelines, invoices, and transactions into Google Sheets, BigQuery, or Looker Studio without manual exports.

  • Build real sales dashboards — combine opportunities with pipeline data using a Join transformation to get pipeline names alongside your deal data.

  • Work across multiple accounts — use Append to stack data from multiple GoHighLevel sub-accounts into a single destination.

  • AI-ready reporting — send your CRM data to Claude, ChatGPT, Gemini, or other AI destinations for automated analysis and summaries.

Prerequisites

  • An active GoHighLevel account (Agency or Sub-account level)

  • Admin access or sufficient permissions to authorize third-party integrations

  • A Coupler.io account (free trial available)

If you use a white-labeled GoHighLevel URL (e.g., app.youragency.com), authentication still goes through the standard GoHighLevel OAuth flow. You'll be redirected to the official GHL login page regardless of your custom domain.

Quick start

1

Create a new data flow. Log in to Coupler.io, go to your workspace, and click Add data flow.

2

Select GoHighLevel as the source. Search for "GoHighLevel" in the source list and select it.

3

Authorize your account. Click Connect and sign in to your GoHighLevel account via OAuth. Coupler.io will request access — approve it. If you manage multiple sub-accounts, you'll be able to select which account to pull data from.

4

Choose an entity. Pick the data entity you want to import — for example, Opportunities, Contacts, or Invoices. You can add more entities to the same data flow later.

5

Choose a destination. Select where you want to send the data — Google Sheets, Excel, BigQuery, Looker Studio, or an AI destination like ChatGPT or Gemini.

6

Run the data flow. Click Run to execute your first manual sync and confirm that data is flowing correctly.

Available entities

Entity
What it contains

Opportunities

Deals in your pipelines, stages, values, and assigned users

Orders

E-commerce or product orders placed through GHL

Pipelines

Pipeline names and stage definitions

Invoices

Invoice records with amounts, statuses, and contacts

Companies

Company/account records linked to contacts

Contacts

All contact records including custom fields

Conversations

Messaging threads across channels

Transactions

Payment and transaction records

Appointments

Scheduled appointments (filterable by date or contact ID)

Tasks

Contact-linked tasks (filterable by date or contact ID)

GoHighLevel 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

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

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

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

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.

GoHighLevel common issues

Connection issues

OAuth redirects to the wrong GoHighLevel URL

If you use a white-labeled GoHighLevel domain (e.g., app.youragency.com), Coupler.io will still redirect to the standard app.gohighlevel.com for authentication. This is expected — GoHighLevel's OAuth flow requires the official domain. Log in with your GHL credentials on that page and authorization will complete normally.

I can't see my agency sub-accounts after connecting

GoHighLevel authentication scope depends on your account type. If you connected as a sub-account user, you'll only see that sub-account's data. To access multiple sub-accounts, connect using your agency-level credentials. If you need data from several sub-accounts in one destination, create separate data flows and use an Append transformation to combine them.

The data flow connects but returns no data

This can happen if the connected account has no records for the selected entity, or if the OAuth token has expired. Try disconnecting and reconnecting your GoHighLevel account, then run the data flow again. If the issue persists, check that your GHL account has data for the entity you selected.

Missing data

Custom fields aren't showing up as columns

Custom fields are only available for Contacts, Opportunities, and Companies. If your custom fields were created under a different object in GoHighLevel (e.g., Tasks or Appointments), they won't appear — the GHL API does not expose them for those objects. Also confirm that the fields are populated in GHL, as empty custom fields may not be returned.

Opportunities aren't exporting any rows

This is a known issue that has been addressed in a fix. If you're still seeing no rows for Opportunities, try reconnecting your GoHighLevel account and running the data flow again. If the problem persists, contact Coupler.io support with your data flow name.

Appointments or Tasks are missing records I expect to see

Appointments and Tasks use filter parameters. If you set a start date, only records for contacts created after that date are returned. If you entered Contact IDs, only those contacts' records are returned and the start date is ignored. Check your parameter settings to confirm the filter matches what you expect.

Only a small percentage of my data is showing

This is usually a temporary API delay or a pagination issue during a sync. Run the data flow again manually — if the row count stabilizes, it was a transient hiccup. If the problem repeats consistently, contact support with your data flow name and a screenshot of the row count.

Data discrepancies

Timestamps are off by one hour compared to GoHighLevel

GoHighLevel stores dates in a specific timezone. If your destination or Data Studio is set to a different timezone, dates can appear shifted by one hour. This is a timezone offset, not a data error. Adjust the timezone in your destination settings or apply a date formula to offset the values.

AssignedTo field shows an ID instead of a name

The assignedTo field returns a GoHighLevel user ID, not a display name. This is how the GHL API returns the value. To display names, you'll need to cross-reference IDs manually or build a lookup using a separate user list. Coupler.io does not currently offer a dedicated Users entity.

Data in Data Studio doesn't match what I see in GHL

Data Studio can display a "bad reaggregation" warning that is a Data Studio UI bug — no actual data re-aggregation is occurring. For genuine discrepancies, go to your data flow in Coupler.io and check the most recent run's row count against your GHL record count. If there's a real mismatch, contact support.

Rate limits

My data flow is slow or times out on large accounts

GoHighLevel's API has rate limits that affect how quickly large datasets can be fetched. If you have a very large number of contacts or opportunities, the sync will take longer. Avoid running multiple data flows for the same GHL account simultaneously, as this increases the chance of hitting rate limits.

GoHighLevel FAQ

Can I pull data from a white-labeled GoHighLevel URL?

Yes. Even if your agency uses a custom domain like app.youragency.com, Coupler.io authenticates through the standard GoHighLevel OAuth flow at app.gohighlevel.com. Enter your GHL credentials on that page and the connection will work normally.

Can I filter Opportunities by a specific pipeline?

Not directly — Coupler.io pulls all opportunities from your GHL account by default. To work with a specific pipeline, export all opportunities and filter them in your destination (e.g., using a Google Sheets filter or a Looker Studio filter control). You can also join Opportunities with Pipelines and then filter by pipeline name in your reporting tool.

Are GoHighLevel custom fields supported?

Yes. Custom fields are supported for Contacts, Opportunities, and Companies. Each custom field is returned as its own column — not a JSON blob. Custom fields on other objects (Tasks, Appointments, etc.) are not available through the GoHighLevel API.

How do I get pipeline names instead of pipeline IDs in my Opportunities data?

Add Pipelines as a second entity in your data flow and use a Join transformation on the pipelineId field. This replaces the raw ID with the human-readable pipeline name. See the data flow transformation docs for step-by-step instructions.

Can I pull data from multiple GoHighLevel sub-accounts into one destination?

Yes. Create a separate data flow for each sub-account, then use an Append transformation to combine them into a single sheet or table. Add a custom column in each flow to label which account the data belongs to.

Why are my timestamps off by one hour?

This is a timezone offset. GoHighLevel stores dates in a specific timezone, and if your destination or Looker Studio is configured for a different timezone, the times will appear shifted. Adjust the timezone in your destination settings or apply an offset formula to the date column.

Do I need to create a separate data flow for every GoHighLevel entity I want to export?

Not necessarily. A single data flow can contain multiple sources — you can add Contacts, Opportunities, and Pipelines as separate entities within the same data flow and apply Join or Append transformations to combine them.

Can I get call data, call durations, or outbound call timestamps from GoHighLevel?

Call-specific data (call status, duration, outbound timings) is not currently available as a standalone entity in the Coupler.io GoHighLevel integration. The Conversations entity returns messaging thread data but does not include detailed call logs. Check Coupler.io's changelog or contact support to ask about future entity support.

What happens if I accidentally delete custom formulas in my data flow?

Coupler.io does not currently have version history or formula recovery. If you clear changes or delete transformation formulas, they cannot be restored. Keep a backup of your formula logic outside of Coupler.io — for example, in a Google Doc or a notes file.

For a full list of fields available per entity, see the Data Overview page. For help with connection errors or missing data, visit Common Issues.

Last updated

Was this helpful?