> ## Documentation Index
> Fetch the complete documentation index at: https://control-dev.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Send data to Google Sheets

> Create a Google Sheets data output, choose its tables and columns, and keep it synchronized with Control.

export const ControlAppLink = ({path, breadcrumb, children}) => {
  const link = <a href={`https://app.control.dev${path}`} target="_blank" rel="noopener noreferrer" aria-label={breadcrumb ? `Open ${breadcrumb} in Control` : undefined}>
      {children}
    </a>;
  return breadcrumb ? <Tooltip tip={breadcrumb}>{link}</Tooltip> : link;
};

A Google Sheets connector sends prepared data from Control to a spreadsheet for analysis, reporting, or financial models. Each connector can populate several tabs from different source tables and keep them updated automatically, manually, or on a schedule.

## Before you begin

* Connect and sync at least one data source in Control. The connector can only use output tables and columns that are available in your workspace.
* Create or open the destination Google Sheet and make sure you can share it with an editor.
* Decide which datasets belong in the spreadsheet and which columns its readers need.
* Confirm that you have permission to create and edit data outputs in Control. View-only users can inspect existing connectors but cannot change them.

## Connect the spreadsheet

1. Open <Tooltip tip="Data outputs → Google Sheets"><ControlAppLink path="/data-outputs/google-sheets/connectors"><strong>Google Sheets</strong></ControlAppLink></Tooltip>.
2. Choose **Add data output**.
3. On **General**, enter a name that your team will recognize.
4. Copy the service-account email shown under **Grant editor access**.
5. In Google Sheets, choose **Share**, add that email, and grant **Editor** access.
6. Copy the full spreadsheet URL from the browser and paste it into **Google Sheets URL**.
7. Choose **Validate** and wait for the access check to succeed.

<Note>
  The service-account email is specific to your Control workspace. Share the sheet with the address displayed in the
  connector instead of reusing an address from another workspace or an example.
</Note>

## Configure output tabs

1. Open **Tabs** and choose **Add sheet tab**.
2. Select the **Source table**. The list contains the data models enabled for your workspace.
3. Enter a unique **Tab name** for the destination spreadsheet.
4. Select at least one column.
5. Drag selected columns into the order in which they should appear.
6. Configure column filters or one sort column when the output should contain a narrower or ordered result.
7. Choose **Preview** to check the data before creating the connector.
8. Repeat these steps for each additional output tab.

Under **Advanced settings**, choose whether the synchronized table includes a header row. New tabs use Google Connected Sheets.

<Tip>
  Save the connector before using **Configure with AI**. When the feature is available for your workspace, you can ask
  Control to configure a new or selected tab and then review the proposed table, columns, filters, and sorting.
</Tip>

## Choose a sync schedule

Open **Schedule** and choose how Control updates the spreadsheet:

| Mode      | Behavior                                                                  |
| --------- | ------------------------------------------------------------------------- |
| Automatic | Syncs after new prepared data becomes available in Control.               |
| Manual    | Syncs only when a user chooses **Sync now** on the connector.             |
| Scheduled | Syncs every 10 minutes, hourly, or daily at the selected time in **UTC**. |

Choose **Create** after the General, Tabs, and Schedule steps are complete.

## Run and verify the first sync

1. Find the connector under <Tooltip tip="Data outputs → Google Sheets"><ControlAppLink path="/data-outputs/google-sheets/connectors"><strong>Google Sheets</strong></ControlAppLink></Tooltip>.
2. If you selected **Manual**, choose **Sync now**. Automatic and scheduled connectors run when their trigger occurs.
3. Wait for the connector to finish syncing.
4. Open the destination spreadsheet and confirm that every configured tab exists, the columns are in the intended order, and the expected rows are present.
5. Open <Tooltip tip="Data outputs → History"><ControlAppLink path="/data-outputs/google-sheets/history"><strong>History</strong></ControlAppLink></Tooltip> and expand the run to verify each tab.

History shows the connector, start time, trigger, overall status, synchronized-tab count, triggering user or system, and duration. A run can be **Syncing**, **Synced**, or **Errored**. Expanded tab details can also identify missing access or a changed source schema.

## Understand the generated tabs

New connectors use Google Connected Sheets. For each configured output, Control can create:

* the tab name you configured, which contains the connected table; and
* a backing data-source tab whose name ends in `_bq`.

Leave the backing tab and its connection unchanged. Build formulas, pivots, charts, and presentation views outside the synchronized table so refreshes do not conflict with manually maintained content.

Connected output tables return up to 100,000 rows. Use filters to reduce a larger result or use [Parquet exports](/product-docs/data-exports/parquet-overview) for warehouse-scale delivery.

<Warning>
  Changing the selected columns of a previously synchronized tab clears its existing output and re-syncs it with the new
  schema. Review formulas and other references before confirming **Clear and re-sync**.
</Warning>

## Troubleshooting

| Problem                         | Resolution                                                                                                                                                                                   |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Validation fails                | Confirm that you pasted a Google Sheets URL and shared that exact spreadsheet with the displayed service-account email as **Editor**. Then choose **Validate** again.                        |
| No source tables are available  | Connect and successfully sync a source system first. If the required data model is still missing, ask your Control administrator or Control support whether it is enabled for the workspace. |
| A run shows **No Access**       | Restore **Editor** access for the service-account email, then run the connector again.                                                                                                       |
| A tab shows **Schema Changed**  | Edit the tab, select columns that still exist in the source table, save, and confirm the clear-and-re-sync warning.                                                                          |
| Output contains unexpected rows | Review the selected source table, filters, and sort configuration. Use **Preview** to verify the result before the next sync.                                                                |
| Output stops at 100,000 rows    | Add filters to reduce the result or use a Parquet export for the full dataset.                                                                                                               |

If a problem continues, contact Control support with the connector name, run start time, affected tab, and displayed status. Do not include spreadsheet contents, service-account credentials, access tokens, or provider secrets.

## Next steps

* Review [how financial data flows through Control](/product-docs/concepts/financial-data-flow) to understand which prepared data appears in outputs.
* Use [Parquet exports](/product-docs/data-exports/parquet-overview) when the destination is a warehouse or the dataset is too large for Google Sheets.
