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

# Google Sheet Fetch in ChatSyncs

> Google Sheet Fetch lets a WhatsApp bot look up a row in a connected sheet mid-conversation and reply using its values — for an employee directory, catalog, or order tracker.

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-01-google-sheet-data-fetch.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=ebf0062ed1771b1573b087246a6d8d43" alt="ChatSyncs left navigation with Chatbot Manager selected, the Integrations tab, and the Google Sheets sub-tab showing Google Sheet Data Fetch Campaigns with Connect Google Account and Create buttons" width="1888" height="833" data-path="images/learn/google-sheet-fetch/step-01-google-sheet-data-fetch.png" />
</Frame>

**Google Sheet Fetch** lets a WhatsApp bot look something up in a Google Sheet *in the middle of
a conversation*, so it can reply with real information — instead of that information being
typed into the bot itself.

Think of it like this: Google Sheet Integration — see [How to Connect Google to
ChatSyncs](/learn/chatsyncs-integrations/connect-google-to-chatsyncs) — is the bot **writing** into your
sheet. Google Sheet Fetch is the opposite — the bot **reading** from your sheet.

**Example:** say you keep an employee list in a Google Sheet. Someone messages the bot with an
Employee ID, and the bot looks that row up and replies with the person's name, department, and
phone number — pulled straight from the sheet.

The best part: if you edit the sheet — add a new employee, fix a phone number — the bot's next
reply already uses the updated info. You don't have to touch the bot at all. This makes it
great for anything that changes often: an employee directory, a price list, order status,
appointment schedules, inventory, student records, an FAQ list, branch info, or membership
details.

## How it works

<Steps>
  <Step title="A subscriber sends a message">e.g. they message the bot with an ID or trigger keyword.</Step>
  <Step title="ChatSyncs searches the sheet">using whichever column you configured as the Search Column.</Step>
  <Step title="The matching row is found">the one row whose Search Column value matches what the subscriber sent (or whatever value you configured as the Search Value).</Step>
  <Step title="The needed column values are read">from that row.</Step>
  <Step title="Those values are stored as chatbot variables">ready to use anywhere in a reply.</Step>
  <Step title="The bot replies using those variables">a personalized message built from live spreadsheet data.</Step>
</Steps>

```
Subscriber message
        │
        ▼
ChatSyncs searches the Search Column
        │
        ▼
Matching row found
        │
        ▼
Column values → chatbot variables
        │
        ▼
Personalized reply sent
```

## Prerequisite: create matching Custom Fields first

<Warning>
  **This is the step that's easy to miss, and the most common reason Google Sheet Fetch shows an
  error.** Every column you plan to map under **Assign** must already exist as a **Subscriber
  Custom Field** — if the field doesn't exist yet, it won't be available to select as a Data
  Field, and the mapping (or the bot reply using it) will fail.
</Warning>

Custom Fields are created under **Subscriber Manager**, not inside the Google Sheets integration
itself:

<Steps>
  <Step title="Open Manage Custom Fields">
    In **Subscriber Manager**, click **Manage**, then **Custom Fields** — this opens the
    **Manage Custom Fields** panel.

    <Frame>
      <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-08-custom-fields-panel.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=8c95b11a4d6cdf9e196d479b4d6b258e" alt="Manage Custom Fields panel listing existing fields, with a Create Custom Field button at the top" width="1896" height="856" data-path="images/learn/google-sheet-fetch/step-08-custom-fields-panel.png" />
    </Frame>
  </Step>

  <Step title="Create a field for every column you'll assign">
    Click **Create Custom Field**, give it a name, and pick a **Reply Type** matching what the
    column holds.

    <Frame>
      <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-09-create-custom-field-modal.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=0da8a6dd8094fd8d152f56a88d5031a8" alt="Create Custom Field modal with the field name set to Phone and Reply Type set to Phone" width="502" height="338" data-path="images/learn/google-sheet-fetch/step-09-create-custom-field-modal.png" />
    </Frame>

    <Frame>
      <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-10-reply-type-options.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=14a9726c6e4e730f17da8e025e5aee26" alt="Reply Type dropdown open showing Email, Phone, Text, Number, URL, File, Image, Video, Date, Time, and Datetime options" width="507" height="579" data-path="images/learn/google-sheet-fetch/step-10-reply-type-options.png" />
    </Frame>
  </Step>

  <Step title="Repeat for every field your reply will use">
    For an employee-lookup bot, create one field for each column you plan to search by or return:

    | Name        | Reply Type |
    | ----------- | ---------- |
    | Phone       | Phone      |
    | Email       | Email      |
    | Designation | Text       |
    | Department  | Text       |
    | Name        | Text       |
    | employee id | Text       |
  </Step>
