# Create a Data Flow

- URL: https://betteranalyst.com/docs/data-flows/create-a-flow
- Updated: 2026-11-01
- Author: Better Analyst

Create a Data Flow from chat work or an existing Google Sheet tab, then choose its destination and optional schedule.

Create a flow from supported work in chat or start from an existing Google Sheet tab. Both paths finish in the delivery panel, where you choose the destination and optional schedule.

![Chat composer with Data flow mode selected, ready to pull sources for a repeatable flow](https://betteranalyst.com/docs/data-flows/create-a-flow/new-flow-light.png)

New flow starts a chat in Data flow mode: pull sources, shape the result, then deliver it on a schedule.

## Create a Flow from Chat

1. In the chat composer, switch to **Data flow** mode.
2. Pull a complete table from a connected database or warehouse (Snowflake, BigQuery, PostgreSQL, Supabase, MySQL, or SQL Server), Airtable, Tableau, GA4, Google Search Console, or Google Ads (Meta Ads is coming soon). You can use one source or combine several.
3. Complete the filtering, calculations, joins, or other data work you want to repeat. Use a rolling range such as “the last 30 days” if the flow should stay current.
4. Select the delivery chip above the composer. It is labeled **Deliver on a schedule** on paid plans and **Send to Google Sheets** on Free, where scheduling is locked.
5. Pick the output you want the flow to deliver. The picker shows whether each result is ready and explains why a result cannot be scheduled.
6. Choose the destination and write mode. If your plan supports scheduling, you can also choose a schedule.
7. Save the flow and run it.

Each run pulls the source again and replays the transform you built in chat. It does not reuse the old result.

A Google Sheet attached to a chat cannot become a flow source. To read an existing Sheet on future runs, create the flow through the dedicated Google Drive picker instead.

## Output Eligibility

The output picker evaluates each result separately. Common reasons a result cannot be scheduled include:

| Result | Why it cannot be scheduled | What to do |
| - | - | - |
| Fixed calendar date range | Every run would send the same dates and numbers | Rebuild it with a rolling range, such as “the last 30 days” |
| Compared date ranges | The two ranges cannot be refreshed reliably yet | Use a single date range |
| Preview-scope result | A quick preview may stop working as the source grows | Run a complete pull |
| Uploaded file | A file you sent once cannot be pulled again | Connect the system the file came from and pull the data from there |
| Information read from a web page | It is captured once and cannot be collected again automatically | Pull the data from a connected source instead |
| One-time database snapshot | An older database result was saved as a snapshot | Run the query again in **Data flow** mode |
| Unsupported source | The source cannot be pulled again automatically | Use a connected database, warehouse, Airtable, Tableau, or supported Google marketing source |

A flow also can't use a team data source with [per-member rules](https://betteranalyst.com/docs/teams/per-member-data-access), because it runs without a person and writes where others can read. Creating one is refused with a message like: "Data Flows can't use Sales DB yet, because it shows each person different rows." A [private chat](https://betteranalyst.com/docs/teams/personal-vs-shared#private-chats) can't start a flow either: "This chat uses data filtered for you, so Data Flows can't be created from it."

The picker displays the specific explanation beside each blocked row. Other one-time or incomplete results can also be blocked when Better Analyst cannot safely reproduce the same request.

## Background Preparation

Some eligible outputs need a short background preparation step before they can run on their own. Preparation starts automatically after you choose the output and usually takes about a minute. You can continue setting the destination and schedule while it finishes.

If Better Analyst cannot prepare the output automatically, return to the chat and follow the prompt or error shown there.

## Create a Flow from an Existing Google Sheet

1. Open **Data Flows** and select **Already have a Google Sheet?**.
2. Open the Google Drive picker and choose the Google account and spreadsheet.
3. Select the source tab. Its first row becomes the flow's columns.
4. Continue to the delivery panel.
5. Choose the destination, write mode, and optional schedule, then save and run the flow.

This picker path saves the selected Sheet tab as a source that can be read again on later runs.

## Next Steps

- [Choose a destination and write mode](https://betteranalyst.com/docs/data-flows/destinations)
- [Configure schedules and review runs](https://betteranalyst.com/docs/data-flows/schedules-and-runs)
