# Start an n8n workflow from public link submissions

Run an n8n workflow when someone submits, edits or abandons a form through its share link, and pass the answers to the next node.

## Before you start

You need a [Formstep credential in n8n](https://formstep.io/docs/guides/n8n/connect/) and a published form with a [share link](https://formstep.io/docs/sharing-publishing/sharing-embedding/#share-links). Your n8n must be reachable from the internet over HTTPS; see [Install the Formstep node in n8n](https://formstep.io/docs/guides/n8n/install-the-node/). A submission to a request link does not start these workflows; see [Act on the outcome](https://formstep.io/docs/guides/n8n/send-a-request/#outcome) for that.

## 1. Add the trigger

Create a workflow, click **+**, search for **Formstep** and pick **Formstep Trigger**. Choose the credential, the form, and one of the three public link events under **Event**:

![The Formstep Trigger's Event dropdown open: Public Link Submission Created, Updated and Abandoned, then Request Completed, Expired and Canceled, each with a short description](https://formstep.io/docs/guides/n8n/n8n-trigger-events.png)

| Event | Runs when | Needs |
| - | - | - |
| Public Link Submission Created | A respondent submits the form through a share link. | Nothing extra. |
| Public Link Submission Updated | A respondent edits a submission they already sent. | [Edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/) turned on for the form. |
| Public Link Submission Abandoned | A respondent leaves the form unfinished for the time under **Consider Abandoned After** (12 hours to 1 week). Formstep checks hourly, so the run can come up to an hour later. | A Pro or Business plan, which saves [partial submissions](https://formstep.io/docs/submissions-analytics/partial-submissions/#unfinished-drafts). |

## 2. Listen for a test event

Click **Execute step**. The node shows _Listening for test event_, and Formstep starts sending this form’s events to the node’s test URL for two minutes. Open the form’s share link in another tab and submit it within that time. The submission arrives in the node within seconds:

![The Formstep Trigger after a test event: Form \[Guide\] Supplier onboarding, Event Public Link Submission Created, and the output with id, type submission.completed, test false and data › answers holding company\_name Nordlys Tekstil AS, contact\_email, vat\_number, the payment terms answer yes, and the uploaded certificate file](https://formstep.io/docs/guides/n8n/n8n-submission-output.png)

n8n has no sample record: the test is a real submission, and `test` is `false`. Every answer appears twice:

- **data.answers** holds the value a workflow compares, under the question’s [field key](https://formstep.io/docs/requests/field-keys/): an option key like `yes`, a number, a date, or a list of files.

- **data.display** holds the text a person reads, like `Yes`.

Use **display** in messages and **answers** in conditions. See the [webhooks reference](https://formstep.io/docs/developers/webhooks-reference/#fields-vs-answers) for both.

Abandoned submissions arrive hours later, so **Execute step** cannot catch one. For that event, publish the workflow and check **Executions**.

## 3. Pick out the answers

Add an **Edit Fields (Set)** node after the trigger. Drag answers from the input panel into **Fields to Set**, or type the expressions yourself:

![An Edit Fields node with three fields: company from $json.data.answers.company\_name, email from $json.data.answers.contact\_email, and payment\_terms from $json.data.display.do\_you\_accept\_our\_30\_day\_payment\_terms, with the output Nordlys Tekstil AS, grace@nordlys.example and Yes](https://formstep.io/docs/guides/n8n/n8n-map-fields.png)

payment\_terms reads from display, so it holds the label Yes rather than the option key yes.

The next node, say Gmail or Google Sheets, reads `{{ $json.company }}` and the other fields from here. When a question is renamed, its field key stays the same, so these expressions keep working.

## 4. Publish and check a real run

Click **Publish**, give the version a name, and confirm. Formstep now sends every new submission to the workflow’s production URL. Unpublishing the workflow stops that.

Submit the form once more and open the **Executions** tab. The run appears within seconds. Runs you started with **Execute step** carry a flask icon; a production run has none:

![The Executions tab of the published workflow: the latest run Succeeded in 48ms with no flask icon, three earlier test runs with a flask icon, and the canvas showing Formstep Trigger passing 1 item to Edit Fields](https://formstep.io/docs/guides/n8n/n8n-production-execution.png)

## If the workflow does not start

- A submission through a request link runs **Request Completed**, not Public Link Submission Created.

- While the workflow is a draft, only **Execute step** listens, and only until the first event arrives or two minutes pass. Publish the workflow.

- If the trigger shows _Formstep sends events to HTTPS addresses only_, your n8n hands out an `http://` or private address. See [Tell n8n its public address](https://formstep.io/docs/guides/n8n/install-the-node/#public-address).

- The trigger listens to the form in the workspace its credential points at. Check that it uses the right credential.

- The trigger rejects events when the n8n host’s clock is more than five minutes off. Keep the clock accurate.

## Next steps

[Send a request and act on its outcome](https://formstep.io/docs/guides/n8n/send-a-request/) — Create a request, then branch on what the recipient decided

[Integrations overview](https://formstep.io/docs/integrations/overview/) — Slack, Sheets and Notion without n8n
