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

# Google Sheets

> Connect a Google account and import contacts from a spreadsheet, with a preview before you import.

The Google Sheets integration imports contacts from one spreadsheet. Use it when your contacts live in a shared sheet rather than in a CSV file. Each import adds new contacts and updates the names of existing ones.

<Note>
  Google Sheets needs the **Pro** or **Enterprise** plan. Only **Owners** and **Admins** can connect, import and disconnect. Other members see "Not configured. Ask an admin to connect."
</Note>

## Prepare the sheet

* Put the column headers in the **first row**.
* Include an email column headed `Email`, `Email address` or `E-mail`. Headers aren't case-sensitive. The import fails without one.
* Optionally add `First name` (or `Firstname`) and `Last name` (or `Lastname`) columns.
* Keep the data on the **first tab**, within columns **A to Z**. Other columns are ignored.

Rows with an empty email, or a value without `@`, are skipped.

## Connect and import

<Steps>
  <Step title="Connect your Google account">
    Go to **Settings → Developers → Integrations**. Under **Google Sheets**, click **Connect Google Sheets** and allow access in Google. You'll see "Google Sheets connected successfully!".
  </Step>

  <Step title="Set the spreadsheet">
    Copy the spreadsheet ID from the sheet's URL: the part between `/d/` and `/edit` in `https://docs.google.com/spreadsheets/d/<ID>/edit`. Paste it into **Spreadsheet ID** and click the check-mark button ("Spreadsheet ID saved.").
  </Step>

  <Step title="Preview">
    Click **Preview** to see the header row and the first rows as InstantCampaign reads them. Check that the email column is there.
  </Step>

  <Step title="Import">
    Click **Sync Now**. When it finishes, you'll see a summary such as "Sync complete: 45 imported, 12 updated, 3 skipped."
  </Step>
</Steps>

The card shows when you **Last synced**. Imports don't repeat on their own, so click **Sync Now** each time you want to pick up changes in the sheet.

## What an import does

| Row in the sheet                 | Result                                                                                                                        |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Email not yet in InstantCampaign | A new contact is created with the **Active** status and the source `google_sheets`.                                           |
| Email already a contact          | The first and last name are updated from the sheet if those cells have a value. Status and other fields are left as they are. |
| Missing or invalid email         | Skipped.                                                                                                                      |

Emails are matched without regard to case. Imported contacts aren't added to a list, so use a segment (for example on the contact source) or add them to a list afterwards.

<Warning>
  Only import people who have agreed to receive your email. Contacts created from a sheet are **Active**, so they can be mailed straight away.
</Warning>

## Limits

* You can run one import per minute per workspace.
* One spreadsheet is configured at a time. To import from another sheet, save its ID and click **Sync Now** again.

## Disconnect

Click **Disconnect** and confirm. The integration and its stored Google tokens are removed. Your existing contacts are not affected.

## Troubleshooting

| What you see                                                                                           | What to do                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "No email column found in the spreadsheet."                                                            | Rename the email column's header to `Email`.                                                                                                                               |
| "No data rows found." in the preview                                                                   | The first tab is empty, or the data starts beyond column Z.                                                                                                                |
| An error that the token expired and couldn't be refreshed                                              | Disconnect, then connect Google Sheets again.                                                                                                                              |
| The connection fails straight after you allow access, with a reason mentioning a missing refresh token | Google didn't issue a long-lived token. Remove InstantCampaign's access at [myaccount.google.com/permissions](https://myaccount.google.com/permissions) and connect again. |
| A Google permission error when previewing                                                              | The Google account you connected can't open that spreadsheet. Share the sheet with it.                                                                                     |
| "Sync rate limit exceeded. Please wait a minute before syncing again."                                 | Wait a minute between imports.                                                                                                                                             |
