> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nemu.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# External spend from Google Sheets

> Connect a Google Sheets spreadsheet so Nemu automatically imports what you invest in channels without a native integration and shows spend and ROAS in Analytics and Campaigns.

> [!NOTE]
>
> This feature is being rolled out gradually. If the **Connect Google Sheets** option doesn't show up in your account, contact Nemu support.

## What it is

Many companies invest in channels that have no native integration with Nemu, such as RTB, affiliates, influencers, CRM, radio or offline media. These amounts usually live in a spreadsheet.

With the Google Sheets connection, Nemu reads that spreadsheet on its own, at the frequency you choose. New rows and corrections come in without uploading files again, and the spend shows up next to revenue in **Analytics** and **Campaigns**, with ROAS and profit per channel.

> [!TIP]
>
> The spreadsheet stays private. Nemu only reads the spreadsheet you choose: it never edits, shares or deletes anything.

## Before you start

* **Who can set it up:** admins and traffic managers of the dashboard. For other roles, the buttons are disabled with the message "Only admins and traffic managers can change the connection."
* **A Google account with read access to the spreadsheet.** It can be the account you already use in Nemu or another one, just for the spreadsheet. This connection is separate from the Google Ads connection.
* **One spreadsheet per dashboard.** Once connected, the menu option is renamed **Manage connected spreadsheet**.
* **UTMs that match your links.** Nemu sends each spend to the channel of the row's UTMs. If the spreadsheet UTM differs from the one in your links, the spend goes to another channel.

## Prepare the spreadsheet

Use a tab with spend only. The **first row must be the header**, and each following row is one investment. Totals and summary formulas in the middle of the data become rows with errors.

In the wizard, you choose what each row represents:

* **A period:** start date and end date columns, with the total amount. The amount is split evenly per day.
* **A day:** a single "Date" column and the amount spent on that day.

| Field in Nemu | Required | What to enter |
| - | - | - |
| **Title** | Yes | Name shown in Nemu (e.g., `RTB House October`). |
| **UTM Source** | Yes | The same source used in your links (e.g., `rtbhouse`). |
| **UTM Medium**, **UTM Campaign**, **UTM Content** | No | The other UTMs, if you use them. |
| **Start date** and **End date** | Yes, in the period format | Dates of the investment. |
| **Date** | Yes, in the day format | The day of the spend. |
| **Total amount spent** or **Amount spent that day** | Yes | A number, in the dashboard currency. |
| **Row ID** | No, but recommended | A code that doesn't change (e.g., `INV-001`). |

Example spreadsheet in the period format (the Nemu template uses Portuguese headers):

| ID | Título | Fonte | Meio | Campanha | Conteúdo | Data de início | Data de término | Valor investido |
| - | - | - | - | - | - | - | - | - |
| INV-001 | RTB House outubro | rtbhouse | display | remarketing-outubro | banner-300x250 | 01/10/2026 | 31/10/2026 | 3200,00 |
| INV-002 | Patrocínio podcast | podcast | patrocinio | podcast-marketing | | 01/10/2026 | 15/10/2026 | 1500,00 |

Don't have a spreadsheet yet? In the wizard's **Spreadsheet and tab** step, click **Download the Nemu template** (CSV) and import the file into Google Sheets.

**Accepted formats**

* **Dates:** `dd/mm/yyyy`, `mm/dd/yyyy` or `yyyy-mm-dd`. Cells formatted as dates in Google Sheets are read directly.
* **Amounts:** comma (`1.234,56`) or dot (`1,234.56`) as the decimal separator. Currency symbols and codes (`R$`, `US$`, `$`, `€`, `£`, `BRL`, `USD`, `EUR`, `GBP`) are ignored. The amount is read in the dashboard currency, **with no conversion**. Negative amounts aren't accepted.
* Nemu recognizes common headers on its own, such as "Title", "Source", "Medium", "Campaign", "Start date", "End date", "Amount", "Spend" and "ID" (and their Portuguese equivalents). If your header is different, you pick the column in the wizard.

> [!NOTE]
>
> **Why map the row ID?** With a stable identifier, a corrected amount replaces the previous record instead of being added to it. Without an ID, Nemu identifies the row by source, medium, campaign, content and start date (or the date, in the day format). If you change one of these fields, the row is treated as a new investment.

