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

# Sage 300 CRE

# Connector Details

| Name           | Value                                                                                                                                                                                                                                                                                                             |
| :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform       | Sage 300 CRE                                                                                                                                                                                                                                                                                                      |
| Auth Type      | On-Premise                                                                                                                                                                                                                                                                                                        |
| Direction      | Bidirectional                                                                                                                                                                                                                                                                                                     |
| Tap Metrics    | <p>Usage: <Tooltip tip="low"><Icon icon="user" iconType="regular" color="#fff" size="14px" /><Icon icon="user" iconType="regular" color="#fff" size="14px" /><Icon icon="user" iconType="regular" color="#A9A9A9" size="14px" /><Icon icon="user" iconType="regular" color="#A9A9A9" size="14px" /></Tooltip></p> |
| Target Metrics | <p>Usage: <Tooltip tip="low"><Icon icon="user" iconType="regular" color="#fff" size="14px" /><Icon icon="user" iconType="regular" color="#fff" size="14px" /><Icon icon="user" iconType="regular" color="#A9A9A9" size="14px" /><Icon icon="user" iconType="regular" color="#A9A9A9" size="14px" /></Tooltip></p> |

# Overview

Sage 300 CRE (Construction and Real Estate), formerly Timberline, is on-premise accounting software for construction and property management. It is a distinct product from [Sage 300](/connectors/sage300).

The hotglue Sage 300 CRE connector is an installed Windows program (`.exe`) that runs on the same machine as Sage 300 CRE. While it is running, you can read and write data the same way you would with a cloud connector.

* **Read** uses ODBC against the Timberline DSN to query any table in the Sage 300 CRE company database.
* **Write** uses either direct ODBC inserts or Sage import-file operations (`tsObject.exe` + a Timberline macro), depending on the object.

# Tenant setup guide

Use the guide below to configure the Sage 300 CRE connector.

## Initial credential configuration

Before installing the connector locally, gather the following:

* **Username and password**: Sage 300 CRE credentials used for ODBC and for import macros. Empty values are valid for open or sample companies that do not require a login. For production companies, create a dedicated integration user rather than using an active interactive login.
* **DSN**: Sage 300 CRE data is stored in an underlying Timberline database. The connector reads (and can write) through an ODBC DSN that points at that database. Sage typically installs a system DSN named `Timberline Data Source`. To confirm it is present:
  * Click the Search button on the bottom left of your Windows toolbar
  * Search for `ODBC` and select `ODBC Data Sources (64-bit)`
  * Click `System DSN`. You should see `Timberline Data Source` (or a custom DSN you created that uses the Timberline driver). This is the DSN name to configure.
* **Company path**: The full path to the Sage 300 CRE company data folder. This is the folder that contains the company files the Timberline driver should open (passed as `DBQ` on the ODBC connection). Example:

```
C:\\ProgramData\\Sage\\Timberline Office\\Data\\PM Sample Data
```

* **tsObject.exe path** (required for import-file writes): The Timberline `tsObject.exe` used to run import macros for transactional objects such as bills, invoices, journal entries, and payments. The default install location is:

```
C:\\Program Files (x86)\\Timberline Office\\Shared\\tsObject.exe
```

Once you have these credentials, provide them to support. In return, you will get the connector file, which is an `exe` Windows program that you will run, and a connector password.

## Sample config

Tenant config is stored in hotglue and pulled down by the connector on each cycle. A typical config looks like:

```json theme={null}
{
  "dsn": "Timberline Data Source",
  "uid": "",
  "pwd": "",
  "company_path": "C:\\ProgramData\\Sage\\Timberline Office\\Data\\PM Sample Data",
  "ts_object_exe": "C:\\Program Files (x86)\\Timberline Office\\Shared\\tsObject.exe",
  "read_frequency": 60,
  "tables": {
    "APM_MASTER__VENDOR": {
      "sync": true,
      "replication_key": "Date_Stamp",
      "columns": ["Vendor", "Name", "Date_Stamp"]
    }
  }
}
```

