# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Join Opportunities with Stages and Pipelines</strong></td><td>These three entities are most useful together. A standalone Opportunities export gives you deal data but not stage names or pipeline labels — join them to make your reports readable without extra lookups.</td></tr><tr><td><strong>Add Lost reasons as a second source</strong></td><td>The Opportunities entity only stores a lost reason ID. Pull in the Lost reasons entity and use a Join transformation to replace IDs with meaningful labels before sending data to your destination.</td></tr><tr><td><strong>Use a start date that matches your analysis window</strong></td><td>Set the start date to the earliest record you actually need. Pulling all historical data every sync adds time and volume — scope it to the period relevant to your reports using the date picker.</td></tr><tr><td><strong>Export Custom fields separately, then join</strong></td><td>Custom fields live in their own entity. Add them as a second source in your data flow and join them to Parties or Opportunities by record ID to enrich your main contact or deal 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>Run a successful manual sync before scheduling</strong></td><td>Coupler.io requires a completed manual run before you can activate a schedule. Verify the data looks correct in your destination first — then set up your refresh cadence.</td></tr><tr><td><strong>Match refresh frequency to your sales cycle</strong></td><td>If your team updates deals daily, a daily refresh is sufficient. Syncing more frequently than your team actually updates records doesn't add value and burns through API quota faster.</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>Split large entity syncs into separate data flows</strong></td><td>If you're pulling Parties (which can be large) alongside multiple smaller entities, put Parties in its own data flow. This prevents one slow entity from blocking others and makes troubleshooting easier.</td></tr><tr><td><strong>Use Aggregate for summary reporting</strong></td><td>Instead of exporting all raw opportunity rows to a spreadsheet and summing there, use Coupler.io's Aggregate transformation to group by owner, stage, or pipeline before the data lands — your destination stays lean and fast.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Don't rely on opportunity value totals if your account uses multiple currencies. Capsule CRM does not convert values — summing across currencies will produce misleading totals. Always filter or group by currency before aggregating deal values.
{% endhint %}

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

* Join Opportunities, Stages, and Pipelines for readable pipeline reports
* Use the `type` field to separate Person and Organization parties
* Check the `lostReasonId` field and join to Lost reasons for meaningful analysis
* Keep your start date scoped to your actual reporting window
  {% endcolumn %}

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

* Assume Custom fields will appear automatically in Party or Opportunity exports
* Sum opportunity values across multiple currencies without filtering first
* Run all 16 entities in a single data flow if you don't need all of them
* Ignore duplicate party records — match on email to deduplicate before analysis
  {% endcolumn %}
  {% endcolumns %}
