# Tiles

## What is Tiles?

Tiles is a platform designed for storing and sharing flat data, providing a spreadsheet experience - think Excel without formulas. With Tiles, you can easily organise and store data, maintain state across pipe executions or use it as a lookup table. You can also generate simple sharing links or add other users to your tiles, making data sharing and collaboration simple.

<figure><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FlGN5wYLk1wLBPXENHluq%2Fimage.png?alt=media&#x26;token=75fd652e-492c-462e-a701-7728958e542d" alt=""><figcaption></figcaption></figure>

## How can Tiles help me?

Since Tiles is a feature under Plumber, it can integrate with other products such as FormSG, Telegram, and other products available on Plumber.

You can also use Tiles as a standalone feature without any automation set up. Are you looking to share data with external users outside of the department? Tiles can help with that too.

Other examples include:

1. Data collection: Pipe responses collected from Forms directly into Tiles and easily search and filter for responses.
2. Ease of sharing data: Easily share your data with a click of a button.
3. Supercharge your pipes: Store data across different executions or even pipes or use it as a reference table.

## Actions

1. [Create a row](#create-a-row)
2. [Find single row](#find-single-row)
3. [Find multiple rows](#find-single-row)
4. [Update single row](#update-single-row)

### Create a row

This allows you to add a row to the bottom of your specified Tile.

<table><thead><tr><th width="154">Field</th><th width="464">Description</th><th>Required</th></tr></thead><tbody><tr><td>Select Tile</td><td>Select the Tile you want to create a row in.<br><br>You may select an existing Tile you have or Click <strong>+ Create a new tile</strong> to create an empty one directly from the editor.<br><br><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FhuFFwkg77wijrRxkhuDP%2Fimage.png?alt=media&#x26;token=10ff545c-1276-497c-9d13-81517b0c6826" alt="" data-size="original"></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr><tr><td>New row data</td><td>Enter the row data you want to insert.<br><br>Column (Left input)<br>Select the column name for the corresponding cell value. You can also type in a new column name to create a new column.<br><br>Cell value (Right input)<br>Input the value or variable you want to insert as cell value.<br><br><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FI8bYDicTTJszOJfesoDm%2Fimage.png?alt=media&#x26;token=efc26217-a93e-499e-b5f0-1a1ae1ad10b2" alt=""></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr></tbody></table>

#### Check Step

Checking step will insert the test row into your Tile. Feel free to delete this row when you're done testing.

### Find single row

This step allows you to retrieve a row from your Tile based on your lookup conditions

<table><thead><tr><th width="154">Field</th><th width="464">Description</th><th>Required</th></tr></thead><tbody><tr><td>Select Tile</td><td>Select the Tile you want to want search from.</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr><tr><td>Lookup conditions</td><td><p>Column (Left input)<br>Select the column name you want to search from.</p><p></p><p>Operator (Middle input)</p><p>See <a data-mention href="#lookup-operators">#lookup-operators</a> for more info.<br><br>Cell value (Right input)<br>The value to compare to.</p></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr><tr><td>Return most recent row instead?</td><td><p><strong>No (Returns oldest row)</strong> - If more than one row satisfies the conditions, this option will return the oldest row (highest up in the Tile).<br></p><p><strong>Yes (Returns most recent row)</strong> - This option will return the newest row (lowest down in the Tile).</p></td><td>Defaults to No</td></tr></tbody></table>

#### Lookup operators

| Operator                                                                                | Description                                    | Good for                                                                                                                                                              |
| --------------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Equals to                                                                               | Looks for the exact value (**Case Sensitive)** | <ul><li>All non-empty data</li></ul>                                                                                                                                  |
| <p>Greater than<br>Greater than or equals to<br>Less than<br>Less than or equals to</p> | <p>><br>>=<br><<br><=</p>                      | <ul><li>Numbers</li><li>Dates in specific format (ISO string, YYYY-MM-DD)<br>Not used for dates that cannot be sorted lexicographically such as 24 May 2025</li></ul> |
| Begins with                                                                             | Looks values beginning with a certain prefix   | <ul><li>Text</li></ul>                                                                                                                                                |
| Contains                                                                                | Looks values containing certain text           | <ul><li>Text</li></ul>                                                                                                                                                |
| Is empty                                                                                | Looks for empty cells                          | <ul><li>Empty cells</li></ul>                                                                                                                                         |

#### Check Step

Checking step will look for a row matching your conditions as well as return the number of rows that satisfies them. To test this properly, you can add some test data into your Tile first.

### Find multiple rows

This step is similar to [#find-single-row](#find-single-row "mention") except that it returns up to 500 rows. To be used with [for-each-item](https://guide.plumber.gov.sg/user-guides/actions/for-each-item "mention") action.

This means if you have 10,000 rows in your dataset and you're searching for something that should return 600 results, the system can only retrieve the first 500 results

### Update single row

This action updates the data of the row based on a row ID. Usually used after the [#find-single-row](#find-single-row "mention") action.

<table><thead><tr><th width="154">Field</th><th width="464">Description</th><th>Required</th></tr></thead><tbody><tr><td>Select Tile</td><td>Select the Tile you want to update.</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr><tr><td>Row ID</td><td>Obtain the Row ID from a <a data-mention href="#find-single-row">#find-single-row</a> action.<br><br>OR <br><br>If it's a fixed row or just for testing purposes, you can right click on the row in your Tile to copy the Row ID like so:<br><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FlvKtOq2N26Y9iYwSyptK%2Fimage.png?alt=media&#x26;token=0d6ac4c1-368f-4e1e-8307-d0394a877f57" alt=""><br></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr><tr><td>Row data</td><td>Enter the row data you want to update. Columns not selected will be left unchanged.<br><br><strong>Column</strong> (Left input)<br>Select the column name for the corresponding cell value.<br><br><strong>Operator</strong> (Middle input)<br>Available options<br><strong>=</strong> : sets the value as-is<br><strong>+ :</strong> increments the value by a specified value (only for numbers)<br><strong>- :</strong> decrements the value by a specified value (only for numbers) <br><br><strong>Cell value</strong> (Right input)<br>Input the value or variable you want to update to.</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2714">✔️</span></td></tr></tbody></table>

## Tiles collaboration

### Adding collaborators

You can add whitelisted users as **Editors** or **Viewers** to your Tile.

1. Open the Tile you want to add collaborators to
2. Click the 'Share' button in the top-right corner
3. Enter the collaborator's email and select the desired role\
   Example:<br>

   <figure><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FPAhiuWrqfNT9KMf50wRw%2FScreenshot%202025-03-15%20at%2011.22.46%E2%80%AFAM.png?alt=media&#x26;token=e7c75397-1225-46d6-b941-b6e72d9cfdbc" alt=""><figcaption></figcaption></figure>
4. Click on 'Add collaborator' to confirm

### Generate public access link

<figure><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2F2xuZ9PjnNuIujP3QDPtL%2Fimage.png?alt=media&#x26;token=72678def-5ee5-413b-b227-0b4b1aaa032e" alt=""><figcaption></figcaption></figure>

Generate a shareable link to let others view your data. Note that anyone with the link can access the data. For security, generating a new link will automatically deactivate the previous one

### Setting a Password for Your Tile

<figure><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2Fr1VT2XnJSGa5WShAzdWC%2Fimage.png?alt=media&#x26;token=0bc6c07d-83c2-4197-b8c4-2db461590025" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2212031742-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXyVsBiX9OwOL1o9g5hLM%2Fuploads%2FNjN1JX2qproE46Aks1UT%2Fimage.png?alt=media&#x26;token=84d9da0a-f4bb-48d7-ae92-d9168e179ea5" alt=""><figcaption></figcaption></figure>

You can set password to your public access tiles.&#x20;

* Under General Access, tick the **Password required** checkbox. A password input field will appear.
* Enter your password — it must be **at least 8 characters** long.
* Click the **tick button (✔)** to the right of the password field to save your password. Your tile link is now password-protected.

**Resetting the Password**

To reset or change the password, click the **cross button (✕)** to the right of the password field. This clears the current password so you can enter a new one.

## FAQ

<details>

<summary><strong>What is the data classification for Tiles?</strong></summary>

The data classification for data on the Plumber platform is Restricted and Sensitive (Normal).

</details>

<details>

<summary> <strong>Can I use Tiles without using any of the automation in Plumber?</strong></summary>

Yes! As long as our product improves your life, you may use it however you like.

</details>

<details>

<summary><strong>How many rows can be handled now?</strong></summary>

Tiles (created after 1 Sep 2025) can safely handle up to 200k rows. Anything beyond that may result in degraded performance and we strongly advise against that. If you a use case that requires storing more than 200k rows, let us know!

</details>

<details>

<summary><strong>Is there any mechanism to prevent editing collisions?</strong></summary>

No, the latest write will override the row data.

</details>

<details>

<summary><strong>Is the data stored encrypted?</strong></summary>

Yes, as with all of OGP's databases, it’s encrypted at rest.

</details>

<details>

<summary><strong>Where is the data stored?</strong></summary>

The data and its backups are stored on the AWS Singapore region.

</details>

<details>

<summary><strong>What are the backup options for this?</strong></summary>

We do not have version controls or user-generated backups yet. However, in times of catastrophic failures, we have PITR (point in time recovery), which allows us to recover all lost data up to 35 days.

</details>

<details>

<summary><strong>Is there a limit to the number of collaborators?</strong></summary>

No, there is no limit to the number of collaborators. However, keep in mind that having many collaborators can make it more challenging to manage permissions, coordinate changes, and troubleshoot issues when they arise

</details>
