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

# Mapping Fields for Actions

> Mapping the fields manipulated by the Action Button.

When you add an **Action Button** like **Add record** or **Update record** to a block, Softr needs to know which columns in your data source the button should write to. That pairing — a form field in Softr linked to a column in your table — is called a **field mapping**.

<Check>
  Softr now handles most of this for you automatically. As soon as you pick an action, every mappable field from your data source shows up pre-configured. You only need to step in when you want to customize a field, remove one, or collect a value behind the scenes (a **hidden input**).
</Check>

<Frame caption="When you add an Add record action, Softr auto-maps every eligible column from the connected table. Computed (formula) fields are skipped because they can't be written to.">
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.18.00-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=72b036c857a3514b078b972408e10600" alt="Screenshot 2026 04 24 At 3 18 00 PM" width="1549" height="1090" data-path="images/Screenshot-2026-04-24-at-3.18.00-PM.png" />
</Frame>

## How to add an action button

Open any block that supports actions — lists, tables, grids, item details — then:

<Steps>
  <Step title="Select the block">
    Click the block on the canvas to open its settings panel on the right.
  </Step>

  <Step title="Open the Actions tab">
    In the right-hand settings panel, switch to the **Actions** tab.
  </Step>

  <Step title="Add a button">
    Click **+ Add topbar button** (applies to the whole block, like "Add a new project") or **+ Add item button** (applies per row, like an Edit button on each card).
  </Step>

  <Step title="Choose the action type">
    Pick from the dropdown — options listed below.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.20.15-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=21ca919f2468e3a51680a0fbe81f851f" alt="Screenshot 2026 04 24 At 3 20 15 PM" width="1477" height="923" data-path="images/Screenshot-2026-04-24-at-3.20.15-PM.png" />
</Frame>

<CardGroup cols={2}>
  <Card title="Add record" icon="plus">
    Creates a new row in a connected table. The most common starting point — field mapping matters a lot here.
  </Card>

  <Card title="Update record" icon="pen-to-square">
    Edits an existing row. Only available as an item button. Same field-mapping UI as Add record.
  </Card>

  <Card title="Run custom workflow" icon="diagram-project">
    Triggers a Softr workflow. Useful when you need to combine values from multiple sources before writing.
  </Card>

  <Card title="Open page" icon="file">
    Navigates to another page in your app.
  </Card>

  <Card title="Open URL" icon="arrow-up-right-from-square">
    Opens an external URL in a new tab.
  </Card>

  <Card title="Scroll to" icon="arrow-down">
    Smoothly scrolls to another block on the same page.
  </Card>

  <Card title="Ask AI" icon="sparkles">
    Opens an AI chat scoped to the current record or context.
  </Card>
</CardGroup>

<Info>
  For this guide we'll focus on **Add record** and **Update record** — those are the action types where field mapping applies.
</Info>

## What auto-mapping does (and what you still control)

As soon as you pick Add record or Update record, Softr scans the connected table and creates a field entry for every writable column, with the correct **Input type** already selected (Text, Long text, Number, Dropdown, Date, Attachment, and so on).

<AccordionGroup>
  <Accordion title="Computed / formula fields are skipped" icon="ban">
    They're read-only in the data source, so they can't be written to from an action.
  </Accordion>

  <Accordion title="Lookup and linked-record fields are included" icon="link">
    They show up as dropdowns or multi-selects, depending on how the underlying table is configured.
  </Accordion>

  <Accordion title="You can remove any field you don't want users to fill in" icon="trash">
    Hover the field row and click the trash icon. Removed fields won't appear in the form.
  </Accordion>

  <Accordion title="You can re-add a field later" icon="plus">
    Click **+ Add field** at the bottom of the list. This also lets you add a field that isn't yet bound to a column — useful for hidden inputs (see below).
  </Accordion>
</AccordionGroup>

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.21.23-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=eac7b0e1561624dfe2bfa49c740f43ac" alt="Screenshot 2026 04 24 At 3 21 23 PM" width="1216" height="847" data-path="images/Screenshot-2026-04-24-at-3.21.23-PM.png" />
</Frame>

<Tip>
  The header of each field row shows the **field's label** on the left and the **column type** on the right (e.g. "Status — Dropdown"). A field that's missing its mapping will show **"Not set"** — that's the one indicator to watch for.
</Tip>

## Configuring an individual field