> [!WARNING]
>
> Rows whose source belongs to a platform with a native integration (Meta Ads, Google Ads, Pinterest Ads and TikTok Ads, for example `facebook`, `meta`, `google`, `pinterest` or `tiktok`) are **ignored**: spend from these platforms always comes from the integration. This applies even if the integration isn't connected to the dashboard.

## Connect the spreadsheet

**1. Open the wizard**

In the sidebar, go to **Operating Costs › Investments by channel**. Click **Add** and choose **Connect Google Sheets**. If the tab is still empty, you can also click the **Connect Google Sheets** card, marked as **Recommended**.

![Empty Investments by channel tab, with the Add menu open and the Connect Google Sheets option highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/01-adicionar.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=86f228aef80588730e6133bfaa682d3b)

**2. Authorize Google**

The **Authorize Google** step shows what Nemu can and can't do with the spreadsheet. Click **Continue with Google**. In the Google window, choose the account that has access to the spreadsheet and accept the read permission.

![Authorize Google step, with the list of permissions and the Continue with Google button highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/02-autorizar.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=f68d7b738bf5ad647cfb6d83bb0fb573)

If you close the window or deny the permission, Nemu shows "Authorization canceled. Without it, we can’t read the spreadsheet." Click **Try again** and confirm the read permission.

> [!NOTE]
>
> If the Google window doesn't open, check your browser's pop-up blocker.

**3. Choose the spreadsheet and the tab**

Click **Choose from Google Drive** (1) and select the spreadsheet. Nemu only accesses the spreadsheet you select. Once it's found, its name and last edit date show up. Then, in **Tab with the spend** (2), choose the tab that holds the investments.

![Spreadsheet and tab step with the spreadsheet found, the Choose from Google Drive button (1) and the Tab with the spend field (2)](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/03-planilha.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=aa0b50cec68f842115e6e562e15d4f60)

The **Spreadsheet link (shortcut)** field accepts the address that starts with `https://docs.google.com/spreadsheets/`. If the connected account has no access, choosing from Google Drive grants read access.

**4. Match the columns**

In the **Columns** step:

1. In **Each row represents:**, choose **A period** or **A day**.
2. Under the spreadsheet formats, check the **Date format** and the **Decimal separator**. Nemu detects both in the first rows; if it doesn't find enough clues, it uses the default and asks you to check. You can change both.
3. Check the spreadsheet column chosen for each field. Required fields have an asterisk, and the **Status** column shows what was detected.

Below the table, the **Preview of the first rows** shows the first 5 rows as Nemu will read them. The full validation runs after you connect and doesn't stop you from moving on.

![Columns step with the row format choice (1), the date format and decimal separator (2) and the column mapping (3)](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/04-colunas.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=6471843587d6674b9e210558d494fdb7)

**5. Set up the sync**

In the **Sync** step, choose:

* **Sync frequency:** every 2, 6, 12 or 24 hours (the default is every 6 hours). You can also sync manually at any time.
* **Initial load:** **The spreadsheet's whole history** or **From a date**. Earlier dates are left out even if they are in the spreadsheet.
* **When a row is deleted from the spreadsheet:** **Remove the spend from Nemu too** (Nemu mirrors the spreadsheet) or **Keep the last imported value** (useful if the spreadsheet only keeps the current months).
* **Email me when a sync fails:** the email goes to whoever connected the spreadsheet and to the dashboard admins.

Click **Connect and import**.

![Sync step with frequency, initial load, deleted rows rule and the Connect and import button highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/05-sincronizacao.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=ba2d8bf40f22f7b07217a50da1d67cc0)

**6. Follow the import**

The connection is already saved. The import keeps running even if you leave now. Click **Continue in background** if you don't want to wait: Nemu emails you when it's done, and the **Investments by channel** tab shows the progress.

![Import step with the import tasks and the Continue in background button highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/06-importacao.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=d2b92de3ac242ed3d79db4f9c8f10125)

**7. Check the result**

