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

# Data storage

> Read and write Parabola Tables to pass data between flows, accumulate a history over time, or hold reference data other flows can pull from.

A flow's output usually moves on to wherever it's headed and nothing more. A Parabola Table sits inside your account instead, so one flow's result can feed another, build a history over time, or serve as reference data anyone can pull from.

Two steps make it work: **Pull from Parabola Table** to read, **Send to Parabola Table** to write.

## Read from a table

**Pull from Parabola Table** reads any table you have access to. Anyone who's a Viewer, Editor, or Owner on the source flow can pull from its tables. Pick one from the dropdown.

<div className="docs-figure-md">
  <Frame caption="The config view of the Pull from Parabola Table step">
    <img src="https://mintcdn.com/parabola-7119dfb0/l2ex59W2cGXciVw4/images/integration/image-157.png?fit=max&auto=format&n=l2ex59W2cGXciVw4&q=85&s=52c2956baa4921057c43c382e0eac0e8" alt="Pull from Parabola Table step with the table dropdown open" width="2218" height="1332" data-path="images/integration/image-157.png" />
  </Frame>
</div>

A few things worth knowing:

* It pulls the table's **base data only**. Filters, sorts, aggregations, or formatting applied on top don't carry through.
* If a table's missing from the dropdown, check that **Allow other flows to pull data from this table** is enabled on the source's **Send to Parabola Table** step.
* Reading from a *different* flow requires the source table to have been published and run successfully at least once. Within the same flow, you can pull from a draft table too.
* To bring in several tables, use multiple **Pull from Parabola Table** steps and merge them with **Stack tables** or **Combine tables**.

<div className="docs-figure-md">
  <Frame>
    <img src="https://mintcdn.com/parabola-7119dfb0/l2ex59W2cGXciVw4/images/integration/image-158.png?fit=max&auto=format&n=l2ex59W2cGXciVw4&q=85&s=31724158d505c029fc2c82b77058153e" alt="Connecting a Pull from Parabola Table step to downstream transforms" width="1246" height="684" data-path="images/integration/image-158.png" />
  </Frame>
</div>

## Write to a table

**Send to Parabola Table** writes data into a table. Anyone with flow access can see what's stored.

A configured step has two tabs:

* **Input.** What's currently flowing in, and what would be written if you ran the flow now.
* **Existing Table.** What's already stored from prior runs. Downstream steps connected to this step receive the **Existing Table** data, not the Input.

After connecting the step, name the table. You can rename it later. **Allow other flows to pull data from this table** is on by default; disable it to keep the table scoped to this flow only. Either way it stays visible on the flow's Live page and pullable within the same flow.

<div className="docs-figure-md">
  <Frame>
    <img src="https://mintcdn.com/parabola-7119dfb0/l2ex59W2cGXciVw4/images/integration/image-159.png?fit=max&auto=format&n=l2ex59W2cGXciVw4&q=85&s=9de30e6e38a92d86d1172cd443ec6f0d" alt="Send to Parabola Table step with the table name field highlighted" width="1600" height="1326" data-path="images/integration/image-159.png" />
  </Frame>
</div>

Then choose how each run writes:

* **Overwrite.** Replaces all data. Also how you de-dupe: overwrite with cleaned data.
* **Append.** Adds new rows above or below what's there, matched by position or by name. Optionally timestamp each addition.
* **Update existing rows.** Updates rows that match on a key you choose. Duplicate matches error out, and matching columns must exist and match by name on both sides. Unmatched rows can append or get discarded, and updates can be timestamped too.

**A new column upstream won't just appear.** A table's schema locks in at its first write and doesn't expand on its own. This applies to every write mode except full overwrite. A column your source starts sending that the table's never seen gets dropped, not silently added. To pick it up, reset the table: remove the Send step from both draft and live (or delete the flow), then add it back so the schema rebuilds from what's coming in now. This clears existing data, so only do it if you don't need the history.

## Link flows together

Tables pair naturally with [Artifacts](/docs/product/canvas/artifact-types) for historical reporting and dashboards. The table accumulates, the Artifact visualizes it.

<div className="docs-figure-md">
  <Frame>
    <img src="https://mintcdn.com/parabola-7119dfb0/m7zZQSYx-unTbpCh/images/integration/image-160.png?fit=max&auto=format&n=m7zZQSYx-unTbpCh&q=85&s=5c9c62cba6dc7ea22e1b843f3b4258bb" alt="Stored data populating a Parabola Table after a flow run" width="1456" height="1600" data-path="images/integration/image-160.png" />
  </Frame>
</div>

You can also connect **Send to Parabola Table** straight into another step, most commonly a [Run another Prowork flow](/docs/product/integration/parabola-flows) step, so a second flow runs against data the first just wrote.

<div className="docs-figure-md">
  <Frame>
    <img src="https://mintcdn.com/parabola-7119dfb0/m7zZQSYx-unTbpCh/images/integration/image-161.png?fit=max&auto=format&n=m7zZQSYx-unTbpCh&q=85&s=747e1e4823e70e998c99e4919bbdb3f1" alt="Send to Parabola Table connected to a Run another flow step" width="946" height="726" data-path="images/integration/image-161.png" />
  </Frame>
</div>
