# formbase Docs — Submissions & Analytics

# Submission inbox

View, search, and manage all your form responses.

## Submission inbox

Every form has three submission views: an aggregated summary, a table of individual responses, and an analytics dashboard. Together they show you exactly how your form is performing.

<h2 id="getting-there">Getting there</h2>

<h2 id="three-views">The three views</h2>

Every form's submissions area has three tabs. Switch between them with the header buttons, or press **1**, **2**, or **3** for Summary, Submissions, and Analytics respectively (the shortcuts are ignored while you're typing in a field).

<h3 id="summary--aggregated-responses">Summary — aggregated responses</h3>

The Summary tab combines all responses into one overview. Each question gets its own card showing how many people answered, what they chose, and where they dropped off. Great for spotting patterns without reading every response. See <a href="/submissions-analytics/question-summary">Aggregated summary</a> for details.

<h3 id="submissions--individual-responses">Submissions — individual responses</h3>

The Submissions tab lists one row per response. Search, filter, sort, and click any row to see the full detail. Export as CSV or Excel, or download individual PDFs.

<h3 id="analytics--charts-and-metrics">Analytics — charts and metrics</h3>

The Analytics tab holds two blocks. The request block — a request funnel and five request metric cards — counts request rows and works on every plan. Everything below it counts visitor events, which only a Pro or Business workspace records. See <a href="/submissions-analytics/analytics-insights">Analytics &amp; insights</a> for details.

Submissions from a [test request](/requests/creating-requests) are stored but excluded from all three views, from the counts, and from exports.

---

<h2 id="submissions-detail">The Submissions tab in detail</h2>

The rest of this page covers the **Submissions** tab — the table of individual responses.

<h2 id="table-columns">Table columns</h2>

The table shows one row per submission. The first column is the row's action menu (the ⋮ button). After it come:

- **Submitted at** — when the response came in. Blank for a partial.
- **Submitter** — the respondent's name or email, or "Anonymous" when your form collects neither
- **Channel** — "Public link" or "Request", so you can tell the two apart at a glance
- **Answer columns** — one per question, with the question type's icon in the header
- **Hidden fields** and **Calculated fields** — also columns, labelled by kind in the header tooltip rather than by input type

Three more columns exist but are hidden until you switch them on in the question controls: **Submission language**, **4-digit PIN**, and **6-digit PIN**.

Raw URL query parameters (like `utm_source`) only become columns if you add a [hidden field](/building-forms/hidden-fields) with that name. UTM parameters on their own feed [analytics](/submissions-analytics/analytics-insights), but aren't saved per response.

<h3 id="row-actions">The row action menu</h3>

The ⋮ button on each row opens:

- **View submission** — the detail sheet
- **Translate submission** — see [Translate a submission with AI](#translate)
- **Download PDF** — in the language the respondent answered in
- **Open request** — only on rows a request collected; opens that request's drawer
- **Delete submission**

<h3 id="sorting">Sorting</h3>

Click any column header to sort. The default order is newest first. Click again to reverse.

<h3 id="reordering-and-hiding-questions">Reordering and hiding questions</h3>

Click the sliders icon in the toolbar to open the question controls. It has two groups, **Metadata** and **Questions**, and in both you can:

- **Drag** an entry up or down to reorder its column
- **Toggle the eye icon** to show or hide it
- Use **Show All**, **Hide All**, or **Reset** at the bottom

Your layout lives in the page URL, so you can bookmark or share a particular view.

<h2 id="searching">Searching submissions</h2>

The search bar searches across all questions and answers. Type a name, email, keyword, or any fragment — matching rows appear instantly. Works with every question type: short text, long text, choice labels, emails, URLs, and more.

<h2 id="filtering">Filtering</h2>

<h3 id="status-filter">Status filter</h3>

Use the status filter to narrow results. Each option carries its count:

- **Completed** — only fully submitted responses. The default, and the only option on Free.
- **All** — every submission, regardless of status. Pro and Business.
- **Partial** — only unfinished responses. Pro and Business. See [Partial submissions](/submissions-analytics/partial-submissions).

<h3 id="share-link-filter">Share link filter</h3>

When your form has two or more share links, a link filter appears. It counts both active and revoked links, since a revoked link keeps the responses it already collected. Tick any combination of links; tick "All Links" to go back to everything. See [Share link analytics](/submissions-analytics/share-link-analytics) for more.

<h3 id="pending-requests">Pending requests</h3>

When the form has pending requests, the toolbar shows a muted "N pending requests" link. It opens the workspace Requests page filtered to this form. See <a href="/requests/managing-requests">Managing requests</a>.

<h2 id="viewing">Viewing a submission</h2>

Choose **View submission** from a row's action menu to open the full response in a side sheet, with every answer in form order.

<h2 id="translate">Translate a submission with AI</h2>

<p>
  Open a row's action menu and choose <strong>Translate submission</strong>. formbase translates prose answers into your workspace
  notification email language; when that setting is empty, it uses your dashboard language. The result appears in both the table and the
  submission detail sheet.
</p>

<p>
  After translation, the same action toggles between <strong>Show original</strong> and <strong>Show translation</strong>. Original answers
  remain unchanged and exports continue to use submitted values.
</p>

<h3 id="translation-scope">What gets translated</h3>

<ul>
  <li>Text, Long text, and selected option labels</li>
  <li>Picture-choice labels and text inside repeating-group instances</li>
  <li>Values that are already in the target language remain unchanged</li>
</ul>

<p>
  Email addresses, URLs, phone numbers, numbers, dates, times, files, signatures, ratings, scale values, and payments are not translated.
  Names, codes, product names, and similar values are preserved when they are not prose.
</p>

> ℹ️ **Translation uses AI credits**
> <p>
>     Submission translation uses Claude Haiku and deducts credits from the same personal or shared workspace balance as AI chat. A cached
>     translation is reused when source answers and target language have not changed. If no translatable text exists—or submission language
>     already matches target—no translation is generated.
>   </p>

<p>
  To change the target language, update <strong>Workspace settings → Notification email language</strong>. Stored translations are
  target-specific; translating after a language change creates or loads that language's version.
</p>

<h2 id="schedule-appointments">Schedule appointments in the inbox</h2>

<p>
  Confirmed Cal.com bookings appear under their Schedule appointment question. Table cells and detail views show event, date/time, attendee,
  and meeting details alongside ordinary answers. See <a href="/integrations/cal-com">Cal.com scheduling</a>.
</p>

<h2 id="repeating-groups">Repeating groups in the inbox</h2>

A <a href="/building-forms/repeating-groups">repeating group</a> lets a respondent add as many entries as they need — extra guests, line items, team members. Each entry holds the same member fields. The inbox keeps these tidy in both the table and the detail view.

In the table, a repeating group is a single column. It shows a count chip with the number of entries plus an open control — no raw values inline. Click the open control to see the entries in the submission detail.

When you open a submission, the group appears as its own section with a header and live entry count. Below it sits one numbered card per entry (1, 2, 3 …). Each card lists its member field → value pairs, and blank answers show an em dash "—". Long lists paginate so a group with many entries stays readable.

For the combined-across-responses view, the <a href="/submissions-analytics/question-summary">aggregated summary</a> shows a repeating group as a single card with a mini block for each member field.

<h2 id="pdf">Downloading a PDF</h2>

Choose **Download PDF** from a row's action menu to get a formatted, printable document of that response. Partials have no PDF — the menu item stays disabled until the respondent submits. See <a href="/submissions-analytics/exports">Exporting submissions</a> for all export options.

<h2 id="deleting">Deleting submissions</h2>

Choose **Delete submission** from a row's action menu and confirm to permanently remove that submission.

> ⚠️ **Deletion is permanent**
> <p>
>     Once deleted, formbase removes that submission and all its associated data (files, signatures, payment details) forever. Export first if
>     you need a record.
>   </p>

<h2 id="bulk-export">Bulk export</h2>

The download button above the table offers **Download as CSV** and **Download as Excel**, and exports whatever your current filters leave visible. See <a href="/submissions-analytics/exports">Exporting submissions</a> for the format differences.

<h2 id="real-time">Real-time updates</h2>

New submissions appear automatically — no need to refresh. Need the numbers to hold still while you read them? Click the **Live data** toggle in the toolbar to pause, and click again to resume.

<h2 id="pagination">Pagination</h2>

The table loads 50 rows at a time and pages through them with the controls at the bottom.

Searching or sorting switches the table to a single scrolling list of whatever is loaded, with a line reading "Showing X of Y loaded · Z total" and a **Load all** button that pulls the rest in. The button is disabled while live data is paused.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Aggregated summary](/submissions-analytics/question-summary) — All responses combined — one card per question
  - [Analytics & insights](/submissions-analytics/analytics-insights) — Charts, conversion rates, and traffic data
  - [Exporting submissions](/submissions-analytics/exports) — Bulk CSV/XLSX and per-submission PDF
  - [Partial submissions](/submissions-analytics/partial-submissions) — Recover responses that never finished
  - [Repeating groups](/building-forms/repeating-groups) — Let respondents add as many entries as they need
  - [AI credits](/ai/ai-credits-usage) — Understand submission translation usage
