> For the complete documentation index, see [llms.txt](https://v5docs.keyfax.biz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v5docs.keyfax.biz/scripts/questions/dynamic-list.md).

# Dynamic list

A list whose answers are not typed in advance but read from your own data as the conversation runs — the tenancies at an address, the open jobs on a property, the rooms in a home.

<figure><img src="/files/crh30oaIbyINCnqHGAin" alt="A dynamic list question open in the editor"><figcaption><p>A dynamic list question, reading its options from a databox</p></figcaption></figure>

## Where the options come from

A [databox](/script-data/databoxes.md) — usually a [SQL query](/script-data/sql-query-databoxes.md) or an [HTTP request](/script-data/http-request-databoxes.md) that returns several rows.

Each row becomes an option. How each option READS is worth attention: an expression containing `FieldMerge` runs once per row, so a row of columns can be turned into a single readable line rather than a bare code. See [FieldMerge](/reference/expression-reference/text-expressions/fieldmerge.md).

## What to plan for

Real data is not tidy, and the script has to cope with all three cases:

* **Several rows** — the caller picks one, as intended.
* **One row** — consider whether asking at all is helpful, or whether the script should simply proceed.
* **No rows** — the question has nothing to offer. Decide what happens instead, rather than leaving the caller at an empty list.

Test the databox on its own before you rely on it — see [Testing databoxes and expressions](/script-data/testing-databoxes-and-expressions.md).
