# Best Practices

## Recommended setup

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Split forms and responses into separate sources</strong></td><td>Add both the Forms and Form responses entities to the same data flow but map them to different destination sheets or tables. This keeps question structure separate from response data and makes both easier to query.</td></tr><tr><td><strong>Use Append to combine responses from multiple forms</strong></td><td>If you run the same survey across different audiences or time periods (each as its own form), use the Append transformation to merge all responses into a single dataset. This is cleaner than maintaining separate sheets per form.</td></tr><tr><td><strong>Include form_id in every export</strong></td><td>When pulling responses from multiple forms into one destination, always keep the form_id column. Without it, you lose track of which response came from which form once the data is combined.</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 your schedule to your response volume</strong></td><td>For active campaigns or time-sensitive feedback forms, hourly syncs make sense. For low-volume internal forms, a daily refresh is usually enough and avoids unnecessary API calls.</td></tr><tr><td><strong>Run a manual sync before sharing dashboards</strong></td><td>Always complete a successful manual run before publishing a Looker Studio report or sharing a Google Sheet. This confirms the data is flowing correctly before others rely on it.</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>Don't put too many forms in one data flow</strong></td><td>If you're pulling from dozens of forms, split them across multiple data flows. This reduces the chance of hitting Google API rate limits and makes it easier to troubleshoot if one form has an issue.</td></tr><tr><td><strong>Use AI destinations for open-text analysis</strong></td><td>For forms with open-ended questions, route the Form responses entity to ChatGPT, Claude, or Gemini. These destinations can summarize themes, detect sentiment, and highlight patterns far faster than manual review.</td></tr></tbody></table>

## Common pitfalls

{% hint style="danger" %}
Do not delete or re-create a form to "reset" it — this generates a new Form ID and breaks any existing data flows pointing to the old ID. Instead, clear responses from within Google Forms settings.
{% endhint %}

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

* Copy the Form ID from the URL (the part between `/d/` and the next `/`)
* Enable email collection in form settings before you need respondent identity data
* Use the Join transformation to combine form responses with external data (e.g., CRM records) using email as the key
  {% endcolumn %}

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

* Paste the full form URL into the Form IDs field — only the ID string is needed
* Assume the respondent\_email field will be populated without checking form settings first
* Edit question text on a live form mid-campaign if consistency in historical exports matters to you
  {% endcolumn %}
  {% endcolumns %}