</div>


# Aggregated summary

Per-question breakdowns with counts, charts, and drop-off rates.

## Aggregated summary

Instead of reading submissions one by one, the Summary tab combines everything into a single overview. Each question gets its own card showing how many people answered, what they chose, and where they dropped off.

<h2 id="what-is-summary">What is the Summary tab?</h2>

The **Summary** tab is one of three views on the <a href="/submissions-analytics/submission-inbox">Submissions page</a> (alongside Submissions and <a href="/submissions-analytics/analytics-insights">Analytics</a>). The Submissions tab shows individual responses row by row. The Summary tab aggregates everything into a bird's-eye view of how people answered each question.

Open your form's **Submissions** page and click **Summary**. formbase shows one card per question with the metrics that matter most for that question type.

<h2 id="what-each-card-shows">What each card shows</h2>

Every question card includes:

> ℹ️ **Viewed and drop-off need a paid plan**
> <p>
>     formbase only records which questions a respondent reached while the workspace owner is on Pro or Business. On Free nothing is recorded,
>     so Viewed and drop-off stay at zero however many responses arrive. Response counts and answer breakdowns work on every plan.
>   </p>

<h2 id="visualizations">Visualizations by question type</h2>

formbase picks the chart style from the question type:

Where a second view exists, a toggle sits in the card's top-right corner.

A card lists at most the 50 most recent responses; if there are more, the list view offers to load the rest.

<h2 id="repeating-groups">Repeating groups</h2>

A <a href="/building-forms/repeating-groups">repeating group</a> lets respondents add as many entries as they need (for example, a guest list with a Name and Age for each person). On the Summary tab it appears as a single card, not one card per member field.

The repeating-group card shows:

- The **group label**.
- An **entry count** — the total number of entries people added across all submissions.
- A **submission count** — how many submissions included this group.
- A **mini block for each member field**, in the same document order they appear in the form.

What the card does not show:

- **No per-entry breakdown.** To see each entry's values, open a single response on the <a href="/submissions-analytics/submission-inbox">Submissions tab</a>, where the group shows one numbered card per entry.
- **No engagement stats.** Repeating groups get neither the Viewed nor the drop-off numbers a regular question card shows.

<h2 id="filtering">Filtering and searching</h2>

Narrow down what you see:

- **Search** — filter cards by question title.
- **Status filter** — completed only (the default), all, or partial only. All and Partial need Pro or Business.
- **Share link filter** — tick one or more share links (appears when you have two or more).
- **Live data toggle** — pause live updates to freeze the numbers while you review, then resume.

<h2 id="reordering">Reordering and hiding questions</h2>

Click the sliders icon in the toolbar to open the question controls:

- **Hide questions** — click the eye icon to remove a question from view. It's only hidden, not deleted.
- **Reorder** — drag questions up or down to change the display order.
- **Reset** — return to the default layout.

formbase stores your layout in the page URL, so you can bookmark or share a specific view.

<h2 id="spotting-friction">Spotting friction</h2>

A question with a high drop-off percentage is a friction point. Common causes:

- A required field that takes too long to answer
- Confusing wording or unclear instructions
- The wrong question type (for example, free text where a multiple-choice would be faster)
- An unexpected request (asking for a phone number in what seems like a quick survey)
- Too many options, making it hard to choose

Look at the card before the high-dropoff question too — sometimes frustration builds over a sequence of questions.

<h2 id="using-ai">Using AI to improve questions</h2>

If a question is underperforming, open the AI chat and share what you see (for example, "this question has 40% drop-off"). The AI can suggest clearer wording, a different question type, or a way to break the question into smaller parts.

> 💡 **Iterate on data**
> <p>
>     The Summary tab is your feedback loop for form design. After publishing a change, watch the drop-off numbers over the next batch of
>     responses. Fix the worst-performing question first, republish, and measure again.
>   </p>

<h2 id="large-forms">Large forms</h2>

The summary aggregates the 5,000 most recent submissions. Past that, a notice appears at the top of the tab: "Aggregates reflect the most recent submissions only — older ones weren't included in this summary." Export if you need every response counted.

<h2 id="exporting">Exporting summary data</h2>

Export the summary as CSV or Excel from the download button in the toolbar. The export has one row per option, value, or response, carrying the question, its type, the response count, the viewed count, and the drop-off count. See <a href="/submissions-analytics/exports#summary-export">Exporting submissions</a>.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Analytics & insights](/submissions-analytics/analytics-insights) — Views, completions, bounce rate, and more
  - [Completion funnel](/submissions-analytics/completion-funnel) — End-to-end drop-off, step by step
  - [Partial submissions](/submissions-analytics/partial-submissions) — Recover leads from abandoned forms
  - [Repeating groups](/building-forms/repeating-groups) — Let respondents add as many entries as they need
