> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/sources/category/other/coassemble/best-practices.md).

# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Start with Trackings</strong></td><td>Trackings is the most actionable entity for reporting. Set it up first and validate your data before adding Courses or Screen types to the same flow.</td></tr><tr><td><strong>Join Courses and Trackings</strong></td><td>Course IDs in the Trackings entity map directly to Courses. Use Coupler.io's Join transformation to enrich tracking records with course names and metadata — this makes your reports far more readable.</td></tr><tr><td><strong>Use Append for multi-org setups</strong></td><td>If you manage multiple Coassemble organizations, create one data flow per organization and use the Append transformation to consolidate all tracking data into a single destination table.</td></tr></tbody></table>

## Data refresh and scheduling

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Sync Trackings more frequently than Courses</strong></td><td>Learner progress changes constantly, but your course catalog rarely does. Schedule Trackings to refresh daily or hourly, and Courses weekly — or only on-demand when you publish new content.</td></tr><tr><td><strong>Run Screen types on-demand only</strong></td><td>Screen types are a static reference table. There's no value in scheduling frequent refreshes for this entity — sync it manually when you need it for a content audit.</td></tr></tbody></table>

## Performance optimization

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Send high-volume tracking data to BigQuery</strong></td><td>If your organization has thousands of learners, Google Sheets will hit row limits quickly. Route Trackings data to BigQuery or another database destination to handle the volume without issues.</td></tr><tr><td><strong>Use AI destinations for instant insights</strong></td><td>Pipe your Trackings data into ChatGPT or Claude to automatically generate completion summaries, flag overdue learners, or draft manager reports — without building a dashboard from scratch.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Don't rely solely on the `completed_at` field to measure completion. Learners who are 99% through a course but haven't hit the final screen will have a null value there. Always use `progress` and `status` together for an accurate picture.
{% endhint %}

{% columns %}
{% column %}
**Do**

* Join Courses to Trackings so reports show course names, not just IDs
* Validate your data with a manual run before setting up a schedule
* Use separate data flows per Coassemble organization
  {% endcolumn %}

{% column %}
**Don't**

* Assume empty Trackings means a connection problem — it may just mean no learner activity yet
* Schedule Trackings and Courses in the same data flow if you're hitting rate limit errors
* Use Screen types as a primary reporting entity — it's a reference table, not a metrics source
  {% endcolumn %}
  {% endcolumns %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.coupler.io/sources/category/other/coassemble/best-practices.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