| Field            | Required          | Description                                                                                                        |
| :--------------- | :---------------- | :----------------------------------------------------------------------------------------------------------------- |
| `dsn`            | Yes               | ODBC DSN name. Defaults to `Timberline Data Source`.                                                               |
| `company_path`   | Yes               | Full path to the Sage 300 CRE company data folder.                                                                 |
| `uid`            | No                | Sage username. Leave blank for open/sample companies.                                                              |
| `pwd`            | No                | Sage password. Leave blank for open/sample companies.                                                              |
| `ts_object_exe`  | For import writes | Path to `tsObject.exe`. Defaults to the standard Timberline Shared folder.                                         |
| `read_frequency` | No                | Seconds between read cycles. Defaults to the connector poll interval (30).                                         |
| `tables`         | For read          | Map of Sage 300 CRE table names to sync settings. Any table exposed by the Timberline ODBC database can be listed. |

### Table options

Each key under `tables` is a Sage 300 CRE table name (for example `APM_MASTER__VENDOR`).

| Field             | Required    | Description                                                                                                                                                                                                            |
| :---------------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sync`            | Yes         | Set to `true` to include the table in read syncs.                                                                                                                                                                      |
| `replication_key` | No          | Datetime (or stamp) column used for incremental reads. `Date_Stamp` is common when present.                                                                                                                            |
| `columns`         | Recommended | Explicit column list to `SELECT`. Timberline tables often have 100+ columns; `SELECT *` is extremely slow over ODBC. If you set a `replication_key`, include it here (the connector adds it automatically if omitted). |

## Run the connector

Now you have all you need to run the connector.

1. Download the Connector launcher file.

<Info>The Sage 300 CRE connector is packaged as an `.exe` file. Read and write run in the same process.</Info>

2. Run the launcher `.exe` file as administrator. This registers the connector as a service and starts setup.
3. The connector will open a pop-up requesting your connector password. Enter your connector password and click OK.

That's it. The connector is now running and ready to sync your Sage 300 CRE data.

Config and logs live under `C:\Program Files\hotglue` by default.

# Supported Objects

## Write

The Sage 300 CRE connector supports writing master records and transactions out of the box. Writes are dispatched by the payload filename (for example `vendor.json` or `bill.json`). Master records (vendors, customers, jobs, accounts, employees) are processed before transactional objects so dependencies exist before import.

There are two write methods:

| Object              | Payload file         | Method                                                                |
| :------------------ | :------------------- | :-------------------------------------------------------------------- |
| Vendors             | `vendor.json`        | ODBC `INSERT` into `APM_MASTER__VENDOR`                               |
| Customers           | `customer.json`      | ODBC `INSERT` into `ARM_MASTER__CUSTOMER`                             |
| Jobs                | `job.json`           | ODBC `INSERT` into `JCM_MASTER__JOB`                                  |
| Accounts            | `account.json`       | ODBC `INSERT` into `GLM_MASTER__ACCOUNT`                              |
| Employees           | `employee.json`      | ODBC `INSERT` into `PRM_MASTER__EMPLOYEE`                             |
| Bills (AP invoices) | `bill.json`          | Import CSV + Timberline macro (`import-ap.mac` via `tsObject.exe`)    |
| Customer Invoices   | `invoice.json`       | Import CSV + Timberline macro (`import-ar.mac` via `tsObject.exe`)    |
| Journal Entries     | `journalentry.json`  | Import CSV + Timberline macro (`import-gl.mac` via `tsObject.exe`)    |
| Vendor Payments     | `vendorpayment.json` | Import CSV + Timberline macro (`import-appay.mac` via `tsObject.exe`) |
| Commitments         | `commitment.json`    | Import CSV + Timberline macro (`import-cm.mac` via `tsObject.exe`)    |

<Info>
  In addition to the fields listed below, all objects support the optional `externalId` field.
  This is used to associate the created record in Sage with your own id. This field is not mapped to Sage 300 CRE, and only persists within hotglue.
</Info>

<Info>
  When writing data to Sage 300 CRE, ensure that the `.json` files are written to the `etl-output` folder in your jobs. Otherwise the connector will not process them.
</Info>

<Warning>
  Import-file writes require `tsObject.exe` and the corresponding `.mac` file in the company data folder (for example `import-ap.mac` for bills). The connector does not install these macros.
</Warning>

### Vendors

Payload file: `vendor.json`

Vendors are created with a direct ODBC insert into `APM_MASTER__VENDOR`.

| Field                     | Required | Description                                                                    |
| :------------------------ | :------- | :----------------------------------------------------------------------------- |
| `Vendor`                  | Yes      | Vendor ID as stored in Sage (for example `ZZ 999`). Also accepted as `vendor`. |
| `Name`                    | Yes      | Vendor name. Also accepted as `name`.                                          |
| `Address_1`               | No       | Address line 1                                                                 |
| `Address_2`               | No       | Address line 2                                                                 |
| `City`                    | No       | City                                                                           |
| `State`                   | No       | State                                                                          |
| `ZIP`                     | No       | ZIP / postal code                                                              |
| `Phone`                   | No       | Telephone number                                                               |
| `Fax`                     | No       | Fax number                                                                     |
| `Contact`                 | No       | Primary contact name                                                           |
| `Tax_ID`                  | No       | Tax ID / EIN                                                                   |
| `Type`                    | No       | Vendor type                                                                    |
| `Default_Expense_Account` | No       | Default expense account for AP distributions                                   |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "vendor-001",
          "Vendor": "ZZ 999",
          "Name": "Hotglue Test Vendor",
          "Address_1": "100 Market Street",
          "City": "Denver",
          "State": "CO",
          "ZIP": "80202",
          "Phone": "303 555 0100",
          "Contact": "Alex Rivera"
      }
  ]
  ```