</div>


# Translating a submission

Read an answer written in a language you do not speak, translated in place with AI credits.

## Translating a submission

A multilingual form collects answers in the respondent's language. Translate a response into yours without leaving the submissions table.

<h2 id="why">Why you would</h2>

<p>
  A <a href="/building-forms/translating-form-content">multilingual form</a> lets each respondent answer in their own language, which is the
  point — but it means the free-text answers arrive in whatever language they wrote. Translating a submission renders those answers in your
  language so you can actually read the response.
</p>

<h2 id="how">Translating one</h2>

<p>
  In the submissions table, open the <strong>Actions</strong> menu on a row and choose <strong>Translate submission</strong>. While it runs
  the row shows <strong>Translating submission</strong>; when it finishes you get <strong>Submission translated</strong>.
</p>

<p>
  After that the row carries a toggle: <strong>Show original</strong> and <strong>Show translation</strong>. The original answer is never
  overwritten — the translation is stored alongside it, and you can switch back at any time.
</p>

<h2 id="target-language">Which language it translates into</h2>

<p>
  You are not asked to pick one. formbase translates into your workspace's notification language, and falls back to the language you are
  using formbase in when that is not set. Change the workspace notification language to change the target.
</p>

<h2 id="what-gets-translated">What gets translated</h2>

<ul>
  <li>
    <strong>Text answers only.</strong> Written answers are translated. Values with no language in them are left exactly as they are: dates,
    times, numbers, ratings, linear scales, email addresses, phone numbers, website URLs, scheduled appointments, uploaded files, signatures
    and payments.
  </li>
  <li>
    <strong>Answers, not questions.</strong> Question titles come from the form, which already has its own translations.
  </li>
  <li>
    A submission with no text answers reports <strong>No text answers to translate</strong> and spends nothing.
  </li>
  <li>
    A submission already in your target language reports <strong>Submission is already in the target language</strong> and spends nothing.
  </li>
</ul>

<h2 id="credits">What it costs</h2>

<p>
  Translation runs on <a href="/ai/ai-credits-usage">AI credits</a>, using the fast, inexpensive Haiku model. Your workspace needs a credit
  balance above zero; with none, formbase declines with <em>Not enough AI credits to translate this submission</em> rather than translating
  and billing you anyway.
</p>

> 💡 **Translating twice is free**
> <p>
>     A translation is cached against the exact content it was made from. Translating the same submission again returns the stored translation
>     and spends nothing. It is only re-translated — and only then charged again — if the submission itself changes, for instance when a
>     respondent <a href="/submissions-analytics/edit-after-submit">edits their answers</a> afterwards.
>   </p>

<h2 id="lifecycle">How long a translation lasts</h2>

<p>
  A translation belongs to its submission. Deleting the submission deletes its translation, and so does deleting the form. Nothing extra is
  kept behind, and <a href="/submissions-analytics/submission-retention">retention</a> applies to translations exactly as it does to the
  answers they came from.
</p>

<h2 id="next-steps">Next steps</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Submission inbox](/submissions-analytics/submission-inbox) — Read and manage responses
  - [AI credits & usage](/ai/ai-credits-usage) — What each AI action costs
  - [Translating form content](/building-forms/translating-form-content) — Offer the form in several languages
  - [Exports](/submissions-analytics/exports) — Download responses as CSV or Excel
</div>


# Edit after submit

Let respondents return and update their answers after submitting.

## Edit after submit

Allow respondents to go back and change their answers after they have submitted the form. Useful for applications, registrations, and any form where details might change.

<h2 id="enabling">Enabling</h2>

<h2 id="how-it-works">How it works</h2>

When you enable edit after submit:

- After submitting, respondents see an edit button on the confirmation screen
- Clicking it re-opens the form pre-filled with their previous answers
- They can change any field and re-submit
- The updated submission replaces the original in your inbox

The button is tied to the respondent's browser: it needs the access key their browser kept from the original fill. From another device, there is no way back in.

<h2 id="limitations">Limitations</h2>

- **Public link only.** A completed request is final. A correction to a request is a new request, and the edit button never appears on a request link.
- **Maximum edits** — between 1 and 3, defaulting to 1. There is no unlimited setting. Once the cap is reached the edit button stops appearing.
- **Payment, Signature, and Schedule appointment questions** — a form with any of these does not support editing after submit, because the answer is tied to a completed charge, a legal mark, or an external booking. Publishing flags it and switches the setting off for you. The lock is judged from the version the respondent actually submitted, so removing the question later does not unlock older submissions.
- **Verified email answers (Business)** — if an email question has [respondent email verification](/building-forms/email-verification) turned on, verified answers are locked and can't be changed while editing.
- **Redirect URL** — a redirect sends respondents away after submitting, so they never see the confirmation screen or its edit button.
- **Form changes after submission** — a respondent who returns sees the latest published version, not the one they answered. formbase pre-fills the answers whose fields still exist; new questions appear empty and removed ones are gone. No data is lost: every submission stays tied to the version it was made against.

<h2 id="use-cases">Use cases</h2>

- **Event registration** — attendees update dietary preferences or contact info as the event date approaches
- **Job applications** — candidates fix a typo or upload a revised resume before the deadline
- **Order forms** — buyers adjust quantities or shipping details before processing
- **Surveys** — respondents revise answers if they submitted too early by mistake

<h2 id="next-steps">Next steps</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Submission inbox](/submissions-analytics/submission-inbox) — See edited responses appear in your inbox
  - [Respondent notifications](/submissions-analytics/respondent-notifications) — Send confirmation emails to respondents
</div>


# Analytics & insights

Real-time metrics, charts, and conversion data for every form.

> ✅ **Pro feature** — included in the Pro plan.


## Analytics & insights

The Analytics tab is a real-time dashboard of form performance — a request block on every plan, and views, completions, device breakdowns and traffic sources on Pro and Business.

<h2 id="opening-analytics">Opening analytics</h2>

> ℹ️ **Visitor analytics require a Pro or Business plan**
> <p>
>     Visitor events are only recorded while the workspace owner is on Pro or Business — on Free, formbase records no visits at all, and the
>     Viewed and drop-off numbers in the <a href="/submissions-analytics/question-summary">question summary</a> stay at zero too. When you
>     upgrade, recording starts right away and the dashboard fills from that day forward; nothing is backfilled.
>   </p>
>   <p>
>     The <a href="#requests-block">request block</a> is the exception. It counts request rows rather than visitor events, so it works on
>     every plan.
>   </p>

<h2 id="requests-block">The request block</h2>

When the form has requests in the date range, a **Requests** section sits at the top of the tab, headed "Requests created in range · all devices". It counts the request rows themselves, so its numbers match the ones the Requests page pages through, and the Device filter does not reach it.