</Steps>

## Set up the fetch campaign

### Find Google Sheet Fetch in Integrations

Open **Chatbot Manager → \[your bot] → Integrations**, then the **Google Sheets** sub-tab —
it sits alongside HTTP API, Autoresponder, Email, and SMS.

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-02-integrations-google-sheets-tab.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=a92417a17300ebac394c206b558e4c17" alt="Chatbot Manager tab bar with Automation, Data Collection, AI, Engagement, Commerce, and Integrations tabs, and the Integrations sub-tabs HTTP API, Google Sheets (selected), Autoresponder, Email, SMS" width="366" height="590" data-path="images/learn/google-sheet-fetch/step-02-integrations-google-sheets-tab.png" />
</Frame>

### Connect a Google account (if you haven't already)

Click **Connect Google Account** at the top of the page and sign in — this is the same Google
connection used by Google Sheet Integration — see [How to Connect Google to
ChatSyncs](/learn/chatsyncs-integrations/connect-google-to-chatsyncs) — for writing to
sheets, so if you've already connected one there, it's available here too.

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-03-connect-google-account.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=4cedf2e6622f1045e4da4cf68c964a8a" alt="Google Sheet Data Fetch Campaigns page with the Connect Google Account button highlighted, a campaigns table, and a Connect Your Google Sheet form below it" width="1442" height="794" data-path="images/learn/google-sheet-fetch/step-03-connect-google-account.png" />
</Frame>

### Create the campaign

In the **Connect Your Google Sheet** panel, give the connection an **API Name**, then pick the
sheet from **Google Sheet List** — it shows your connected Google account and every sheet
available to it:

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-04-select-google-sheet-dropdown.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=6c3585ae6c61f27e4d1213c91ba32403" alt="Google Sheet List dropdown open showing the connected Google account email and a list of sheets to choose from" width="1430" height="762" data-path="images/learn/google-sheet-fetch/step-04-select-google-sheet-dropdown.png" />
</Frame>

For example, a sheet called **Customer Data** containing an employee directory:

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-06-source-sheet-employee-data.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=579eff50f1f3ad45fb5d8bd873898912" alt="Google Sheet named Customer Data with columns Employee ID, Name, Department, Designation, Email, Phone and five rows of employee records" width="1244" height="539" data-path="images/learn/google-sheet-fetch/step-06-source-sheet-employee-data.png" />
</Frame>

| Employee ID | Name         | Department | Designation       | Email                                           | Phone        |
| ----------- | ------------ | ---------- | ----------------- | ----------------------------------------------- | ------------ |
| EMP001      | Rahul Reddy  | IT         | Software Engineer | [rahul@company.com](mailto:rahul@company.com)   | 919959623255 |
| EMP002      | Priya Sharma | HR         | HR Executive      | [priya@company.com](mailto:priya@company.com)   | 919123456789 |
| EMP003      | Arjun Kumar  | Sales      | Sales Manager     | [arjun@company.com](mailto:arjun@company.com)   | 919988776655 |
| EMP004      | Sneha Patel  | Finance    | Accountant        | [sneha@company.com](mailto:sneha@company.com)   | 919012345678 |
| EMP005      | Vikram Singh | Marketing  | Marketing Lead    | [vikram@company.com](mailto:vikram@company.com) | 919871234567 |

The sheet's first row must be column headers — every column below it becomes a field you can
search by or assign.

### Search Data and Assign

