> 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/sales/callrail/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>Use one data flow for Calls, another for Conversations</strong></td><td>Calls and Conversations have different structures and update cadences. Keeping them in separate data flows makes it easier to troubleshoot and schedule them independently.</td></tr><tr><td><strong>Join Calls with ad platform data</strong></td><td>Use Coupler.io's Join transformation to merge CallRail call records with Google Ads or Facebook Ads data on campaign name or UTM parameters. This gives you a true cost-per-call metric without manual spreadsheet work.</td></tr><tr><td><strong>Append data from multiple CallRail accounts</strong></td><td>If you manage several accounts (e.g., for different clients or locations), add multiple sources to one data flow and use the Append transformation to combine them into a single 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>Match refresh frequency to your reporting needs</strong></td><td>For daily call volume dashboards, a once-per-day refresh is usually enough. If you're monitoring missed calls or open conversations in near real-time, consider hourly refreshes — but only for the entities that need it.</td></tr><tr><td><strong>Set a fixed start date for historical loads</strong></td><td>Use the date picker to set a specific start date when first loading data. Once historical data is in your destination, you can narrow the start date for subsequent runs to avoid re-pulling the same records unnecessarily.</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>Filter in your destination, not at the source</strong></td><td>CallRail's API doesn't support granular filtering — pull all data and apply filters (by source, tag, campaign, or call status) in Google Sheets, Looker Studio, or BigQuery instead.</td></tr><tr><td><strong>Use BigQuery for large call volumes</strong></td><td>If your account logs thousands of calls per day, Google Sheets will hit row limits quickly. Load to BigQuery and query from Looker Studio for scalable, high-volume reporting.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
**Don't use a restricted user's API key for shared data flows.** If the key owner has limited account access, every data flow using that key will silently return incomplete data. Always use an admin-level API key for data flows that need full account visibility.
{% endhint %}

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

* Use an admin account's API key for full data access
* Convert duration (seconds) to minutes in your destination
* Use the Aggregate transformation to roll up call counts by campaign or source before loading to a dashboard
  {% endcolumn %}

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

* Pull the full historical date range on every scheduled run — it's slow and redundant
* Rely on the `keywords` field without confirming keyword-level tracking is enabled
* Run simultaneous data flows on the same CallRail account — stagger them to avoid rate limit errors
  {% 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/sales/callrail/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.