Five metric cards:

Below them, the **Request Funnel** — Created, Opened, Started, Completed. Sending an invitation is not a funnel stage, because a request can equally be handed over as a bare link.

The block hides itself on the Public link channel, and on the Requests channel with no requests in range it says so.

<h2 id="overview-metrics">Overview metrics</h2>

Seven metric cards head the event half of the dashboard. Together they tell the story from first view to completed submission.

A view and an engagement are counted once per visitor per session, so a refresh does not inflate them. A visitor is identified by an id kept in their browser, so the same person on two devices counts twice. Previews of an embed or popup are never counted.

<h2 id="charts">Charts</h2>

Below the metric cards are seven charts, each showing a different angle on your form's performance.

<h3 id="activity-over-time">Activity Over Time</h3>

A line chart with three series — Views, Engaged, and Submissions — plotted over the selected date range. Use it to spot trends, identify spikes from campaigns, or see where engagement drops off before submission.

<h3 id="device-breakdown">Device Breakdown</h3>

A donut chart splitting traffic into desktop, mobile, and tablet. If mobile is a large share but completion is low, your form may need layout tweaks for smaller screens.

<h3 id="location-breakdown">Location Breakdown</h3>

A chart of visitors by country. The country is guessed from the visitor's browser time zone, falling back to the edge network's own country header — good enough for a regional picture, not for anything precise.

<h3 id="traffic-sources">Traffic Sources</h3>

A bar chart showing where visitors arrive from — direct links, social media, search engines, email campaigns, and more. Click a category to drill down and see which specific platforms, campaigns, or referrer domains drove traffic. Cross-reference with your share links to find your best channel.

formbase classifies each visit into one of five categories based on UTM parameters (checked first) or the referrer URL (fallback). See [How traffic sources are classified](#traffic-source-classification) below for the full rules.

<h3 id="browser-breakdown">Browser Breakdown</h3>

A ring chart of browser usage (Chrome, Safari, Firefox, Edge, etc.). Helpful if you notice lower completion rates from a specific browser.

<h3 id="completion-funnel">Completion Funnel</h3>

A three-stage funnel: **Viewed, Engaged, Completed**. The drop between each stage tells you where you are losing people. See the dedicated [Completion funnel](/submissions-analytics/completion-funnel) page for tips on reading and improving each stage.

<h3 id="peak-activity-hours">Peak Activity Hours</h3>

A 24-hour bar chart showing when submissions happen throughout the day. Schedule campaigns or set form availability based on when your audience is most active.

<h2 id="filtering">Filtering your data</h2>

Up to four filters sit at the top of the Analytics tab.

<h3 id="channel">Channel</h3>

**Channel** decides which of the form's two audiences you are looking at:

- **All channels** — the default. Both the request block and the event widgets.
- **Public link** — share-link traffic only. The request block disappears.
- **Requests** — request traffic only. The share link filter disappears, since requests have no share link.

<h3 id="date-range">Date range</h3>

Choose from preset ranges — **Last 7 days**, **Last 30 days**, **Last 90 days**, or **All time**. When you drill into a specific window from a chart, the filter shows that custom range instead of a preset. Date range reaches both halves of the tab; for the request block it selects the requests _created_ in the range.

<h3 id="device-type">Device Type</h3>

Narrow the event widgets to **Desktop**, **Mobile**, or **Tablet**. Device type is read from the browser's user agent, and the filter does not reach the request block.

<h3 id="share-link">Share Link</h3>

Appears when your form has two or more share links, counting both active and revoked links (a revoked link keeps its past responses, so you can still filter by it). The filter uses checkboxes, so you can pick any combination:

- **All Links** — everything the form collected, including traffic no link could be attributed to. The default.
- **One link** — its metrics in isolation.
- **Several links** — the selected links combined.

> 💡 **Combine filters**
> <p>
>     Filters stack. For example, pick "Last 7 days" + "Mobile" + a specific share link to see how your latest social campaign performed on
>     phones.
>   </p>

<h2 id="comparing-share-links">Comparing share links</h2>

When your form has multiple share links, you can combine any number of them into a single aggregated view. Check the links you want in the share link filter and all metrics and charts update to reflect only traffic from those selected links.

To compare channels, check one set of links, note the numbers, then switch to a different set. Or check a single link at a time to see each channel in isolation. See [Share link analytics](/submissions-analytics/share-link-analytics) for the full workflow.

<h2 id="live-data">Live data</h2>

Analytics update in real time. A green pulsing dot and the **Live data** label show that numbers refresh as new responses arrive.

Need a stable snapshot (for a presentation, say)? Click the toggle to pause. The label switches to **Paused**. Click again to resume.

<h2 id="truncation">When the numbers are capped</h2>

A single view aggregates at most 10,000 events. Past that a notice appears — "Showing aggregates from the most recent 10,000 events" — and asks you to narrow the date range or filter by share link. With a share-link filter on, the wording changes to say older events for that link weren't scanned.

The request block has its own cap and will say "Showing the first N requests in this range" when it applies.

<h2 id="data-history">How long analytics data is kept</h2>

Analytics events are kept for **365 days**, then deleted automatically — the dashboard always covers your last 12 months. Letting a subscription lapse does not shorten that clock: recording stops, but the history you already have ages out normally.

Submissions themselves are never affected. They stay until you delete them or a [retention rule](/submissions-analytics/submission-retention) you set removes them. Want a permanent record of the answers? [Export your submissions](/submissions-analytics/exports) — exports include every response regardless of analytics history.

<h2 id="common-use-cases">Common use cases</h2>

<h3 id="measuring-a-campaign">Measuring a campaign</h3>

Launch a campaign with a dedicated share link, wait a few days, then filter analytics to that link. Compare completion rate and average time against your baseline.

<h3 id="identifying-mobile-issues">Identifying mobile issues</h3>

Filter by **Mobile** and check completion rate versus desktop. A big gap suggests layout or input issues on small screens. Review your form on a phone and shorten long pages or simplify complex inputs.

<h3 id="finding-peak-submission-hours">Finding peak submission hours</h3>

Open the Peak Activity Hours chart to see when your audience is most active. Schedule reminder emails or social posts to coincide with those windows.

<h3 id="comparing-share-link-performance">Comparing share link performance</h3>

Use the share link filter to view each channel's metrics independently. Double down on what works and retire underperforming links. See [Share link analytics](/submissions-analytics/share-link-analytics) for more.

<h2 id="traffic-source-classification">How traffic sources are classified</h2>

formbase categorizes every share-link visit into one of five buckets — Direct, Email, Social, Search, Referral. Classification is case-insensitive: all matching happens in lowercase. A visit through a request link is stamped as coming from a request instead, whatever its URL.

<h3 id="priority-1-utm-parameters">Priority 1: UTM parameters</h3>

When a share link URL includes `utm_medium` or `utm_source`, formbase uses those values first:

Social keywords: `facebook`, `instagram`, `linkedin`, `tiktok`, `twitter`, `x`, `threads`. A keyword matches when it appears anywhere in the value, so `x` matches any `utm_source` containing an x — name your sources explicitly if that matters.

Search keywords: `google`, `bing`, `duckduckgo`, `yahoo`, `baidu`, `yandex`.

`utm_campaign` is stored and visible in the drill-down but does not affect which category a visit falls into.

These UTM values power analytics only. They aren't saved on individual responses, so they don't appear in the Submissions table. To capture one per submission, add a [hidden field](/building-forms/hidden-fields) with that parameter name (for example `utm_source`).

<h3 id="priority-2-referrer-url">Priority 2: Referrer URL</h3>

When no UTM parameters are present, formbase checks the browser's referrer:

Domain matching uses substring checks — `facebook.com` matches `m.facebook.com`, `l.facebook.com`, and so on.

> 💡 **Use UTM parameters for precise tracking**
> <p>
>     Append UTM parameters to your share link URL for reliable classification. Without them, formbase falls back to the browser referrer,
>     which can be stripped by some platforms.
>   </p>

```
https://forms.yoursite.com/feedback?utm_source=facebook&utm_medium=social&utm_campaign=may-launch
```

<h2 id="deleting-analytics-data">Deleting analytics data</h2>

To erase all analytics for a form, open **Form settings → Danger Zone** and click **Delete** next to **Delete analytics data**. This cannot be undone — new events start accumulating from scratch.

The Danger Zone also has **Delete all submissions**, which erases every response without touching analytics, and **Delete form**, which moves the form to trash. The two delete actions only become available once the form has been published at least once.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Completion funnel](/submissions-analytics/completion-funnel) — See where respondents drop off at each stage
  - [Partial submissions](/submissions-analytics/partial-submissions) — Recover leads from abandoned forms
  - [Share link analytics](/submissions-analytics/share-link-analytics) — Compare distribution channel performance
  - [Exporting submissions](/submissions-analytics/exports) — Download as CSV, Excel, or PDF