</Accordion>

### Customers

Payload file: `customer.json`

Customers are created with a direct ODBC insert into `ARM_MASTER__CUSTOMER`.

| Field                     | Required | Description                                  |
| :------------------------ | :------- | :------------------------------------------- |
| `Customer`                | Yes      | Customer ID as stored in Sage                |
| `Name`                    | Yes      | Customer name                                |
| `Address_1`               | No       | Address line 1                               |
| `Address_2`               | No       | Address line 2                               |
| `City`                    | No       | City                                         |
| `State`                   | No       | State                                        |
| `ZIP`                     | No       | ZIP / postal code                            |
| `Phone`                   | No       | Telephone number                             |
| `Contact`                 | No       | Primary contact name                         |
| `Type`                    | No       | Customer type                                |
| `Default_Revenue_Account` | No       | Default revenue account for AR distributions |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "customer-001",
          "Customer": "ACME001",
          "Name": "Acme Construction",
          "Address_1": "500 Industrial Blvd",
          "City": "Austin",
          "State": "TX",
          "ZIP": "78701",
          "Contact": "Jordan Lee"
      }
  ]
  ```
</Accordion>

### Jobs

Payload file: `job.json`

Jobs are created with a direct ODBC insert into `JCM_MASTER__JOB`.

| Field             | Required | Description            |
| :---------------- | :------- | :--------------------- |
| `Job`             | Yes      | Job ID                 |
| `Description`     | Yes      | Job description        |
| `Customer`        | No       | Associated customer ID |
| `Status`          | No       | Job status             |
| `Type`            | No       | Job type               |
| `Contract_Amount` | No       | Contract amount        |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "job-001",
          "Job": "26-100",
          "Description": "Downtown office buildout",
          "Customer": "ACME001",
          "Status": "Active",
          "Contract_Amount": 250000.00
      }
  ]
  ```
</Accordion>

### Accounts

Payload file: `account.json`

GL accounts are created with a direct ODBC insert into `GLM_MASTER__ACCOUNT`.

