Best Practices
Recommended setup
Join Opportunities with Pipelines
The Opportunities entity returns pipeline IDs, not names. Add Pipelines as a second source in the same data flow and use a Join transformation on `pipelineId` to make your reports human-readable.
Use Append for multi-account reporting
If you manage multiple GoHighLevel sub-accounts, create one data flow per account and use Append to stack them into a single destination sheet or table. Add a custom column to tag each row with the account name.
Join Contacts with Opportunities
Opportunities don't include contact details like email or lead source. Join on `contactId` to enrich your deal data with contact-level attributes for deeper sales analysis.
Data refresh and scheduling
Always run manually first
A successful manual run is required before you can set up a schedule. Use the first run to verify row counts and check that custom fields are appearing as expected before automating.
Match refresh frequency to your reporting needs
Sales dashboards updated throughout the day benefit from 15-minute or hourly refreshes (Business plan). Weekly revenue or invoice reports don't need frequent syncs — daily is usually enough and keeps API usage lower.
Performance optimization
Filter Appointments and Tasks by Contact ID
If you only need data for specific contacts, enter their Contact IDs in the parameter field. This fetches far fewer records than pulling all appointments or tasks across the account.
Don't run overlapping flows for the same account
Running multiple data flows against the same GoHighLevel account at the same time increases the risk of hitting GHL's API rate limits. Stagger your schedules by at least a few minutes.
Common pitfalls
Custom fields are only available for Contacts, Opportunities, and Companies. If you build formulas or transformations expecting custom fields from other objects (like Tasks), those fields won't appear — the GoHighLevel API doesn't expose them.
Do
Join Opportunities + Pipelines to get readable pipeline names
Use Contact IDs to scope Appointments and Tasks to specific records
Verify row counts on the first manual run before scheduling
Store formula logic somewhere outside Coupler.io — there is no version history or formula recovery if changes are lost
Don't
Expect custom fields from objects other than Contacts, Opportunities, or Companies
Run multiple flows against the same GHL account at the same time
Assume a timestamp offset is a data bug — check timezone settings first
Connect at sub-account level if you need cross-account reporting
Last updated
Was this helpful?
