A destination is where a scheduled job's results go. This page lists every kind, what tier each needs, and how they differ from a plain database connection.
No credit card. 14 days. Cancel in one click.
Quick answer: A destination is where a job's results are delivered once a scheduled query finishes: No Output, Save to File or Email on Studio, and on Pipelines, SFTP, Amazon S3, a BigQuery or Databricks table, Google Sheets, Slack or Microsoft Teams. A destination is set up once and reused across jobs; it isn't the same thing as a database connection, even when it points at one.
A destination is a saved delivery target for a scheduled job's results. You configure it once, name it, and pick it from a list every time you schedule a job, instead of re-entering an S3 bucket or a Slack webhook for every job that happens to need the same place. Some destinations, like BigQuery and Databricks, don't hold credentials of their own at all; they point at a connection you've already added under Databases and reuse it.
Destinations live under the + next to Destinations in the sidebar, in the same redesigned header-and-cards layout as Connections: a name, a status, and Test, Edit and Delete in one row. When you schedule a job, the destination list appears as one of the output choices alongside No Output, Save to File and Email.
| Destination | Tier | What it needs |
|---|---|---|
| No Output | Studio | Nothing. The job runs and nothing is delivered anywhere. |
| Save to File | Studio | A location on disk. |
| Studio | A recipient address. | |
| SFTP | Pipelines | Host, credentials and a target path. |
| Amazon S3 | Pipelines | A bucket, a path and AWS credentials. |
| Database (BigQuery or Databricks) | Pipelines | An existing connection, a target table and a write mode. |
| Google Sheets | Pipelines | A signed-in Google account and a spreadsheet. |
| Slack | Pipelines | A workspace connection and a channel. |
| Microsoft Teams | Pipelines | A workspace connection and a channel. |
A connection under Databases is what QueryFlow queries from. A destination is what a job writes results to afterward. The two overlap for BigQuery and Databricks specifically: the destination doesn't re-enter credentials, it just points at a connection you already made and adds a target table and a write mode on top. Every other destination type (S3, SFTP, email, Slack, Teams, Google Sheets) isn't a database at all, so it has no equivalent connection to reuse.
A BigQuery or Databricks destination adds one more choice: Append (INSERT), which keeps history, or Replace (TRUNCATE + INSERT), which empties the table first. Other destination types don't have this concept; a file or an email is just written or sent fresh each run, there's nothing to append to or replace.
Turning on Run Jobs When App Is Closed doesn't make every destination work unattended. The background helper covers jobs from Snowflake, Redshift, BigQuery or Databricks delivering to S3, SFTP, a local file or email. A job pointed at Slack, Teams or Google Sheets, or one sourced from Salesforce or a CSV file, still runs, just only while QueryFlow itself is open. Worth checking this combination before assuming a job will fire overnight.
Save to File and Email cover the simplest case: someone wants a CSV or a number on a recurring basis, and they'll open it themselves. S3 and SFTP fit a pipeline further downstream expecting a file to land in a known location. A database destination fits when the result should be queryable data, not a file, joined against other tables later. Slack and Teams fit an alert or a recap meant for a channel of people rather than one inbox. Google Sheets fits when someone on the business side needs to see and lightly manipulate the numbers themselves, without opening QueryFlow at all.
Save to File and Email, plus No Output for a job that just needs to run without delivering anything. Everything else needs Pipelines.
You need one BigQuery connection under Databases. The destination just points at it and adds a target table and write mode; it doesn't ask for credentials again.
Yes. That's the point of setting one up: name it once, and pick it from the list on any job that needs to deliver to the same place.
Replace runs TRUNCATE then INSERT, so the table is emptied before the new results are written. Use Append if you want to keep prior runs' data.
Set a destination up once, then reuse it on every job that needs it. Get QueryFlow →