| Field         | Required | Description                                   |
| :------------ | :------- | :-------------------------------------------- |
| `Account`     | Yes      | Account number (for example `100-0000-20010`) |
| `Description` | Yes      | Account description                           |
| `Type`        | No       | Account type                                  |
| `Status`      | No       | Account status                                |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "account-001",
          "Account": "100-1000-60020",
          "Description": "Telephone expense",
          "Type": "Expense"
      }
  ]
  ```
</Accordion>

### Employees

Payload file: `employee.json`

Employees are created with a direct ODBC insert into `PRM_MASTER__EMPLOYEE`.

| Field             | Required | Description            |
| :---------------- | :------- | :--------------------- |
| `Employee`        | Yes      | Employee ID            |
| `Last_Name`       | Yes      | Last name              |
| `First_Name`      | Yes      | First name             |
| `Status`          | No       | Employee status        |
| `Social_Security` | No       | Social Security number |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "employee-001",
          "Employee": "E100",
          "Last_Name": "Chen",
          "First_Name": "Maya",
          "Status": "Active"
      }
  ]
  ```
</Accordion>

### Bills

Payload file: `bill.json`

Bills (AP invoices) are written as a Sage AP import file, then imported with the Timberline `import-ap.mac` macro.

The connector:

1. Maps each bill JSON record to Sage AP import rows (`API` header + `APD` distribution lines)
2. Writes `import-ap.csv` into the company data folder
3. Runs `tsObject.exe` against `import-ap.mac` with the configured company credentials

#### Invoice header (`API`)

| Field               | Required | Description                                             |
| :------------------ | :------- | :------------------------------------------------------ |
| `Vendor`            | Yes      | Vendor ID. Limited to 10 characters.                    |
| `Invoice`           | Yes      | Invoice number. Limited to 15 characters.               |
| `Amount`            | Yes      | Invoice total.                                          |
| `Description`       | No       | Invoice description. Limited to 30 characters.          |
| `DiscountOffered`   | No       | Discount amount.                                        |
| `InvoiceDate`       | No       | Invoice date. Accepts `MM/DD/YYYY` or ISO `YYYY-MM-DD`. |
| `DateReceived`      | No       | Date received.                                          |
| `DiscountDate`      | No       | Discount date.                                          |
| `PaymentDate`       | No       | Payment date.                                           |
| `AccountingDate`    | No       | Accounting date.                                        |
| `SmryPayeeName`     | No       | Summary payee name. Limited to 30 characters.           |
| `SmryPayeeAddress1` | No       | Payee address line 1. Limited to 33 characters.         |
| `SmryPayeeAddress2` | No       | Payee address line 2. Limited to 33 characters.         |
| `SmryPayeeCity`     | No       | Payee city. Limited to 30 characters.                   |
| `SmryPayeeState`    | No       | Payee state. Limited to 4 characters.                   |
| `SmryPayeeZIP`      | No       | Payee ZIP. Limited to 10 characters.                    |
| `distributions`     | Yes      | Array of distribution lines. At least one is required.  |

#### Distribution lines (`APD`)