The **Result** step summarizes the rows read, imported, ignored (integrated platform) and with errors. When there are pending items, the title shows how many there are, and the list below gives the spreadsheet row and the reason for each one (the **See pending items in Management** link opens the full list). Fix them in the spreadsheet: rows are validated again on the next sync, or right away if you click **Sync now** in the **Investments by channel** tab.

![Import Result step with the row summary and the rows to fix](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/07-resultado.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=dd86c833934fa4d22167d22ae455dcc4)

Use **See investments** to go to the spreadsheet management or **See in Analytics** to see the spend in your reports.

## Follow up in Investments by channel

The **Operating Costs › Investments by channel** tab brings together everything you recorded: what comes from the spreadsheet, what was added manually and what was imported from a file.

![Investments by channel tab with the connection card (1), the indicators (2) and the Needs attention section (3)](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/08-gestao.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=0620fa73d9f5dfedaa5e0386a90570a0)

1. **Connection card:** spreadsheet and tab name, connected account, status and last sync. The icon next to it shows the next sync and the frequency. The **Sync now** and **History** buttons are on the right.
2. **Indicators** for the selected period:
   * **Counted external spend:** sum of Spreadsheet, Manual and File, split by source.
   * **Matched to channels:** the part of the spend whose UTMs match the dashboard traffic.
   * **Unmatched:** amount and number of records whose UTMs don't appear in the traffic for the period. This spend still goes into Analytics, in the channel of its own UTMs.
   * **Not counted:** ignored rows (platform with a native integration) and rows with errors. They don't add up to the total.
3. **Needs attention:** groups the pending items in three groups (with errors, unmatched and ignored), with the spreadsheet row and the reason. **View rows** filters the table to show only those rows.

In the example, the dashboard has **R\$44,700.00** of counted external spend: R\$41,200.00 from the spreadsheet, R\$2,500.00 manual and R\$1,000.00 from a file. Of that total, R\$41,000.00 (91.7%) is matched to channels and R\$3,700.00 is unmatched.

### Connection status

