Before diving into specific features, it’s important to understand the core entities and concepts that power Firstwork.
Company
A Company is the top-level tenant in Firstwork. Everything — users, hiring flows, automations, and data — belongs to a company. Each company has its own isolated environment with:
- Timezone and locale settings
- Branding and notification templates
- Feature flags and configurations
- Legal entities and work locations
User
A User represents an individual person in the system. Users authenticate via email/password or single sign-on. A single user can have relationships with multiple companies through Contracts.
Key attributes:
- Email (unique identifier)
- First name, last name
- User type (Admin, Staff, etc.)
Contract
A Contract represents the relationship between a User and a Company. Think of it as the “employment record” — it tracks whether someone is an employee, contractor, or admin, along with their status and permissions.
Key attributes:
- User and Company references
- Legal entity assignment
- Status (Active, Inactive, Terminated, etc.)
- Admin flag and role-based permissions
A user can have multiple contracts — for example, one active contract and one historical contract with the same company, or contracts with different companies.
Hiring Flow
A Hiring Flow defines the stages a candidate goes through during the recruitment process. It’s the blueprint for your hiring pipeline.
Key components:
- Stages — Ordered steps in the pipeline (e.g., Applied, Screening, Interview, Offer)
- Forms — Data collection forms attached to each stage
- Compliance Rules — Conditions that determine if a candidate meets requirements
- Automations — Actions triggered when candidates move between stages
- Custom Links — Public URLs for candidates to apply
Application
An Application tracks a specific candidate’s progress through a Hiring Flow. It records which stage they’re in, their form submissions, compliance status, and transition history.
Lifecycle:
A Form is a configurable data collection tool built with the Form Builder. Forms can contain multiple pages with various field types.
Supported field types:
- Text, email, phone, number
- Date, time, datetime
- Single select, multi-select, dropdown
- File upload, document upload
- E-signature
- Address (with geocoding)
- Rich text / instructions
- Conditional sections
Key concepts:
- Form Elements — Individual fields and layout components
- Form Submissions — A user’s response to a form
- Form Templates — Reusable form blueprints
Compliance Rule
A Rule defines a condition that evaluates whether data meets specific criteria. Rules are built using a visual condition tree with support for AND/OR logic.
Components:
- Rule Nodes — Atomic conditions (e.g., “age >= 18”, “document.status == VERIFIED”)
- Operators — Comparison logic (equals, greater than, contains, regex, etc.)
- Rule Instances — Rules configured for a specific context (hiring flow, automation)
- Rule Executions — Historical record of rule evaluations
Rules can reference any data in the system using dynamic variable paths like {{application.candidate.date_of_birth}}.
Automation
An Automation is an event-driven workflow that triggers one or more actions in response to a specific event.
Components:
- Trigger — The event that starts the automation
- Rule (optional) — A condition that must be met
- Actions — One or more operations to perform
Trigger types:
| Trigger | Description |
|---|
| On Change | Field value changes |
| Schedule | Time-based (cron) |
| Form Submission | Form field submitted |
| External API | API call received |
| Webhook | External webhook received |
| Recollection | Data re-collection event |
Action types:
| Action | Description |
|---|
| Send Email | Send templated emails |
| Send SMS | Send text messages |
| Slack Message | Post to Slack channels |
| Webhook | Make HTTP requests |
| Fill Form Element | Update form fields |
| Update Application | Change application status/stage |
| Update Contract | Modify contract details |
| Enroll Course | Assign LMS training |
| Run OCR | Process document with OCR |
| AI Action | Execute AI-powered logic |
| Run Automation | Chain to another automation |
Dynamic Variables
Firstwork includes a dynamic variable system that allows you to reference any data point in the platform using dot-notation paths. It powers compliance rules, automation templates, and dynamic content.
Examples:
{{application.candidate.first_name}}
{{application.hiring_flow.name}}
{{form_submission.elements.email.value}}
{{contract.legal_entity.name}}
{{company.name}}
This system supports deep nesting through relationships, array traversal, computed properties, and default values.
Access Control
Firstwork uses a fine-grained Access Control List (ACL) system to manage permissions. Each contract can have specific read/write permissions for different data types.
Permission levels:
- Super Admin — Full access to all resources
- Admin — Broad access with some restrictions
- Manager — Access to their team and assigned resources
- Staff — Limited access based on role
- Read-Only — View-only access
Legal Entity
A Legal Entity represents a subsidiary, division, or regional office within a Company. Legal entities allow organizations to manage different compliance requirements, contracts, and work locations under one company umbrella.
Associated data:
- Work locations
- Contracts (employees/contractors assigned to this entity)
- Compliance rules specific to the entity
- Background check and verification configurations