Skip to main content
“Post-submit” means anything that happens after a respondent finishes a form (not partial save). Flex Forms runs side effects in a predictable order so you can choose the lightest hook.

Choose the right hook

Partial submissions (save later) skip full post-submit integrations unless a feed explicitly allows partials. Completed submissions always run the finalize job.
FormSubmissionCompleted fires before integrations. If your listener needs CRM side effects to have finished, listen for IntegrationDispatchSucceeded instead.

Integration feeds (built-in post-submit)

Configure under Form → Integrations in Studio. Each feed:
  • Normalizes answers (optionally through field mapping)
  • Respects conditional feed rules — Conditional feeds
  • Records success/failure for inbox replay
No-code options: Webhooks, Zapier, CRM catalog under Integrations.

Queued listener example

Register with Event::listen or Laravel discovery. Use a dedicated queue name (integrations) in production.

Custom post-submit driver

When multiple forms share the same outbound system, implement a driver (Custom integrations) instead of duplicating listeners:
  • Admins configure feeds in Studio
  • Deliveries appear in the integration log with replay
  • OAuth Connections supply auth — OAuth integrations

Idempotency and retries

Post-submit actions should tolerate duplicate delivery attempts:
  • Key external creates on submission_id
  • Use IntegrationDispatchSucceeded / IntegrationDispatchFailed for alerting, not primary business logic
  • Replay from the admin UI re-runs dispatch() with the same submission snapshot

What not to do

Avoid long synchronous HTTP in pipeline middleware when the work can wait — it blocks the respondent. Prefer feeds or queued listeners.
  • Do not use Eloquent observers on FlexFormSubmission — see Events & hooks
  • Do not assume sync queue in production — run a worker
Last modified on September 7, 2026