| Status | What it means |
| - | - |
| **Synced** | The last sync finished with no pending items. |
| **Syncing…** | A sync is running. The values shown are from the last sync and will update when it finishes. |
| **Completed with issues** | The sync finished, but some rows have errors or are unmatched. See **Needs attention**. |
| **Sync failed** | The last sync failed. No data was changed, and Nemu tries again automatically. |
| **Access expired** | Nemu can no longer read the spreadsheet. See [Access expired](#access-expired). |
| **Spreadsheet disconnected** | The sync was stopped. The kept spend stays read-only. |

### Table, filters and export

The table lists each investment with **Name**, **Source** (for example, **Spreadsheet · R9** for row 9 of the spreadsheet), **UTM source**, **Medium**, **Campaign**, **Content**, **Period**, **Total amount**, **Daily amount** and **Status** (**Matched**, **Unmatched**, **Ignored** or **Error**). Hover over the status to see the reason or the last amount correction. The footer shows the **Total counted in the current filter**; ignored rows and rows with errors don't add up.

Rows that come from the spreadsheet are read-only in Nemu ("Managed by the spreadsheet — edit it at the source."). To fix them, change the spreadsheet. Manual and file rows can be edited or deleted in the table itself.

Use the search to look up by name, source, medium, campaign or content, and the **Filters** button to filter by:

* **Period:** **All time**, **Today**, **Last 7 days**, **Last 30 days**, **This month**, **Last month** or **Custom**. It shows the investments whose flight period overlaps the chosen range. **All time** also includes investments with future dates.
* **Source:** **Google Sheets**, **Manual** or **File**.
* **Status:** **Matched**, **Unmatched**, **Ignored** or **Error**.

Filters only apply after you click **Apply**, which shows how many records will be listed. To download what's on screen, click **Export CSV**.

![Investments table filters open, with period, source and status](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/09-filtros.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=1f7ec0ea15c6a7a67d39024baeefc0c5)

### Sync history

Click **History** to see each run: date and time, status (**Success**, **With issues** or **Failed**), whether it was automatic or manual, the duration and the counts of rows read, new, updated, removed, ignored and with errors. Amount corrections show as "before → after (replaced, not added)".

![Sync history panel with successful, with issues and failed runs](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/10-historico.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=de224e7a9a6d7c4a1e919488ddfb0568)

## Keeping data up to date

* Nemu syncs on its own at the chosen frequency. On each sync, it reads the whole tab and compares it with what was already imported: new rows come in, corrected amounts **replace** the previous one (they aren't added) and reprocessing the same spreadsheet with no changes doesn't change the totals.
* To update right away, click **Sync now**. Only one sync runs at a time; while it runs, the button is disabled.
* If a sync fails, **no data is changed**: the previous values stay in your reports.
* Analytics always reads the spend already saved in Nemu. It never queries the spreadsheet when you open a report.

### Change the connection

The **⋯** button on the connection card has **Edit mapping** and **Disconnect**. **Edit mapping** opens the wizard with your current choices, so you can change columns, formats or the sync and click **Save and import**.

![Connection actions menu with Edit mapping and Disconnect](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/11-menu-conexao.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=0d6875d2b9ab7e9b22dbbdf5fb1b2195)

## Where the spend shows up

After the import, the spreadsheet spend goes into your reports together with the spend from integrations. Each row goes to the channel defined by its UTMs, even when those UTMs haven't had traffic in the period yet.

### Analytics

In **Analytics** (the **Sources** screen), the **Spend** column (1) shows the investment of each channel group, and the **Last Click ROAS** column (2) uses that spend (its name follows the chosen attribution model). In the example, the **Display e nativo** group adds up to 23,550.00 of spend, and the period total is 44,700.00, the same amount counted in the **Investments by channel** tab.

![Analytics by channel groups with the Spend (1) and Last Click ROAS (2) columns highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/14-analytics-sources.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=8b237f1ebb5d8849efb2bbcd8ede3d73)

Spend doesn't depend on the attribution model: sales, revenue and ROAS change with the chosen model, but spend stays the same. In the legend below the table, a zero amount means spend reported as zero and **-** means no spend reported.

### Campaigns

In **Campaigns › All Channels**, the **Spent** column feeds the profit, ROI and ROAS of each channel.

![Campaigns, All Channels tab, with the Spent column highlighted](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/15-campanhas-todos.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=b93ee1b8d4631642e53a928c795b2356)

In **Campaigns › Others**, each spreadsheet source shows its spend in the **Spent** column (1). A source that has spend but no sales in the period gets the **Spend with no attributed revenue** badge (2): the UTM exists, but no sales were attributed to it.

![Campaigns, Others tab, with the Spent column (1) and the Spend with no attributed revenue badge (2)](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/16-campanhas-outros.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=52276f2c0d0cb147534171986a0f3628)

> [!NOTE]
>
> The difference between "matched" and "unmatched" only shows up in **Investments by channel**. It helps you check whether the spreadsheet UTMs are right. In your reports, all counted spend goes in through the channel of the row's UTMs.

## Common errors

| Message | Cause | How to fix |
| - | - | - |
| End date “31/09/2026” doesn’t exist. | The date doesn't exist or is in another format. | Fix the date in the spreadsheet or adjust the **Date format** in **Edit mapping**. |
| The end date is earlier than the start date. | The dates are swapped. | Fix the dates in the spreadsheet. |
| Spend amount is empty. | The amount cell is blank. | Fill in the amount in the spreadsheet. |
| Amount “abc” isn’t a number. | The amount has letters or isn't a number. | Use numbers only and the chosen decimal separator. |
| Negative amounts aren’t allowed. | The amount is negative. | Enter positive amounts. |
| Enter the UTM Source for this row. | The row has no source. | Fill in the source with the same UTM used in your links. |
| Rows 5 and 9 have the same ID. Keep one ID per row. | Two rows with the same identifier. | Use a different ID in each row. |
| This row looks like a total. Remove it or move it to another tab. | A total, subtotal or sum row in the middle of the data. | Remove the row or move totals to another tab. |
| Google Ads spend comes from the integration — row ignored. | The row's source belongs to a platform with a native integration. | No action needed. If you want, remove the row from the spreadsheet. |
| No sessions with utm\_source=rtb in this period. … | The row's UTM didn't show up in the dashboard traffic in the period. | Check that the source matches the one in your links. The row is re-evaluated on the next sync. |
| Header “Investimento total” not found — no data was changed. Update the column mapping. | A mapped column was renamed or removed. | Restore the column name or use **Edit mapping**. |
| The “Investimentos” tab wasn’t found. No spend was imported and no totals changed. | The tab was renamed or deleted. | Restore the tab or choose another one in **Edit mapping**. |
| The tab has more than 200,000 rows, the sync limit. No data was changed. … | The tab is over the sync row limit. | Delete empty rows at the end of the tab, reduce the spreadsheet or split the data into another tab. |
| This doesn’t look like a Google Sheets link. … | The pasted link isn't a Google spreadsheet. | Paste the address that starts with `https://docs.google.com/spreadsheets/` or use **Choose from Google Drive**. |
| The account … doesn’t have access to this spreadsheet. … | The chosen Google account can't read the spreadsheet. | Ask the spreadsheet owner for viewer access or use **switch account**. |

### Access expired

If the Google account authorization expires or is revoked, the **Investments by channel** tab shows a red warning with the date since the spreadsheet stopped being read. Spend already imported **stays in your reports**, with data up to the last successful sync, and the sync is paused.

![Access expired warning with the Reconnect Google account and Change spreadsheet buttons](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/13-acesso-expirado.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=341abdd4823d847990f3bdc8e84c1f54)

* Click **Reconnect Google account** to authorize again. Nemu syncs right after to recover the changes.
* Or click **Change spreadsheet** to connect another spreadsheet. First, Nemu asks whether the previous spreadsheet's spend should be removed or kept as read-only.

## Disconnect the spreadsheet

On the **⋯** button of the connection card, click **Disconnect**. The window shows how many records and how much spend were imported and asks you to choose:

* **Keep imported spend:** it stays in your reports as read-only, marked as "spreadsheet disconnected".
* **Remove imported spend:** the amount no longer appears in Analytics and Campaigns. ROAS and profit are recalculated.

![Disconnect window with the Keep imported spend and Remove imported spend options](https://mintcdn.com/nemu/qqVC7n_6xBKqW6Cy/assets/pages/plataforma/gastos-google-sheets/en/12-desconectar.png?fit=max\&auto=format\&n=qqVC7n_6xBKqW6Cy\&q=85\&s=835fc878c456cf6553912d1ed44672e2)

When you disconnect, the automatic sync stops and Nemu deletes the Google account authorization it kept for this spreadsheet. To connect again, you need to authorize again. If you want, you can also remove Nemu's access in your Google Account security settings.

You can't disconnect while a sync is running. Wait for it to finish.

## FAQ

> [accordion] Do I need to make the spreadsheet public?
>
> No. The spreadsheet stays private. Nemu only reads the spreadsheet you choose, with the Google account you authorized.

> [accordion] I fixed an amount in the spreadsheet. Will it be added twice?
>
> No. On the next sync, the new amount replaces the previous one, and the history shows the change as "replaced, not added". For Nemu to recognize the same row even when you change the UTMs or the date, map the **Row ID** column.

> [accordion] Can I keep adding investments manually or from a file?
>
> Yes. Manual and file investments keep working and show up in the same table, with the source **Manual** or **File**.

> [accordion] The spreadsheet has Meta Ads or Google Ads spend. What happens?
>
> Those rows are ignored and don't add up to the total. Spend from these platforms always comes from the native integration, so it isn't counted twice.

> [accordion] A row is unmatched. Does its spend disappear from my reports?
>
> No. The spend goes into Analytics and Campaigns in the channel of its own UTMs. "Unmatched" only warns that those UTMs had no traffic in the period: check that they're written the same way as in your links.

> [accordion] Which currency are amounts read in?
>
> In the dashboard currency, with no conversion. Symbols like R\$ or US\$ in the cell are ignored.

> [accordion] Can I connect more than one spreadsheet?
>
> Today, each dashboard has one connected spreadsheet. To use another one, disconnect the current one or use **Change spreadsheet** when access expires.

> [!NOTE]
>
> The [Google Sheets](https://docs.nemu.com.br/en/onboarding/integrations/google-sheets.md) page describes an older integration, set up with the tab ID (GID). To bring spend from channels without an integration into Analytics, use the connection described on this page.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.