</div>


# Exporting submissions

Download responses as CSV, Excel, or PDF — bulk or per-submission.

## Exporting submissions

Export responses for offline analysis, archival, or sharing with your team.

<h2 id="where">Where to export from</h2>

The download button works on the **Summary** and **Submissions** tabs. It is disabled on **Analytics** — switch back to Summary or Submissions to export.

<h2 id="formats">Formats</h2>

- **CSV** — best for spreadsheets and lightweight imports into other tools.
- **Excel (XLSX)** — preserves data types and handles large forms cleanly.
- **PDF (per submission)** — a formatted, printable copy of one response, including images and signatures.

<h2 id="bulk-export">Bulk export</h2>

Apply whatever filters you want (status, share link, search), then use the download button and pick CSV or Excel. The file downloads to your computer. Submissions from a test request are never included.

<h2 id="per-submission-pdf">Per-submission PDF</h2>

Choose **Download PDF** from a row's action menu. The PDF is in the language the respondent answered in. The first download prepares it, which takes a few seconds; after that it downloads at once. Partials have no PDF.

If your storage has no room to keep the PDF, each download prepares a fresh one, up to 20 a day per workspace.

<h3 id="pdf-contents">What the PDF contains</h3>

A PDF is the form itself, rendered with this respondent's answers, so it includes:

- **The form cover and logo**, as they were when the respondent submitted
- **Every block up to the thank-you page**, in form order, with the answers filled in
- **Hidden and calculated field values**, wherever the form shows them
- **Images and signatures**, embedded in the document
- **Schedule appointment details** — event, date/time, attendee, and meeting location
- **A closing line** with "Submitted at" and, unless you've turned branding off, the formbase badge

Metadata such as the [reference PINs](/building-forms/answer-piping#metadata-variables) appears where your form mentions it, not as a separate block.

<h3 id="pdf-snapshot">PDFs use a snapshot of your form</h3>

formbase freezes a snapshot of your published form every time someone submits. The PDF always shows that snapshot — not the current version of your form.

This means:

- **Editing your form after someone submits does not change their PDF.** The PDF shows the form exactly as the respondent saw it.
- **Downloading a PDF weeks later produces the same document** as if you had downloaded it right after submission.
- **Emailed PDFs and downloaded PDFs show the same thing.** formbase renders both from the same frozen snapshot, in the respondent's language. When formbase keeps a PDF with the submission — because the form has a Signature question or an integration sends its link — the download hands you that stored file.

<h3 id="pdf-branding">Branding on PDFs</h3>

The branding setting in **Form settings → General** controls whether the formbase badge appears at the end of the PDF. formbase freezes it at submission time, so toggling it later only affects future submissions. Turning branding off requires a Pro or Business plan.

<h3 id="pdf-email-attachment">PDF as an email attachment</h3>

You can attach a PDF to both the self notification and the respondent confirmation. Turn on **Attach submission PDF** in **Form settings → E-mail Notifications** under either email. formbase then renders the PDF right after the respondent submits and attaches it to the outgoing message. If the PDF cannot be rendered within 15 minutes, the email goes out without it. Attaching the PDF requires a Pro or Business plan; downloading it from the submission works on every plan.

See <a href="/submissions-analytics/self-notifications">Self notifications</a> and <a href="/submissions-analytics/respondent-notifications">Respondent notifications</a> for setup details.

<h2 id="whats-included">What's included by format</h2>

CSV and Excel export exactly the columns the table is showing, in the order you put them in — so hiding a question in the question controls also drops it from the file. Translating a submission never changes an export: exports always carry the submitted values.

<h2 id="repeating-groups">Repeating-group data in exports</h2>

A <a href="/building-forms/repeating-groups">repeating group</a> lets respondents add as many entries as they need, so the number of answers varies per submission. CSV and Excel stay one row per submission by giving the whole group **one column**.

That cell lists every entry as `Field: value` pairs, entries separated by a pipe. A "Guests" group with Full name and Age, filled in three times, reads:

```
Full name: Jane Appleseed, Age: 34 | Full name: Marcus Lee, Age: 29 | Full name: Priya Shah, Age: 41
```

A member the respondent left blank shows `-`, and a submission where nobody added an entry shows `-` for the whole group.

If you need one row per entry instead, export from the **Summary** tab: its group rows carry the group name, the entry count, the submission count, and one row per member field value.

<h2 id="summary-export">Summary export</h2>

Exporting from the **Summary** tab gives you per-question totals and breakdowns instead of individual responses — one row per option, value, or response, each carrying the question, its type, the response count, the viewed count, and the drop-off count. Choice questions add Option, Count, and Percentage; Rating and Linear scale add an average row; Ranking adds average rank and first-place counts; Payment adds a total per currency plus one row per transaction with its receipt link.

<h2 id="filtered-exports">Filtered exports</h2>

Exports respect whatever filters you have active. If you've filtered by status, share link, or search term, the exported file contains only matching submissions.

> 💡 **Export partials for follow-up**
> <p>
>     Set the status filter to <strong>Partial</strong> before exporting to get a list of unfinished responses you can follow up on. Signature
>     answers stay blank on those rows until the respondent submits.
>   </p>

<h2 id="automating">Automating exports</h2>

formbase does not offer scheduled exports. For real-time delivery to a spreadsheet, connect <a href="/integrations/google-sheets">Google Sheets</a> or <a href="/integrations/airtable">Airtable</a>. New submissions sync automatically.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Partial submissions](/submissions-analytics/partial-submissions) — Recover responses that never finished
  - [Google Sheets integration](/integrations/google-sheets) — Auto-sync submissions to a spreadsheet
  - [Airtable integration](/integrations/airtable) — Push responses for flexible reporting
  - [Repeating groups](/building-forms/repeating-groups) — Let respondents add as many entries as they need
