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

# Share a form

> Share your form via a direct link, QR code, email, or a custom domain — with options to pre-fill fields and protect access.

Every published form gets a public URL you can share anywhere. FormFlows.ai also gives you tools to customize that URL, pre-populate fields for your audience, and control when or to whom the link works.

## Get your share link

<Steps>
  <Step title="Open the Share panel">
    From the form builder or your forms list, click **Share** in the top-right toolbar. The Share panel opens with your form's public URL already selected.
  </Step>

  <Step title="Copy the link">
    Click **Copy link**. The URL follows the format:

    ```
    https://forms.formflows.ai/f/FORM_ID
    ```

    This is a permanent link — it stays the same as long as the form exists.
  </Step>

  <Step title="Publish if needed">
    If the **Copy link** button is grayed out, your form is still in draft mode. Click **Publish** to make it live before sharing.
  </Step>
</Steps>

## Custom domain (vanity URL)

Instead of a `forms.formflows.ai` URL, you can serve your forms from your own domain — for example, `forms.yourcompany.com`.

<Steps>
  <Step title="Go to workspace settings">
    Open **Settings → Custom domains** in your FormFlows.ai workspace.
  </Step>

  <Step title="Add your subdomain">
    Enter the subdomain you want to use (for example, `forms.yourcompany.com`) and click **Add domain**.
  </Step>

  <Step title="Update your DNS">
    FormFlows.ai will display a CNAME record to add to your DNS provider. The record points your subdomain to FormFlows.ai's servers. DNS propagation typically takes a few minutes, but can take up to 48 hours.

    | Type  | Name  | Value              |
    | ----- | ----- | ------------------ |
    | CNAME | forms | proxy.formflows.ai |
  </Step>

  <Step title="Verify and activate">
    Once DNS propagates, return to **Settings → Custom domains** and click **Verify**. FormFlows.ai will automatically provision an SSL certificate. Your forms are now accessible at `https://forms.yourcompany.com/f/FORM_ID`.
  </Step>
</Steps>

<Note>
  Custom domains are available on the Pro plan and above. Each workspace can have one custom domain. Individual forms inherit the workspace domain automatically — no per-form configuration is needed.
</Note>

## Pre-fill fields via URL parameters

You can pre-populate form fields by appending query parameters to the share link. This is useful when you already know information about the person filling in the form — for example, their email address from a CRM campaign.

The query parameter name must match the **field key** set in the form builder. Field keys are visible under **Field settings → Advanced → Field key**.

```
https://forms.formflows.ai/f/FORM_ID?email=user@example.com&first_name=Alex&plan=pro
```

Multiple parameters are separated by `&`. Values should be URL-encoded if they contain spaces or special characters.

<CodeGroup>
  ```javascript JavaScript theme={null}
  const baseUrl = 'https://forms.formflows.ai/f/FORM_ID';
  const params = new URLSearchParams({
    email: user.email,
    first_name: user.firstName,
    company: user.company,
  });

  const prefilledUrl = `${baseUrl}?${params.toString()}`;
  // → https://forms.formflows.ai/f/FORM_ID?email=alex%40example.com&first_name=Alex&company=Acme+Corp
  ```

  ```python Python theme={null}
  from urllib.parse import urlencode

  base_url = "https://forms.formflows.ai/f/FORM_ID"
  params = {
      "email": user["email"],
      "first_name": user["first_name"],
      "company": user["company"],
  }

  prefilled_url = f"{base_url}?{urlencode(params)}"
  ```
</CodeGroup>

<Tip>
  Append UTM parameters alongside your pre-fill parameters to track where submissions come from in your analytics tool. For example: `?utm_source=newsletter&utm_campaign=spring-launch`. FormFlows.ai stores UTM values with each submission so you can filter by campaign in the submissions view.
</Tip>

## QR code

FormFlows.ai generates a QR code for every form automatically — useful for print materials, event signage, or product packaging.

<Steps>
  <Step title="Open the Share panel">
    Click **Share** from the form builder or forms list.
  </Step>

  <Step title="Download the QR code">
    Switch to the **QR code** tab. You can download the code as a PNG or SVG file. Use SVG for print materials to ensure sharp rendering at any size.
  </Step>

  <Step title="Customize (optional)">
    Click **Customize QR** to change the foreground color and add your logo to the center of the code. A preview updates in real time.
  </Step>
</Steps>

<Note>
  The QR code points to your current share link, including any custom domain if configured. If you change the form's custom domain later, regenerate and redistribute the QR code.
</Note>

## Email sharing

You can send your form link directly from the FormFlows.ai dashboard without switching to an email client.

<Steps>
  <Step title="Open the Share panel and select Email">
    Click **Share**, then switch to the **Email** tab.
  </Step>

  <Step title="Enter recipients">
    Type one or more email addresses separated by commas, or paste a list. You can also upload a CSV file of recipients — FormFlows.ai will send each person a personalized link with their email pre-filled.
  </Step>

  <Step title="Customize the message">
    Edit the subject line and body text. The form link is inserted automatically. You can include `{{first_name}}` and `{{email}}` placeholders if you uploaded a CSV.
  </Step>

  <Step title="Send">
    Click **Send invitations**. Each recipient receives a plain-text email from `noreply@mail.formflows.ai`. Replies go to the email address configured under **Settings → Notifications**.
  </Step>
</Steps>

## Password protection

To require a password before anyone can view or submit your form:

1. Open **Form settings → Access**.
2. Toggle on **Password protection**.
3. Enter a password and click **Save**.

Visitors who follow the share link will see a password prompt before the form loads. The password is not included in the URL — share it separately with your intended audience.

## Expiring links (close date)

You can set a date and time after which submissions are no longer accepted. The form page remains visible, but visitors see a "This form is closed" message instead of the form fields.

1. Open **Form settings → Access**.
2. Toggle on **Close date**.
3. Choose a date and time (your workspace timezone applies by default).
4. Optionally, enter a custom message to display after the form closes.

<Tip>
  Use the close date feature for event registrations, limited-time surveys, and application deadlines. Combine it with a submission limit to close the form whichever condition hits first.
</Tip>

## What's next

<CardGroup cols={2}>
  <Card title="Embed a form" icon="window-restore" href="/guides/embed">
    Add your form directly to a webpage instead of sharing a standalone link.
  </Card>

  <Card title="Access control" icon="lock" href="/guides/access-control">
    Restrict submissions to signed-in users, a specific IP range, or a limited count.
  </Card>
</CardGroup>
