# Google sheets

## Overview

With Joule’s **Google Sheets connector**, you can seamlessly pull row data from spreadsheets, transform it, and stream it into your real-time pipelines.

{% hint style="info" %}
**Client library:** com.google.api-client:google-api-client:2.7.0
{% endhint %}

## Examples & DSL attributes

This configuration sets up the consumer to read row data from a specified Google Spreadsheet, with the `nasdaq` tab defined as the source. Custom deserialization can also be applied to transform the incoming data as needed.

```yaml
google sheets consumer:
  application name: Joule google sheets test
  spreadsheetId: 1PNhq2t7fJ8AqJBmlSvywdpI4maFaAaUC
  range: 'Nasdaq'

  event type: 'Nasdaq'
  polling frequency: 5
  header included: true

  oauth:
      credentials filepath: /home/joule/credentials/sheets/credentials.json
```

## Setting up

{% stepper %}
{% step %}

### Setup google project and enable spreadsheet API

Create a [project](https://developers.google.com/workspace/guides/create-project) and enable Google Spreadsheet API.&#x20;
{% endstep %}

{% step %}

### Configure consent and download credentials&#x20;

To access the spreadsheet Joule needs the user credentials to be created and downloaded. This can be done from the [Google Developers Console](https://console.developers.google.com/). &#x20;
{% endstep %}

{% step %}

### Prepare the spread with data

Load the spreadsheet with data you need to process. This data relates to the example above.

<figure><img src="/files/4hS6TXZxpNR90VkNVuCe" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Copy the spreadsheet id from the URL e.g. [https://docs.google.com/spreadsheets/d/**1PNhq2t7fJ8AqJBmlSvywdpI4maFaAaUC-BUTyIc8utg**](https://docs.google.com/spreadsheets/d/1PNhq2t7fJ8AqJBmlSvywdpI4maFaAaUC-BUTyIc8utg)
{% endhint %}
{% endstep %}

{% step %}

### Define and deploy source configuration

```yaml
google sheets consumer:
  application name: Joule google sheets test
  spreadsheetId: 1PNhq2t7fJ8AqJBmlSvywdpI4maFaAaUC
  range: 'Nasdaq'

  event type: 'Nasdaq'
  polling frequency: 5
  header included: true

  oauth:
      credentials filepath: /home/joule/credentials/sheets/credentials.json
```

{% endstep %}

{% step %}

### Now you are ready to subscribe and use the data

Deploy a use case that subscribes to the spreadsheet.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
Follow the official google [documentation](https://developers.google.com/workspace/guides/configure-oauth-consent) for more information on setting up projects on GCP
{% endhint %}

### Attributes schema

<table><thead><tr><th width="178">Attribute</th><th width="281">Description</th><th width="191">Data Type</th><th data-type="checkbox">Required</th></tr></thead><tbody><tr><td>application name</td><td>Application name</td><td>String</td><td>true</td></tr><tr><td>spreadsheetId</td><td>Spreadsheet id that is embedded in the url</td><td>String</td><td>true</td></tr><tr><td>range</td><td>Target sheet and start cell</td><td>String</td><td>true</td></tr><tr><td>event type</td><td>Specify the emitting StreamEvent type</td><td>String</td><td>true</td></tr><tr><td>polling frequency</td><td>Frequency on minutes the spreadsheet is called to download data</td><td>Integer<br>Default: 1 minute</td><td>false</td></tr><tr><td>header included</td><td>Boolean to inform the default deserializer the first row is the header</td><td>Boolean<br>Default: true</td><td>false</td></tr><tr><td>oauth</td><td>OAuth configuration</td><td>See OAuth <a href="#oauth-attribute">section</a></td><td>true</td></tr><tr><td>deserialiser</td><td>For custom deserialization </td><td>See Deserializer <a href="/pages/OJh0w8XOX2w5Nm4qQHSh">documentation</a></td><td>false</td></tr></tbody></table>

### OAuth Attribute

<table><thead><tr><th width="178">Attribute</th><th width="281">Description</th><th width="191">Data Type</th><th data-type="checkbox">Required</th></tr></thead><tbody><tr><td>credentials filepath</td><td>Path to the google OAuth consent credentials file.</td><td>String</td><td>true</td></tr></tbody></table>

##


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fractalworks.io/joule/components/connectors/sources/google-sheets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
