Skip to main content
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:

Form

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:
TriggerDescription
On ChangeField value changes
ScheduleTime-based (cron)
Form SubmissionForm field submitted
External APIAPI call received
WebhookExternal webhook received
RecollectionData re-collection event
Action types:
ActionDescription
Send EmailSend templated emails
Send SMSSend text messages
Slack MessagePost to Slack channels
WebhookMake HTTP requests
Fill Form ElementUpdate form fields
Update ApplicationChange application status/stage
Update ContractModify contract details
Enroll CourseAssign LMS training
Run OCRProcess document with OCR
AI ActionExecute AI-powered logic
Run AutomationChain 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
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