| Field                     | Required    | Description                                       |
| :------------------------ | :---------- | :------------------------------------------------ |
| `ExpenseAccount`          | Recommended | Expense account. Limited to 14 characters.        |
| `AccountsPayableAccount`  | Recommended | AP account. Limited to 14 characters.             |
| `Amount`                  | Recommended | Distribution amount.                              |
| `Job`                     | No          | Job ID                                            |
| `Cost_Code`               | No          | Cost code                                         |
| `Units`                   | No          | Units.                                            |
| `UnitCost`                | No          | Unit cost.                                        |
| `Exempt1099`              | No          | 1099 exempt flag.                                 |
| `DistCode`                | No          | Distribution code. Limited to 10 characters.      |
| `Description`             | No          | Line description. Limited to 30 characters.       |
| `Authorization`           | No          | Authorization. Limited to 10 characters.          |
| `JointPayee`              | No          | Joint payee. Limited to 30 characters.            |
| `PMProperty`              | No          | Property. Limited to 10 characters.               |
| `PMUnit`                  | No          | Unit. Limited to 10 characters.                   |
| `PMLease`                 | No          | Lease. Limited to 15 characters.                  |
| `PMLeaseRevisionNum`      | No          | Lease revision number.                            |
| `PMTenant`                | No          | Tenant. Limited to 10 characters.                 |
| `PMChargeType`            | No          | Charge type. Limited to 10 characters.            |
| `PMChargeDate`            | No          | Charge date.                                      |
| `PMItemID`                | No          | Item ID. Limited to 20 characters.                |
| `PMChargebackDescription` | No          | Chargeback description. Limited to 30 characters. |
| `PMMarkupPercent`         | No          | Markup percent.                                   |
| `PMMarkupAmount`          | No          | Markup amount.                                    |
| `PMMarkupChargeType`      | No          | Markup charge type. Limited to 10 characters.     |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "bill-001",
          "Vendor": "AA 001",
          "Invoice": "HG-TEST-004",
          "Description": "Hotglue import test",
          "Amount": 125.0,
          "DiscountOffered": 0.0,
          "InvoiceDate": "07/28/2026",
          "DateReceived": "07/28/2026",
          "AccountingDate": "07/28/2026",
          "distributions": [
              {
                  "ExpenseAccount": "100-1000-60020",
                  "AccountsPayableAccount": "100-0000-20010",
                  "Amount": 125.0,
                  "Description": "Telephone test"
              }
          ]
      }
  ]
  ```
</Accordion>

### Customer Invoices

Payload file: `invoice.json`

AR invoices are written as a Sage AR import file, then imported with `import-ar.mac`.

| Field                                     | Required    | Description                                             |
| :---------------------------------------- | :---------- | :------------------------------------------------------ |
| `Customer`                                | Yes         | Customer ID                                             |
| `Invoice`                                 | Yes         | Invoice number                                          |
| `Amount`                                  | Yes         | Invoice total                                           |
| `Description`                             | No          | Invoice description                                     |
| `InvoiceDate`                             | No          | Invoice date. Accepts `MM/DD/YYYY` or ISO `YYYY-MM-DD`. |
| `AccountingDate`                          | No          | Accounting date                                         |
| `DueDate`                                 | No          | Due date                                                |
| `Job`                                     | No          | Associated job ID                                       |
| `distributions`                           | Yes         | Array of distribution lines. At least one is required.  |
| `distributions.RevenueAccount`            | Recommended | Revenue account                                         |
| `distributions.AccountsReceivableAccount` | Recommended | AR account                                              |
| `distributions.Amount`                    | Recommended | Distribution amount                                     |
| `distributions.Description`               | No          | Line description                                        |
| `distributions.Job`                       | No          | Job ID                                                  |
| `distributions.Cost_Code`                 | No          | Cost code                                               |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "invoice-001",
          "Customer": "ACME001",
          "Invoice": "INV-1001",
          "Description": "Progress billing 1",
          "Amount": 15000.00,
          "InvoiceDate": "2026-07-28",
          "AccountingDate": "2026-07-28",
          "Job": "26-100",
          "distributions": [
              {
                  "RevenueAccount": "100-1000-40010",
                  "AccountsReceivableAccount": "100-0000-11010",
                  "Amount": 15000.00,
                  "Description": "Draw 1",
                  "Job": "26-100"
              }
          ]
      }
  ]
  ```
</Accordion>

### Journal Entries

Payload file: `journalentry.json`

General ledger journal entries are imported with `import-gl.mac`.