Click any field in the list to open its configuration popover.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.22.12-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=c88d61913c24029cca05b70ab163983f" alt="Screenshot 2026 04 24 At 3 22 12 PM" width="1261" height="1028" data-path="images/Screenshot-2026-04-24-at-3.22.12-PM.png" />
</Frame>

The popover has the following controls, top to bottom:

* **Field header** — shows the column currently mapped to this input. Click the dropdown to remap it to a different column in the same table.
* **Hidden input** *(toggle)* — when off, the field shows in the form for the end user to fill in. When on, the field is collected silently — see the [Hidden inputs](#hidden-inputs) section.
* **Input type** — usually set correctly by auto-mapping. Override it only if you want a different UI (e.g. render a Text column as an email input with validation).
* **Required** — forces the user to fill the field before the form can submit. For Add record, this corresponds to a required column in the data source; for Update record, it guards against accidental blanks.
* **Label** — the text shown above the input. Defaults to the column name.
* **Tooltip** — a small "?" next to the label with helper text on hover.
* **Placeholder** — ghost text inside an empty input.
* **Hint** — helper text shown below the input.
* **Default value** — prefills the input. For Add record, this is the value used if the user doesn't change anything. For Update record, this is overridden by the existing record value.
* **Validation** — expands to show input-type–specific rules (min/max length, regex pattern, minimum date, file size, and so on).

## Hidden inputs

A **hidden input** is a form field the end user never sees — it's submitted automatically with a value you pick. These are great for automatically saving values to a record without requiring input from the user. For example, you may want to automatically assign the Project Lead as the Logged in User, since the Logged in User is the one creating the new Project record.

<Info>
  **Change from the old UI.** Hidden fields used to live in a separate section at the bottom of the action settings. They're now a **per-field toggle**, which means any field in your form — whether Softr auto-mapped it or you added it yourself — can be turned into a hidden input with one click.
</Info>

To make a field hidden:

<Steps>
  <Step title="Open the field">
    Click the field to open its configuration popover.
  </Step>

  <Step title="Turn on Hidden input">
    Flip the **Hidden input** toggle.
  </Step>

  <Step title="Pick a value source">
    Choose what to submit from the **Value** dropdown.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.24.45-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=3204f0a726dd575b6bfbf0e7c1468f70" alt="Screenshot 2026 04 24 At 3 24 45 PM" width="1007" height="657" data-path="images/Screenshot-2026-04-24-at-3.24.45-PM.png" />
</Frame>

The Value dropdown gives you **six categories** of automatically-collected values. Each is covered below.

### Logged-in user

Pulls any field from the signed-in user's record in your users table.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.27.00-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=6f7e933cae255bbc5055c4be7405ac80" alt="Screenshot 2026 04 24 At 3 27 00 PM" width="998" height="687" data-path="images/Screenshot-2026-04-24-at-3.27.00-PM.png" />
</Frame>

The list shows **every column in your users table**, not just a few built-ins. Common picks:

* **Email** or **Name** — to stamp a submission with who created it.
* **Client company** or **Client contact of** (in Client Portal apps) — to tie a new record to the logged-in user's organization.
* **Record ID** — to link the new record to the user's row via a linked-record field.

<Note>
  **Migrating from the old UI?** You no longer need the `{LOGGED_IN_USER:'Field name'}` custom-value syntax for this. The Logged-in user submenu covers any field directly.
</Note>

### Details page record

Available on pages that have a parent record (list-detail pages, Users-scoped pages). Works the same as Logged-in user — you get a submenu of every field on the parent record.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.27.51-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=0e13655dc321a7bd5c6879b95b087d93" alt="Screenshot 2026 04 24 At 3 27 51 PM" width="1132" height="728" data-path="images/Screenshot-2026-04-24-at-3.27.51-PM.png" />
</Frame>

<Tip>
  **Clearest use case:** an Add record button on a "Project detail" page that creates a Task. Pick **Details page record → Record ID**, map it to the Task's **Project** lookup column, and every new task is automatically linked to the project the user is viewing.
</Tip>

### URL parameter

Collects a query-string parameter from the page the button is on. Enter the parameter's name.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.28.25-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=a4ed4a06902bfa4fed294c858106050d" alt="Screenshot 2026 04 24 At 3 28 25 PM" width="1056" height="657" data-path="images/Screenshot-2026-04-24-at-3.28.25-PM.png" />
</Frame>

**Example:** a job board where each page URL is `yoursite.com/job-details/senior-product-manager?recordId=rec7HcXAgKmlk8inf`. Setting the Value to URL parameter → `recordId` captures `rec7HcXAgKmlk8inf` and stamps it onto the submission.

### Page URL

Captures the full URL of the current page, including query string. Useful when the same action button lives on multiple pages and you want to know which one was used.

### Current time

Records a timestamp at the moment of submission. You can pick the format (ISO datetime, date only, Unix timestamp) from the submenu.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.30.07-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=8ff17bd1dec085c9629b3b8e4fdd31d3" alt="Screenshot 2026 04 24 At 3 30 07 PM" width="1140" height="715" data-path="images/Screenshot-2026-04-24-at-3.30.07-PM.png" />
</Frame>

<Warning>
  Because Softr stamps this on submit, it's the correct way to populate a "Created at" or "Last edited" column — don't try to compute it client-side, as client clocks can be wrong.
</Warning>

### Custom value

A free-text box where you can type any literal value — static text, a fixed tag, a number, a default value. Keep in mind that the value type should match the field type its being mapped to. For example, don't send a string (letters and symbols) to a pure number field.

<Frame>
  <img src="https://mintcdn.com/softr-2b8a27e1/ZneArwn9yHba6O6g/images/Screenshot-2026-04-24-at-3.30.37-PM.png?fit=max&auto=format&n=ZneArwn9yHba6O6g&q=85&s=6d774bb51b32db367a5c304aacefffea" alt="Screenshot 2026 04 24 At 3 30 37 PM" width="1095" height="734" data-path="images/Screenshot-2026-04-24-at-3.30.37-PM.png" />
</Frame>

Useful for:

* Tagging all submissions from a specific page (*"Source: marketing-landing"*).
* Filling a default category that the user shouldn't change.
* Pulling anything you can express as a literal value.

## Update record: what changes

Update record uses the same field-mapping UI as Add record — all the auto-mapping, per-field configuration, and hidden-input behavior work identically. The main differences are operational:

<CardGroup cols={2}>
  <Card title="Item buttons only" icon="list">
    Update record is only available as an **item button** (per row), because it needs an existing record to operate on.
  </Card>

  <Card title="Form pre-fills" icon="fill-drip">
    The form pre-fills with the current row's values. **Default value** in the field config is ignored if the record already has a value.
  </Card>

  <Card title="Hidden inputs still overwrite" icon="rotate">
    Stamp a `Last edited at` column with Current time on every update and that's exactly what happens.
  </Card>

  <Card title="Wiring is identical" icon="wrench">
    Click the block → **Actions** tab → **+ Add item button** → **Update record** → tweak fields as needed.
  </Card>
</CardGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Auto-mapping added a field I don't want my users to fill in. Can I hide it?">
    Yes — two options. If the field should be invisible but still written to with a value you control, leave it in the list and turn on **Hidden input**. If it shouldn't be touched at all on this action, hover the field row and click the trash icon to remove it.
  </Accordion>

  <Accordion title="One of my columns didn't show up in the auto-mapped list. What's going on?">
    The most common reason is that the column is a **computed / formula field** — those are read-only in the source, so Softr skips them. Other possibilities: the column has an unsupported type for the block's data source connector, or it was added to the table after the block was configured.

    Open the **Source** tab and click the refresh icon next to the Database/Table selector to re-sync the schema.
  </Accordion>

  <Accordion title="I'm using the {LOGGED_IN_USER:'Field name'} syntax in an older doc. Does it still work?">
    Yes, that syntax is still supported for backwards compatibility — you'll find it under **Custom value**. But for new work, use the **Logged-in user** submenu instead. It's type-safe, it updates if you rename the column, and it handles escaping correctly.
  </Accordion>

  <Accordion title="Do hidden inputs run Validation rules?">
    Yes. Validation applies to all fields, hidden or not — the system treats a hidden input the same as any other submission. If a hidden input's value can't satisfy a required rule or a regex pattern, the submission will fail.

    That's worth knowing when you combine hidden inputs with strict validation (e.g. a hidden `recordId` field with a regex that matches Airtable record-ID format).
  </Accordion>

  <Accordion title="Can I compute a hidden value from multiple sources (e.g. &#x22;user email + current time&#x22;)?">
    Not directly in a single field. Each hidden input collects one value from one source. For combinations, either:

    * Use a **custom workflow** action, which lets you build a payload from multiple values before writing, or
    * Rely on a **formula field** in your data source that computes the combination after insertion.
  </Accordion>
</AccordionGroup>

***

*Last updated: April 2026. If something in this doc looks wrong or out of date, please let our support team know.*
