Skip to main content

Actions Overview

Actions are the automation layer of Core Forms. When a form is submitted successfully, one or more actions fire to process the submission data -- sending emails, subscribing to newsletters, posting to Slack, creating CRM contacts, and more.

How Actions Work

  1. A user configures actions in the Actions tab of the form editor.
  2. Each action has a type (e.g., email, webhook, slack) and its own settings.
  3. On successful submission, Core Forms fires the cf_form_success hook.
  4. Each configured action is dispatched via do_action( "cf_process_form_action_{$type}", $settings, $submission, $form ).

Actions only fire for legitimate submissions. Spam submissions are stored but never trigger actions.

Built-in Actions

Available actions include:

Action Class Description
email Email Send email notification
autoresponder AutoResponder Auto-reply to submitter
webhook (extension) POST data to external URL
mailchimp MailChimp Subscribe to Mailchimp list
mailerlite MailerLite Add to MailerLite group
convertkit ConvertKit Add to ConvertKit form
drip Drip Add to Drip campaign
brevo Brevo Add to Brevo (Sendinblue) list
activecampaign ActiveCampaign Add to ActiveCampaign list
fluentcrm FluentCRM Add to FluentCRM list
hubspot HubSpot Create HubSpot contact
slack Slack Post message to Slack channel
discord Discord Post message to Discord webhook
telegram Telegram Send Telegram message
twilio_sms TwilioSms Send SMS via Twilio
google_sheets GoogleSheets Append row to Google Sheet
airtable Airtable Create Airtable record
notion Notion Create Notion page
zapier Zapier Trigger Zapier webhook
make Make Trigger Make (Integromat) scenario
create_post CreatePost Create a WordPress post
create_user CreateUser Register a WordPress user
create_article CreateArticle Create a custom article post
emailit Emailit Send email via Emailit API
emailit_subscribe EmailitSubscribe Subscribe via Emailit
mailerpress MailerPress Subscribe via MailerPress
fluent_community FluentCommunity Add to Fluent Community

Copy actions from an existing form

Site administrators can reuse saved actions without rebuilding their settings:

  1. Open the destination form's Actions tab.
  2. Select Import Actions beside Active Actions, then search for a source form in the popover.
  3. Choose the source form, then select the individual actions to copy.
  4. Select Import selected actions. The copies are appended to your current editor; existing actions remain in place.
  5. Review recipients, connections, field variables, conditions and background-processing settings. A warning identifies field references that are absent from the destination form.
  6. Save the form when the copied actions are ready.

The source form stays unchanged. Each copy gets its own action identity, and copying does not execute an action. Connection credentials are included in the selected settings, which is why cross-form copying requires administrator access. If a source action changes while you are selecting it, reload that source selection before copying. Unavailable integrations must be restored before they can be copied.

Setup guide links in the action cards open the relevant documentation in a new tab. Actions without a dedicated guide link to this overview.

Conditional Actions

Each action supports conditions that control whether it fires. Conditions evaluate against submission data:

// Example action settings with a condition
$action = [
    'type'       => 'email',
    'to'         => 'sales@example.com',
    'subject'    => 'New lead',
    'message'    => '[all:label]',
    'conditions' => [
        [
            'field'    => 'department',
            'operator' => 'equals',
            'value'    => 'sales',
        ],
    ],
];

Multiple Actions Per Form

Forms can have any number of actions. They execute in the order they appear in the Actions tab. Each action is independent -- if one fails, the others still run.

Custom Actions

You can create custom actions by extending the Action base class. See Custom Actions for a full guide.

use Core_Forms\Actions\Action;
use Core_Forms\Form;
use Core_Forms\Submission;

class MyCustomAction extends Action {
    public $type  = 'my_custom';
    public $label = 'My Custom Action';

    public function page_settings( $settings, $index ) {
        // Render admin settings fields
    }

    public function process( array $settings, Submission $submission, Form $form ) {
        // Process the submission
    }
}

// Register it
$action = new MyCustomAction();
$action->hook();

Action Lifecycle

Form submitted
    -> Validation passes
    -> Submission saved to database
    -> cf_submission_inserted fires
    -> cf_form_success fires
        -> Each configured action's process() method is called
        -> ActionLogger records success/failure per action
    -> JSON response returned to browser

Related

Insert and Copy Form Fields

Action inputs that accept form values have a compact Insert field control. Search by the field's label or name, then select a result. The picker inserts [field_name] at the cursor for message and text settings, quotes tokens appropriately in JSON mappings, and inserts raw names for field mappings and exposed-field lists.

Field mappings and option settings use bounded, searchable in-page choosers. For Fields to expose, select several fields before choosing Done; clicking a selected field removes it. The copy icon beside an option copies that option's exact token or name. The copy icon beside an input copies its current value.

Available-variable chips use the same insert/copy split for form fields and system variables. Focus a compatible action input before inserting a variable. Connection credentials, static IDs and literal comparison values remain ordinary settings; a field token would not resolve there.

Keyboard users can search, move through results with arrow keys, activate a result with Enter, and close the chooser with Escape. Required mappings still need a selection before the form can save.