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

# Function columns

> Compute a column from data the table already holds. Free, instant, and previewed as you build it.

A function column transforms data you already have: joining two columns, pulling keywords out of text, scoring a list. It never calls an outside source, so it costs nothing and runs in a moment.

<Frame caption="The Tools panel, open on the Functions tab.">
  <img src="https://mintcdn.com/oneprofile/SuC1T_nk5eqIjLyd/images/tables/columns/function-columns.png?fit=max&auto=format&n=SuC1T_nk5eqIjLyd&q=85&s=f15b117dc3496e2a47cb1fcd259122cc" alt="The Tools panel docked beside a table on its Functions tab, listing HTTP API, HTTP API with JWT, Resolve hostname, Formula, Merge columns, Find keywords, Filter list, Sort list, Common values, Text similarity, Detect language, Score words and Hash value, each with a one-line description." width="600" height="700" data-path="images/tables/columns/function-columns.png" />
</Frame>

## Add a function column

<Steps>
  <Step title="Open the Functions tab">
    Click **Tools** above the grid, then the **Functions** tab. It is a flat list, not shelves.
  </Step>

  <Step title="Pick a function">
    Click **Formula** to build your own, or a named one like **Merge columns** or **Find keywords** to start from it.
  </Step>

  <Step title="Describe it, or build it by hand">
    Type what the column should compute and click **Generate**, or click **Set up manually** to assemble the steps yourself.
  </Step>

  <Step title="Check the preview">
    Each step picks a **Function** and a source column. The preview fills in as you edit, so you see real values before you commit.
  </Step>

  <Step title="Create the column">
    Click **Create**. It runs over every row straight away.
  </Step>
</Steps>

<Note>
  Function columns are free. Only enrichment and agent columns spend credits, so nothing here shows a price.
</Note>

## What you can compute

**Formula** chains steps together for anything custom. The named functions cover the common jobs.

Text and lists: **Merge columns**, **Find keywords**, **Filter list**, **Sort list**, **Common values**, **Text similarity**, **Detect language**, **Score words**.

Values and routing: **Hash value**, **URL-encode**, **Is URL valid**, **Email permutations**, **Round-robin assign**, **Weighted round-robin assign**.

**HTTP API** and **HTTP API with JWT** call your own endpoint once per row. **Resolve hostname** checks a domain answers before you spend on it.

## Good to know

<AccordionGroup>
  <Accordion title="What are the two ways to start a function column?">
    Every function opens the same editor. **Formula** starts blank; a named function starts with its own steps already in place, which you can then change.
  </Accordion>

  <Accordion title="Will regenerating overwrite my edits?">
    Once you have hand-edited the steps, asking the assistant to generate again warns you before it replaces your work.
  </Accordion>

  <Accordion title="Why was my prompt refused?">
    Ask for something a function column cannot do, such as looking a fact up on the web, and the assistant says so rather than guessing. That is a job for an [enrichment column](/tables/columns/enrichment-columns) or an [agent column](/tables/columns/agent-columns).
  </Accordion>

  <Accordion title="When does the preview run?">
    There is no preview button. The sample recomputes as you change a step, and an empty preview usually means a source column is empty rather than that the formula is wrong.
  </Accordion>

  <Accordion title="Can I create a column without running it?">
    **Create and don't run**, beside **Create**, saves the column and leaves its cells empty until you run it.
  </Accordion>

  <Accordion title="How do function errors show up?">
    A row whose inputs do not suit the function shows an error in that cell, and the rest of the column still fills. Run conditions work here too, and without the usual cost warning, because there is no cost.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Enrichment columns" icon="sparkles" href="/tables/columns/enrichment-columns">
    Pull facts from outside sources instead.
  </Card>

  <Card title="Run columns" icon="play" href="/tables/run-columns">
    Decide when a column fills its cells.
  </Card>
</CardGroup>
