> ## Documentation Index
> Fetch the complete documentation index at: https://ngquct-docs-fix-500-query-results.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS Shortcuts

> Add rows to a table or open a connection from the Shortcuts app on iPhone and iPad

You point an action at a table, hand it a JSON object, and the row lands in the database with the app
still closed. App Intents put three actions in Shortcuts, the Share Sheet and Siri, and two of
them run entirely in the background.

This is iOS only. On macOS, use the [URL scheme](/external-api/url-scheme) and
[MCP](/external-api/mcp-tools).

| Action                | Does                                                      | Needs            |
| --------------------- | --------------------------------------------------------- | ---------------- |
| **Add Row to Table**  | Inserts one row from a JSON object or a CSV row.          | iOS app build 17 |
| **Add Rows to Table** | Inserts many rows from a JSON array, CSV text, or a file. | iOS app build 17 |
| **Open Connection**   | Launches the app on a saved connection.                   | Any recent build |

Your build is under **Settings > About** in the iOS app, and the two insert actions do not appear in
Shortcuts on anything older. The iOS app ships on its own schedule; see
[iPhone and iPad](/ios).

To browse everything the app offers, open Shortcuts, tap the action list, and go to
**Apps > TablePro**.

## Build one

<Steps>
  <Step title="Add the action">
    In a new shortcut, add **Add Row to Table**.
  </Step>

  <Step title="Point it at a table">
    Pick a **Connection**, then a **Table** read live from it. **Database or Schema** is optional and
    lists schemas on PostgreSQL and the like, databases elsewhere; empty means the connection's own.
  </Step>

  <Step title="Supply the row">
    Feed **Row (JSON or CSV)** from a Shortcuts **Dictionary** action keyed by column name, which
    builds the row without typing JSON. **Add Rows to Table** has **Rows (JSON or CSV)** and a
    **File** field instead.
  </Step>

  <Step title="Run it">
    It returns the number of rows inserted, ready for a later step, and speaks *"Added one row to
    bookmarks."*
  </Step>
</Steps>

Inserts work on MySQL, MariaDB, PostgreSQL, Redshift, SQL Server, SQLite, DuckDB and Oracle. Any
other type, Redis for example, fails with *"Redis connections do not support adding rows from
Shortcuts."*

Siri takes "Open \[connection] in TablePro", "Connect to \[connection] in TablePro", "Add a row in
TablePro" and "Add rows in TablePro", with a connection name in place of the brackets.

## Data formats

Keys match columns by name. A column you leave out stays out of the `INSERT` and takes its default,
and an empty or `null` primary key is dropped for the same reason, so auto-increment still fires.

### JSON

An object is one row; an array of objects is many, for **Add Rows to Table**.

```json theme={null}
{ "title": "TablePro docs", "url": "https://docs.tablepro.app", "tags": "reference" }
```

```json theme={null}
[
  { "title": "First", "url": "https://example.com/1" },
  { "title": "Second", "url": "https://example.com/2" }
]
```

`null` inserts a SQL `NULL`, and numbers and booleans are inserted as text. Quote anything that has
to stay exact: a bare JSON number past 64-bit integer range is read as floating point and loses
digits, while `"18446744073709551615"` keeps every one.

### CSV

The first row is the header and names the columns. Quoting follows the usual rules.

```text theme={null}
title,url
First,https://example.com/1
Second,https://example.com/2
```

## Limits

Up to 10,000 rows per run. **Add Rows to Table** runs the batch in one transaction wherever the
engine supports it, so a row that fails rolls back the whole batch instead of leaving half of it in.

## When it refuses

Nothing is inserted in any of these cases.

| Message                                                                        | Cause                                                                                            |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| *"…is read-only, so rows cannot be added."*                                    | The connection's safe mode blocks writes. A connection set to Confirm Writes asks first instead. |
| *"…has no column named …"*                                                     | A key in the data matches no column.                                                             |
| *"The data has no values to insert into …"*                                    | Nothing in the data maps to a column.                                                            |
| *"No data was provided to add."*                                               | Both the text field and the file were empty.                                                     |
| *"Too many rows. Add up to 10000 rows at a time."*                             | Over the cap.                                                                                    |
| *"Add Row to Table expects one row. Use Add Rows to Table for multiple rows."* | An array reached the single-row action.                                                          |

The action also fails while the device is locked, because it reads the connection's password from the
Keychain.
