Skip to content
View as Markdown

Extending FluentCRM ​

FluentCRM Core Intermediate

FluentCRM is built to be extended from a separate plugin. This page lists every extension point and where to start. Register your code on the fluent_crm/after_init hook so FluentCRM is fully loaded before you touch it.

Pick your goal ​

I want to…UseStart here
Start an automation from my own eventCustom triggerTrigger
Add a step to an automationCustom actionAction
Add a goal contacts must reachCustom benchmarkBenchmark
Add a tab to the contact profileProfile sectionContact Profile Section
Add a tab to the company profileProfile sectionCompany Profile Section
Add an item to the FluentCRM top menuMenu hook + optional Vue screenAdmin Top Menu
Add a dynamic placeholder to emailsSmart codeSmart Codes
Record custom contact activityEvent trackingEvent Tracking
Add my own REST endpointsRoutes, controllers, policiesExtending the REST API
Call FluentCRM from my pluginGlobal API functionsGlobal Functions
React to or change what FluentCRM doesAction and filter hooksHooks Reference
Query FluentCRM data directlyModels and tablesDatabase Models, Schema
Script or automate from the serverWP-CLICLI
Send email fasterParallel sendersEmail Sending Speed

Automation Components ​

FluentCRM automations (called "Funnels") are built from three types of components:

ComponentBase ClassDescription
TriggerBaseTriggerAn event that starts an automation (e.g., user registers, form submitted)
ActionBaseActionA task executed during the automation (e.g., apply tag, send email)
BenchmarkBaseBenchMarkA goal/checkpoint that contacts must reach to proceed (e.g., link clicked, tag applied)

All base classes live in the FluentCrm\App\Services\Funnel namespace.

Each component is a PHP class that extends the corresponding base class and implements a set of abstract methods. The base class handles registration automatically — you just define the component's metadata, UI fields, and processing logic.

Registration ​

Register your components on the fluent_crm/after_init hook:

php
add_action('fluent_crm/after_init', function () {
    new YourPlugin\Automation\CourseEnrolledTrigger();
    new YourPlugin\Automation\AddToGroupAction();
    new YourPlugin\Automation\TagAppliedBenchmark();
});

Form Fields ​

Automation components use a declarative field system to render their settings UI. See the Form Field Types reference for all 26 available field types (input-text, select, radio, yes_no_check, html_editor, etc.).

Contact, Company and Email Extensions ​

ExtensionAPIDescription
Smart CodesFluentCrmApi('extender')->addSmartCode()Custom merge tags for emails and templates
Event TrackingFluentCrmApi('event_tracker')->track()Track custom contact activities and behaviors
Contact Profile SectionFluentCrmApi('extender')->addProfileSection()Custom tabs on the contact profile page
Company Profile SectionFluentCrmApi('extender')->addCompanyProfileSection()Custom tabs on the company profile page

Build on the platform ​

AreaWhat you getReference
REST API369 documented endpoints, plus the ability to add your own under fluent-crm/v2REST API, Extending the REST API
Hooks400+ actions and filtersActions, Filters
Global functionsFluentCrmApi('contacts'), ('tags'), ('lists'), ('companies'), ('extender'), ('event_tracker')Global Functions
Helper classesArr, Str, Request, ContactsQuery, PermissionManagerHelpers
DatabaseEloquent-style models and the fc_ tablesModels, Schema
CLISync, send, license and simulation commandsCLI

Some extension points are opt-in

Event tracking, the company module and multi-threaded sending are switched on under Settings → Experimental. Each page says when a feature depends on one.