Agency & Freelance template
Get everything you need from a new client before kickoff
Import a Laravel client onboarding form for Filament, collect project details, and route each submission into your application.
Updated
This Laravel client onboarding form gives a new client one place to share their email address, company details, and selected services before kickoff. Import it into FilaForms, then use the field table below as the starting structure for an agency or freelance client portal.
The imported form keeps onboarding submissions inside the Laravel application you already run. Your team can review each response in the submission dashboard, then connect the submitted details to your project, account, or delivery workflow.
Fields in this template (15 fields, 5 required)
Field types used: Text, Link, Select, Email, Phone Number, Multi Select, Date, Currency, Checkbox List, Textarea. Every field is editable in the builder after import.
Company
| Field | Type | Required | Validation |
|---|---|---|---|
Company Name
company
|
Text | Yes |
required |
Website
website
|
Link | No | none |
Industry
industry
|
Text | No | none |
Company Size
company_size
|
Select, 5 options | No | none |
Key Contacts
| Field | Type | Required | Validation |
|---|---|---|---|
Primary Contact Name
contact_name
|
Text | Yes |
required |
Primary Contact Email
email
|
Yes |
required | email |
|
Phone Number
phone
|
Phone Number | No | none |
Billing Email
billing_email
|
No |
email |
|
Who Signs Off Work?
approver
|
Text | No | none |
Preferred Communication
communication
|
Select, 5 options | No | none |
Engagement
| Field | Type | Required | Validation |
|---|---|---|---|
Services Engaged
services
|
Multi Select, 8 options | Yes |
required |
Kickoff Date
kickoff_date
|
Date | Yes |
required |
Monthly Retainer
retainer
|
Currency | No | none |
Access We Need
access_needed
|
Checkbox List, 7 options | No | none |
Anything We Should Know?
notes
|
Textarea | No | none |
Form settings the template ships with
- Submit button
- Finish onboarding
- After submit
- show message
- Success message
- Thanks. Your onboarding details are in and we will send a kickoff invite shortly.
- Admin email subject
- New client onboarded: {form_name}
- Auto-response subject
- Welcome aboard
Turn submitted details into a usable kickoff record
The field table below renders from the imported template. It groups client identity and service selection before your team starts work. That sequence helps a client explain who they are and what they need without making them navigate several disconnected requests.
Use the company value to match a response to an existing account or create a record for a new one. Use the email value as the contact point for a kickoff message, a clarification, or a service update. Treat the services value as an intake signal rather than a final statement of scope. A client may select several services before you have confirmed timing, deliverables, or ownership.
The settings block controls how the imported form behaves in your panel. Build and adjust it visually there, rather than maintaining a hand-written Filament schema. This gives the people responsible for intake a visible place to refine the form when your onboarding process changes.
Zuko Analytics form benchmarking, 2026, reports that onboarding forms have a 51.8% starter-to-completion rate. Keep the opening request clear, and ask for information that someone will use during kickoff. A question without an owner adds friction and creates a response that nobody can act on.
For an agency, route a completed submission to the person who owns client qualification or project setup. They can check whether the selected services fit an existing engagement. They can also identify missing context before scheduling a discovery call. This keeps the first conversation focused on decisions instead of basic account details.
For a productised service, use the services selection to start a defined workflow. A content request can create an internal checklist. A design service can notify the project lead. A recurring service can prompt the team to confirm the next billing period. The submission should initiate work only after your own application rules decide what applies.
Adapt the template for solo freelancers
Solo freelancers can drop the approver field when they onboard clients without an internal approval step. That removes a question that a client cannot answer usefully when one person owns both sales and delivery. Keep the company, email, and services fields because they still establish the client record and the requested work.
You may also simplify your own follow-up process. A solo freelancer can review new submissions at a fixed time each day. They can send a personal confirmation after checking the requested services. That approach suits a low-volume practice because it keeps judgment with the person who delivers the work.
Do not use the form as a substitute for a signed agreement. A selected service does not settle scope, deadlines, revision limits, or payment terms. Capture those decisions in the contract or project process that your business already uses. The form works best when it prepares that next conversation.
Route new clients into your Laravel application
FilaForms emits FormSubmitted after a client submits the form. A Laravel listener can read email, company, and services from the submission data. It can then record the event for a review queue or hand the data to application code that creates a client intake task.
Save this listener as app/Listeners/LogClientOnboarding.php. Laravel 12 discovers listeners in that directory automatically.
<?php
namespace App\Listeners;
use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Support\Facades\Log;
final class LogClientOnboarding
{
public function handle(FormSubmitted $event): void
{
$data = $event->submission->data;
$email = $data['email'] ?? null;
$company = $data['company'] ?? null;
$services = $data['services'] ?? null;
Log::info('Client onboarding received', [
'form_id' => $event->form->getKey(),
'submission_id' => $event->submission->getKey(),
'email' => $email,
'company' => $company,
'services' => $services,
]);
}
}
Replace the log call with the action your application needs. A client portal can create an intake task for the assigned account owner. An internal queue can flag a submission when services do not match an active agreement. A notification can prompt the delivery lead to prepare the kickoff agenda.
Keep the original submission as the source record. Derived records make triage easier, but they should retain a link to the submission when somebody needs the complete context. This protects your workflow when a client corrects a detail or when reporting requirements change.
This form does not set up billing or provision project access on its own. Someone still has to act on the submitted details in your other tools. Add that automation only after you define who approves the client, which services start immediately, and which records must exist first.
Know when a different tool fits
Choose this template when developers already operate the client portal and want onboarding data beside the rest of the application. FilaForms is a Laravel form builder for Filament that stores submissions in your own database. Review the FilaForms features for Laravel and Filament when you need to decide what follow-up workflow belongs in your application.
Use this template in your own application
With FilaForms installed, one call creates the form with every field, rule, and setting listed above. Then edit it in the builder.
use FilaForms\Core\Support\FormTemplates;
$form = FormTemplates::createFormFromTemplate('client-onboarding');
Template schema (JSON)
{
"name": "Client Onboarding Form",
"description": "Everything you need from a new client before kickoff",
"icon": "heroicon-o-rocket-launch",
"category": "Agency & Freelance",
"popularity": "Very High",
"experience": {
"success_message": "<p>Thanks. Your onboarding details are in and we will send a kickoff invite shortly.</p>",
"post_submit_action": "show_message",
"display_mode": "wizard",
"show_progress_bar": true,
"show_step_numbers": true,
"submit_button_text": "Finish onboarding"
},
"notification_config": {
"enabled": true,
"channels": [
"email"
],
"admin_emails": [
"accounts@example.com"
],
"custom_admin_subject": true,
"admin_subject_template": "New client onboarded: {form_name}",
"send_auto_response": true,
"auto_response_email_field": "email",
"auto_response_subject": "Welcome aboard",
"auto_response_message": "<p>Thanks for completing onboarding. We have everything we need to get started.</p><p>Your project lead will send a kickoff invite within two working days.</p>"
},
"sections": [
{
"name": "Company",
"fields": [
{
"label": "Company Name",
"type": "text",
"code": "company",
"required": true,
"width": "50"
},
{
"label": "Website",
"type": "link",
"code": "website",
"required": false,
"width": "50"
},
{
"label": "Industry",
"type": "text",
"code": "industry",
"required": false,
"width": "50"
},
{
"label": "Company Size",
"type": "select",
"code": "company_size",
"required": false,
"options": [
{
"value": "Self employed"
},
{
"value": "2-10"
},
{
"value": "11-50"
},
{
"value": "51-200"
},
{
"value": "200+"
}
],
"width": "50"
}
]
},
{
"name": "Key Contacts",
"fields": [
{
"label": "Primary Contact Name",
"type": "text",
"code": "contact_name",
"required": true,
"width": "50"
},
{
"label": "Primary Contact Email",
"type": "email",
"code": "email",
"required": true,
"validation": [
{
"name": "email",
"parameters": []
}
],
"width": "50"
},
{
"label": "Phone Number",
"type": "phone",
"code": "phone",
"required": false,
"width": "50"
},
{
"label": "Billing Email",
"type": "email",
"code": "billing_email",
"required": false,
"validation": [
{
"name": "email",
"parameters": []
}
],
"width": "50"
},
{
"label": "Who Signs Off Work?",
"type": "text",
"code": "approver",
"required": false,
"width": "50"
},
{
"label": "Preferred Communication",
"type": "select",
"code": "communication",
"required": false,
"options": [
{
"value": "Email"
},
{
"value": "Slack"
},
{
"value": "Phone"
},
{
"value": "Weekly call"
},
{
"value": "Project tool"
}
],
"width": "50"
}
]
},
{
"name": "Engagement",
"fields": [
{
"label": "Services Engaged",
"type": "multi-select",
"code": "services",
"required": true,
"options": [
{
"value": "Brand and identity"
},
{
"value": "Web design"
},
{
"value": "Web development"
},
{
"value": "Content"
},
{
"value": "SEO"
},
{
"value": "Paid media"
},
{
"value": "Consulting"
},
{
"value": "Ongoing support"
}
],
"width": "100"
},
{
"label": "Kickoff Date",
"type": "date",
"code": "kickoff_date",
"required": true,
"width": "50"
},
{
"label": "Monthly Retainer",
"type": "currency",
"code": "retainer",
"required": false,
"width": "50"
},
{
"label": "Access We Need",
"type": "checkbox-list",
"code": "access_needed",
"required": false,
"options": [
{
"value": "Hosting"
},
{
"value": "Domain registrar"
},
{
"value": "Analytics"
},
{
"value": "Ad accounts"
},
{
"value": "Social accounts"
},
{
"value": "CMS"
},
{
"value": "Code repository"
}
],
"width": "100"
},
{
"label": "Anything We Should Know?",
"type": "textarea",
"code": "notes",
"required": false,
"width": "100"
}
]
}
]
}
Frequently asked questions
- What does this Laravel client onboarding form collect?
- It collects a client's email address, company details, and selected services. The field table below shows the imported structure.
- Can solo freelancers use this client onboarding form?
- Yes. Solo freelancers can drop the approver field when they onboard clients without an internal approval step.
- How do I route client onboarding submissions into my Laravel application?
- Listen for FilaForms\\Core\\Events\\FormSubmitted and read email, company, and services from the submission data.
- Does this form set up billing or project access?
- No. This form does not set up billing or provision project access on its own. Someone still has to act on the submitted details in other tools.