**Search Data** — pick which sheet column to search by (**File Header**), and what subscriber
value to compare it against (**Data Field**):

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-06-search-data-file-header.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=518334d1c3f1837a349756c4dcf8d0d9" alt="Search Data section with File Header set to Phone and Data Field set to Subscriber ID / Phone Number" width="1377" height="406" data-path="images/learn/google-sheet-fetch/step-06-search-data-file-header.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-06b-file-header-column-options.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=a41eef679762555d8e7b3f74fc9121d3" alt="File Header dropdown open showing sheet columns Employee ID, Name, Department, Designation, Email, and Phone (selected)" width="677" height="427" data-path="images/learn/google-sheet-fetch/step-06b-file-header-column-options.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-06c-data-field-search-column-options.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=e9c8f36264d3a51e449a60288205d8aa" alt="Data Field dropdown open under a Search Column group, showing Subscriber ID / Phone Number (selected) and Subscriber Message" width="714" height="242" data-path="images/learn/google-sheet-fetch/step-06c-data-field-search-column-options.png" />
</Frame>

Here, **Phone** (the sheet column) is matched against **Subscriber ID / Phone Number** (the
subscriber's own WhatsApp number) — so the bot automatically looks up *the row for whoever is
messaging it*, with no manual ID entry needed.

**Assign** — map every other column you want back to the **Custom Field** you created for it.
Click **+ Map Data** to add another File Header/Data Field pair:

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-07-assign-map-data.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=7e7c6fa2371669380bdd46c79e0742bf" alt="Assign section with five mapped rows: Employee ID to Employee Id, Department to Department, Designation to Designation, Name to name, and Email to Email, with a Map Data button" width="1382" height="771" data-path="images/learn/google-sheet-fetch/step-07-assign-map-data.png" />
</Frame>

Click **Verify Connection** to confirm the sheet is reachable and every mapped field returns
real data.

<Warning>
  If a **Data Field** you need isn't in the dropdown, stop and go create it as a **Subscriber
  Custom Field** first (see the prerequisite above) — don't try to type a new name in on the fly.
</Warning>

## Use it inside a Keyword Replies flow

Once the campaign is configured, the actual lookup happens inside a **Keyword Replies** flow
(under **Chatbot Manager → \[your bot] → Automation → Keyword Replies**), as a
**Google Sheet Data Fetch** flow step:

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-12-keyword-replies-list.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=2d5cc8d4a3d80ab8d0225c2164008ed0" alt="Chatbot Manager Automation tab with Keyword Replies sub-tab selected, showing a list of existing flows and a Create button" width="1902" height="867" data-path="images/learn/google-sheet-fetch/step-12-keyword-replies-list.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/chatsyncs/HNsP4MLygnS_qtAH/images/learn/google-sheet-fetch/step-13-bot-flow-google-sheet-fetch-node.png?fit=max&auto=format&n=HNsP4MLygnS_qtAH&q=85&s=eb8b799844afaa2b4814484ed2f41e5d" alt="Bot flow with a Start Bot Flow node triggered by the keyword data, connected to a Google Sheet Data Fetch node named Google Data, connected to a Text reply node, with a Configure Text Message panel showing the reply using hash-wrapped field variables" width="1273" height="537" data-path="images/learn/google-sheet-fetch/step-13-bot-flow-google-sheet-fetch-node.png" />
</Frame>

<Steps>
  <Step title="Start Bot Flow">
    Set a trigger, e.g. the keyword `data` with **Exact keyword match**.
  </Step>

  <Step title="Add a Google Sheet Data Fetch step">
    Pick the fetch campaign you configured above (e.g. `Google Data`). Use **Test Google Sheet
    New** to try it against a real subscriber while building the flow.
  </Step>

  <Step title="Reply using the fetched fields">
    Add a **Text** step and reference each custom field wrapped in `#...#`:

    ```
    Here are your details
    Name: #Name#
    Employee id: #employee id#
    Department: #Department#
    Designation: #Designation#,
    Email: #Email#

    Thank You!
    ```
  </Step>

  <Step title="Save">
    Click **Save** (or **Save Changes**) on the flow, and **Save** in the top bar to publish it
    to the connected WhatsApp number.
  </Step>
</Steps>

With the example data above, a subscriber whose WhatsApp number matches **EMP001**'s Phone gets:

```
Here are your details
Name: Rahul Reddy
Employee id: EMP001
Department: IT
Designation: Software Engineer,
Email: rahul@company.com

Thank You!
```

## More examples

Google Sheet Fetch works the same way for any lookup — only the Search Column and the mapped
fields change:

| Business scenario    | Search Column | Returns                                                   |
| -------------------- | ------------- | --------------------------------------------------------- |
| Employee lookup      | Employee ID   | Name, Department, Phone                                   |
| Product lookup       | Product ID    | Product Name, Price, Stock                                |
| Hospital             | Doctor ID     | Doctor Name, Department, Consultation Fee, Available Time |
| Customer information | Customer ID   | Customer Name, Membership Status, Contact Details         |
| Order tracking       | Order ID      | Order Status, Courier Name, Tracking Number               |

**Product lookup example** — sheet:

| Product ID | Product        | Price | Stock |
| ---------- | -------------- | ----- | ----- |
| P001       | Wireless Mouse | 799   | 45    |

Mapped to `product_name`, `product_price`, `product_stock`, the reply becomes:

```
Product: Wireless Mouse
Price: ₹799
Available Stock: 45
```

## Benefits

* No coding required.
* Always uses live data — update the sheet, not the bot flow.
* One search can return several fields at once.
* Works for practically any lookup-style business process.
* Cuts down on manually rebuilding flows when information changes.

## Best practices

<Warning>
  * **Create every Subscriber Custom Field before mapping it** — this is the #1 cause of a broken
    or erroring fetch.
  * **Always click Verify Connection** after mapping fields — a typo in a **File Header** (it must
    match the sheet's actual column header exactly) makes the fetch silently return no data
    instead of erroring.
  * **Keep sheet column headers unique and consistent** — don't rename a column without updating
    the mapping.
  * **Avoid duplicate values in the Search Column** — if two rows share the same ID or phone
    number, the fetch can return the wrong row.
  * **Test the full bot flow** (not just Verify Connection) before publishing, using **Test Google
    Sheet New** inside the flow builder.
</Warning>

## Frequently asked

<AccordionGroup>
  <Accordion title="How do I look up a customer's order from a Google Sheet inside a bot flow?">
    Create a **Google Sheet Fetch** campaign, map the sheet's phone-number column to the
    subscriber's phone number under **Search Data**, then map the columns you want back (e.g.
    Customer Name, Order ID) under **Assign** to matching Subscriber Custom Fields. Add a
    **Google Sheet Data Fetch** step in a Keyword Replies flow and reference the fields in your reply.
  </Accordion>

  <Accordion title="Why is my Google Sheet Fetch showing an error or not returning data?">
    The most common cause: one of the fields you mapped under **Assign** doesn't exist yet as a
    **Subscriber Custom Field**. Go to **Subscriber Manager → Manage → Custom Fields**,
    create it there first, then come back and map it.
  </Accordion>

  <Accordion title="What's the difference between Search Data and Assign?">
    **Search Data** tells ChatSyncs which sheet column to match against (how to find the right
    row — usually the subscriber's phone number). **Assign** tells it which columns to pull back,
    and which Custom Field to store each one in.
  </Accordion>

  <Accordion title="Do I need to connect Google Sheets before I can fetch data from one?">
    Yes — [How to Connect Google to ChatSyncs](/learn/chatsyncs-integrations/connect-google-to-chatsyncs) must be
    connected first so ChatSyncs has access to the account that owns the sheet.
  </Accordion>

  <Accordion title="How do I actually use the fetched data in a WhatsApp reply?">
    Add a **Google Sheet Data Fetch** step to a Keyword Replies flow, then in the following **Text**
    step, reference each field as `#FieldName#` — matching the Custom Field's name exactly.
  </Accordion>
</AccordionGroup>
