Smartsheet to Databricks: How to Move Your Data
Move Smartsheet data into Databricks with Airbyte. Why every column but dates arrives as a string, the header naming rule, and one source per sheet.

Moving Smartsheet to Databricks takes data that a person maintains by hand and puts it somewhere a query engine can reach. That is genuinely valuable, because the spreadsheet somebody updates every Friday is often the only place a piece of business context exists. It also means your lakehouse now has an upstream dependency on a human being, and the connector has two behaviours that make that dependency sharper than you might expect.
The first is typing. Smartsheet columns arrive in Databricks as strings, with the exception of date and datetime columns. A column that Smartsheet displays as a number, a checkbox, a contact or a dropdown is a string by the time it lands. The second is naming: column headers must contain only alphanumeric characters and underscores, so a header someone edits to add a space or a bracket is a header that breaks the stream.
One sheet, one source
Unlike Google Sheets, a Smartsheet holds a single sheet, and a Smartsheet source instance syncs one of them. Replicating twelve sheets means twelve sources. They can all reuse the same API access token, which keeps credential management simple, and they all draw on the same rate limit of 300 requests per minute per token. The connector makes only a handful of API calls per sync, so that limit is generous unless you have a great many sheets on tight schedules.
One setup detail catches everyone at least once. The sheet ID is not in the URL, which is where Google Sheets puts it. You find it inside the Smartsheet app under File and then Properties. The access token comes from the account menu, under apps and integrations, and needs only read access on the sheets in question.
Everything is a string, so cast deliberately
Only date and datetime columns get real types. Everything else, including Smartsheet's richer column types, is treated as a string during schema generation. In a lakehouse that means the table you land is not the table anyone should query.
Build a modelled layer over the raw table that casts each column to what it actually is, and make that layer fail loudly when a cast fails. This is not busywork. Hand-maintained data contains typos, and a numeric column with the word approx typed into one cell will silently become a null in a permissive cast and a visible error in a strict one. You want the error, because the person who typed it can fix it in ten seconds if they are told.
The same reasoning applies to headers. Because headers must be alphanumeric plus underscores, a well-meaning rename from status to Status (Q3) breaks the pipeline. Tell whoever owns the sheet that column headers are an interface, and consider a protected header row if your Smartsheet plan supports it.
Metadata is opt in
Sheet-level and row-level metadata fields are available but not included by default. You name the ones you want in the source configuration and they join the stream. Row metadata is usually worth taking, because it is what lets you answer when a row last changed, which is exactly the question people ask about a manually maintained sheet.
On the Databricks side each stream becomes a table in Unity Catalog, and the connector needs permission to create Volumes for Avro staging. Volume here is never the issue: a Smartsheet is thousands of rows, not millions. Choose incremental with deduplication if the sheet has a stable row identifier, and plain full refresh with overwrite otherwise, which for a small sheet is perfectly reasonable and avoids reasoning about what a deleted row means.
Frequently asked questions
Can one Smartsheet source sync several sheets?
No. Each source instance handles one sheet. Create one source per sheet and reuse the same API access token across all of them.
Why are my numeric columns strings in Databricks?
The connector types only date and datetime columns. Everything else is generated as a string, so cast it in a downstream model.
Where do I find the sheet ID?
Inside the Smartsheet app under File and then Properties. Unlike Google Sheets, it does not appear in the browser URL.
My sync broke after someone renamed a column. Why?
Column headers must contain only alphanumeric characters and underscores. Spaces, brackets and punctuation in a header will break the stream.
Get your Smartsheet data into Databricks
The technical work here is small and the social work is not. Cast the strings in a modelled layer, take the row metadata, and have a conversation with whoever owns the sheet about headers being an interface rather than a label. A pipeline whose upstream is a person needs that conversation more than it needs tuning.
For another source whose streams describe configuration rather than activity, see Genesys to Databricks. For the same lakehouse fed by a source with genuine types and real volume, see ClickHouse to Databricks.
Integrate with 600+ apps using Airbyte
Move data from 600+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.