</div>


# Partial submissions

Recover leads from responses that started but never finished.

> ✅ **Pro feature** — included in the Pro plan.


## Partial submissions

When someone answers some questions but never hits submit, formbase saves what they entered as a partial submission. Available on Pro and Business plans, it helps you understand drop-off and follow up with leads.

> ℹ️ **Pro feature**
> <p>Partial submissions need a Pro or Business plan. On Free, formbase neither saves a draft on the server nor shows the filter.</p>

<h2 id="when-captured">When a partial is captured</h2>

formbase autosaves a partial about 1.5 seconds after the respondent's last edit, then again after each later pause, keeping whatever they have answered so far.

If someone opens your form but never touches a field, formbase creates no partial.

A [request](/requests/overview) saves a draft the same way, so a recipient who starts and walks away leaves a partial too. The Submissions table's Channel column tells the two apart.

<h2 id="viewing-partials">Viewing partials</h2>

Use the status filter at the top of the Submissions tab to switch between:

- **Completed** — only fully submitted responses. The default.
- **All** — every submission, regardless of status
- **Partial** — only unfinished responses

Each option carries its count. The filter also applies when you export, so you can download partials on their own for outreach.

<h2 id="what-gets-saved">What gets saved</h2>

- Every answer entered up to the last autosave, including file uploads and signatures
- The share link or request it came through, and the last save time

A partial's **Submitted at** cell is empty, and it has no PDF — the download stays disabled until the respondent submits.

Signatures are saved but never shown before submission: the inbox marks the cell **Hidden until submitted**, and exported partial rows leave the signature blank. In the Summary tab, File upload and Signature cards show only their header stats in any case.

<h2 id="use-cases">Use cases</h2>

- **Drop-off analysis** — find which page or question makes people leave. Often reveals confusing wording, sensitive questions, or a form that feels too long.
- **Lead recovery** — if a partial includes an email address, let the [reminder schedule](/submissions-analytics/respondent-notifications#abandoned-reminder) chase it automatically.
- **A/B testing** — compare partial-to-completion rates between form variants. The AI chat can help generate alternatives to test.
- **Content optimization** — use partial data alongside the Analytics tab to decide which questions to reorder, simplify, or remove.

<h2 id="partials-in-summary-analytics">Partials in Summary and Analytics</h2>

Both the **Summary** and **Analytics** tabs can be filtered to show partial-only data — answer breakdowns for people who dropped off, without mixing in completed responses.

<h2 id="privacy-retention">Privacy and retention</h2>

formbase deletes partial submissions — and their uploaded files — 30 days after they were last saved. That window is a per-form setting, separate from the retention you set for completed submissions. See [Submission retention](/submissions-analytics/submission-retention).

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Self notifications](/submissions-analytics/self-notifications) — Get alerted when submissions arrive
  - [Respondent notifications](/submissions-analytics/respondent-notifications) — Re-engage respondents who didn't finish
  - [Share link analytics](/submissions-analytics/share-link-analytics) — Compare channel performance
</div>


# Self notifications

Get an email every time someone submits your form.

## Self notifications

Email yourself or your team whenever someone submits your form. Customize the subject and body, and optionally attach a PDF of the response.

<h2 id="overview">How it works</h2>

Self notifications alert you every time a submission comes in. Turn on **Notify on new submission** in **Form settings → E-mail Notifications**.

What each plan gets:

- **Free and up** — the notification to the workspace owner's address, with a link to the submission.
- **Pro and Business** — extra recipients, the submission PDF attached, a custom subject and body with piped answers, and control over the "View Submission" button.

For the full setup — recipients, custom templates, template variables, and custom email domains — see <a href="/building-forms/form-settings#self-notification">Form settings → Self notification</a>.

> 💡 **Pair with integrations**
> <p>
>     For instant team alerts without email noise, add the <a href="/integrations/slack">Slack</a> or{' '}
>     <a href="/integrations/discord">Discord</a> integration. They fire alongside email notifications, giving your team multiple channels to
>     stay informed.
>   </p>

<h2 id="pdf-attachment">PDF attachment</h2>

Turn on **Attach submission PDF** under **Notify on new submission** to include a PDF copy of the response with every notification email. formbase generates and stores the PDF the moment the respondent submits, so it arrives with the email instantly. Attaching the PDF needs a Pro or Business plan.

The attached PDF uses a snapshot of your published form frozen at submission time. See <a href="/submissions-analytics/exports#per-submission-pdf">Exporting submissions → Per-submission PDF</a> for what it includes.

<h2 id="abandoned-reminder">Reminders are a separate setting</h2>

The same **E-mail Notifications** section has a **Send reminders** switch. It is not about you: it chases people who go quiet — a public-link respondent with an unfinished draft, or a request recipient who hasn't completed. It needs a Pro or Business plan. See <a href="/submissions-analytics/respondent-notifications#abandoned-reminder">Respondent notifications → Reminders</a>.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [E-mail notifications setup](/building-forms/form-settings#email-notifications) — Full setup: recipients, templates, variables, PDF
  - [Respondent notifications](/submissions-analytics/respondent-notifications) — Confirmations sent to the person who submitted
  - [Slack integration](/integrations/slack) — Real-time alerts in a Slack channel
  - [Custom email domains](/branding-domains/custom-email-domains) — Send from your own address
</div>


# Respondent notifications

Automatically email respondents a confirmation after they submit.

> ✅ **Pro feature** — included in the Pro plan.


## Respondent notifications

Send respondents a confirmation email after they submit. Recap their answers, share next steps, or attach a PDF copy of their response.

<h2 id="overview">How it works</h2>

Respondent notifications send a personalized email to the person who filled out your form. In the **To** field you pick which Email field supplies the address, then customize the subject and body with piped answers. Optionally attach a PDF of the full submission.

Turn on **Send confirmation to respondent** in **Form settings → E-mail Notifications**. It needs a Pro or Business plan.