| Field               | Required | Description                                                                           |
| :------------------ | :------- | :------------------------------------------------------------------------------------ |
| `Reference`         | Yes      | Journal reference / entry number                                                      |
| `AccountingDate`    | Yes      | Accounting date. Accepts `MM/DD/YYYY` or ISO `YYYY-MM-DD`.                            |
| `Description`       | No       | Journal description                                                                   |
| `lines`             | Yes      | Array of journal lines. At least two lines are typically required (debit and credit). |
| `lines.Account`     | Yes      | GL account                                                                            |
| `lines.Amount`      | Yes      | Line amount                                                                           |
| `lines.Type`        | Yes      | `Debit` or `Credit`                                                                   |
| `lines.Description` | No       | Line description                                                                      |
| `lines.Job`         | No       | Job ID                                                                                |
| `lines.Cost_Code`   | No       | Cost code                                                                             |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "je-001",
          "Reference": "JE-2026-004",
          "AccountingDate": "2026-07-31",
          "Description": "Month-end accrual",
          "lines": [
              {
                  "Account": "100-1000-60020",
                  "Amount": 125.00,
                  "Type": "Debit",
                  "Description": "Accrue telephone"
              },
              {
                  "Account": "100-0000-20010",
                  "Amount": 125.00,
                  "Type": "Credit",
                  "Description": "Accrue telephone"
              }
          ]
      }
  ]
  ```
</Accordion>

### Vendor Payments

Payload file: `vendorpayment.json`

AP payments are imported with `import-appay.mac`.

| Field              | Required | Description                                             |
| :----------------- | :------- | :------------------------------------------------------ |
| `Vendor`           | Yes      | Vendor ID                                               |
| `Payment`          | Yes      | Payment / check number                                  |
| `Amount`           | Yes      | Payment total                                           |
| `PaymentDate`      | Yes      | Payment date. Accepts `MM/DD/YYYY` or ISO `YYYY-MM-DD`. |
| `BankAccount`      | Yes      | Cash / bank account                                     |
| `Description`      | No       | Payment description                                     |
| `invoices`         | Yes      | Invoices to apply the payment against                   |
| `invoices.Invoice` | Yes      | Invoice number                                          |
| `invoices.Amount`  | Yes      | Amount applied to this invoice                          |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "payment-001",
          "Vendor": "AA 001",
          "Payment": "CHK-4401",
          "Amount": 125.00,
          "PaymentDate": "2026-08-04",
          "BankAccount": "100-0000-10010",
          "Description": "Payment for HG-TEST-004",
          "invoices": [
              {
                  "Invoice": "HG-TEST-004",
                  "Amount": 125.00
              }
          ]
      }
  ]
  ```
</Accordion>

### Commitments

Payload file: `commitment.json`

Commitments (purchase orders / subcontracts) are imported with `import-cm.mac`.

| Field                       | Required    | Description                                                 |
| :-------------------------- | :---------- | :---------------------------------------------------------- |
| `Vendor`                    | Yes         | Vendor ID                                                   |
| `Commitment`                | Yes         | Commitment number                                           |
| `Amount`                    | Yes         | Commitment total                                            |
| `Description`               | No          | Commitment description                                      |
| `Date`                      | No          | Commitment date. Accepts `MM/DD/YYYY` or ISO `YYYY-MM-DD`.  |
| `Job`                       | No          | Associated job ID                                           |
| `Type`                      | No          | Commitment type (for example purchase order or subcontract) |
| `distributions`             | Yes         | Array of commitment lines. At least one is required.        |
| `distributions.Amount`      | Yes         | Line amount                                                 |
| `distributions.Account`     | Recommended | Expense / commitment account                                |
| `distributions.Job`         | No          | Job ID                                                      |
| `distributions.Cost_Code`   | No          | Cost code                                                   |
| `distributions.Description` | No          | Line description                                            |

<Accordion title="Sample payload">
  ```json theme={null}
  [
      {
          "externalId": "commitment-001",
          "Vendor": "AA 001",
          "Commitment": "PO-2201",
          "Amount": 8500.00,
          "Description": "Electrical materials",
          "Date": "2026-07-15",
          "Job": "26-100",
          "Type": "Purchase Order",
          "distributions": [
              {
                  "Account": "100-1000-51010",
                  "Amount": 8500.00,
                  "Job": "26-100",
                  "Cost_Code": "16-100",
                  "Description": "Panel and feeders"
              }
          ]
      }
  ]
  ```
</Accordion>

## Read

Read syncs any table you enable under `tables`. The table list is not a fixed catalog — the connector can query **any table exposed by the Sage 300 CRE (Timberline) ODBC database**.

Use the exact Timberline table name as the key (for example `APM_MASTER__VENDOR`). Set `sync` to `true`, optionally add a `replication_key` for incremental sync, and prefer an explicit `columns` list.

<Accordion title="Example table config">
  ```json theme={null}
  {
    "tables": {
      "APM_MASTER__VENDOR": {
        "sync": true,
        "replication_key": "Date_Stamp",
        "columns": ["Vendor", "Name", "Date_Stamp"]
      }
    }
  }
  ```
</Accordion>

<Tip>
  If you omit `columns`, the connector runs `SELECT *`, which can appear hung on Timberline tables with a large number of columns. Prefer listing only the fields you need.
</Tip>
