Skip to main content

Route client intake through n8n

Start an n8n workflow from each accepted Fillo response. Import a tested Postgres review queue, or map fields, duplicates, and files yourself.

Build this with your agent. Copy a prompt that hands this guide to Claude Code, Codex, Cursor, or any coding agent.

Start an n8n workflow from each accepted Fillo response, for example to queue a review, create a project, or notify the person doing the work. Import a tested review queue, or build the workflow yourself.

Set up once

  1. Install n8n-nodes-fillo on a self-hosted n8n that allows community packages.
  2. In Fillo, create a token under Settings > Connections > n8n.
  3. In n8n, add a Fillo API credential with that token.
  4. Publish your intake form and confirm one response in Fillo.

The n8n integration reference covers installation and every trigger and action operation. For the form itself, use the client intake guide. Keep the token in n8n, never in browser code or workflow exports.

Import the review queue

Download the workflow JSON and its Postgres setup SQL. The export has no credentials, pinned executions, or live form IDs.

Tested withVersion
n8n2.40.5
n8n-nodes-fillo0.1.0
Postgres18
  1. Run the setup SQL once in your destination database.
  2. Import the workflow JSON.
  3. In Fillo Trigger, select your Fillo API credential and the published form.
  4. In Save intake atomically, select your Postgres credential.
  5. Publish the workflow and submit one fictional response.
  6. Check for one new row in fillo_intake.review_queue.

Connect n8n with a database role limited to the fillo_intake schema, its two tables, and accept_response. Don't use an administrator role.

Queue behaviorDetail
EventsBoth Response Created and Response Updated are on
One row per responseKeyed by form ID and response_id
review_statusStarts as new. A response edit keeps your team's value.
EditsA newer updated_at replaces the answers. Older or equal ones are ignored.
Duplicatesprocessed_occurrences records each occurrence_id once
Database retriesThe Postgres node tries up to three times
Execution dataFailed runs are kept and can contain answers. Successful runs aren't.

The export stops at the queue. It doesn't send notifications, create projects, or download files. Give any extra step its own duplicate handling.

Recover a failed write

The trigger acknowledges each delivery before the database write, so Fillo won't resend after a database failure.

  1. Turn on failure monitoring for the workflow.
  2. Fix the destination.
  3. Retry the failed execution in n8n.

The write runs in one transaction, so a failed attempt never marks its occurrence_id as processed. Set execution pruning and database retention to suit what you collect.

Build the workflow yourself

  1. Add Fillo Trigger and select the credential and the published form.
  2. Choose Response Created, and Response Updated if edits matter.
  3. Listen for a test event, then submit a response.
  4. Inspect response_id, occurrence_id, event, answers, and files.
  5. Add an Edit Fields (Set) node and map answers to your destination.
  6. Upsert the destination record by response_id.

Answer shapes depend on the field kind, so map from a real output. A sample response helps you map fields. It doesn't prove a live delivery worked.

Handle duplicate deliveries

Fillo delivers at least once. The same event can arrive twice.

KeyStable across
occurrence_idRetries of one delivery event
response_idThe response's created and updated events

Use your destination's idempotency key or a unique constraint on response_id. Record each processed occurrence_id only after the downstream work succeeds. Check event before you send a new-submission notification.

Why not deduplicate on a header or a lookup

A "look up, then insert" check can race when two executions run at once. The trigger also passes the request body only, not delivery headers. If you need to verify each request cryptographically, use the signed webhook path and check the raw body first.

Fetch uploaded files

files[].url is protected. Download it with an HTTP Request node that uses the Fillo API credential. Forwarding the URL to another service doesn't grant access.

The original file stays in your connected storage. n8n's execution data is a separate copy with its own retention.

Prove the workflow before you rely on it

  • Submit one response and find exactly one destination record.
  • Replay its delivery and confirm nothing duplicates.
  • Edit the response and confirm the same record updates, if updates are on.
  • Break a test destination credential, then restore it and retry in n8n.
  • Before sharing an export, remove credentials, pinned data, emails, and file URLs.

This page for agents: /guides/n8n-client-intake.md · index at /llms.txt

Updated

Was this page helpful?