If your form asks for no email address at all, the confirmation still goes to the recipient a request names — public link responses get none.

For the full setup — recipient field, custom templates, template variables, and custom email domains — see <a href="/building-forms/form-settings#respondent-confirmation">Form settings → Respondent confirmation</a>.

<h2 id="use-cases">Use cases</h2>

- **Application receipt** — confirm the submission was received and outline next steps.
- **Booking confirmation** — restate the selected date and time so the respondent has a record.
- **Quote delivery** — pipe a calculated price into the email body and attach the full quote as a PDF.
- **Edit reminder** — if <a href="/submissions-analytics/edit-after-submit">edit after submit</a> is enabled, mention that respondents can return to the confirmation screen to edit their answers.
- **Event registration** — summarize event details, location, and ticket information.
- **Reference number** — use `@metadata.pin6` as a support ticket or booking reference the respondent can quote back.

<h2 id="pdf-attachment">PDF attachment</h2>

Turn on **Attach submission PDF** under **Send confirmation to respondent** to send the respondent a PDF copy of their answers. formbase generates and stores the PDF the moment they submit, then attaches it to the confirmation email.

The attached PDF uses a snapshot of your published form frozen at submission time. See <a href="/submissions-analytics/exports#per-submission-pdf">Exporting submissions → Per-submission PDF</a> for full details on what it includes.

> ℹ️ **Deliverability**
> <p>
>     For best deliverability, set up a <a href="/branding-domains/custom-email-domains">custom email domain</a>. Emails arrive from your own
>     address so they don't land in spam, and replies go to your inbox instead of bouncing.
>   </p>

> 💡 **Field reference checks**
> <p>
>     If you delete a form field that your confirmation email still references, formbase warns you in the publish indicator before you
>     publish. See <a href="/building-forms/answer-piping#deleting-piped-fields">Answer piping → Deleting a piped field</a>.
>   </p>

<h2 id="abandoned-reminder">Reminders</h2>

The same **E-mail Notifications** section has a separate **Send reminders** switch. One schedule, one email, two kinds of target: a public-link respondent sitting on an unfinished draft, and a request recipient who hasn't completed. It needs a Pro or Business plan.

- **Reminder schedule** — an ordered list of idle steps: 12 hours, 1 day, 3 days, 1 week, 2 weeks. At most five steps; the default is a single step at 1 day.
- **Counted from last activity**, which restarts the schedule. Reminders stop when the person finishes, and in any case after 8 emails.
- **Wait for** — name the fields that must be filled before a draft is worth chasing. Leave it empty to chase any draft that has an address.
- **Public-link drafts** — a draft has no address until the respondent types one, so you also pick the field that holds it. A request already knows its recipient.

It uses its own subject and body, edited in the same way as the confirmation email above.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [E-mail notifications setup](/building-forms/form-settings#email-notifications) — Full setup: recipients, templates, variables, PDF
  - [Share link analytics](/submissions-analytics/share-link-analytics) — See which channels drive the most completions
  - [Custom email domains](/branding-domains/custom-email-domains) — Send from your own domain
  - [Completion funnel](/submissions-analytics/completion-funnel) — Spot where respondents drop off
</div>


# Share link analytics

Compare response rates across distribution channels.

## Share link analytics

Track which channels drive responses. Create multiple share links, then compare performance across each one to find what works best.

Each share link acts as a named channel — one for an email campaign, another for a social post, a third for a QR code on a flyer. formbase attributes each response with its source so you can compare channels. To create and manage share links, see [Share links](/sharing-publishing/sharing-embedding).

Once you have two or more links, the share link filter appears across all Submissions tabs.

<h2 id="filtering-by-share-link">Filtering by share link</h2>

With two or more share links (active or revoked), a **Share Link** filter appears at the top of the Submissions page. It works across all three tabs:

- **Summary** — question cards show only the selected links' respondents.
- **Submissions** — the response table filters to those links' rows.
- **Analytics** — the event metrics reflect only traffic from those links.

Tick **All Links** to return to the combined view, which also includes traffic no link could be attributed to.

Revoked links stay in the filter with a **Revoked** badge. Revoking keeps the responses a link already collected, so you can still review and compare that channel after you've turned the link off.

On the Analytics tab the filter disappears while the Channel filter is set to **Requests**: a request has no share link. Use Channel to compare the two audiences, and the Share Link filter to compare links within the public one.

<h2 id="comparing-performance">Comparing channel performance</h2>

The basic workflow:

<h2 id="ab-testing">A/B testing with share links</h2>

Share links make lightweight A/B testing possible:

- **Same form, different channels** — distribute one form through multiple links and compare completion rates per channel.
- **Different form versions** — publish version A with one share link, collect responses, then revoke that link. Revert to version B via [version history](/building-forms/version-history), create a new share link, and compare results. Share links always serve the currently live version — formbase does not pin them to a specific publish.
- **Separate forms** — duplicate your form, tweak one copy (different question order, shorter copy, fewer questions), give each its own share link, and compare results side by side.

The AI chat can help generate variants. Describe what you want to test and let the AI produce an alternative you can publish under a separate link.

<h2 id="metrics-per-link">Metrics you can compare per link</h2>

<p>
  Each share link carries the same seven metrics as the main Analytics tab — Views, Unique Visitors, Engaged, Submissions, Completion, Avg.
  Time, and Bounce Rate. They come from visitor events, so they need a Pro or Business plan. See{' '}
  <a href="/submissions-analytics/analytics-insights#overview-metrics">Analytics & insights → Overview metrics</a> for definitions.
</p>

<h2 id="use-cases">Use cases</h2>

**Email vs social media** — send one link in your newsletter and another on social. Compare completion rates to see which audience is more engaged.

**Paid vs organic** — create separate links for paid ads and organic posts. Divide ad spend by submission count to get cost per response.

**Different landing pages** — embed your form on two landing pages with different messaging. Use a unique link for each to see which page drives more completions.

**Event-specific tracking** — create a fresh link for each event or campaign. After it ends, filter analytics to see exactly how many responses it generated.

> 💡 **Name your links clearly**
> <p>
>     A link named "Link 3" will be meaningless in two weeks. Use names that include the channel and date — like "Twitter launch May 2026" —
>     so you can identify the source at a glance when reviewing analytics later.
>   </p>

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Completion funnel](/submissions-analytics/completion-funnel) — Drop-off by stage, filterable by share link
  - [Submission retention](/submissions-analytics/submission-retention) — Auto-deletion policies for submission data
  - [Share links](/sharing-publishing/sharing-embedding) — Create and manage share link URLs
</div>


# Completion funnel

See where respondents drop off — from first view to final submit.

> ✅ **Pro feature** — included in the Pro plan.


## Completion funnel

A funnel chart showing how many respondents reach each step of your form — from view, to engagement, to completed submission. Spot exactly where people leave.

<h2 id="funnel-stages">Funnel stages</h2>

The funnel has three stages:

