> For the complete documentation index, see [llms.txt](https://docs.notionapps.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.notionapps.com/how-to-guides/prefill-create-forms-from-a-url.md).

# Prefill Create Forms from a URL

Share a link that opens an **Add New Item** form and fills selected fields automatically — no custom JavaScript.

This guide walks through builder configuration with screenshots from a real Create Form (`Submit Service Request`), then shows how to share and test the published link.

{% hint style="info" %}
**Scope (current release)**\
Works on **Create Form** screens only (not Update Form). Supported field types: **Text**, **Long text**, **Number**, **Toggle**, **Single-select (Dropdown)**, **Date**, **Multi-select** (including **People**), and **Relation (Page Selector)**.
{% endhint %}

***

### What you get

After you map fields to URL parameter names and publish, a link like this:

```
https://your-app.notionapps.com/submit-service-request?name=Sample&impact=Major&priority=High
```

will:

1. Open the Create Form whose screen name slugifies to `submit-service-request`
2. Prefill **Request summary** with `Sample`, **Impact** with `Major`, and **Priority** with `High`

Users can still edit any unlocked field after the form loads.

***

### Before you start

You need:

* A **Create Form** (Add Item) screen in the builder
* At least one supported field on that form (text, long text, number, toggle, single-select, date, multi-select/people, or relation)
* Permission to **Publish** the app so end users see the mapping

{% hint style="warning" %}
**Slug tip**\
The path segment comes from the screen’s **navigation / screen name** (for example, `Submit Service Request` → `submit-service-request`). Keep Create Form names unique. If two forms would share the same slug, use `?form=<screenId>` instead (see [Disambiguate with form=](#disambiguate-with-form)).
{% endhint %}

***

### Step 1 — Open the Create Form in the builder

1. Open your application in the NotionApps builder.
2. Select the Create Form screen you want to share (for example, **Submit Service Request**).
3. Confirm the right panel shows **Form (Add Item)** / Create Form behaviour settings.

![Create Form open in the builder with mobile preview](https://iili.io/Cw1nY4p.png)

![Create Form overview — fields listed in Logic and Behaviour](https://iili.io/Cw1nY4p.png)

***

### Step 2 — Map a field to a URL parameter

For each field you want to fill from the link:

1. In the **Logic** list (right panel), select the field (or click it in the preview).
2. Turn **Default Value** **On**.
3. Set **Default value source** to **From URL parameter**.
4. Enter the **URL parameter name** (for example, `name` for `?name=Sample`).
5. Optionally leave a **Static value** as a fallback when that query param is missing.
6. Optionally turn on **Disable Changes** if the prefilled value should be locked.

{% hint style="success" %}
**Naming recommendation**\
Use short, lowercase names without spaces: `name`, `impact`, `priority`, `source`. These become the keys in your shareable URL.
{% endhint %}

#### Example mappings for this form

| Form field      | Field type | URL parameter | Example in link |
| --------------- | ---------- | ------------- | --------------- |
| Request summary | Text       | `name`        | `name=Sample`   |
| Impact          | Dropdown   | `impact`      | `impact=Major`  |
| Priority        | Dropdown   | `priority`    | `priority=High` |

Select the field in the preview or Logic list:

![Select Request summary (or the matching Logic row) to edit defaults](https://iili.io/Cw1n0vt.png)

Map additional dropdown fields the same way:

![Map Impact to a URL parameter such as impact](https://iili.io/Cw1nGun.png)

![Map Priority to a URL parameter such as priority](https://iili.io/Cw1nMjs.png)

#### How values are interpreted

| Field type               | Accepted query values                                                           | If the value is invalid                    |
| ------------------------ | ------------------------------------------------------------------------------- | ------------------------------------------ |
| Text / Long text         | Any string                                                                      | Used as-is                                 |
| Number                   | A finite number (for example `42`, `3.5`)                                       | Field keeps static fallback or stays blank |
| Toggle                   | `true` / `1` / `yes` / `on` (and false equivalents) — case-insensitive          | Field keeps static fallback or stays blank |
| Single-select            | Option **label** (case-insensitive), or option index                            | Field keeps static fallback or stays blank |
| Date                     | `YYYY-MM-DD`, or ISO / `YYYY-MM-DDTHH:mm` (time used when the field shows time) | Field keeps static fallback or stays blank |
| Multi-select / People    | Comma-separated option **labels** or **values** (emails for People)             | Unmatched tokens skipped                   |
| Relation (Page Selector) | Comma-separated related **record ids**                                          | Invalid ids skipped                        |

{% hint style="info" %}
**Priority**\
If the URL contains the mapped parameter → that value wins on first load.\
If the parameter is omitted → static default (if any) is used.\
After load, user edits are not overwritten.
{% endhint %}

***

### Step 3 — Copy the form link from Behaviour

With the Create Form screen selected (not a single field):

1. Scroll the right panel to the **Behaviour** section.
2. Click **Copy form link**.
3. Paste the link somewhere temporary (notes, browser address bar).

The copied link uses your published app origin, the screen-name slug, and empty placeholders for every mapped parameter — ready for you to fill in.

![Copy form link button on Create Form Behaviour settings](https://iili.io/Cw1nc3N.png)

Example shape after copying (parameters empty until you fill them):

```
https://your-app.notionapps.com/submit-service-request?name=&impact=&priority=
```

Fill in values:

```
https://your-app.notionapps.com/submit-service-request?name=Sample&impact=Major&priority=High
```

{% hint style="warning" %}
**Publish required**\
Mappings are saved with the app. End users only see them after you **Publish**. Builder preview alone is not enough for shareable Path B links.
{% endhint %}

***

### Step 4 — Publish and test in the live app

1. Click **Publish** in the builder top bar.
2. Open the filled link in a private/incognito window (or a different browser).
3. Sign in if the app is private.
4. Confirm the Create Form opens with the expected fields filled.

![Published app: Create Form opened from the URL with fields prefilled](https://iili.io/Cw1nVZG.png)

In this example:

* Request summary → **Sample**
* Impact → **Major**
* Priority → **High**
* Other fields stay empty (or use their static defaults) because they were not in the URL

***

### URL reference

#### Path (open the form)

| Style            | Example                                                    | When to use                                     |
| ---------------- | ---------------------------------------------------------- | ----------------------------------------------- |
| Screen-name slug | `/submit-service-request?...`                              | Default; friendly shareable links               |
| Explicit form id | `/?form=<screenId>&...` or `/anything?form=<screenId>&...` | Two Create Forms would collide on the same slug |

#### Query parameters (prefill)

Only parameters you mapped in the builder are applied. These reserved keys are **never** used as field values:

* `form`
* `screenId`
* `recordId`
* `title`, `showTitle`, `selectionMode`
* Live-demo auth keys (`live_demo_email`, `live_demo_code`)
* Other navigation keys (`primary`, `referenceAutoLinkInfo`)

#### Disambiguate with `form=`

If slug matching is ambiguous or you prefer IDs:

```
https://your-app.notionapps.com/?form=64f1a2b3c4d5e6f7a8b9c0d1&name=Sample&impact=Major
```

You can also pass the slug in `form` when it uniquely matches:

```
https://your-app.notionapps.com/?form=submit-service-request&name=Sample
```

***

### End-to-end example (makers)

**Goal:** Email a vendor a link that opens “Submit Service Request” with summary and impact already set.

1. Open the **Submit Service Request** Create Form.
2. Map **Request summary** → URL parameter `name`.
3. Map **Impact** → URL parameter `impact`.
4. Click **Copy form link**, then fill values:

```
https://your-app.notionapps.com/submit-service-request?name=HVAC%20inspection&impact=Major
```

5. **Publish**.
6. Send the link. Recipients land on the Add form with those fields filled; they complete the rest and submit.

***

### Checklist

* [ ] Fields use **From URL parameter** with clear param names
* [ ] Optional static fallbacks set where useful
* [ ] **Disable Changes** set only when the value must stay locked
* [ ] Create Form screen name is unique (or you use `?form=`)
* [ ] App is **Published** after mapping
* [ ] Tested on desktop and mobile published shells
* [ ] Invalid select/toggle/number values fall back safely (spot-check once)

***

### Troubleshooting

| Symptom                             | Likely cause                                                   | What to do                                                                                                                                                                                     |
| ----------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Link opens the app but not the form | Slug does not match any Create Form, or collision              | Check screen name slug; use `?form=<screenId>`                                                                                                                                                 |
| Form opens but fields are empty     | Mapping not published, wrong param names, or reserved key used | Re-check param names; publish again; avoid reserved keys                                                                                                                                       |
| Select stays blank                  | Label in URL does not match an option                          | Use the exact option label (case-insensitive) or a valid index                                                                                                                                 |
| Private app shows login first       | Expected                                                       | User signs in, then the same URL should open and prefill                                                                                                                                       |
| Update Form / list not affected     | Prefill is Create Form only                                    | Use Create Form. To filter a **list** from `?store=`, see [Filter lists with groups and dynamic values](https://docs.notionapps.com/how-to-guides/filter-lists-with-groups-and-dynamic-values) |

***

### Related notes for makers

* Prefill counts like a normal user input for visibility / personalization rules that depend on user input.
* Works on **desktop and mobile** published apps.
* No custom code is required; do not paste query parsing into Custom JavaScript for this use case.

***

### Related

* [Organize Create Forms with Sections and an Optional Stepper](https://docs.notionapps.com/guides/organize-create-forms-with-sections-and-an-optional-stepper)
* [Filter lists with groups and dynamic values](https://docs.notionapps.com/how-to-guides/filter-lists-with-groups-and-dynamic-values) — list URL filters, not form prefill
* [20 Jul 2026 Release](https://docs.notionapps.com/release-notes/20-jul-2026-release)
* [15 Sep 2026 Release](https://docs.notionapps.com/release-notes/15-sep-2026-release)

## Annotated builder screenshots

![Annotated builder screenshot: Create Form builder](https://4233028229-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5ZqDXcVVffWUqEIZVhmn%2Fuploads%2Faal5GjFjNLqNOd5piHVF%2Fp23-1786203265-0-00-builder-hero.jpg?alt=media)

![Annotated builder screenshot: Logic / fields](https://4233028229-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5ZqDXcVVffWUqEIZVhmn%2Fuploads%2FMf7bKNLNVl2Gmlvwhrvq%2Fp23-1786203265-1-02-section-logic.jpg?alt=media)

![Annotated builder screenshot: Behaviour](https://4233028229-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5ZqDXcVVffWUqEIZVhmn%2Fuploads%2F5NBqcddg7STGfiwwbkkI%2Fp23-1786203265-2-03-section-behaviour.jpg?alt=media)

## Complete Builder Options Reference

These options live on **Form (Add Item)**. Full screen inventory: [Form (Add Item)](https://docs.notionapps.com/screens-and-components/types-of-screens/add-new-item-form).

### URL Prefill mapping (field Behaviour / field inspector)

#### Prefill from URL / Parameter name

**What it does:** Maps a query parameter to this field when the Create Form opens via link.\
**How to use it:** Open the field → set a short parameter name (for example `priority`). Publish, then share `?priority=High`.\
**Why / recommended default:** Use stable lowercase names. Prefer `?form=<screenId>` when two forms share a slug.

#### Supported field types

**What it does:** Limits which fields accept URL values (text, long text, number, toggle, single-select, date, multi-select/people, relation).\
**How to use it:** Only map supported types; unsupported fields ignore the param.\
**Why / recommended default:** Keep mappings to fields users are allowed to edit.

### Related Create Form options

#### Public access

**What it does:** Lets guests open the form without signing in.\
**How to use it:** Enable when the prefilled link is for public intake.\
**Why / recommended default:** Off unless guests must submit.

#### Success Message / Actions

**What it does:** Controls post-submit UX.\
**How to use it:** Keep success copy short; add redirect Actions only when the next screen is intentional.\
**Why / recommended default:** Simple success message; avoid surprising redirects on public forms.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.notionapps.com/how-to-guides/prefill-create-forms-from-a-url.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