The drop between stages shows where you are losing people.

The funnel is built from visitor events, so it needs a Pro or Business plan and counts every open — including repeat visits from the same person. Requests have a funnel of their own, built from request rows instead and available on every plan: Created, Opened, Started, Completed. See <a href="/submissions-analytics/analytics-insights#requests-block">the request block</a>.

<h2 id="reading-the-chart">Reading the chart</h2>

<h3 id="big-drop-between-viewed-and-engaged">Big drop between Viewed and Engaged</h3>

This points to friction at the top. Common causes:

- Intimidating first page (too many questions visible at once)
- Unclear value proposition — respondents don't see why they should fill it in
- Slow page load on mobile
- A password or login gate discouraging people

<h3 id="big-drop-between-engaged-and-completed">Big drop between Engaged and Completed</h3>

This means people start but do not finish. Common causes:

- A confusing or sensitive question (cross-reference with the [question summary](/submissions-analytics/question-summary) to find which one)
- Form is too long — consider splitting into pages or removing optional questions
- Technical issues on a specific device (use the [device filter](/submissions-analytics/analytics-insights) to compare)

<h2 id="filters">Filters</h2>

<p>
  You can filter the funnel by channel, date range, device, or share link — the same filters available across the Analytics tab. See{' '}
  <a href="/submissions-analytics/analytics-insights#filtering">Analytics & insights → Filtering your data</a> for details.
</p>

<h2 id="ab-testing">Using the funnel for A/B testing</h2>

Create two share links for the same form (or duplicate it and create one link each). Distribute through different channels, then filter the funnel by share link to compare completion rates. The AI chat can help generate form variants if you want to test different question flows.

> 💡 **Wait for volume**
> <p>
>     Funnels need volume to be meaningful. Wait for at least 50 to 100 submissions before making changes based on the chart. Small samples
>     can be misleading.
>   </p>

<h2 id="improving">Improving your funnel</h2>

Once you have identified the biggest drop-off:

1. Check the [question summary](/submissions-analytics/question-summary) to pinpoint which question causes abandonment.
2. Rewrite or simplify that question — the AI chat can suggest alternatives.
3. Republish and monitor the funnel over the next batch of responses.
4. Repeat with the next biggest drop-off.

Small iterative improvements add up to much higher completion rates over time.

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Submission retention](/submissions-analytics/submission-retention) — Set auto-deletion policies for response data
  - [Share links](/sharing-publishing/sharing-embedding) — Create and manage share link URLs
  - [Response limits](/sharing-publishing/response-limits) — Cap submissions when targets are met
</div>


# Submission retention

Auto-delete submissions after a set window to stay compliant.

## Submission retention

Choose how long formbase keeps your submissions. When the window expires, data is deleted automatically — helping you stay compliant and clutter-free.

<h2 id="where-to-set-up">Where to set it up</h2>

For the full list of submission settings, see <a href="/building-forms/form-settings#retention">Form settings</a>.

> ℹ️ **Business feature**
> <p>
>     Setting or changing a retention schedule requires a Business plan. A schedule you've already set keeps running even if you downgrade —
>     it's a privacy promise to your respondents, so formbase doesn't switch it off on a billing event. You can see and clear a schedule on
>     any plan.
>   </p>

<h2 id="what-you-can-set">What you can set</h2>

The two are mutually exclusive: setting one clears the other. Cleanup runs once a day, so deletion lands within 24 hours of the window passing rather than the moment it does.

<h2 id="why-use-it">Why use it</h2>

- **Compliance** — meet contractual or regulatory limits by ensuring data doesn't outlive its allowed window.
- **Privacy** — keep data only as long as necessary, then let it go automatically.
- **Tidiness** — a retention window keeps high-volume inboxes manageable.

<h2 id="what-gets-deleted">What gets deleted</h2>

When a submission passes the retention window, formbase permanently removes:

- The submission record (all answers and metadata)
- Attached files (uploads, signatures)
- Generated PDFs
- The context, prefill and metadata of the request it answered, if any (see <a href="#retention-and-requests">Retention and requests</a>)

Deletion is **permanent**. There is no trash or undo.

> ⚠️ **Export before deletion**
> <p>
>     If you need long-term records but want to reduce live data, export your submissions before the retention window expires. Connect{' '}
>     <a href="/integrations/google-sheets">Google Sheets</a> or <a href="/integrations/airtable">Airtable</a> for automatic backup, or
>     download periodic <a href="/submissions-analytics/exports">CSV/Excel exports</a>.
>   </p>

<h2 id="retention-and-requests">Retention and requests</h2>

The same window applies to <a href="/requests/overview">requests</a>. Once a request is completed, expired or canceled and its terminal timestamp passes the window, formbase strips what the automation sent with it:

- Context (hidden-field values) and prefill
- Locked-field keys
- Metadata
- Any documents the caller attached for that one recipient
- The link to the submission it produced, which is deleted by the same rule

The request row itself stays: its status, every timestamp, the recipient, the external id and the invitation, reminder and callback history. The Requests list and the request drawer keep showing it, with a note that the prefilled data was removed. A stripped request can no longer be used as a prefill source, and the API's <code>requests.get</code> returns it with <code>dataPurgedAt</code> set and empty context, prefill and metadata.

Pending requests are never stripped, however old — they expire first, and expiry is what starts their retention clock.

<h2 id="retention-and-partials">Retention and partial submissions</h2>

formbase deletes partial submissions — responses someone started but never finished — 30 days after their last save, along with their uploaded files. That is a per-form value with a 30-day default, and it runs on every plan, independently of the retention you set here. The one exception is a specific deletion date, which takes partials with it.

<h2 id="free-plan-form-archival">Free-plan form archival</h2>

Separate from per-form submission retention, a free-plan **form** that goes a year without an edit or a submission is moved to trash, then permanently deleted 30 days later. formbase warns the owner by email first and waits at least 30 days after that warning before trashing anything, so the earliest a form can go is well past the year. It doesn't apply to Pro or Business. See <a href="/subscription-billing/limits-quotas#inactive-forms">Limits &amp; quotas</a>.

<h2 id="examples">Examples</h2>

- **Job application form** — 90-day submission retention (enough time to review candidates).
- **Event registration** — specific deletion date set to one week after the event ends.
- **Anonymous survey** — 30-day retention for analysis, then auto-delete to honor the promise of anonymity.

> ℹ️ **No retention by default**
> <p>
>     If you don't set a retention window, formbase keeps completed submissions until you delete them yourself. Partial submissions are always
>     cleaned up after 30 days, whether or not you set anything here.
>   </p>

<h2 id="next-steps">Next steps</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Share links](/sharing-publishing/sharing-embedding) — Create and manage share link URLs
  - [Exporting submissions](/submissions-analytics/exports) — Download responses before auto-deletion
  - [Workspaces & Teams](/workspaces-teams/overview) — Manage who can access your forms and data
</div>

