Krom Automation is live. Flat 60% off this week.

Orders, emails, CRM syncs and alerts, all automated inside WordPress.

Buy Now! →
wprigel logo
  • Home
  • Products
    • krom-automation-icon

      Krom Automation

      Build visual workflows that respond to signups, orders, forms, and posts- automatically. Free plugin, no monthly fees.
    • commandify-logo-pink

      Commandify- Best Command Palette Plugin for WordPress

      Navigate, search, and manage everything on your site with a simple keyboard-first workflow.
    • pollify plugin logo

      Pollify- Ultimate Poll Creator Plugin for WordPress

      Build interactive polls, surveys & voting experiences in WordPress with the best Gutenberg-native poll plugin.
  • Docs
  • Blog
  • Contact Us
Pricing
  • How to Auto-Enrol Students in the Next Course

    You can auto subscribe students to the next course in LearnDash or TutorLMS using Krom Automation, and the free version is enough for a single trigger-to-enrolment workflow. No code is required, and the workflow fires in the background without touching page load times. LearnDash Pro is required for LearnDash; the free Krom Automation plugin handles TutorLMS course completion out of the box.

    Most LMS sites handle progression manually. An admin gets notified, logs in, finds the student, and clicks enrol.

    At low volume that is annoying. At 50 completions a week it is a part-time job, and it introduces a delay that kills momentum for the student who just finished and is ready to keep going.

    This guide covers both LearnDash and TutorLMS, conditional enrolment rules, what the workflow cannot do, and the three failure modes that catch most people out.

    Browse the full feature list to see everything Krom Automation can trigger on a course completion event before you build.

    What Gets Synced: Course Completion to Enrolment

    The table below shows exactly what fires during the trigger event and where it lands in the enrolment action. Nothing listed here requires custom code or a third-party integration service.

    Field on the trigger sideWhere it lands in the enrolment action
    Completed course IDUsed to match the “source” course in your workflow condition
    Completing user IDPassed to the enrolment action as the target user
    User email addressAvailable as a merge tag for a confirmation email action
    User display nameAvailable as a merge tag for personalised email or post creation
    Completion timestampLogged in the execution record; can feed a delay node if you want a 24-hour gap before enrolment
    Quiz score (LearnDash only)Available as a merge tag; can drive a conditional branch to enrol or skip based on pass mark
    User roleAvailable for conditional branching, so managers get a different next course than individual contributors

    The merge tags documentation lists every dynamic variable available at each trigger point, including the full set of LearnDash and TutorLMS fields.

    Requirements Before You Start

    • WordPress 6.2 or higher, PHP 7.4 or higher
    • Krom Automation free plugin installed and active (handles TutorLMS triggers and basic LearnDash triggers)
    • Krom Automation Pro required for conditional branching by quiz score, user role, or group membership, and for the LearnDash group enrolment action
    • LearnDash 4.0 or higher, or TutorLMS 2.0 or higher
    • Action Scheduler must be able to run; shared hosting with WP-Cron disabled will delay workflow execution

    LearnDash Setup: Course Completion Triggers Next Enrolment

    The LearnDash integration documentation covers every available trigger and action, but here is the exact path for a completion-to-enrolment workflow.

    Step 1: Create a new workflow

    Go to Krom Automation > Workflows in the WordPress admin sidebar. Click Add New Workflow.

    Give it a name that identifies the source course, such as “Module 1 Complete: Enrol in Module 2”. Click Save to open the visual canvas.

    Step 2: Add the trigger

    Click the Add Trigger node on the canvas. In the trigger panel that slides open on the right, select LearnDash from the integration dropdown. Choose Course Completed from the trigger list.

    In the Course field, search for and select the source course by name. Click Save Trigger.

    Step 3: Add a condition (optional but recommended)

    If you only want to enrol students who passed a final quiz with 80 percent or above, click the Add Condition button on the trigger node. Set Field to Quiz Score, Operator to greater than or equal to, and Value to 80. The canvas will split into a Yes path and a No path.

    Drag your enrolment action onto the Yes path. The conditions and branching documentation explains how to stack multiple conditions if you need to check both score and user role.

    Step 4: Add the enrolment action

    Click Add Action on the Yes path (or directly on the trigger if you skipped the condition). Select LearnDash from the integration dropdown. Choose Enrol User in Course.

    In the Course field, search for and select the destination course. In the User field, select Triggering User from the dynamic options. Click Save Action.

    Step 5: Add a confirmation email (optional)

    Click Add Action below the enrolment node. Select Send Email.

    Set To to the merge tag {{user.email}}, set Subject to something like “You’ve been enrolled in {{course.title}}”, and write the body using any merge tag listed in the dynamic variable panel. If your emails are landing in spam, the guide on automated WordPress emails going to spam covers SMTP configuration and sender authentication steps.

    Step 6: Enable and test

    Toggle the workflow status to Active in the top-right corner of the canvas. Before going live, click Test Workflow to open the workflow simulator.

    The simulator runs a dry-run with zero side effects, so no real enrolment fires and no email sends. Confirm all nodes show green, then save and exit.

    TutorLMS Setup: Course Completion Triggers Next Enrolment

    The process is almost identical. The TutorLMS integration documentation lists the full trigger and action set. The key difference is that TutorLMS does not expose quiz score as a merge tag in the same way, so conditional branching by score requires the Pro version and uses the Quiz Passed trigger rather than Course Completed.

    Step 1: Create a new workflow

    Go to Krom Automation > Workflows > Add New Workflow. Name it, for example “Foundation Complete: Enrol in Advanced”. Open the visual canvas.

    Step 2: Add the trigger

    Click Add Trigger, select TutorLMS from the integration dropdown, and choose Course Completed. In the Course field, select the source course. Click Save Trigger.

    Step 3: Add the enrolment action

    Click Add Action, select TutorLMS, and choose Enrol User in Course. Set Course to the destination course and User to Triggering User. Click Save Action.

    Step 4: Enable and test

    Set the workflow to Active. Use the simulator to confirm the workflow resolves correctly before any real student completes the source course.

    A workflow that fires 30 minutes after completion because WP-Cron was asleep is not a failed workflow. It is a misconfigured server. The fix takes 5 minutes and lives outside WordPress entirely.

    Conditional Enrolment: Beyond the Simple On/Off Trigger

    Every competitor covering auto-enrolment treats it as a binary: completion fires, enrolment happens. That is the right starting point, but most L&D teams need more than that. Krom Automation’s conditional branching handles the three most common real-world variations.

    Enrol by user role

    Add a condition after the trigger. Set Field to User Role, Operator to equals, and Value to the role name, for example subscriber or a custom role like sales-rep.

    Managers can branch to a leadership track course while individual contributors branch to a skills course. One workflow, two paths, zero manual sorting.

    Enrol by quiz score threshold

    Use LearnDash’s Quiz Passed trigger instead of Course Completed if you want score-based routing. Set a condition on Quiz Score with a threshold of your choosing.

    Students above the threshold enrol in the advanced course; students below enrol in a remedial or review course. This is the setup most training managers eventually ask for, and it is not available in any plugin that treats auto-enrolment as a single toggle.

    Enrol after a delay

    Some courses benefit from a gap before the next enrolment so the student has time to apply what they learned. Add a Delay node between the trigger and the enrolment action.

    Set it to 7 days or any interval. The delays and scheduling documentation covers every available unit including a custom number of seconds for precise timing.

    Enrolment Decision Table: Which Setup Fits Your Situation

    Use this table to find the right configuration before you build. Building the wrong one and refactoring costs 30 to 60 minutes per workflow.

    Your situationTrigger to useCondition neededPro required?
    All completions enrol in the next courseCourse CompletedNoneNo
    Enrol only students who passed the final quizQuiz Passed (LearnDash)Quiz Score >= pass markYes
    Different next course based on user roleCourse CompletedUser Role equals [role]Yes
    Enrol with a 7-day gap after completionCourse CompletedNone, add Delay nodeNo (delay is free)
    Enrol in multiple follow-on courses at onceCourse CompletedNone, add multiple Enrol actionsNo
    Enrol based on BuddyBoss group membershipCourse Completed + Group checkGroup membership conditionYes
    Notify a Slack channel on each enrolmentCourse CompletedNone, add messaging actionYes (messaging is Pro)

    Treating auto-enrolment as a single on/off switch is how you end up with every student on the same path regardless of what they demonstrated they know.

    What Does NOT Transfer (Read This Before You Build)

    Every integration guide should include this section. Most do not, which is why people discover these limits the hard way.

    • Course progress does not carry over. Enrolment in the new course starts at zero. Any completion percentage, quiz attempt, or assignment from the source course stays on the source course. There is no mechanism to migrate progress between courses in either LearnDash or TutorLMS, and Krom Automation does not change that.
    • Course access duration is not inherited. If your destination course has an expiry set, that expiry clock starts from the enrolment date the workflow creates, not from the original purchase date. Students enrolled 6 months after the original purchase will have the same access window as a student enrolled on day one.
    • Paid course restrictions are bypassed. Krom Automation’s enrolment action enrols at the plugin level, not through the payment gateway. A paid course that requires WooCommerce or a membership to access will have the enrolment record written but access may still be blocked by the payment restriction layer. Test this in staging before deploying to a paid course.
    • Group enrolment is not the same as individual enrolment. Enrolling a user in a course does not add them to a LearnDash group. If your course progress, reporting, or certificates depend on group membership, add a separate group enrolment action in the workflow.
    • TutorLMS certificate triggers do not fire on programmatic enrolment. If you use TutorLMS certificates tied to course completion, test whether the certificate hook fires correctly when enrolment comes from an automation rather than a student clicking “Start Course” manually.

    Troubleshooting the Three Common Failure Modes

    Failure mode 1: The workflow fires but enrolment does not appear

    Check the execution log under Krom Automation > Logs. If the enrolment action shows a green tick but the student is not enrolled, the destination course has a paid or membership access restriction that is blocking the enrolment record from granting access.

    The fix is to either remove the access restriction on the destination course, use a MemberPress or WooCommerce action to grant access first, or switch the course access mode in LearnDash from Buy Now / Subscribe to Open for programmatically managed courses. See the MemberPress integration documentation if membership is involved.

    Failure mode 2: The workflow fires 20 to 40 minutes late

    This is WP-Cron. Krom Automation uses Action Scheduler to run workflows in the background, which depends on WP-Cron firing. On a low-traffic site, WP-Cron only runs when someone visits the site.

    If no visitor arrives for 30 minutes after a course completion, the workflow waits. The permanent fix is a real server cron job: add */5 * * * * php /path/to/wp-cron.php to your crontab and disable WP-Cron in wp-config.php by setting DISABLE_WP_CRON to true. That change takes under 5 minutes and makes every scheduled WordPress task reliable, not just Krom Automation workflows.

    Failure mode 3: The workflow fires multiple times for the same student

    Check the Run Once Per Entity setting in Workflow Settings. This setting prevents a workflow from firing more than once for the same user-course combination. If it is off, a student who re-takes a course or whose completion record is written twice by a plugin conflict will trigger multiple enrolments.

    Enable Run Once Per Entity on any workflow where duplicate enrolment would cause problems. The workflow settings documentation explains the exact option and what entity matching covers.

    Enrolling in Multiple Follow-On Courses at Once

    A single trigger can drive multiple enrolment actions. On the workflow canvas, after the trigger node, add one Enrol User in Course action for each destination course. All actions run in sequence during the same execution.

    There is no limit on the number of actions per workflow in the free version. A student completing a certification course can be simultaneously enrolled in 3 supplementary modules, added to a cohort email list, and sent a congratulations email, all from one workflow.

    If you want different courses for different cohorts, use conditional branching rather than multiple workflows. One workflow with branching is easier to audit than 6 separate workflows that all watch the same trigger. The step-by-step workflow builder guide shows how to arrange multi-action and multi-branch flows on the canvas.

    One workflow with conditional branching is always easier to maintain than six workflows watching the same trigger. Audit one, not six.

    Automations Worth Pairing With Course Enrolment

    Auto-enrolment on its own handles progression. Add the following actions to the same workflow to handle the full student experience without any manual intervention.

    • Send Email: Notify the student of their new enrolment with a link to the course. Personalise with {{user.display_name}} and {{course.title}} merge tags.
    • Update User Meta: Write the enrolment date to a custom user meta field for reporting or CRM sync.
    • FluentCRM tag: Add a “Module 2 Enrolled” tag in FluentCRM to trigger a nurture sequence. See the FluentCRM integration documentation for exact field names.
    • Slack notification: Alert a team channel when a student progresses, useful for cohort-based programmes where a manager tracks completion rates. The messaging integrations documentation covers Slack setup.
    • HTTP Request: Push the enrolment event to an external BI tool or HR system using a webhook. No Pro licence needed for outgoing HTTP requests.

    What This Costs: Free vs Pro for Auto-Enrolment Workflows

    The free Krom Automation plugin handles a straight completion-to-enrolment workflow with no conditions. Most teams reach for Pro within a few weeks once they want role-based or score-based routing.

    CapabilityFreePro
    Course Completed trigger (LearnDash and TutorLMS)YesYes
    Enrol User in Course actionYesYes
    Multiple enrolment actions per workflowYesYes
    Delay node between completion and enrolmentYesYes
    Conditional branching by quiz score or user roleNoYes
    LearnDash group enrolment actionNoYes
    FluentCRM tag on enrolmentNoYes
    Slack or Discord notification on enrolmentNoYes
    Schedule trigger for bulk enrolment on a set dateNoYes

    Pro plans start at $119 per year for a single site or $299 as a one-time lifetime licence. If you manage 5 or more sites the Standard plan at $199 per year works out to $40 per site annually, which is less than an hour of developer time for a single manual workflow build. See the full pricing breakdown for plan details.

    Practical Numbers: What Manual Enrolment Actually Costs

    On a site with 200 course completions per month, manual enrolment takes roughly 2 to 3 minutes per student if you are fast: locate the user, open their profile, find the course, click enrol, confirm. That is 400 to 600 minutes per month, or 7 to 10 hours.

    At a $50 hourly rate for an admin or VA, that is $350 to $500 per month in labour. A lifetime Pro licence at $299 pays for itself in under one month at that volume.

    Even at 30 completions per month, the mental overhead of checking a completion queue daily, deciding which course comes next, and tracking who has been processed costs more than the licence. The automation stack we deploy on every client build includes an LMS progression workflow as one of the first automations added, for exactly this reason.

    Also from wpRigel

    Pollify is our Gutenberg-native poll, survey and quiz plugin. Polls are built as real blocks inside the editor, so there is no shortcode to paste and no separate interface to manage. It works well alongside course content where you want to embed a quick knowledge check or learner satisfaction survey directly in a lesson page.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to search everything and run admin actions without navigating menus.

    For sites managing large student rosters, the ability to find a user, view their profile and open their course history in under 3 seconds is a genuine time saver. It is the only WordPress command palette with real WooCommerce order, product and customer commands built in.

    Our Verdict: Who Should Build This Workflow Today

    If you have a linear course structure where every student follows the same path, the free Krom Automation plugin sets this up in under 15 minutes and you never touch it again. That is the case for most course creators and most membership sites with a defined curriculum.

    If your programme has branching paths, role-based tracks, or score-based routing, invest in Pro. The conditional branching alone saves more time than the licence costs, because the alternative is either manual sorting or a bespoke developer build that costs $500 to $2,000 and breaks when the LMS plugin updates.

    Who should wait: if you are still building the courses themselves and have fewer than 10 active students, set up the workflow once the content is stable. Automating a half-finished curriculum creates enrolment records in courses that do not exist yet, which generates support tickets from confused students. Build the automation the week before you open enrolment, not the week you start writing content.

    Download the free plugin from the WordPress.org plugin directory and install it in under 3 minutes, or compare the Pro plans if conditional branching is on your list.

    FAQ

    Does auto-enrolment work if the follow-on course is a paid course?

    Krom Automation writes the enrolment record at the plugin level. If the destination course is set to open access in LearnDash or TutorLMS, the student gets in.

    If it is restricted to paying members or WooCommerce purchasers, the enrolment record may be blocked by the access layer even though the workflow ran successfully. Test in staging with your exact access mode before using this on a paid course.

    Can one completion trigger enrolment in several courses at once?

    Yes. Add one Enrol User in Course action for each destination course on the same workflow canvas.

    All actions run in the same execution. There is no limit on the number of actions per workflow in either the free or Pro version.

    What happens if a student completes the source course twice?

    Enable Run Once Per Entity in the workflow settings. This prevents the workflow from firing more than once for the same user-course pair, so a student who re-completes a course or whose completion record is written twice does not receive a duplicate enrolment in the follow-on course.

    Will the workflow still fire if my site has very low traffic?

    It will fire, but possibly late. Krom Automation uses Action Scheduler, which depends on WP-Cron.

    On low-traffic sites, WP-Cron only triggers when someone visits. Configure a real server cron job to run every 5 minutes and disable WP-Cron in wp-config.php to make execution timing reliable regardless of traffic levels.

    Can I auto-enrol students in a course based on their job role rather than a course they completed?

    Yes, with Pro. Use the User Role Changed trigger or a User Registered trigger combined with a condition that checks the assigned role.

    If the role matches, the enrolment action fires. This is the standard setup for onboarding new employees into a required training track automatically when their account is created with the correct role.

    The wpRigel Team

    September 15, 2026
    User Guide
  • What Client Automation Costs Per Site, and What It Should

    For a single client site, WordPress automation pricing looks manageable under almost any model. At five sites, the gap between per-task billing and flat licensing starts to show.

    At twenty-five sites, that gap can reach $3,000 to $6,000 per year, and that is before accounting for the hours your team spends managing API limits, monitoring execution failures, and explaining surprise invoices to clients. The right model is flat licensing, self-hosted, with a perpetual or annual cap, and Krom Automation is the WordPress-native tool built around that model.

    This article is a money argument. We will model the actual cost of running automation across 5, 10 and 25 client sites under two billing structures, name what the marketing pages leave out, and give you a decision table you can take into a proposal conversation. If you already know the tools and want to skip to the numbers, jump to the cost model section.

    If you are still evaluating what workflow automation inside WordPress actually looks like before committing to a licensing structure, the overview of how Krom Automation works covers triggers, actions and the canvas in one place.

    Browse the full feature list to see what is included at the free tier versus Pro before reading the cost model below.

    The Two Billing Models, Defined

    Every automation tool you will evaluate falls into one of two structures. Understanding which is which prevents a decision that looks smart on month one and looks catastrophic on month twelve.

    Per-task or per-execution billing charges you each time a workflow step runs. Zapier calls them tasks. Make calls them operations.

    The price per unit is low, but the volume compounds fast on active client sites. A WooCommerce store completing 200 orders per month, each triggering a three-step workflow, consumes 600 tasks monthly from that site alone.

    Flat licensing charges a fixed annual or one-time fee for a defined number of site activations. Every workflow runs as often as it needs to.

    There is no per-execution counter, no usage dashboard to watch, and no month-end reconciliation. Self-hosted plugins almost always use this model, and that structural difference is the main reason agencies running ten or more client sites should default to it.

    Per-task billing is a pricing model optimised for the vendor’s revenue, not your cost predictability. At agency scale, predictability is worth paying for.

    What Per-Task Billing Actually Costs at Agency Scale

    The following table models a realistic agency portfolio: a mix of simple brochure sites with light automation and active WooCommerce or membership sites with heavier trigger volumes. We use conservative estimates. Real active stores will push these figures higher.

    Sites Avg tasks/month per site Total monthly tasks Zapier Professional (~$49/mo per 2k tasks) Make Core (~$9/mo per 10k ops) Flat plugin licence (annual)
    5 800 4,000 ~$98/mo ($1,176/yr) ~$45/mo ($540/yr) $199/yr (5 sites)
    10 800 8,000 ~$196/mo ($2,352/yr) ~$90/mo ($1,080/yr) $369/yr (unlimited)
    25 800 20,000 ~$490/mo ($5,880/yr) ~$225/mo ($2,700/yr) $369/yr (unlimited)

    The Krom Automation figures are exact: $199/year covers 5 site activations and $369/year covers unlimited sites. The Zapier and Make figures are modelled from their published tier structures; actual costs will vary based on the exact plan you need to fit your task volume. The point is directional: at 25 sites, flat licensing costs roughly 15 times less than Zapier at equivalent task volumes.

    If even half your clients run modest WooCommerce stores, 800 tasks per site per month is conservative. A busy store with abandoned cart recovery, order status workflows, and a post-purchase email sequence can hit 2,000 to 3,000 tasks monthly on its own. Run those numbers through the table above.

    Year One Versus Year Two: The Licensing Decision

    Flat licensing has an upfront cost. Per-task billing spreads the cost into smaller monthly payments that feel manageable.

    This is the framing that gets agencies into expensive per-task arrangements. The table below reframes it correctly.

    Scenario Year 1 total cost Year 2 total cost 2-year total
    10 sites, Zapier $2,352 $2,352 $4,704
    10 sites, Make $1,080 $1,080 $2,160
    10 sites, Krom Automation (annual) $369 $369 $738
    10 sites, Krom Automation (lifetime) $799 $0 $799

    The lifetime Enterprise licence at $799 pays for itself before the end of year one if you are running ten or more sites, and every year after is free. The annual plan at $369 for unlimited sites is cheaper than most agencies spend on a single SaaS subscription that serves only one client.

    What the Marketing Pages Do Not Tell You

    Every automation vendor emphasises what works. Here is what they do not lead with.

    • Per-task counters do not distinguish test runs from production runs. Every time a developer tests a workflow on a staging or client site, those test executions count against your quota. Krom Automation’s workflow simulator runs dry runs with zero side effects and nothing hits an execution counter because there is no counter.
    • Multi-account management adds cost. Most SaaS automation tools charge per workspace or per account. Running Zapier across ten client accounts may mean ten separate billing relationships or a premium agency plan that changes the maths entirely.
    • Client data leaves the server. SaaS automation runs on the vendor’s infrastructure. Form submissions, order data, user records and API credentials all travel through external servers. For clients in regulated industries or with data residency requirements, this is a compliance issue, not just a preference.
    • Workflow migration is expensive. If you build 40 client workflows in Zapier and then switch tools, you rebuild manually. There is no export format that travels between platforms. Krom Automation workflows export as portable JSON, so you can version control them and redeploy across sites without rebuilding.
    • Failure notifications are often paid features. Knowing when a workflow fails is basic operational hygiene. Krom Automation sends failure notifications by email and retries automatically with configurable backoff, included in the free version. Knowing a client’s welcome email stopped firing three days ago should not require a paid tier.

    Client data flowing through a vendor’s servers is not a “privacy preference”. For agencies serving healthcare, finance or EU-based clients, it is a liability your contract may not cover.

    The Hidden Labour Cost

    Tool licensing is the visible number. Developer time is the one that quietly dominates the real cost of running automation at agency scale.

    A developer debugging a failed Zapier workflow spends time inside a tool they do not control, reading logs they cannot extend, and waiting on support tickets for issues they cannot fix themselves. A developer debugging a Krom Automation workflow has full per-step execution logs inside WordPress, a simulator for safe testing, and direct database access if they need it. That difference is roughly 30 to 90 minutes per incident, depending on complexity.

    If your team touches a failing workflow twice per client site per month, and you are running 10 sites, that is 20 debugging sessions. At a $120 hourly rate, the labour cost of inferior logging tools is $720 to $2,160 per month in developer time. That number dwarfs any tool licensing difference.

    The analytics dashboard in Krom Automation shows success rate per workflow, total executions, failed execution count and an execution trend chart. More importantly, the full per-step audit trail shows exactly which action failed and why. That is what cuts debugging time, and it is available in the free version.

    Which Automation Tasks Actually Run at Volume

    Before you can model your real task count, you need to know what actually fires on an active client site. These are the automations that drive the majority of executions across a typical agency portfolio.

    • WooCommerce order workflows: confirmation emails, status change notifications, post-purchase sequences. A store completing 300 orders per month with a three-step workflow per order generates 900 executions monthly from one automation alone.
    • Form submission follow-ups: Gravity Forms, Contact Form 7 and WPForms each generate a trigger per submission. A lead generation site with 50 daily form submissions generates 1,500 trigger events monthly.
    • Membership and LMS enrollments: MemberPress and LearnDash fire triggers on signup, payment, expiry and course completion. Onboarding sequences add 3 to 5 actions per trigger.
    • Email list sync: syncing WordPress users to Mailchimp, FluentCRM or ActiveCampaign on every registration, role change or opt-in. High-traffic sites push these numbers fast.
    • Slack and messaging alerts: Slack, Discord and Twilio notifications on order events or form submissions. Each message is one task in per-task billing.

    Add these up across an active client site and 800 tasks per month is a floor, not a ceiling. We have seen membership sites comfortably exceed 5,000 executions monthly without any unusual workflow complexity.

    Under flat licensing that is irrelevant. Under per-task billing it is a budget conversation nobody planned for.

    How to Price Automation as a Deliverable to Clients

    Every result we reviewed covers tool pricing. None of them cover what you should charge clients for the automation work itself. That gap is where agency margin lives.

    There are three serviceable models.

    • Project fee plus retainer: charge a one-time setup fee of $500 to $2,000 depending on complexity, then a monthly retainer of $150 to $400 for monitoring, updates and new workflow builds. This is the most common model and the most predictable for both parties.
    • Embedded in the build price: include automation setup as a line item in the site build, typically 10 to 20 percent of the total project fee. Ongoing maintenance is then either a support retainer or billed hourly. Works well for simple automations the client will not touch.
    • Markup on licensing: if you pass tool cost through to the client, mark it up 30 to 50 percent and include it in the maintenance invoice. At $369 per year for unlimited sites, the per-client cost is effectively zero at ten-plus sites, so the markup is pure margin. This only works with flat licensing. With per-task billing, client volume creates uncontrolled cost and unpredictable margin.

    The argument for the retainer model: automation breaks. Forms change, API endpoints move, WooCommerce updates shift webhook payloads.

    A client whose automation runs silently for six months and then fails during their busiest week will call you regardless of whether you have a retainer in place. Charge for the monitoring before the emergency, not after.

    The client whose automation fails at 2am on Black Friday will not remember that you did not have a monitoring retainer. They will remember that you did not catch it.

    What to Evaluate Before Committing to a Tool

    Use this checklist before signing any automation vendor, SaaS or plugin.

    • Does the licence cover your entire client portfolio, or does cost scale with site count and execution volume?
    • Where does workflow data live? Client server or vendor server? Who controls access if the relationship ends?
    • Can you export workflows and redeploy them? What does migration actually cost in hours if you switch tools in two years?
    • What happens when a workflow fails? Email notification, automatic retry, per-step logs? Or a red icon in a dashboard you have to check manually?
    • Does the tool require a separate subscription per client account, or can you manage all sites from one licence?
    • Is there a staging or testing mode that does not consume your execution quota?
    • Are AI features included, or are they a paid add-on that compounds the per-site cost?

    Krom Automation passes all seven. The free versus Pro comparison covers exactly what is included at each tier so you can verify this yourself before committing.

    The Automation Stack We Recommend Deploying

    We covered the full reasoning behind our recommended per-site stack in the automation stack we deploy on every client build. The short version: one workflow automation layer handling triggers and actions, a self-hosted CRM or email list for data ownership, and flat licensing across all tools. Nothing billed per execution, nothing living on a vendor’s server that could be revoked.

    For the specific integrations that drive most client site automation, the Pro features and integrations overview covers all 24 Pro integrations in one place. Forms, e-commerce, CRM, email marketing, LMS, membership, messaging and productivity tools are all covered.

    Also from wpRigel

    Pollify is our Gutenberg-native poll, survey and quiz plugin. Polls are built directly inside the block editor as real blocks, with no shortcodes to paste and no separate interface to configure. It is the right tool when a client site needs audience feedback, NPS scoring or quiz-based engagement built into content pages.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K from anywhere in the admin, type what you want, and jump there without navigating menus. For agencies managing client sites with dense WooCommerce setups, Commandify is the only command palette with genuine order, product and customer commands built in.

    Our Verdict

    If you are running five or more client sites, per-task billing is the wrong default. The cost model is structurally unfavourable at agency scale, it creates margin risk when client sites grow, and it puts execution data on infrastructure you do not control. The right default is a self-hosted flat licence with unlimited executions and portable workflow exports.

    Krom Automation’s Enterprise plan at $369 per year, or $799 one-time, covers unlimited sites with every Pro feature included. That is the licence structure that works at 10 sites and still works at 50.

    Download the free version from the WordPress.org plugin directory and build your first workflow before committing to anything. The free tier includes 16 triggers, 21 actions and a full visual canvas with no execution caps and no trial period.

    Who should not act yet: agencies running fewer than three active client sites where automation volume is genuinely low. At that scale, the per-task cost stays manageable and the switching cost of migrating existing workflows may not be worth it. Build your next client site on flat licensing and migrate when the current contracts renew.

    See the full pricing breakdown and compare all three plans before your next client proposal.

    Frequently Asked Questions

    Do I need one Krom Automation licence per client site, or does one plan cover multiple sites?
    One plan covers multiple sites. The Standard plan covers 5 site activations at $199 per year. The Enterprise plan covers unlimited sites at $369 per year. You install the plugin on each client site and activate it against your licence key. There is no per-site billing and no usage-based charges.
    Can I manage automation across all client sites from one dashboard?
    Krom Automation is self-hosted, so each site has its own installation and its own workflow canvas. There is no centralised multi-site dashboard. Workflows export as portable JSON, so you can build a workflow once, export it, and import it across client sites without rebuilding.
    What happens if a client’s workflow fails while I am not watching?
    Krom Automation sends email failure notifications automatically and retries failed workflows with configurable backoff. The execution log shows a full per-step audit trail so you can identify exactly which action failed and why. Both features are included in the free version.
    Is per-task billing always more expensive than flat licensing for agencies?
    At low volume, per-task billing can cost less. The crossover point depends on your client mix. Based on the cost model in this article, flat licensing becomes cheaper than Zapier at roughly 2 to 3 active sites, and cheaper than Make at roughly 5 to 7 sites. Above that threshold, the gap widens every month.
    Are AI workflow features included in Krom Automation Pro, or is that a separate charge?
    AI actions are included in the free version with no paywall. Pro adds AI workflow generation, where you describe an automation in plain English and get a working workflow. You supply your own API key and pay your AI provider directly at standard rates. wpRigel does not charge per AI call and does not mark up token costs.
    What does client data residency look like under a self-hosted model?
    With Krom Automation, all workflow data, execution logs, API credentials and trigger payloads stay in the client’s WordPress database on their server. Nothing passes through wpRigel’s infrastructure. For clients in regulated industries or with GDPR obligations, this is the default you want, not an upgrade you have to request.

    The wpRigel Team

    September 15, 2026
    User Guide
  • Why Your Automated WordPress Emails Go to Spam

    Automated WordPress emails go to spam because WordPress uses PHP’s mail() function by default. That function sends from your server with no SPF record, no DKIM signature, and no domain alignment, which is exactly what modern spam filters are trained to reject. The fix is switching to authenticated SMTP, but the right fix depends on which emails are failing and why, and that diagnosis is where most guides skip over the detail you actually need.

    This guide covers every root cause: authentication gaps, shared IP reputation, content triggers, sending volume, and the Google and Yahoo policy changes that tightened bulk sender requirements in 2024 and 2025. It also covers the one thing most fix guides ignore: how to detect future failures automatically, before your customers notice them first.

    The diagnostic table below is a good starting point if you already have a hunch about the cause. If you want to understand each issue in depth, work through the sections in order.

    Quick Diagnostic: Symptom, Cause, and Fix

    Work through this table before anything else. Match the symptom you are seeing to the most likely cause, then jump to the relevant section for the full fix. Skipping ahead without this step wastes time.

    SymptomMost Likely CauseFix
    All WordPress emails land in spamPHP mail with no authenticationSwitch to SMTP with SPF and DKIM configured
    Emails reach inbox on Outlook but spam on GmailMissing or misaligned DMARC recordAdd a DMARC record; check From domain matches sending domain
    Emails worked fine, then suddenly started failingShared IP added to a blacklistCheck IP on MXToolbox; switch to a dedicated IP or reputable ESP
    WooCommerce order emails specifically are failingFrom address is a no-reply or generic domainSet From address to a real mailbox on your domain; confirm DKIM covers it
    Password reset and registration emails go to spamWordPress default From address (wordpress@yourdomain.com)Override the From name and address in your SMTP plugin settings
    Contact form notification emails land in admin spamFrom header set to the visitor’s email on a foreign domainSend from your own domain, put the visitor’s address in Reply-To only
    High-volume sends trigger spam filtersSudden volume spike from a shared IPWarm up a dedicated IP or use a transactional ESP with volume handling
    Emails pass SMTP but body content still flaggedSpam trigger words, broken HTML, or missing plain-text partAudit email content; add plain-text version; remove link shorteners
    Emails disappear entirely, no spam folderHard bounce or domain/IP on a major blocklistCheck domain reputation on Google Postmaster Tools; review bounce logs

    The Real Problem: PHP Mail Has No Identity

    WordPress ships with wp_mail(), which wraps PHP’s mail() function. By default it sends directly from your server without any cryptographic signature, without a matching return path, and often from an IP address shared with hundreds of other sites.

    Spam filters do not care that your email is legitimate. They check three things: does the sending IP have a clean reputation, does the domain authenticate the sender, and does the message content match known spam patterns. PHP mail fails the first two checks by design.

    PHP mail is not a deliverability tool. It is a server function that assumes the network will trust you. Modern spam filters assume the opposite until you prove otherwise.

    The volume of email going through shared hosting makes the problem worse. Your server’s IP is shared with other WordPress sites.

    If any of those sites send spam, get compromised, or hit bounce thresholds, every site on that IP inherits the reputation damage. You can run a clean operation and still land in spam because of a neighbour you have never met.

    Authentication: SPF, DKIM, and DMARC Explained in Plain Terms

    Email authentication is three DNS records that tell receiving mail servers who is allowed to send on your behalf. All three matter. Having two out of three still leaves gaps that Gmail and Outlook will flag.

    • SPF (Sender Policy Framework): A TXT record on your domain that lists the IP addresses and services authorised to send email from it. If your SMTP provider’s IP is not in this list, messages will fail SPF checks. One SPF record per domain, and it must not exceed 10 DNS lookups.
    • DKIM (DomainKeys Identified Mail): A cryptographic signature added to every outgoing message. The receiving server looks up your public key in DNS and verifies the signature. Tampering with the message in transit breaks the signature and triggers a fail. Your SMTP provider will give you a CNAME or TXT record to add.
    • DMARC (Domain-based Message Authentication, Reporting, and Conformance): A policy record that tells receiving servers what to do when SPF or DKIM fails, and where to send failure reports. Without DMARC, Gmail and Yahoo have no instruction from you on how to handle unauthenticated mail claiming your domain.

    A minimal DMARC record looks like v=DMARC1; p=none; rua=mailto:reports@yourdomain.com. Start with p=none to collect reports without blocking anything, then move to p=quarantine or p=reject once you have verified all your sending sources are authenticated.

    What Changed in 2024 and 2025 with Google and Yahoo

    Google and Yahoo both introduced mandatory bulk sender requirements in early 2024. From February 2024, any domain sending more than 5,000 emails per day to Gmail addresses must have SPF, DKIM, and a DMARC record in place. Domains without them are routed to spam or rejected outright.

    Yahoo applied the same thresholds. The enforcement tightened further in 2025 with stricter alignment requirements, meaning the From domain must match the domain covered by your DKIM signature. A mismatch that previously caused a soft failure now results in a hard spam classification on many providers.

    If your automated WordPress emails were working in 2023 and started failing in 2024, this is the most likely explanation. The emails did not change. The receiving server’s standards did.

    Switching from PHP Mail to SMTP

    The single highest-impact fix is replacing PHP mail with an authenticated SMTP connection. This requires two things: an SMTP plugin to override wp_mail(), and an SMTP service to route through.

    Popular SMTP plugin options include WP Mail SMTP, FluentSMTP, and Easy WP SMTP. All of them hook into WordPress’s mail system and redirect outgoing messages through an authenticated connection rather than the server’s PHP mail function. The plugin itself is not the deliverability layer; the SMTP service behind it is.

    For transactional email services, the main options fall into two categories:

    • Free tiers with volume limits: Brevo (formerly Sendinblue) allows 300 emails per day on the free plan. Mailgun has a 3-month trial with 5,000 emails per month. SendGrid allows 100 emails per day on the free plan indefinitely.
    • Pay-as-you-go services: Postmark, Amazon SES (roughly $0.10 per 1,000 emails), and Mailgun’s paid tiers. These are worth considering once your volume exceeds free tier limits or you need dedicated IP options.

    Configure the From name and From address inside your SMTP plugin settings. The From address must be on a domain where you control DNS, so you can add the DKIM record your SMTP provider requires. Using a Gmail or Outlook address as your From address causes DKIM misalignment because you are sending through your own SMTP provider while claiming to be from Google or Microsoft’s domain.

    Which Emails Are Failing? The Answer Changes the Fix

    Most deliverability guides treat “WordPress emails” as a single category. They are not. The cause of failure differs depending on which automated email is going to spam, and diagnosing the right one saves significant time.

    WooCommerce Order Confirmation Emails

    These fail most often because of the From address. WooCommerce defaults to woocommerce@yourdomain.com or whatever the site admin email is set to. If DKIM is configured for a different subdomain or the sending domain does not match, alignment fails.

    Check WooCommerce Settings Emails and verify the From Name and From Address fields. They must match the domain your DKIM record covers.

    If you use Krom Automation to send order-related follow-up emails, configure the Send Email action’s From field to the same authenticated address. You can see the full WooCommerce trigger and action options in the all free actions reference.

    Password Reset and User Registration Emails

    WordPress sends these from wordpress@yourdomain.com by default, with the From name “WordPress”. Neither the address nor the name builds trust with a spam filter. Override both in your SMTP plugin and point them to a real mailbox your domain owns.

    If you use Krom Automation to send a welcome email when a user registers, the welcome email automation guide walks through how to configure the trigger and action together, including setting the correct From details in the workflow itself.

    Contact Form Notification Emails

    This is the most misdiagnosed case. Many form plugins set the From address to the email the visitor submitted in the form. If that is a Gmail or Hotmail address, your server is claiming to send on behalf of Google or Microsoft, which SPF will fail immediately.

    The correct setup is to send from your own domain address and put the visitor’s email in the Reply-To header only. Krom Automation’s integrations with Contact Form 7, Gravity Forms, and WPForms all support this pattern. Trigger on form submission, send the notification from your domain, pass the visitor’s email through a merge tag into the Reply-To field.

    Setting the From address to the visitor’s submitted email is not a friendly touch. It is the most common reason contact form notifications land in spam.

    Content Triggers That Cause Spam Classification

    Authentication solves the identity problem. Content triggers are a separate issue that authenticated emails can still fail on. Spam filters analyse the body and subject line independently of sender reputation.

    Common content-level triggers to audit:

    • Spam trigger words in subject lines: “FREE”, “URGENT”, “Act now”, “Guaranteed”, “Winner” and similar phrases raise scores on most filters. This applies even to transactional emails like order confirmations if the subject line is written poorly.
    • HTML-only emails with no plain text alternative: Legitimate services send multipart messages with both HTML and plain text. A message with only an HTML body looks like bulk spam to filters. Most SMTP plugins add the plain-text part automatically, but verify it in your email header inspector.
    • Broken or excessive HTML: Deeply nested tables, inline styles exceeding several kilobytes, and unclosed tags all raise spam scores. If you build custom email templates, test the raw HTML through a tool like Mail-Tester before deploying.
    • Link shorteners and tracking pixels from unknown domains: Links pointing to shortened URLs or external tracking domains your recipients have never seen lower trust scores significantly. Use first-party tracking or your ESP’s built-in tracking, which resolves to a trusted domain.
    • Image-heavy emails with little text: A message that is 90 percent image and 10 percent text looks like a phishing attempt. Keep a reasonable text-to-image ratio and always include descriptive alt text.

    Shared IP Reputation and When to Use a Dedicated IP

    On shared hosting, your sending IP is shared with every other site on that server. One compromised site sending spam can blacklist the IP for everyone. You have no control over this and may not notice for days.

    Check your sending IP reputation at MXToolbox’s blacklist checker and Google Postmaster Tools. If you find your IP on one or more blocklists, delisting takes between 24 hours and 2 weeks depending on the list. The faster fix is switching to a transactional email service that uses its own IP infrastructure rather than your hosting server’s IP.

    A dedicated IP is worth considering when you send more than roughly 50,000 emails per month consistently. Below that volume, a clean shared IP on a reputable ESP like Postmark or Mailgun is more effective than a cold dedicated IP, because a dedicated IP with low volume looks suspicious to filters that expect high-volume senders on dedicated IPs. Warming a dedicated IP correctly takes 4 to 8 weeks of gradually increasing volume.

    Monitoring: The Step Everyone Skips

    Every guide covers the one-time setup. Almost none cover what happens three months later when something quietly breaks. A DNS record gets overwritten during a domain migration.

    A DKIM key rotates but the old record stays in DNS. A plugin update changes the From address back to the WordPress default.

    Set up at least these three monitoring layers:

    • Google Postmaster Tools: Free. Shows your domain reputation and spam rate as Google sees it. Check it monthly at minimum. A spike in spam rate means something changed and you need to find it before it compounds.
    • Failure notifications from your SMTP plugin: Most SMTP plugins can alert you when an email fails to send. Enable this and route alerts to an inbox someone reads. A silent failure is worse than a noisy one.
    • Workflow failure alerts in Krom Automation: If you use Krom Automation for automated emails, every execution is logged with a per-step audit trail. Failed executions trigger an email notification and an automatic retry with configurable backoff. Check the execution logs weekly and treat any failed Send Email action as a signal to investigate SMTP health, not just retry the workflow.

    A deliverability problem that goes undetected for 30 days is not a technical failure. It is a customer relationship failure.

    The emails were going out. Nobody was receiving them.

    Cost of Getting This Wrong: A Realistic Estimate

    The case for fixing this properly is easier to make when you attach numbers to the failure modes.

    ScenarioEstimated Cost or Impact
    WooCommerce order confirmation goes to spamCustomer emails support 2 to 4 times per order, adding 15 to 30 minutes of support time per affected order
    Password reset emails land in junkUser cannot log in, abandons the site; on a membership or SaaS site this is a direct churn event
    Lead follow-up from contact form missedProspect assumes no response and contacts a competitor; conversion lost
    Transactional ESP on pay-as-you-go planAmazon SES costs roughly $1 per 10,000 emails; Mailgun roughly $1 per 1,000 emails at entry tier
    Fixing a blacklisted IP versus preventing itDelisting takes 1 to 14 days; preventing it costs $0 by switching to a clean ESP before the blacklisting occurs
    Developer time to diagnose and fix from scratch2 to 4 hours at $80 to $150 per hour, or $160 to $600 per incident

    The authentication setup takes under an hour for most sites. The DNS propagation takes up to 48 hours but requires no further effort.

    The ongoing monitoring described above takes under 10 minutes per month. Every one of the costs in the table above is avoidable.

    The Complete Fix Checklist

    Work through these in order. Skipping to step 4 without completing step 2 is a common mistake that wastes time, because SMTP without authentication still fails DMARC checks.

    1. Install an SMTP plugin and connect it to a transactional email service. Configure the From name and From address to a real mailbox on a domain you control.
    2. Add an SPF record that includes your SMTP provider’s sending servers. Use your DNS provider’s TXT record editor. Verify with MXToolbox’s SPF checker.
    3. Add the DKIM record your SMTP provider gives you. This is usually a CNAME or TXT record under a subdomain like mail._domainkey.yourdomain.com. Verify with MXToolbox.
    4. Add a DMARC record starting with p=none and a reporting address you monitor. After 2 to 4 weeks of reviewing reports with no unexpected failures, move to p=quarantine.
    5. Fix your From addresses across every email-sending plugin: WooCommerce, contact form plugins, membership plugins, LMS plugins. They must all send from a domain your DKIM covers.
    6. Audit email content for spam trigger words, HTML-only messages, and link shorteners. Test with Mail-Tester before and after.
    7. Enable failure notifications in your SMTP plugin and in your automation plugin so silent failures surface immediately.
    8. Verify monthly using Google Postmaster Tools. A clean setup can degrade without warning if DNS is changed or a plugin resets a setting.

    If you use Krom Automation for any of your automated emails, the visual email builder lets you control the full message structure, including the plain text version, without editing raw HTML. Pair that with merge tags to inject dynamic data like order numbers, usernames, and product names into authenticated messages that pass every filter check.

    For teams running automation across multiple plugins and integrations, the automation stack we deploy on every client build covers how to structure SMTP, authentication, and monitoring so deliverability holds across different site configurations.

    Also from wpRigel

    Pollify is a Gutenberg-native poll, survey, and quiz plugin for WordPress. Polls are built as real blocks inside the editor with no shortcodes to paste and no separate interface to configure.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to search everything, navigate anywhere, and run admin actions without clicking through menus. It is the only WordPress command palette with real WooCommerce order, product, and customer commands built in.

    Our Verdict

    Automated WordPress emails going to spam is almost always a configuration problem, not a content problem. PHP mail with no authentication, a shared hosting IP, and a mismatched From address will send legitimate emails to spam even when the message itself is perfectly written. The fix is not complicated, but it requires doing all the steps, not just the first one.

    If your site sends any volume of transactional email, set up SMTP through a reputable ESP, add all three authentication records, and enable monitoring. Do it once, check it monthly, and this problem goes away. If you are managing this across multiple client sites, the 20 WordPress automations most sites should have covers the broader setup that supports reliable email delivery at scale.

    You can download Krom Automation free from the WordPress.org plugin directory to handle automated email workflows with execution logging, failure alerts, and a visual email builder included at no cost.

    For teams who want the full workflow automation layer alongside authenticated email delivery, see the Krom Automation Pro plans and compare what is included at each tier.

    Frequently Asked Questions

    Does switching to SMTP fix the problem immediately?

    SMTP fixes the sending path immediately, but DNS records take up to 48 hours to propagate. Emails sent during propagation may still fail SPF or DKIM checks. Wait 48 hours after adding records, then test with Mail-Tester or MXToolbox to confirm authentication is passing before declaring the fix complete.

    Why are my emails going to spam on Gmail but reaching the inbox on Outlook?

    Gmail applies stricter DMARC alignment requirements than most other providers. The most common cause of this specific pattern is a missing or misconfigured DMARC record, or a mismatch between the From domain and the domain covered by your DKIM signature. Check both in MXToolbox’s DMARC lookup and compare the From header in a raw email header inspector.

    Do I need a dedicated IP address to fix WordPress email deliverability?

    No, and below roughly 50,000 emails per month a dedicated IP can hurt rather than help. A cold dedicated IP has no reputation, which looks suspicious to filters. Use a reputable transactional email service on a clean shared IP until your volume justifies the 4 to 8 week warm-up process a dedicated IP requires.

    My contact form notifications go to my own spam folder. Is that a WordPress problem?

    Usually it is a From address problem. Most contact form plugins default to setting the From address to the email the visitor submitted, which means your server claims to send on behalf of Gmail, Outlook, or Yahoo.

    SPF fails immediately. Set the From address to your own domain and move the visitor’s email to the Reply-To header instead.

    What is the fastest way to check if my domain or IP is blacklisted?

    Run your sending domain through MXToolbox’s blacklist checker and your sending IP through the same tool separately. Google Postmaster Tools shows your domain reputation as Gmail specifically sees it, which is worth checking if Gmail is the main provider where failures are occurring. Both tools are free and return results in under a minute.

    Why did my WordPress emails suddenly start going to spam after working fine for months?

    The three most common causes of a sudden change are: your shared hosting IP was added to a blocklist by another site on the same server, a DNS record was overwritten during a domain renewal or migration, or a plugin update reset your From address back to a WordPress default. Check all three in that order before making changes.

    The wpRigel Team

    September 15, 2026
    User Guide
  • WooCommerce Order Alerts to Slack and SMS with Twilio

    You can route WooCommerce order alerts to both Slack and Twilio SMS simultaneously using Krom Automation Pro, with no code and no third-party middleware. One workflow, triggered by an Order Created or Order Completed event, fans out to both channels in under 30 seconds. Pro is required for the Slack and Twilio actions.

    The gap this fills is real. Tools like Zapier and n8n keep their tutorials at the “what’s possible” level.

    Nobody walks through the exact field names, the exact merge tags, and what actually breaks when order volume spikes or a Twilio API key expires. This guide does that.

    We will cover building the dual-channel workflow step by step, which fields map to which destinations, when to use Slack versus SMS, and the three failure modes that catch teams off guard.

    Browse the full feature list to see what else Krom Automation handles beyond order alerts.

    Quick Summary

    • Plugin required: Krom Automation Pro (free version handles WooCommerce triggers but Slack and Twilio actions are Pro only)
    • WooCommerce triggers used: Order Created, Order Completed
    • Destinations: Slack channel message, Twilio SMS to a fixed number or a dynamic customer number
    • Setup time: 15 to 20 minutes for both channels on one workflow
    • What you need: A Slack Bot token, a Twilio Account SID, Auth Token, and a purchased Twilio phone number

    What Gets Synced: Field Mapping Table

    Every field below is injected using a merge tag. Merge tags pull live data from the trigger event into the action fields at execution time, so the message your team receives contains the real order values, not placeholders.

    WooCommerce Order Field Merge Tag Where It Lands
    Order ID {{order.id}} Slack message body, SMS message body
    Order total {{order.total}} Slack message body, SMS message body
    Order status {{order.status}} Slack message body
    Customer full name {{order.billing_first_name}} {{order.billing_last_name}} Slack message body
    Customer email {{order.billing_email}} Slack message body
    Customer phone {{order.billing_phone}} Twilio “To” field (dynamic customer SMS) or logged in Slack
    Product names {{order.items}} Slack message body
    Payment method {{order.payment_method_title}} Slack message body
    Billing city {{order.billing_city}} Slack message body (useful for geographic routing)
    Admin order URL {{order.admin_url}} Slack message body as a clickable link

    The customer phone field deserves a note. If you want the SMS to go to the customer rather than your operations team, use {{order.billing_phone}} in the Twilio “To” field.

    If that field is blank in WooCommerce, the action fails. We cover that failure mode in the troubleshooting section below.

    When to Use Slack vs SMS

    Both channels carry the same order data, but they serve different team behaviors. Choosing the wrong one for a given situation adds noise rather than speed.

    Situation Better Channel Reason
    Team needs to discuss or act collectively on an order Slack Threaded replies keep context together; anyone on the channel can pick it up
    One person is on call and may not have Slack open Twilio SMS SMS arrives regardless of app state; no notification settings to misconfigure
    High-value order requiring immediate human attention Both Slack for the team record, SMS to the owner’s mobile as a redundant alert
    Customer confirmation of their own order Twilio SMS to customer phone Customers do not have Slack; SMS is the correct channel
    Store processing 100+ orders per day Slack only, with conditional filters SMS at that volume becomes a nuisance; use conditions to send SMS only above a threshold order total
    Subscription renewal or repeat order Slack only Routine events do not warrant interrupting a phone; log them for visibility only

    Sending every order to SMS is not a notification strategy. It is a way to train your team to ignore their phones.

    What You Need Before You Start

    Collect these credentials before opening the workflow builder. Missing any one of them mid-setup wastes time.

    • Slack Bot Token: Create a Slack app at api.slack.com, add the chat:write scope under OAuth and Permissions, install it to your workspace, and copy the Bot User OAuth Token (starts with xoxb-)
    • Slack Channel ID: In Slack, right-click a channel name, choose View Channel Details, and scroll to the bottom. The channel ID looks like C0123456789. Do not use the channel name; use the ID.
    • Twilio Account SID: Found on the Twilio console homepage under Account Info
    • Twilio Auth Token: Same location, next to Account SID. Treat this like a password.
    • Twilio “From” number: A purchased Twilio phone number in E.164 format, for example +14155551234
    • Krom Automation Pro installed and active: The free plugin must also be active alongside it. See the Pro installation guide if you have not done this yet.

    Step-by-Step Setup

    Step 1: Create a New Workflow

    Go to WordPress Admin Krom Automation Workflows Add New. The visual canvas opens on a blank workflow. Give it a name in the Workflow Name field at the top, for example “WooCommerce Order Alert: Slack + SMS”.

    Open the visual workflow builder documentation in a separate tab if this is your first time on the canvas. The builder uses ReactFlow with auto layout, so nodes snap into position automatically as you add them.

    Step 2: Set the Trigger

    Click Add Trigger on the canvas. From the trigger panel, select WooCommerce Order Created if you want the alert at the moment of purchase, or WooCommerce Order Completed if you want it when the order fulfillment is confirmed.

    For most physical goods stores, Order Created is more useful operationally. For digital or service stores, Order Completed avoids notifying the team before payment clears.

    No additional configuration is required on the trigger node itself. Save the node.

    Step 3: Add the Slack Action

    Click Add Action below the trigger node. Select Messaging Send Slack Message.

    Fill in the following fields exactly:

    • Bot Token: Paste your xoxb- token here
    • Channel ID: Paste the channel ID, for example C0123456789. Not the channel name.
    • Message: Write your alert text and insert merge tags using the tag picker on the right side of the field. A useful starting template: New order #{{order.id}}, {{order.billing_first_name}} {{order.billing_last_name}}, ${{order.total}}, {{order.admin_url}}

    Save the action node. The canvas now shows Trigger Slack Action.

    Step 4: Add the Twilio SMS Action

    Click Add Action again, parallel to the Slack node rather than below it. You want both actions to fire from the same trigger, not sequentially. Select Messaging Send SMS via Twilio.

    Fill in these fields:

    • Account SID: Your Twilio Account SID
    • Auth Token: Your Twilio Auth Token
    • From: Your purchased Twilio number in E.164 format, for example +14155551234
    • To: Either a fixed number for your operations team (for example +447911123456) or {{order.billing_phone}} if you want the SMS to go to the customer. Choose one, not both in the same action. Add a second Twilio action if you need both.
    • Message: Keep it under 160 characters to avoid multi-part SMS billing. A template that fits: Order #{{order.id}}: ${{order.total}} from {{order.billing_first_name}}. Check Slack for details.

    Save the action node. The full messaging integrations documentation covers every field for both Slack and Twilio in detail.

    Step 5: Add a Conditional Branch (Optional but Recommended)

    If you only want the SMS to fire for orders above a certain value, click Add Condition between the trigger and the Twilio action. Set the condition to Order Total [your threshold], for example 150.

    The Yes path fires the SMS. The No path fires nothing, or you can route it to Slack only.

    The conditions and branching documentation explains how to combine multiple order field conditions, for example filtering by product category or billing country alongside order total.

    Step 6: Test with the Simulator

    Before activating, click Simulate in the top toolbar. The workflow simulator runs a dry pass through every node using sample data and reports which actions would fire and with what values.

    No real Slack message or Twilio SMS is sent during simulation. This catches misconfigured tokens and bad merge tag syntax before a real order triggers the workflow.

    Once the simulation passes, toggle the workflow to Active and save.

    Test with the simulator before going live. A Twilio Auth Token pasted with a trailing space costs you the first real order alert and five minutes of debugging.

    What Does NOT Transfer

    Every integration article covers what works. This section covers what does not, because that is the part teams discover at the worst possible moment.

    • Order line item images: Slack cannot render WooCommerce product images via a bot message. You get product names via {{order.items}}, not thumbnails.
    • Refund and partial refund events: The Order Created and Order Completed triggers fire on creation and completion. They do not fire when a refund is processed. You need a separate workflow on Order Status Changed, filtered to the “Refunded” status.
    • Custom order meta fields: Fields added by third-party plugins, such as a custom delivery date picker, are not automatically available as merge tags. You need the HTTP Request action to fetch that data from the WooCommerce REST API if it matters for your alert.
    • Two-way SMS replies: Krom Automation sends outbound SMS via Twilio. It does not currently listen for inbound replies. If a customer texts back, that goes to Twilio only and does not appear in Slack or Krom Automation’s execution log.
    • Slack interactive buttons: The Slack action sends a standard text message. It does not support Block Kit buttons that trigger actions when clicked. For a “Mark as packed” button in Slack that updates WooCommerce, you would need the incoming webhook receiver plus a custom Slack app configuration.
    • Order edits post-creation: If an admin edits the order total or changes the shipping address after the fact, the original alert is not updated. The Slack message and SMS reflect the order as it existed when the trigger fired.

    Troubleshooting

    Failure Mode 1: Slack Message Not Arriving

    The most common cause is using the channel name instead of the channel ID in the Channel ID field. Slack’s API requires the ID format (C0123456789), not #orders or orders. The second most common cause is the bot not being invited to the channel.

    In Slack, type /invite @YourBotName in the target channel. Without that invite, the bot has the scope to post but not the access to the specific channel.

    Check the execution log in Krom Automation Execution History for the exact error code Slack returns. A channel_not_found error confirms the ID issue. A not_in_channel error confirms the invite issue.

    Failure Mode 2: Twilio SMS Fails with a 21211 Error

    Error 21211 from Twilio means the “To” number is not a valid phone number. This happens in two situations. First, the customer left the phone field blank in WooCommerce checkout, so {{order.billing_phone}} resolves to an empty string.

    Second, the number is in a local format like 07911123456 rather than E.164 format like +447911123456. Twilio requires E.164 for all numbers, including the “From” field.

    The fix for blank customer phones is a condition node before the Twilio action: check that {{order.billing_phone}} is not empty, and route the Yes path to the SMS action. The No path can post a note in Slack flagging the missing number.

    Failure Mode 3: Alerts Arrive Late or Not at All Under Low Traffic

    Krom Automation runs background execution via Action Scheduler, which depends on WP-Cron to fire. On a staging site or a low-traffic store where no page loads happen for hours at a time, WP-Cron fires late, and so does the workflow. The fix is a real server-side cron job that hits wp-cron.php every minute, replacing the default WordPress pseudo-cron.

    Most managed WordPress hosts offer this in the control panel. If yours does not, a five-line crontab entry handles it. This affects all Action Scheduler-based plugins, not only Krom Automation.

    A workflow that fires 40 minutes after an order lands is not an alert system. Cron on a low-traffic store needs a real server-cron job, not WordPress’s default pseudo-cron.

    Cost Breakdown: Year 1 and Beyond

    The question most teams do not ask until they get the invoice is what this actually costs across all the moving parts.

    Component Cost Notes
    Krom Automation Pro (Basic, 1 site, annual) $119/year Covers every Pro feature including all messaging actions
    Krom Automation Pro (Standard, 5 sites, annual) $199/year Useful for agencies running client stores
    Krom Automation Pro (lifetime, 1 site) $299 once Breaks even versus annual at 2.5 years
    Slack $0 for alerts A free Slack workspace receives bot messages. No paid Slack plan required for this use case.
    Twilio SMS (US domestic) ~$0.0079 per outbound SMS At 500 orders per month, that is about $4/month. International rates vary significantly.
    Twilio phone number ~$1/month Per number, per month

    At 500 orders per month, the Twilio cost for sending one SMS per order runs to roughly $5 per month. At 5,000 orders, that is $50 per month.

    wpRigel does not charge per workflow execution or per action at any tier, so the Krom Automation cost stays flat regardless of volume. The only variable cost is what Twilio charges.

    Going Further: Related Automations Worth Pairing

    The Order Created and Order Completed triggers are the most obvious starting points, but WooCommerce stores typically need a handful of other alert and action workflows running alongside them. The WooCommerce Subscriptions integration adds triggers for subscription renewals, failures and cancellations, all of which are worth routing to Slack for your retention team.

    If your store uses WPForms or Gravity Forms to collect pre-sale inquiries, those can feed into the same Slack channel using the WPForms integration or the Gravity Forms integration, so lead and order alerts live in one place without switching tools.

    For stores preparing for high-volume periods, the post on preparing your WooCommerce store for Black Friday covers the automation stack specifically worth having in place before a traffic spike. The 20 WordPress automations most sites should have is a useful checklist for anything beyond order alerts.

    Also from wpRigel

    Pollify is our Gutenberg-native poll, survey and quiz plugin. Every poll is a real block inside the block editor, so there are no shortcodes to paste and no separate interface to configure. It fits naturally into product pages, post-purchase thank-you pages, or any content where you want audience input without leaving the editor.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K from anywhere in the admin, type what you need, and get there without clicking through menus. It is the only command palette with real WooCommerce depth: you can search orders by number or customer name, change order status, and update product prices directly from the palette.

    Our Verdict

    If your WooCommerce store processes more than 30 orders per day and your team relies on refreshing the admin dashboard to know what is coming in, a Slack plus SMS alert workflow is not a nice-to-have. It is a basic operational requirement. Setting it up with Krom Automation Pro takes under 20 minutes, carries no per-execution fees, and keeps every credential and execution log inside your own WordPress database rather than a third-party platform.

    Who should not bother: stores doing fewer than 10 orders per day where the owner checks the dashboard regularly anyway. At that volume, the setup time exceeds the time saved for at least the first few months. Start with the free version on the WordPress.org plugin directory to get familiar with the workflow builder before committing to Pro.

    Who should act now: any agency managing WooCommerce stores for clients, any store with an operations team split across time zones, and any store where an order that sits unacknowledged for 30 minutes causes a real problem. See the full pricing and plan options and pick the tier that matches your site count.

    Frequently Asked Questions

    Do I need Krom Automation Pro to send WooCommerce alerts to Slack and Twilio?

    Yes. The WooCommerce triggers (Order Created, Order Completed) are available in the free version, but the Slack and Twilio SMS actions are Pro-only features. The free version supports 21 actions including HTTP Request, which is an alternative for advanced users comfortable building a custom webhook payload, but for a no-code setup you need Pro.

    Can I send the SMS to the customer instead of my team?

    Yes. In the Twilio action’s “To” field, use the merge tag {{order.billing_phone}} instead of a fixed number.

    If the customer did not provide a phone number at checkout, the action fails. Add a condition node before the Twilio action to check that the phone field is not empty, and route orders without a phone number to a Slack flag instead.

    What happens to my alerts if the Twilio API is down?

    Krom Automation logs the failed execution and retries automatically with configurable backoff. You will also receive a failure notification by email.

    The Slack action and the Twilio action are independent nodes, so a Twilio API outage does not prevent the Slack message from arriving. Your team still gets the order notification in Slack; only the SMS is delayed until the retry succeeds.

    Is there a limit on how many workflows I can run per month?

    No. Krom Automation does not impose per-execution limits or per-workflow caps at any plan tier.

    Every plan, including the free version, runs unlimited executions. The only external usage costs are from Twilio, which charges per SMS sent at approximately $0.0079 per message for US domestic numbers.

    Can I route different order values to different Slack channels?

    Yes, using conditional branching. Add a condition node after the trigger and set the rule to Order Total greater than your threshold. The Yes path points to a high-value-orders Slack channel, the No path points to a standard-orders channel.

    You can chain multiple conditions to create as many tiers as you need. Each branch is a separate Slack action node configured with a different Channel ID.

    The wpRigel Team

    September 14, 2026
    User Guide
  • How to Connect Google Sheets and Google Calendar in WordPress

    You can connect Google Sheets and Google Calendar in WordPress using Krom Automation Pro. One service account JSON file authenticates both Google services, so you configure credentials once and use them across any number of workflows. The integration covers logging WordPress events to a sheet, creating calendar events from a sheet row, and running both directions from a single workflow.

    Most tutorials reach for Google Apps Script or a third-party SaaS tool. Apps Script works, but it lives outside WordPress, has no execution history inside your admin, and breaks silently when a sheet column shifts. Krom Automation keeps everything inside your WordPress install, with per-step execution logs, automatic retry on failure, and a visual canvas you can hand to a client without explanation.

    This guide covers the exact setup steps, what syncs and what does not, the three failure modes you will actually hit, and the cases where this approach is the wrong fit. Browse the full feature list if you want the broader picture before diving in.

    What Gets Synced: Field Map

    Before touching any settings, confirm what data moves where. The table below shows the field on the left and where it lands on the right. Both directions are covered because a single workflow can do both at once.

    Source fieldDestinationNotes
    Trigger data (post title, user email, order ID)Google Sheets cell via merge tagAny merge tag from the trigger works. See the merge tags documentation for the full list.
    Workflow timestampGoogle Sheets date columnISO 8601 format. Format as a date in the sheet itself.
    Execution statusGoogle Sheets status columnUseful for audit logs. Write “Completed” as a static string.
    Sheet row: event titleGoogle Calendar event summary fieldMap to the Summary field in the Create Calendar Event action.
    Sheet row: start datetimeGoogle Calendar event startMust be ISO 8601. Format: 2026-09-01T09:00:00+01:00.
    Sheet row: end datetimeGoogle Calendar event endSame format requirement as start.
    Sheet row: descriptionGoogle Calendar event descriptionPlain text. HTML is stripped.
    Sheet row: locationGoogle Calendar event locationFree text string. Address or room name both work.
    Sheet row: attendee email(s)Google Calendar attendees listComma-separated. Calendar sends invite emails if notifications are on.

    The reverse direction, pulling calendar events back into a sheet on a schedule, requires a Schedule trigger combined with an HTTP Request action calling the Google Calendar API. That is a more advanced pattern and is covered in the troubleshooting section below.

    The Key Insight: One Service Account for Both

    Every other guide treats Google Sheets and Google Calendar as two separate credential setups. In Krom Automation, both integrations use the same service account JSON. You upload the file once, and every subsequent Sheets action and Calendar action in every workflow can reference it without re-authenticating.

    Configuring credentials once and reusing them across every workflow is not a convenience feature. It is the difference between a maintainable integration and one that breaks when someone rotates a key.

    This matters at scale. If you manage 20 client sites and each one has separate OAuth tokens per integration, a token rotation breaks them individually and silently.

    A service account credential is controlled at the Google Cloud project level. You rotate it once and update a single JSON file across all sites.

    Requirements Before You Start

    • Krom Automation Pro installed and active (free version does not include the Google integrations)
    • WordPress 6.2 or higher, PHP 7.4 or higher
    • A Google Cloud project with the Google Sheets API and Google Calendar API both enabled
    • A service account created inside that project, with a JSON key downloaded
    • The service account email address added as an editor on the target Google Sheet
    • The service account email address added as an editor on the target Google Calendar

    The last two steps are the ones people miss. A service account that cannot write to a sheet or calendar will fail silently in Apps Script but will log a clear error in Krom Automation’s execution history.

    Step-by-Step Setup

    Step 1: Create the Google Cloud Service Account

    1. Go to console.cloud.google.com and open or create a project.
    2. Navigate to APIs & Services > Library. Search for and enable Google Sheets API. Repeat for Google Calendar API.
    3. Go to APIs & Services > Credentials. Click Create Credentials > Service account.
    4. Give it a name, click Create and Continue, skip the optional role and user fields, then click Done.
    5. Click the service account you just created. Go to the Keys tab. Click Add Key > Create new key. Select JSON. Download the file.

    Store the JSON file securely. It is a credential, not a config file. Do not commit it to a repository.

    Step 2: Share Your Sheet and Calendar with the Service Account

    1. Open the target Google Sheet. Click Share. Paste the service account email (it ends in @your-project.iam.gserviceaccount.com). Set permission to Editor. Uncheck “Notify people”. Click Share.
    2. Open Google Calendar. Find your target calendar in the left sidebar. Click the three-dot menu next to it, then Settings and sharing. Scroll to Share with specific people or groups. Add the service account email. Set permission to Make changes to events. Save.

    Step 3: Connect the Service Account in Krom Automation

    1. In your WordPress admin, go to Krom Automation > Integrations.
    2. Click Google Sheets. Click Connect.
    3. In the Service Account JSON field, paste the full contents of the JSON file you downloaded. Click Save.
    4. Click Google Calendar. Click Connect. The same JSON field appears. Paste the same file contents. Click Save.

    Both integrations now share the same credential. The full setup detail is in the Google Sheets and Google Calendar integrations documentation.

    Step 4: Build the Workflow

    This example workflow triggers when a WooCommerce order completes, logs the order to a Google Sheet, and simultaneously creates a Google Calendar event for the fulfilment team.

    1. Go to Krom Automation > Workflows. Click Add New.
    2. On the canvas, click the trigger node. Select WooCommerce: Order Completed from the trigger list.
    3. Add your first action node. Select Google Sheets: Append Row.
    4. In the action settings panel, set Spreadsheet ID to the ID from your sheet URL (the long string between /d/ and /edit). Set Sheet Name to the exact tab name, for example Orders. Map your columns using merge tags: {{order.id}}, {{order.total}}, {{customer.email}}, {{workflow.executed_at}}.
    5. Add a second action node from the same trigger. Select Google Calendar: Create Event.
    6. Set Calendar ID to your calendar’s ID (found in Google Calendar settings under Integrate calendar, formatted as an email address). Set Summary to Fulfil Order #{{order.id}}. Set Start and End to tomorrow at 09:00 and 09:30 using the date merge tag with an offset. Set Description to Customer: {{customer.name}}, {{customer.email}}.
    7. Click Save. Toggle the workflow to Active.

    Because both action nodes branch from the same trigger, they execute in parallel. The sheet append and calendar event creation happen together, not sequentially. If one fails, the execution log flags it individually without blocking the other.

    Running sheet logging and calendar creation as parallel branches means one failure does not silently block the other. That is the kind of thing you only discover you needed after it goes wrong.

    Step 5: Test with the Workflow Simulator

    Before going live, use the built-in workflow simulator to run a dry test with zero side effects. The simulator shows you exactly what data would be written to each action without touching your live sheet or calendar. Check that the merge tags resolve to real values and that the datetime format is correct.

    Logging to a Sheet Only: The Audit Log Pattern

    Not every workflow needs a calendar event. The audit log pattern uses a single Google Sheets: Append Row action attached to any trigger. Common examples include:

    • User registrations logged with timestamp, email and referring URL
    • Form submissions logged from Gravity Forms, WPForms, or Fluent Forms with all field values
    • WooCommerce order status changes with old status, new status and order value
    • Failed login attempts logged with username and IP address

    This pattern requires no calendar access. The service account only needs editor access on the target sheet. For form-based logging, the Gravity Forms integration and WPForms integration both expose all submitted field values as merge tags you can map directly to sheet columns.

    What Does NOT Transfer or What Breaks

    Every integration guide should have this section. Nobody else writes it, which is exactly why it is the most useful part.

    LimitationImpactWorkaround
    Calendar events cannot be updated or deleted by Krom AutomationIf an order is refunded or a post is unpublished, the calendar event staysAdd a separate workflow on the relevant trigger to create a new “Cancelled” event, or use the HTTP Request action to call the Calendar API directly
    Sheet rows cannot be updated in placeAppend Row always adds a new row. There is no “find row and update” action in the current Pro releaseLog a new row with a status column. Use a formula in the sheet to show the latest status per ID
    Attendee invite emails depend on calendar notification settingsIf your calendar has notifications turned off, attendees are added silentlyAdd a Send Email action in the same workflow for guaranteed delivery
    Datetime merge tags output UTC by defaultA 09:00 local time event lands in the wrong slot if timezone offset is not appendedUse the offset format in the merge tag, or configure your WordPress timezone setting correctly under Settings > General
    Recurring events are not supported via the Create Event actionYou cannot set a weekly repeat rule through the current action fieldsUse the HTTP Request action to call the Calendar API with a recurrence array in the request body
    Pulling calendar events back into WordPress is not a built-in actionCalendar-to-sheet sync requires an HTTP Request to the Calendar API on a scheduleUse a Schedule trigger with an HTTP Request action calling events.list on the Calendar API, then a Sheets append for each returned event

    The “find row and update” limitation is the one agencies hit most often. If your use case requires updating a row when an order status changes, design the sheet with an append-only log from the start and use a Google Sheets formula to surface the current status. That is more robust than an in-place update anyway, because you retain the full history.

    Troubleshooting: The Three Real Failure Modes

    Failure Mode 1: Permission Denied on Append or Create

    The action executes but logs a 403 error. This almost always means the service account email is not an editor on the target sheet or calendar.

    Double-check by opening the sheet, clicking Share, and confirming the service account email appears with Editor permission. On the calendar side, go to Settings and sharing and confirm the service account appears under “Share with specific people” with “Make changes to events” selected.

    A second cause is that the API is not enabled in the Cloud project. Return to APIs & Services > Library and confirm both Google Sheets API and Google Calendar API show a green “API enabled” status.

    Failure Mode 2: Invalid Datetime Format on Calendar Create

    The calendar event fails to create and the execution log shows a 400 error with a message referencing the start or end field. Google Calendar requires full ISO 8601 format including timezone offset. 2026-09-01T09:00:00 will fail.

    2026-09-01T09:00:00+01:00 will succeed. Check your WordPress timezone setting under Settings > General and ensure the merge tag you are using outputs the offset.

    Failure Mode 3: Workflow Fires but Nothing Appears in the Sheet

    The execution log shows success but no new row appears. The most common cause is a mismatch between the Sheet Name field in the action and the actual tab name in the spreadsheet. The field is case-sensitive and space-sensitive.

    “Orders ” with a trailing space is not the same as “Orders”. Copy the tab name directly from the sheet rather than typing it.

    A second cause is writing to the wrong spreadsheet. The Spreadsheet ID in the action must match the ID in the sheet’s URL. Confirm by checking the URL: docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit.

    Cost to Run This vs. the Alternatives

    ApproachYear 1 costYear 2+ costMaintenance burdenExecution visibility
    Krom Automation Pro (1 site)$119$119/year or $0 after lifetimeLow. Managed inside WordPress.Full per-step execution log
    Krom Automation Pro (lifetime, 1 site)$299 once$0Low. No renewal to track.Full per-step execution log
    Zapier (Professional plan, ~1,000 tasks/month)~$228~$228/yearLow inside Zapier, but data leaves your serverTask history, limited detail
    Google Apps Script$0$0High. No UI, breaks silently, developer required to debugNone inside WordPress
    Make (Integromat) Core plan~$96~$96/yearMedium. External platform to learn and maintainScenario history, external

    The lifetime plan at $299 is the number to focus on for agency use. Across 5 client sites on the Standard plan ($499 lifetime), the per-site cost is $100 once, with no annual renewal and no per-execution charges. Zapier at ~$228/year per account adds up fast when you are managing a portfolio of sites.

    Apps Script costs nothing and breaks invisibly. That is a trade-off that only looks good until something stops working on a client site at midnight.

    The free vs Pro comparison breaks down every feature gate if you want to confirm exactly what requires Pro before purchasing.

    Who Should Use This Approach and Who Should Not

    This setup is the right fit when:

    • Your automation starts with a WordPress event (order, registration, form submission, post publish)
    • You want execution logs and failure alerts inside WordPress, not in a third-party dashboard
    • You are managing multiple client sites and want a single credential pattern
    • You need the data to stay on your server, not pass through a SaaS intermediary

    This approach is not the right fit when:

    • You need true bidirectional, real-time sync where calendar changes push back to WordPress automatically
    • You need to update existing sheet rows rather than append new ones
    • The trigger is entirely outside WordPress (for example, a calendar event created in the Google Calendar UI triggering an action elsewhere)
    • You need recurring event rules via the Create Event action

    For purely external automation between Google products with no WordPress involvement, a tool like Zapier or Make is the correct choice. Krom Automation is WordPress-native. If WordPress is not the starting or ending point, it is the wrong layer for the integration.

    If you work with other automation patterns, the post on 20 WordPress automations most sites should have covers how the Google Sheets logging pattern fits into a broader automation stack.

    Related Workflows Worth Building Next

    Once Sheets and Calendar are connected, the same service account credential is already available for every other workflow on that site. Common next steps include:

    • Logging FluentCRM contact activity to a sheet for reporting. See the FluentCRM integration documentation.
    • Creating a calendar event when a MemberPress subscription expires, to trigger a manual renewal call. See the MemberPress integration documentation.
    • Logging LearnDash course completions to a sheet for training record compliance. See the LearnDash integration documentation.
    • Sending a Slack or Discord message alongside the sheet append, so the team sees the log entry in real time. See the messaging integrations documentation.

    If you are building a full automation stack across client sites, the automation stack we deploy on every client build explains how these patterns layer together.

    Also from wpRigel

    Pollify is wpRigel’s Gutenberg-native poll, survey and quiz plugin. Polls are built as real blocks inside the editor, with no shortcodes and no separate admin interface. Results export to CSV, Excel, PDF and Word, and the Pro tier adds NPS voting, IP blocking and enriched analytics.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to search everything, jump to any screen, and run admin actions without navigating menus. It is the only command palette with genuine WooCommerce depth, covering orders, products, variations and customers as first-class commands.

    Verdict

    The Google Sheets and Google Calendar integration in WordPress is straightforward when you treat both services as a single credential problem. One service account JSON, shared once, authenticates both. Every workflow that follows can append to a sheet, create a calendar event, or do both in parallel without any additional authentication setup.

    The limitations are real. Row updates, recurring events and calendar-to-WordPress sync require workarounds or raw API calls.

    If those are your core requirements, be clear about that before you build. For the cases it does cover, the per-step execution log and automatic retry put it ahead of every Apps Script implementation we have seen survive longer than six months on a real client site.

    Download the free version from the WordPress.org plugin directory to explore the canvas and the free triggers. The Google integrations require Pro, which starts at $119 per year for one site or $299 as a lifetime licence. See full pricing details and compare plans before deciding.

    Frequently Asked Questions

    Does the Google Sheets and Google Calendar integration require Krom Automation Pro?

    Yes. Both Google integrations are Pro-only features.

    The free version of Krom Automation includes 16 triggers, 21 actions and the full visual workflow builder, but the Google Sheets and Google Calendar actions are not included. Pro starts at $119 per year for one site.

    Can one service account JSON file connect both Google Sheets and Google Calendar?

    Yes, and this is the setup we recommend. In Krom Automation’s integrations panel, you paste the same JSON into both the Google Sheets connection and the Google Calendar connection. Both integrations authenticate through the same service account from that point forward.

    What happens if the Google Sheets action succeeds but the Calendar action fails?

    Each action node is logged independently. A failure in the Calendar action does not roll back the Sheets append.

    The execution log flags the failed node, sends a failure notification to the email address you configure, and retries automatically with configurable backoff. You can inspect exactly which step failed and why without losing the data that did succeed.

    Can I update an existing sheet row when an order status changes, rather than appending a new one?

    Not with the current Append Row action. Krom Automation’s Google Sheets action appends new rows only.

    The recommended pattern is to log every status change as a new row with a status column, then use a Google Sheets formula such as MAXIFS to surface the most recent status per order ID. This preserves a full audit trail rather than overwriting history.

    Does this integration work in real time, or does it depend on WP-Cron?

    Workflows triggered by WordPress events (order completed, user registered, form submitted) execute immediately when the trigger fires, via Action Scheduler rather than WP-Cron. Delays depend on WP-Cron only if you add a Delay action to the workflow. On low-traffic sites where WP-Cron fires infrequently, configure a real server cron to call wp-cron.php on a schedule to ensure delays land on time.

    Can I log form submissions from Gravity Forms or WPForms to Google Sheets automatically?

    Yes. Both form plugins expose all submitted field values as merge tags inside Krom Automation.

    Set the trigger to the relevant form submission event, add a Google Sheets: Append Row action, and map each field merge tag to a sheet column. The Gravity Forms integration documentation covers the exact trigger and field names.

    The wpRigel Team

    September 14, 2026
    User Guide
  • The Automation Stack We Deploy on Every Client Build

    WordPress automation for agencies stops being a nice-to-have the moment you manage more than ten client sites. At that scale, manual follow-up on form leads, one-off welcome emails, and ad hoc user role assignments cost you roughly 8 to 12 hours a month in unbillable labour. We standardise the same core automation stack on every client build using Krom Automation, export each workflow as JSON, and import it on the next site in under two minutes.

    This is not a list of ideas. It is the actual stack we deploy, the workflows that pay for themselves, and an honest account of where automation creates risk as well as reward. If you are evaluating whether to standardise a tool across your agency or sell automation as a care-plan add-on, read this first.

    For a broader look at the automation landscape, the WordPress Automation Glossary is worth bookmarking before you get into tool comparisons.

    Browse the full Krom Automation feature list

    Why the Tool Choice Matters More for Agencies Than for Single Sites

    A single-site owner picks the tool that solves their immediate problem. An agency picks a tool that survives 50 client environments, stays maintainable when a developer leaves, and produces no per-execution billing surprises at month end. Those are fundamentally different criteria.

    External platforms like Zapier and Make are good tools. They become expensive and fragile at agency scale for three reasons: billing multiplies per client account, workflow data lives outside the client’s WordPress installation, and you own the integration glue rather than the client.

    If you offboard, the automations break. We have seen agencies inherit sites where the automation layer depended on a personal Zapier account that was cancelled two years earlier.

    If your automation layer breaks the moment someone cancels a subscription they forgot they owned, you did not build a system. You built a liability.

    A self-hosted, WordPress-native tool means the workflow data, execution logs and API credentials stay in the client’s own database. The client owns their automation history.

    You can hand off the site without unravelling a web of external accounts. That is the argument for native tooling, and it is a straightforward one to make to a client who has been burned before.

    The Six Workflows We Deploy on Every Build

    These are the automations that appear in every client proposal. They are ordered by impact. Work through them in this sequence because the first three eliminate the most manual labour, and skipping ahead to number five before number two is configured wastes time on a client site that still has unaddressed gaps.

    1. New User Welcome Sequence

    Every site that accepts registrations needs a welcome email. Without automation, this either does not happen or it happens via a plugin that sends a generic WordPress default. A proper welcome sequence, triggered on User Registered, sends a branded email with the user’s name injected via merge tags and optionally assigns a role or tags the user in a CRM like FluentCRM or ActiveCampaign.

    This is the first workflow we build on every site because it is also the demonstration workflow we show clients. The first workflow walkthrough in the documentation covers the exact setup steps.

    2. Form Lead Routing and Follow-Up

    Forms generate leads. Leads sit in an inbox. Nothing happens.

    This is the most common failure mode we see on inherited sites, and it is entirely preventable. A form submission trigger connects to an email action, a CRM contact creation, and optionally a Slack notification so the account manager knows within 30 seconds that a lead arrived.

    The specific setup depends on which form plugin the client uses. We have documented this for Gravity Forms, Contact Form 7, WPForms, and Fluent Forms.

    The automation shape is identical across all four. Only the trigger node changes.

    3. Post-Purchase Email and CRM Sync

    For WooCommerce clients, the Order Completed trigger fires a confirmation email, tags the customer in the email marketing platform, and optionally enrols them in a post-purchase sequence. Without this, the client’s marketing list and their actual customer list drift apart inside three months. The Mailchimp integration and FluentCRM integration both handle the subscriber sync side of this.

    4. Content Distribution on Publish

    Post Published fires when a new article goes live. The workflow posts a summary to the client’s LinkedIn page, sends the URL to a Google Sheet for the content team’s tracking spreadsheet, and triggers a notification in a Slack channel.

    The client stops manually announcing their own content. The social media integration documentation covers the exact node configuration.

    5. Internal Alert on Failed Payments or Subscription Changes

    For membership and subscription clients, a lapsed payment is a churn event. Without an alert, it stays invisible until someone checks the dashboard.

    A subscription status trigger fires a Slack or email notification to the account manager, giving the client a window to act before the customer churns. The WooCommerce Subscriptions integration and MemberPress integration both support status change triggers.

    6. Client-Facing Report Generation

    This one is less about the WordPress site and more about your care plan. A scheduled trigger running on the first of each month can pull execution data from Krom Automation’s analytics dashboard and push a summary to a Google Sheet, which becomes the basis for a monthly report. We have written about this pattern in more detail in automated WordPress reports without logging in daily.

    What the Standard Stack Costs to Run

    Cost at agency scale is almost never what the pricing page shows. It is what the pricing page shows multiplied by client count, plus the maintenance overhead nobody quotes you.

    ScenarioExternal platform (per client account)Krom Automation Pro (self-hosted)
    10 client sites$490 to $990/year across accounts$369/year, unlimited sites (Enterprise plan)
    30 client sites$1,470 to $2,970/year$369/year, same plan
    50 client sites$2,450 to $4,950/year$369/year, same plan
    Per-execution billing riskYes, spikes on high-traffic monthsNone, no run caps at any tier
    Workflow data ownershipExternal platform, not client’s serverClient’s own database
    Offboarding riskAutomations break if account closesZero, plugin stays active on site

    The external platform estimates above are conservative. They assume basic task volumes. Any client site with a WooCommerce store running a promotion or a membership site onboarding a cohort will push those figures higher in the same month.

    Krom Automation Pro’s Enterprise licence is $369 per year or $799 as a lifetime purchase for unlimited sites. There is no per-task billing at any tier. The free version, available on the WordPress.org plugin directory, includes 16 triggers, 21 actions and 20 ready-made workflow templates with no run caps and no expiry.

    At 30 client sites, a self-hosted automation tool running at $369 per year costs less than one month of a mid-tier external platform subscription. The maths is not close.

    JSON Export and Repeatable Deployment

    The feature that makes Krom Automation practical for agencies is workflow import and export as portable JSON. You build the welcome email workflow once on one client site, export it, and import it on the next site in under two minutes.

    The workflow structure transfers completely. You adjust the sender name and any client-specific field values, then activate.

    This matters because the alternative is rebuilding the same workflow from scratch on every new site, which takes 20 to 45 minutes per workflow depending on complexity. Across six standard workflows and 20 new client builds per year, that is 40 to 90 hours of setup time that disappears with an import workflow. At a $120 hourly rate, that is $4,800 to $10,800 recovered per year, or billed as setup fees rather than absorbed as overhead.

    The workflow settings documentation covers the exact import and export process, including how to handle merge tags that reference client-specific values.

    Building Your Agency Workflow Library

    We maintain a folder of exported JSON files, one per workflow template. The folder is organised by site type: WooCommerce, membership, LMS, lead generation. When a new build starts, we import the relevant set and spend the first session on client-specific configuration rather than structural setup.

    • WooCommerce set: order confirmation, post-purchase CRM sync, failed payment alert, cart recovery follow-up
    • Membership set: registration welcome, subscription renewal reminder, lapsed payment alert, role change notification
    • LMS set: course enrolment confirmation, completion certificate trigger, quiz failure follow-up
    • Lead generation set: form submission routing, follow-up sequence, CRM contact creation, internal Slack alert

    Each set is a ZIP of four to six JSON files. Import takes less time than explaining to a client what automation is.

    Automation as a Billable Service

    There are two ways to recover the cost of your automation infrastructure. The first is treating it as overhead that makes your team faster. The second is charging for it directly.

    The second model is more durable. Automation setup and ongoing management is a service clients understand because they can see what it does.

    A client who receives a monthly report showing 340 automated executions and a 98.2% success rate in the past 30 days has evidence that their care plan is working. That is a retention argument and an upsell argument in the same number.

    Service tierWhat is includedSuggested price rangeKrom Automation cost per site
    Basic care plan6 standard workflows, monthly report$150 to $250/month$0.62/month (Enterprise annual)
    Growth care plan12 workflows including integrations, quarterly review$350 to $600/month$0.62/month
    Automation setup feeInitial build, configuration, testing$500 to $1,500 one-time30 to 90 minutes of time
    Custom workflow buildBespoke automation outside the standard set$200 to $500 per workflow1 to 3 hours of time

    The Krom Automation cost per site figure above assumes the Enterprise annual licence ($369/year, unlimited sites) divided across 50 active client sites. At 30 sites the per-site cost is $1.03/month.

    At 10 sites it is $3.08/month. Even at 10 sites, a basic care plan priced at $150/month covers the tool cost inside three days of the billing cycle.

    What the Analytics Dashboard Tells You (and Why It Matters for Clients)

    Krom Automation’s analytics dashboard shows total executions, active workflow count, estimated time saved, failed execution count and an execution trend chart. The reports page adds date range filtering, per-workflow success rate and CSV export.

    That last one is the client-facing deliverable. Export the month’s execution data, drop it into a report template, and you have a concrete answer to the question every client eventually asks: “What am I actually paying for?” A 98% success rate across 400 executions is a better answer than “we handle your maintenance.”

    Failures matter as much as successes. A workflow failing 15% of the time looks identical to a working one from the outside until you check the execution log. Per-step audit trails mean you can identify whether a failure happened at the trigger, a conditional branch, or a specific action node, and fix it without guessing.

    Most competing tools put per-step logging behind a paid tier. In Krom Automation it is included in the free version.

    A monthly report showing 400 automated executions at 98% success is a better retention argument than any care plan pitch deck you will ever write.

    Where Automation Creates Risk and How to Manage It

    Honest account of the failure modes, because every tool has them and you will encounter all of these if you manage 50 sites.

    Delay Reliability on Low-Traffic Sites

    Delays in Krom Automation run via Action Scheduler, which piggybacks on WordPress Cron. On sites with very low traffic, WP-Cron fires late if nothing visits the site for hours.

    A delay set to 30 minutes can become a delay of 4 hours on a low-traffic client site. The fix is configuring a real server cron job on those sites, which takes under five minutes but needs to be part of your setup checklist.

    Auto-Update Risk on Complex Sites

    Plugin auto-updates and automation are not the same risk category, but they intersect. If a client site has a complex WooCommerce setup and you trigger a workflow on Order Completed, a plugin update that changes the order object structure can break downstream actions.

    We stage every update on a test environment before pushing to production on sites with active automation. This is not an automation-specific risk, but automation makes the consequences of a breaking update more visible and more immediate.

    AI Actions Require API Key Management

    Krom Automation’s AI actions (text generation, content moderation, auto-tagging) require the user to supply their own API key. wpRigel does not charge per AI call and does not mark up tokens.

    The client pays their AI provider directly. For agencies, this means managing API keys per client rather than centrally, which is the right ownership model but adds a setup step to the onboarding checklist.

    The Incoming Webhook Dependency

    Pro’s incoming webhook receiver gives each workflow a unique secret URL with HMAC-SHA256 signature validation. This makes it possible to receive data from external services, payment processors, booking platforms, anything that can send a POST request.

    The risk is that if you rotate the secret or change the workflow, you need to update the sending service. Document these connections explicitly in the client handoff notes.

    The Workflows We Do Not Standardise

    Not everything belongs in the standard stack. These are the categories we handle as custom builds rather than templates, because they require client-specific logic that cannot be generalised cleanly.

    • Billing and churn alerts tied to external payment data: anything that pulls from a payment processor API rather than WooCommerce or MemberPress needs bespoke configuration per client
    • Multi-step lead scoring: assigning points based on behaviour across multiple triggers is workflow logic that differs by industry and sales process
    • LMS completion and certificate workflows: LearnDash and TutorLMS both support completion triggers, but the actions after completion, grade thresholds, group assignments, certificate delivery, vary enough that templating produces workflows that need heavy editing anyway
    • Affiliate program automation: AffiliateWP triggers on registration, referral and payout events, but commission structures differ too much to standardise the action side

    Comparing Tool Categories, Not Just Tools

    The question we get most from other agency owners is whether to use a WordPress-native automation plugin or an external platform. Here is the honest comparison by decision factor, not by feature count.

    Decision factorWordPress-native (Krom Automation)External platform (Zapier/Make)
    Data ownershipClient’s database, alwaysExternal servers, third-party terms
    Billing modelAnnual or lifetime per licenceMonthly, per task or per connection
    Cost at 50 sites$369/year flat$2,450 to $4,950+/year
    Works without internetYes, runs inside WordPressNo, requires external service availability
    WordPress event depthDeep, 16+ native triggers free, 80+ ProShallow, depends on plugin’s Zapier integration
    Client handoffClean, plugin stays with siteRequires account migration or rebuild
    External service connections24 Pro integrations, webhook receiverThousands of app connectors

    External platforms win on breadth of third-party connectors. If the automation you need connects two external services with no WordPress involvement, a native plugin is not the right tool. But if the trigger or the action touches WordPress, a self-hosted tool is faster to configure, cheaper to run across multiple sites, and safer to hand off.

    For the six standard workflows above, every trigger and every action involves WordPress. The choice is straightforward.

    For a detailed comparison of the available options in this category, the agency-focused automation tool roundup covers the full landscape.

    Also from wpRigel

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K from anywhere in the dashboard to search posts, manage WooCommerce orders, switch plugins, or jump to any settings screen without clicking through menus. It is the only command palette with real WooCommerce order, product and customer commands built in, which makes it worth deploying on any client site where the owner manages their own store.

    Pollify is a Gutenberg-native poll, survey and quiz plugin. Polls are built directly inside the block editor as native blocks, so there are no shortcodes to paste and no separate interface to switch to. If you manage content-heavy client sites or community sites, it is a straightforward add to the standard plugin set.

    Our Verdict: Who Should Build This Stack and Who Should Not

    If you manage more than ten client sites and you are still handling welcome emails, lead routing and post-publish distribution manually or with a patchwork of single-purpose plugins, the stack described here will recover that time within the first billing month. The JSON export and import workflow alone saves 40 to 90 hours per year on new client builds. The Enterprise licence at $369/year costs less than one billable hour at most agency rates.

    If you manage fewer than five sites and your clients have simple, low-volume needs, the free version on the WordPress.org plugin directory covers the six standard workflows with no cost and no time limit. Start there.

    Who should not build this stack: agencies whose automation needs are primarily between external services with no WordPress involvement. If the client’s critical automations run Salesforce to Slack to HubSpot with no WordPress trigger or action, a WordPress-native tool is the wrong layer. Use the right tool for the job.

    For everyone else, standardise the stack, build the JSON library, and start charging for it. The margin is there.

    See full pricing details for Krom Automation

    Frequently Asked Questions

    Can I use one Krom Automation Pro licence across all my client sites?

    Yes. The Enterprise plan covers unlimited sites at $369 per year or $799 as a lifetime purchase.

    Every Pro feature is included at every plan level. The only difference between plans is the number of site activations.

    Does Krom Automation work without a WooCommerce installation?

    Yes. WooCommerce is optional.

    The WooCommerce-specific triggers and actions only appear if WooCommerce is active. The core triggers covering users, posts, comments and media work on any WordPress site running version 6.2 or higher.

    What happens to client automations if I offboard?

    Nothing breaks. The plugin and all workflow data live on the client’s server. Automations continue running as long as the plugin is active, with no dependency on your account or any external service you control.

    Can I automate client onboarding, from contract signing to site setup?

    Partially, using the incoming webhook receiver in Pro. When a contract is signed in a platform that can send a webhook, Krom Automation receives that payload and can trigger user creation, role assignment, and welcome email sequences on the WordPress side. The steps outside WordPress, such as project management task creation or invoice generation, require the external platform to fire additional webhooks to those services separately.

    Is the workflow simulator safe to use on live client sites?

    Yes. The simulator runs a dry-run pass through the entire workflow with zero side effects.

    No emails are sent, no posts are created, no CRM contacts are modified. It is specifically designed for testing on production environments where a full test execution would have real consequences.

    The wpRigel Team

    September 14, 2026
    User Guide
  • Preparing Your WooCommerce Store for Black Friday

    To prepare your WooCommerce store for Black Friday, start 8 to 10 weeks before the sale and work through four areas in order: infrastructure, automation, checkout, and post-sale follow-up. Most stores that fall over on Black Friday fail at step one. Most stores that lose revenue on Black Friday fail at step four.

    This guide is written for the person who is responsible if the store goes down: the developer, agency lead, or technical co-founder. It covers what breaks under peak traffic, which automation workflows to build before the rush, what to pause during peak hours, and how to turn one-time buyers into repeat customers in the weeks that follow.

    Start reading at least 8 weeks out. If you are inside 4 weeks, jump straight to the checklist, flag the infrastructure gaps, and deprioritise anything that requires a staging rebuild.

    Browse Krom Automation features

    Why WooCommerce Sites Fall Over on Black Friday

    The problem is not traffic volume. The problem is that WordPress and WooCommerce were not built to handle hundreds of concurrent database writes.

    Every order completion triggers a stock update, an order status write, a customer meta update, and a transient flush, all at the same time. On a shared hosting plan, that queue saturates in minutes.

    Three failure patterns account for the majority of Black Friday outages:

    • Database connection exhaustion: MySQL has a connection limit, typically 100 to 150 on shared plans. Concurrent checkout attempts breach that limit and return a 500 error to every user in the queue.
    • WP-Cron pile-up: WordPress Cron runs on page load. Under high traffic, scheduled tasks stack up, fire simultaneously, and compete for the same database resources as real users.
    • Object cache misses: Without a persistent object cache like Redis or Memcached, every page load re-queries the database for the same product data. At 300 concurrent visitors, that is 300 identical queries running in parallel.

    Fix these three before anything else. Every other optimisation is a rounding error by comparison.

    Infrastructure: What to Sort 8 to 10 Weeks Out

    Upgrade your hosting tier before the sale, not during it. Managed WordPress hosts like Kinsta, WP Engine, and Cloudways isolate PHP workers per site and provide a persistent object cache by default. Shared hosting does neither. If your store runs on shared hosting and you expect more than 50 concurrent visitors, the upgrade is not optional.

    Alongside hosting, configure a real server cron to replace WP-Cron. Add this line to your server’s crontab and disable WP-Cron in wp-config.php:

    • Add define('DISABLE_WP_CRON', true); to wp-config.php
    • Set up a system cron job to visit wp-cron.php every 60 seconds
    • Verify it is firing by checking Action Scheduler under WooCommerce Status Scheduled Actions

    A CDN handles static assets and reduces origin server load by 40 to 70 percent on image-heavy product pages. Cloudflare’s free tier covers most stores adequately. Enable it at least 4 weeks out so you can test behaviour at your cache rules before the rush.

    Shared hosting and a Black Friday sale is not a risk. It is a scheduled outage. The only variable is how long it lasts.

    The Pre-Black Friday Checklist

    Work through these in order. Skipping to coupons while your database connection limit is still at 100 is wasted effort.

    Task When Pass condition Risk if skipped
    Upgrade to managed or VPS hosting 8-10 weeks out Isolated PHP workers, Redis available Checkout fails under load
    Replace WP-Cron with server cron 8-10 weeks out Action Scheduler shows consistent fire times Automation and order jobs queue and delay
    Enable persistent object cache (Redis/Memcached) 8 weeks out Cache hit rate above 80% in host dashboard Repeated DB queries, slow pages under load
    Configure full-page caching, exclude cart and checkout 6-8 weeks out Cart page bypasses cache, product pages cached Stale cart data, or no caching benefit at all
    Enable CDN for static assets 6 weeks out Images served from CDN URL in browser dev tools Origin server handles every image request
    Set stock management to “Hold stock for X minutes” 4-6 weeks out WooCommerce Settings Products Inventory Overselling under simultaneous checkout pressure
    Build and test automation workflows 4-6 weeks out Dry-run via workflow simulator, zero errors Manual fulfilment bottleneck, missed follow-ups
    Create and schedule discount coupons 3-4 weeks out Coupons tested on staging with real cart scenarios Wrong discount applied, margin errors
    Run load test on staging environment 2-3 weeks out 500 simulated concurrent users, no 500 errors First real load test happens on Black Friday
    Test checkout end to end on mobile 2 weeks out Full purchase flow completed on iOS and Android Mobile users, now over 60% of BFCM traffic, convert poorly
    Schedule post-sale email sequences 1-2 weeks out Trigger fires on Order Completed, delays verified One-time buyers never return
    Pause non-essential automation during peak Day before Only order and fulfilment workflows active DB contention from background tasks during checkout

    Automation Workflows to Build Before the Rush

    Manual fulfilment does not scale past 50 orders per hour without errors. Krom Automation is a visual workflow builder for WordPress that connects WooCommerce events to automated responses on a drag-and-drop canvas. You build the response once, and it fires automatically every time the trigger fires, whether that is 10 orders or 1,000.

    The free version includes 16 triggers and 21 actions, with the Order Created and Order Completed WooCommerce triggers available at no cost. The workflows below cover the most critical Black Friday automation gaps.

    Workflow 1: Order Confirmation and Coupon Delivery

    Trigger: Order Completed. Action: Send Email using the visual email builder with a personalised thank-you and a 10% return-visit coupon.

    Use merge tags to inject the customer name, order number, and product list dynamically. This replaces the generic WooCommerce confirmation email with something that actually drives a second purchase.

    Workflow 2: Abandoned Checkout Recovery

    Trigger: a form submission or user login event, combined with a 60-minute delay. Action: Send Email referencing the incomplete order. Cart abandonment rates spike during Black Friday as shoppers compare prices across multiple tabs.

    A timed follow-up email, sent automatically rather than manually, recovers 5 to 15 percent of those sessions. See the full breakdown of cart abandonment approaches for WooCommerce for how to choose the right mechanism.

    Workflow 3: Post-Sale Review Request

    Trigger: Order Completed, with a 7-day delay using the delay and scheduling settings. Action: Send Email requesting a review.

    Sending this 7 days after delivery, rather than immediately after purchase, lifts response rates because the product has actually arrived. Schedule this workflow before Black Friday and let it run unattended through December.

    Workflow 4: Low Stock Alert to Slack or Email

    Trigger: Post Updated (stock meta change). Action: HTTP Request to a Slack or Discord channel, or Send Email to the fulfilment team.

    When a product hits a threshold, the relevant person is notified immediately rather than discovering the oversell after the fact. This workflow should stay active during peak hours because it is read-only and generates no database writes of its own.

    Workflow 5: Email List Sync on Order Completion

    Every Black Friday buyer who opts in should be added to your email list immediately. Connect Order Completed to your email platform using the Mailchimp integration, the FluentCRM integration, or the ActiveCampaign integration depending on your stack. Doing this manually after a high-volume sale guarantees contacts are missed.

    A workflow that fires 1,000 times without error is worth more than 10 manual processes done carefully. The manual version always has a bad day eventually.

    To test any of these workflows before the sale, use the built-in workflow simulator, which runs a dry pass with zero side effects. No emails sent, no database writes, no real orders touched. Run each workflow through the simulator at least once before you go live.

    See how Krom Automation compares

    What to Pause During Peak Hours

    Not everything should run during Black Friday. Some workflows generate database writes that compete directly with checkout processes. Pause these for the 24 to 48 hour peak window and re-enable them after the rush.

    • Image regeneration jobs: These are CPU and I/O intensive and should never run during a sale.
    • Scheduled backup plugins: Move the backup window to 3am rather than letting it fire mid-sale. A backup running during peak load can saturate disk I/O and slow every read query.
    • Plugin and theme update checks: Auto-updates during a live sale are high risk. Disable automatic updates for the 72-hour window around Black Friday.
    • Non-essential marketing automation: Pause any workflows unrelated to order processing. Tag cleanup, re-engagement campaigns, and analytics exports can wait 48 hours.
    • Search index rebuilds: If you run WooCommerce Product Search or ElasticPress, do not trigger a full re-index during the sale.

    Use Krom Automation’s workflow settings to pause individual workflows without deleting them. They retain their configuration and execution history and can be re-enabled in a single click.

    Checkout and Mobile: Where Most Stores Lose Money

    Over 60 percent of Black Friday traffic in 2025 came from mobile devices. Most WooCommerce checkout pages were not designed with a mobile keyboard in mind. Address forms with tiny tap targets, multi-step checkouts that reset on back-button, and payment forms that do not trigger the numeric keyboard for card number fields all cost conversions.

    Run a full purchase flow on both iOS Safari and Android Chrome at least 2 weeks out. Check these specifically:

    • Does the coupon field appear without hiding the cart total?
    • Does autofill work for address and payment fields?
    • Does the page reload on payment submission, or does it process inline?
    • Is the “Place Order” button above the fold on a standard phone screen?

    WooCommerce Blocks checkout (the block-based replacement for the classic shortcode checkout) generally performs better on mobile than the legacy template. If you have not migrated, Black Friday preparation is a reasonable moment to test the switch on staging.

    The Post-Sale Retention Problem Nobody Plans For

    Black Friday buyers are the hardest customers to retain. They came for a discount. The stores that convert them to repeat buyers are the ones that start a follow-up sequence before the sale ends, not after they have already gone quiet.

    Plan three post-sale touchpoints, all automated:

    1. Day 1 after delivery: A short email confirming delivery and offering support. Keep it operational, not promotional. This builds trust at the moment it is most fragile.
    2. Day 7 after delivery: A review request, as covered in Workflow 3 above. Include a single product photo and a direct link to the review form.
    3. Day 21 after purchase: A return offer. Not another Black Friday discount. A loyalty-framed offer: “Because you shopped with us during the sale, here is early access to our January collection.” This positions the relationship as ongoing rather than transactional.

    These three emails, built once and scheduled with a delay node in Krom Automation, run automatically through November and December with no manual intervention. The first 7 days automation pattern applies equally well here: the sequence that runs automatically always beats the one that depends on someone remembering to send it.

    The stores that treat Black Friday as a retention event, not just a revenue event, are the ones that still have those customers in February.

    What Does This Cost Across Multiple Sites?

    If you are managing this preparation for multiple client stores, cost scales differently than effort. The table below shows the total cost of running Krom Automation Pro across different agency scenarios over the first two years.

    Sites managed Plan needed Year 1 (annual) Year 2 (annual) Lifetime alternative
    1 site Basic $119 $119 $299 once
    Up to 5 sites Standard $199 $199 $499 once
    Unlimited sites Enterprise $369 $369 $799 once

    Every plan includes every Pro feature. The only difference is site count.

    For an agency managing 20 or more client stores, the Enterprise lifetime plan at $799 covers the entire portfolio with no renewal. The free version of Krom Automation is available on WordPress.org with no trial period and no run caps, which is the right starting point for a single store evaluating the platform.

    For broader context on which automation tools work best across WooCommerce stores, the full comparison of WooCommerce automation plugins covers the main options and where each one fits.

    Also from wpRigel

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump anywhere, search orders, products and customers, and run admin actions without clicking through menus.

    It is the only command palette with real WooCommerce depth: order status changes, customer lookups, coupon application and more, all from the keyboard. Useful year-round but particularly valuable during a high-volume sale when speed in the admin matters.

    Pollify is a Gutenberg-native poll, survey and quiz plugin. Polls are built as real blocks inside the editor, so there are no shortcodes to paste and no separate configuration interface. Useful for post-sale satisfaction surveys or product feedback collection in the weeks following Black Friday.

    Our Verdict

    If you are managing a WooCommerce store through Black Friday, the work that matters most is infrastructure hardening and automation setup, in that order. Coupon configuration and email campaigns matter, but they produce no revenue if the checkout is returning 500 errors or the order confirmation is never sent.

    Start with hosting, server cron, and object caching. Build the five core automation workflows in Krom Automation and test each one with the simulator before you go live.

    Pause non-essential background tasks for the 48-hour peak window. Then let the post-sale sequences run unattended through December.

    If you are already inside 4 weeks and have not started, prioritise the checklist items rated “Checkout fails under load” in the risk column. Everything else is secondary. The free version of Krom Automation covers the Order Created and Order Completed triggers and the Send Email action, which is enough to run workflows 1, 2, and 3 without spending anything before you have tested the approach.

    See Krom Automation pricing

    Frequently Asked Questions

    How early should I start preparing my WooCommerce store for Black Friday?

    Start 8 to 10 weeks before the sale for infrastructure changes, and 4 to 6 weeks out for automation and coupon setup. Articles and product landing pages need 8 weeks minimum to index and rank before late November traffic arrives.

    Why does my WooCommerce site slow down or crash during high traffic?

    The most common causes are database connection exhaustion, WP-Cron pile-up under concurrent load, and missing persistent object cache. Fixing all three before the sale removes the majority of crash risk. Managed hosting with Redis and a server cron replacement addresses all of them.

    How do I prevent overselling during the Black Friday rush?

    Enable stock management in WooCommerce Settings Products Inventory and set a “Hold stock for X minutes” value, typically 15 to 60 minutes. This reserves stock during active checkouts and releases it if the order is abandoned, preventing two buyers from completing purchase of the last unit simultaneously.

    What automation workflows are most critical to build before Black Friday?

    In priority order: order confirmation with a return-visit offer, abandoned checkout recovery with a 60-minute delay, email list sync on order completion, low stock alerts to your team, and a 7-day post-sale review request. Build and test all five before the sale rather than during it.

    What should I pause during the Black Friday peak window?

    Pause scheduled backups, image regeneration jobs, plugin auto-updates, search index rebuilds, and any marketing automation unrelated to order processing. These compete for the same database and server resources as live checkout requests. Re-enable them after the 48 to 72 hour peak window closes.

    How do I turn Black Friday buyers into repeat customers?

    Run three automated post-sale touchpoints: a day-one delivery confirmation, a day-seven review request, and a day-21 loyalty offer that is distinct from the original discount. These three emails, built once in a workflow tool and triggered on order completion, cover the full retention arc without manual effort.

    The wpRigel Team

    September 13, 2026
    User Guide
  • How to Connect MemberPress to ActiveCampaign

    MemberPress connects to ActiveCampaign natively through a built-in add-on, available on the Growth license tier and above. No third-party plugin is required for basic list and tag syncing. The native add-on covers new member signup, but it leaves cancellations, expirations, and failed payments entirely unhandled, which is where most membership CRM setups quietly break.

    This guide covers the full MemberPress ActiveCampaign integration: which add-on to install, the exact setup steps, what data syncs and what does not, and how to build the cancellation and expiration logic that the official documentation does not address. We also cover where Krom Automation fits when the native add-on runs out of road.

    If you are connecting a LearnDash site to ActiveCampaign instead, the LearnDash ActiveCampaign integration guide covers that flow separately.

    Browse the full Krom Automation feature list to see how it extends the native MemberPress integration beyond what the add-on handles.

    Which MemberPress Plan Do You Need?

    The ActiveCampaign add-on is locked to the Growth license tier and above. The Basic plan does not include it. If you are on Basic, your options are a plan upgrade, a third-party automation plugin, or a no-code bridge tool like Zapier or Make.

    MemberPress offers two separate ActiveCampaign add-ons, and choosing the wrong one causes real problems downstream:

    • ActiveCampaign Lists add-on: Adds members to a specific ActiveCampaign list when they subscribe to a membership level. Simple, works with standard email campaigns.
    • ActiveCampaign Tags add-on: Applies tags in ActiveCampaign based on membership level. More flexible for segmentation and automation triggers inside ActiveCampaign.

    For most sites running ActiveCampaign, the Tags add-on is the better choice. Tags are easier to use as automation entry points inside ActiveCampaign, and they let you apply multiple tags per member without moving people between lists. The Lists add-on works if your existing ActiveCampaign setup is structured around lists, but migrating away from lists later is painful work.

    Choosing the Lists add-on when your ActiveCampaign account is tag-driven is not a configuration problem. It is a structural mismatch that compounds every time you add a new membership level.

    What Gets Synced: Field-by-Field Breakdown

    The native MemberPress add-on syncs a limited field set. Understanding exactly what lands where prevents surprises when you go to build ActiveCampaign automations and find the data you expected is missing.

    MemberPress Field Where It Lands in ActiveCampaign Add-on Required
    First name Contact first name field Lists or Tags
    Last name Contact last name field Lists or Tags
    Email address Contact email (primary identifier) Lists or Tags
    Membership level name List assignment or tag applied Lists or Tags respectively
    Subscription status Not synced natively Requires Krom Automation or webhook
    Expiry date Not synced natively Requires Krom Automation or webhook
    Transaction amount Not synced natively Requires Krom Automation or webhook
    Payment method Not synced natively Requires Krom Automation or webhook
    Registration date Not synced natively Requires Krom Automation or webhook
    Custom profile fields Not synced natively Requires Krom Automation or webhook

    The native add-on handles contact creation and list or tag assignment at the point of signup. Everything else, including what happens when a subscription lapses, requires additional tooling.

    Step-by-Step Setup: Native Add-On

    These steps apply to both the Lists and Tags add-ons. The menu paths are identical. The only difference is which add-on you install and which field you configure per membership level.

    Step 1: Install the Add-On

    1. Log in to your WordPress admin.
    2. Go to MemberPress > Add-ons.
    3. Search for “ActiveCampaign” in the search field.
    4. Click Install Add-On next to either the Lists or Tags version.
    5. The add-on activates automatically. No separate activation step is needed.

    Step 2: Enter Your ActiveCampaign API Credentials

    1. Go to MemberPress > Settings.
    2. Click the Marketing tab.
    3. Select ActiveCampaign from the “Select a service” dropdown.
    4. Enter your ActiveCampaign API URL. This is your account URL, formatted as https://youraccountname.api-us1.com. Find it in ActiveCampaign under Settings > Developer > API Access > URL.
    5. Enter your ActiveCampaign API Key from the same Developer page.
    6. Click Connect. A green checkmark confirms a successful connection.

    If the Marketing tab is not visible, the add-on did not activate correctly. Return to MemberPress > Add-ons and confirm the status shows “Active” rather than “Install Add-On”.

    Step 3: Assign Lists or Tags per Membership Level

    1. Go to MemberPress > Memberships.
    2. Edit the membership level you want to configure.
    3. Scroll to the ActiveCampaign section in the edit screen. This section appears only after the add-on is active and the API credentials are saved.
    4. For the Lists add-on: select the ActiveCampaign list from the “List” dropdown. One list per membership level.
    5. For the Tags add-on: type the tag name into the “Tag” field. You can enter multiple tags separated by commas.
    6. Click Update to save the membership.
    7. Repeat for every membership level.

    New members who purchase that level will now appear in ActiveCampaign as a contact and receive the list assignment or tag on checkout completion.

    What Does NOT Sync: The Gaps That Break Real Workflows

    This is the section the official documentation skips. The native add-on fires on one event: successful membership signup. It does not respond to anything that happens after that moment.

    Here is what the add-on does not handle:

    • Subscription cancelled: A member cancels their recurring subscription. The tag or list assignment in ActiveCampaign is not removed. ActiveCampaign continues sending that person member-level content.
    • Membership expired: A non-recurring membership reaches its end date. No event fires to ActiveCampaign. The contact remains tagged as an active member indefinitely.
    • Payment failed: A recurring payment is declined. No notification goes to ActiveCampaign, so no dunning sequence can be triggered.
    • Membership upgraded or downgraded: A member moves between tiers. The old tag or list is not removed when a new one is applied, leaving contacts double-tagged.
    • Manual admin expiry: An admin expires a membership from the WordPress backend. No sync fires.
    • Custom profile fields: Registration date, expiry date, transaction amount, and any custom WordPress user meta fields do not sync to ActiveCampaign custom fields.

    A contact tagged as an active member six months after they cancelled is not a minor data inconsistency. It is a compliance risk and a deliverability problem rolled into one.

    These gaps matter most on sites with recurring subscriptions. If your membership model is primarily one-time purchases with no renewal, the native add-on may be sufficient. If you have recurring billing, you need to handle the post-signup lifecycle yourself.

    Handling Cancellations, Expirations, and Failed Payments with Krom Automation

    Krom Automation is a visual workflow automation plugin for WordPress that connects MemberPress events to ActiveCampaign actions on a drag-and-drop canvas. The MemberPress integration documentation covers the full list of available triggers and actions.

    The four CRM events every membership site needs to handle are signup, transaction completed, subscription cancelled, and membership expired. Here is how each maps to a Krom Automation workflow:

    MemberPress Event Krom Automation Trigger Recommended ActiveCampaign Action Why It Matters
    New member signup MemberPress: Member Signup Add contact to list; apply tag “member-active” Entry point for onboarding sequence
    Transaction completed MemberPress: Transaction Completed Update contact field with transaction amount and date Enables revenue-based segmentation
    Subscription cancelled MemberPress: Subscription Cancelled Remove tag “member-active”; apply tag “member-cancelled”; enter win-back automation Stops member content going to non-members
    Membership expired MemberPress: Membership Expired Remove tag “member-active”; apply tag “member-expired”; trigger renewal reminder Prevents expired contacts receiving member-only campaigns

    Each of these is a separate workflow in Krom Automation. The ActiveCampaign integration documentation shows the exact action fields for adding contacts, applying tags, removing tags, and updating custom fields from within a workflow.

    For sites also running WooCommerce Subscriptions alongside MemberPress, the WooCommerce Subscriptions integration documentation covers the equivalent trigger set for subscription lifecycle events.

    Building the Cancellation Workflow

    In Krom Automation, go to Krom Automation > Workflows > Add New. On the canvas, add the MemberPress: Subscription Cancelled trigger.

    Connect it to an HTTP Request action pointed at the ActiveCampaign API, or use the native ActiveCampaign action nodes to remove a tag and apply a replacement. The conditional branching documentation covers how to split the workflow by membership level, so Gold members and Basic members enter different win-back sequences.

    Use merge tags to pull the member’s email address, first name, and membership level name into the action fields dynamically. No hardcoding is required.

    Building the Expiration Workflow

    Add the MemberPress: Membership Expired trigger and connect it to the same tag-removal and tag-application pattern. If you want to fire a re-engagement email 3 days after expiry, add a delay node between the trigger and the email action. Krom Automation runs delays via Action Scheduler, so nothing blocks during page loads and the delay fires accurately regardless of whether anyone visits the site in the interim.

    The new user onboarding automation guide includes a worked example of a multi-step delay sequence that translates directly to a post-expiry re-engagement flow.

    Troubleshooting: Three Real Failure Modes

    Failure 1: The Marketing Tab Does Not Show ActiveCampaign

    This happens when the add-on is listed as installed but not active, or when it was installed before the API credentials were saved. Go to MemberPress > Add-ons and confirm the status reads “Active”. If it reads “Install Add-On”, click to install again.

    After confirming active status, go to MemberPress > Settings > Marketing, re-select ActiveCampaign from the dropdown, re-enter your API URL and key, and save. The credentials must be saved before the per-level configuration fields appear.

    Failure 2: New Members Are Not Appearing in ActiveCampaign

    Three causes account for the majority of cases:

    • The API URL is formatted incorrectly. It must include https:// and end without a trailing slash. The correct format is https://youraccountname.api-us1.com.
    • The list or tag was not saved on the specific membership level being purchased. Go to MemberPress > Memberships, edit the relevant level, and confirm the ActiveCampaign section shows a list or tag value.
    • The contact already exists in ActiveCampaign and the list requires double opt-in confirmation. If double opt-in is enabled on the ActiveCampaign list, contacts appear in ActiveCampaign but show as unconfirmed until they click the confirmation email. Turn off double opt-in for that list, or expect a confirmation delay.

    Failure 3: Tags Are Stacking After a Membership Upgrade

    When a member upgrades from a Basic to a Gold membership, the Gold tag is applied but the Basic tag is not removed. This is a known limitation of the native Tags add-on. The result is a contact tagged as both Basic and Gold, which breaks any segmentation logic in ActiveCampaign that treats these as mutually exclusive.

    The fix requires a workflow that fires on MemberPress: Subscription Expired or a membership change event, removes the previous tag, and applies the new one. This is not possible inside the native add-on.

    Handle it in Krom Automation with a conditional branch that checks the old membership level and removes the corresponding tag before applying the new one. The workflow settings documentation covers how to use the run-once-per-entity setting to prevent duplicate executions if the trigger fires more than once during the upgrade process.

    What to Expect at Scale

    The native add-on processes sync calls synchronously at checkout. On a shared hosting environment with 50 or more simultaneous checkouts, this adds latency to the checkout completion step. It is rarely a visible problem on sites with fewer than 200 concurrent members purchasing at once, but it is worth knowing if you run a large cohort launch.

    Krom Automation processes all actions via Action Scheduler in the background, so the checkout completes immediately and the ActiveCampaign sync fires within the next cron cycle, typically within 60 seconds on a site with regular traffic. The how Krom Automation works documentation explains the background processing model in full.

    For sites running multiple membership levels across 5 or more client sites, Krom Automation’s workflow import and export feature matters. A workflow built once exports as JSON and imports into any other site in under 2 minutes. The native add-on requires manual per-site, per-level configuration every time.

    Background processing is not a luxury feature. On a membership site, a checkout that hangs waiting for an API call is a checkout that sometimes fails.

    Krom Automation Pricing

    Krom Automation is free to download and install, with 16 triggers, 21 actions, and a fully functional visual workflow builder at no cost. The MemberPress triggers and the ActiveCampaign actions are Pro features. Pro plans start at $119 per year for a single site, $199 per year for 5 sites, and $369 per year for unlimited sites.

    Lifetime licences are available at $299, $499, and $799 respectively. Every Pro plan includes every feature, and the difference between plans is site count only.

    For an agency managing 10 client membership sites, the Standard plan at $199 per year works out to under $20 per site per year for full lifecycle automation including cancellations, expirations, and custom field sync. A developer building that logic manually would bill 4 to 6 hours per site. The maths are straightforward.

    Download the free version from the WordPress.org plugin directory to explore the workflow builder before committing to Pro.

    Also from wpRigel

    Pollify is a Gutenberg-native poll, survey, and quiz plugin. Every poll is a real block inside the editor, which means no shortcodes to paste and no separate interface to configure. It is the straightforward way to collect member opinions or run a quiz inside a membership site post.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to search everything, jump to any screen, and run admin actions without clicking through menus. It is particularly useful on membership sites where admins spend significant time looking up individual member records, because Commandify can find a user by name or email in under 2 seconds from anywhere in the admin.

    Our Verdict

    The native MemberPress ActiveCampaign add-on is worth installing if you are on the Growth plan and your workflow ends at signup. It takes under 10 minutes to configure, it works reliably for new member contact creation, and it requires no additional plugins. That covers roughly 40 percent of what a functioning membership CRM actually needs.

    If your site has recurring subscriptions, if members upgrade or downgrade between levels, or if you need anything to happen in ActiveCampaign when a membership lapses, the native add-on is not enough and you will discover that gap at the worst possible moment. Add Krom Automation alongside it, build the four lifecycle workflows described above, and your MemberPress ActiveCampaign integration will handle the full member journey rather than just the first transaction.

    Sites on the MemberPress Basic plan that cannot access the native add-on should go straight to Krom Automation. It handles the same signup sync plus the full lifecycle without requiring a MemberPress plan upgrade.

    See full Krom Automation pricing and plan details to find the right option for your site count.

    Frequently Asked Questions

    If a member cancels, will their ActiveCampaign tag be removed automatically?

    Not with the native MemberPress add-on. It fires only on signup and does not respond to cancellations, expirations, or payment failures. To remove or swap tags on cancellation, you need a workflow in Krom Automation or a similar automation plugin that listens for the subscription cancelled event and sends the corresponding update to ActiveCampaign.

    Can I sync different ActiveCampaign tags to different MemberPress membership levels?

    Yes. The Tags add-on lets you configure a separate tag per membership level inside the membership edit screen.

    Each level stores its own tag value, so a Gold member and a Basic member receive different tags in ActiveCampaign on signup. The limitation is that the add-on does not remove old tags when a member switches levels, which requires a separate workflow to clean up.

    What happens if a member’s payment fails mid-subscription?

    The native add-on does nothing. The member retains their tag or list assignment in ActiveCampaign while losing access on the MemberPress side, which means they may continue receiving member-level email campaigns despite having lapsed. Handling this properly requires a failed payment trigger connected to an ActiveCampaign update, which is available through Krom Automation’s MemberPress integration.

    Can I use Zapier or Make instead of the native add-on or Krom Automation?

    Yes, and it works for basic signup sync. Zapier and Make can watch for new MemberPress transactions and create or update contacts in ActiveCampaign.

    The trade-off is per-task billing: at 500 member signups per month, a Zapier Starter plan may cover it, but 5,000 monthly events across multiple membership sites pushes into higher tiers quickly. Krom Automation has no per-execution charge at any plan level.

    Does the MemberPress ActiveCampaign integration work with free memberships?

    Yes. The add-on fires on membership signup regardless of whether the membership is paid or free.

    A free membership signup creates the contact in ActiveCampaign and applies the configured list or tag exactly as a paid signup does. The transaction completed trigger in Krom Automation fires only on paid transactions, so build your free-membership onboarding workflow from the signup trigger rather than the transaction trigger.

    The wpRigel Team

    September 13, 2026
    User Guide
  • How to Connect LearnDash to ActiveCampaign

    LearnDash has no built-in ActiveCampaign integration. To connect the two, you need a third-party bridge: either Krom Automation (a native WordPress workflow plugin), WP Fusion, or a middleware service like Zapier. This guide covers all three approaches, gives exact setup steps for Krom Automation, and documents the failure modes that keep most integrations broken for weeks before anyone notices.

    The learndash activecampaign integration matters most at three points in the student lifecycle: enrollment, course completion, and quiz results. Get those three triggers firing reliably and you can automate everything else from upsell sequences to certificate delivery to cohort segmentation in ActiveCampaign.

    The setup is not complicated, but the defaults are wrong in two places and the errors are silent. Read the troubleshooting section before you go live, not after.

    Browse the full Krom Automation feature list to see every LearnDash trigger and ActiveCampaign action available before you start building.

    Which Integration Method Should You Use?

    Three realistic options exist. Each has a different cost structure, a different data depth, and a different maintenance burden. The table below answers the decision, not the feature list.

    MethodYear-one cost (1 site)LearnDash quiz data to AC fields?Tag-based enrollment (AC tag enrolls student)?Self-hosted data?
    Krom Automation Pro$119/yearYes, via Pro triggersYes, via incoming webhookYes, execution logs stay in your database
    WP Fusion~$247/year (Personal)Yes, deep field mappingYes, native featureYes
    Zapier$0 to $240+/year depending on task volumeLimited, depends on Zap structureYes, with a two-step ZapNo, data routes through Zapier servers

    WP Fusion is the deepest native option and worth the price if the integration is the core of your business. Zapier costs scale with task volume, which means a busy course site with 500 completions per month will pay far more than year-one estimates suggest. Krom Automation sits in the middle: native to WordPress, self-hosted, and cheaper at scale because there are no per-task fees at any tier.

    The rest of this guide uses Krom Automation. The conceptual steps for triggers and actions map across all three methods, so the logic applies even if you choose a different tool.

    What Gets Synced: Field Mapping Table

    Before building any workflow, confirm what data is available to pass. A tag applied at the wrong moment with the wrong data is harder to debug than a missing tag.

    LearnDash data pointWhere it lands in ActiveCampaign
    Student email addressContact email (creates or updates contact)
    Student first nameContact field: First Name
    Student last nameContact field: Last Name
    Course titleTag or custom field: e.g. “Enrolled: [Course Name]”
    Course IDCustom field: Course ID (useful for dynamic content)
    Completion dateCustom field: Completion Date (ISO 8601 format)
    Quiz score (percentage)Custom field: Quiz Score
    Quiz pass/fail statusTag: “Passed: [Quiz Name]” or “Failed: [Quiz Name]”
    Lesson titleTag or custom field: e.g. “Completed Lesson: [Lesson Title]”
    Group enrollmentTag: “Group: [Group Name]”

    Quiz score sync to a custom field is the piece most teams discover they needed six weeks after launch, when they want to segment “passed with distinction” from “scraped through.” Map it on day one even if you have no automation planned for it yet. Changing a custom field name in ActiveCampaign after workflows depend on it breaks those workflows silently.

    A tag applied at the wrong moment with the wrong data is harder to debug than a missing tag. Map your fields before you build, not after your first 200 students enroll.

    Setting Up the Integration with Krom Automation

    You need the Krom Automation free plugin plus the Pro add-on active on your site. The LearnDash triggers and the ActiveCampaign actions are both Pro features. The installation guide for Krom Automation Pro covers licence activation if you have not done that yet.

    Step 1: Connect Your ActiveCampaign Account

    1. In your WordPress admin, go to Krom Automation Settings Integrations.
    2. Find the ActiveCampaign card and click Connect.
    3. Enter your ActiveCampaign API URL (found in AC under Settings Developer, formatted as https://youraccountname.api-ac.com) and your API Key.
    4. Click Test Connection. A green confirmation means the credentials are valid and Krom Automation can reach your ActiveCampaign account.
    5. Click Save.

    If the test fails, the most common cause is a trailing space in the API URL or key. Copy the values fresh from ActiveCampaign rather than from a password manager that may have auto-filled incorrectly.

    Step 2: Build the Course Completion Workflow

    1. Go to Krom Automation Workflows Add New.
    2. On the canvas, click the trigger node and select LearnDash: Course Completed.
    3. In the trigger settings panel, choose the specific course from the Course dropdown, or leave it set to Any Course to catch completions across your whole catalogue.
    4. Click the plus icon below the trigger to add your first action.
    5. Select ActiveCampaign: Add Tag to Contact.
    6. In the Email field, insert the merge tag {{learndash.student_email}}. This pulls the completing student’s email from the trigger data automatically.
    7. In the Tag field, type the tag you want applied, for example Completed: Advanced SEO Course. You can also use Completed: {{learndash.course_title}} to generate the tag name dynamically from the course title.
    8. Click Save Workflow and toggle the workflow status to Active.

    The merge tags documentation lists every LearnDash variable available, including course ID, lesson title, quiz score, and group name. Use it as your reference when building the field mapping from the table above.

    Step 3: Add an Enrollment Trigger

    Repeat the workflow creation process with LearnDash: Course Enrolled as the trigger. Apply a different tag, such as Enrolled: {{learndash.course_title}}, and optionally add the student to an ActiveCampaign list using the ActiveCampaign: Add Contact to List action. This list can then be the entry point for your onboarding automation in ActiveCampaign.

    For the full reference of every available LearnDash trigger, including group enrollment, lesson completion, and quiz pass and fail events, see the LearnDash integration documentation.

    Step 4: Sync Quiz Results to Custom Fields

    1. Create a new workflow with the trigger LearnDash: Quiz Completed.
    2. Add the action ActiveCampaign: Update Contact Field.
    3. Set the Email field to {{learndash.student_email}}.
    4. Set the Field Name to the exact API field name from ActiveCampaign, for example quiz_score_advanced_seo. This must match what ActiveCampaign shows under Settings Custom Fields, including case.
    5. Set the Value to {{learndash.quiz_score}} for the percentage score, or use {{learndash.quiz_passed}} for a true/false value.
    6. Add a second action below: ActiveCampaign: Add Tag to Contact. Use conditional branching to apply different tags depending on whether the student passed or failed.

    The conditions and branching documentation explains how to set up the yes/no logic so a pass applies one tag and a fail applies another, all within a single workflow.

    Step 5: Reverse Direction, Enroll a Student When an AC Tag Is Applied

    This direction requires the Incoming Webhook Receiver in Krom Automation Pro. ActiveCampaign sends a webhook when a tag is applied, Krom Automation receives it, and the workflow enrolls the student in the correct LearnDash course.

    1. In Krom Automation, go to Workflows Add New and select Incoming Webhook as the trigger.
    2. Copy the unique webhook URL generated for this workflow.
    3. In ActiveCampaign, go to Automations New Automation and choose the trigger Tag is added. Select the relevant tag.
    4. Add a Webhook action and paste the Krom Automation URL into the URL field. Set method to POST.
    5. Back in Krom Automation, add the action LearnDash: Enroll User in Course.
    6. Map the User Email field using the webhook payload variable {{webhook.contact.email}} and select the target course from the Course dropdown.

    The incoming webhook documentation covers HMAC-SHA256 signature verification, which you should enable for any webhook that triggers course enrollment. Without it, anyone who discovers the URL can enroll arbitrary users.

    Testing Before You Go Live

    Do not test by manually completing a course on a live student account. Use the Workflow Simulator in Krom Automation to do a dry run with zero side effects. It fires the trigger with sample data, walks through every action, and shows you exactly what would be sent to ActiveCampaign without actually sending it.

    After the dry run, create a test WordPress user, enroll them in the course, mark it complete from the LearnDash admin, and check the execution log under Krom Automation Logs. You want to see a green success entry for every action in the workflow. The testing and simulator documentation covers both approaches.

    Testing by completing a real course on a live account is how you discover your automation emails a student three times. Use the simulator first, always.

    What Does NOT Transfer: The Honest List

    Every integration guide covers what works. This section covers what breaks or simply does not exist, because that is the information you actually need before committing to a setup.

    • Historical enrollment data does not sync retroactively. If you have 1,200 existing students, none of their past completions will fire into ActiveCampaign when you activate the workflow. You need a one-time import via CSV or a manual process. Plan for this before you launch a campaign targeting completions.
    • Course progress percentage does not sync natively. LearnDash tracks percentage completion internally, but there is no built-in trigger for “student reached 50% of course.” You can approximate this with lesson completion triggers, but not with a single percentage threshold.
    • Group leader actions do not fire student triggers. If a group leader marks a student’s course as complete from the group leader dashboard, the LearnDash course completion hook does not always fire. Test this specifically if you use group leaders.
    • Certificate URL is not available as a merge tag by default. If you want to email students their certificate link, you need a custom merge tag or a separate plugin that exposes the URL to WordPress hooks.
    • ActiveCampaign deals and pipelines are not accessible from LearnDash triggers. The integration touches contacts, tags, lists, and custom fields. Deal creation requires a separate workflow or a dedicated CRM-level setup.
    • Deleted contacts in ActiveCampaign do not block re-creation. If a student unsubscribes and is deleted from AC, the next enrollment trigger will recreate the contact. This is usually correct behavior but surprises teams who use ActiveCampaign deletions as suppression.

    Troubleshooting: The Three Real Failure Modes

    This is the section that competitors skip. If your learndash activecampaign integration is not working, one of three things is almost always wrong.

    Failure Mode 1: Tags Are Not Appearing in ActiveCampaign

    Check the execution log first. Go to Krom Automation Logs and find the workflow run that should correspond to the completion event.

    If the log shows a success but the tag is missing in ActiveCampaign, the problem is the tag name. ActiveCampaign creates tags dynamically, but if the tag name in your action contains a merge tag that resolved to an empty string, AC receives a blank tag name and silently does nothing.

    Confirm that {{learndash.course_title}} is resolving correctly by checking the log’s detail view, which shows exactly what value each merge tag had at execution time. If it is blank, the trigger fired before LearnDash had attached course data to the hook.

    Failure Mode 2: The Workflow Never Fires at All

    If the log shows zero entries for a workflow that should have triggered, the workflow is either paused or the trigger condition is too narrow. Check two things in order.

    • Open the workflow and confirm the status toggle is set to Active, not Paused.
    • Check the trigger’s Course dropdown. If you selected a specific course and the completion happened in a different course, the trigger correctly did not fire. Set it to Any Course temporarily and test again.

    If the workflow is active and the trigger is set to Any Course and it still does not fire, confirm that LearnDash is marking the course as complete rather than just the final lesson. The two hooks are different and some themes or completion plugins intercept one without firing the other.

    Failure Mode 3: Duplicate Contacts or Duplicate Tags in ActiveCampaign

    Duplicate tags usually mean the workflow is set to run multiple times for the same user. In Krom Automation, open the workflow settings and enable Run Once Per Entity. This prevents the same user from triggering the workflow a second time, which happens when a student is manually re-enrolled or when the LearnDash completion hook fires twice due to a caching plugin clearing transients mid-request.

    Duplicate contacts in ActiveCampaign happen when the same person has multiple WordPress accounts or when the email address passed by the merge tag does not match the case of the existing contact. ActiveCampaign is case-insensitive on email matching, but confirm that {{learndash.student_email}} is returning the account email and not a secondary address from a profile field. The ActiveCampaign integration documentation explains how the contact lookup and upsert logic works.

    Automating the Full Student Journey

    Once the three core triggers are working, enrollment, completion, and quiz results, you can automate the full student experience without touching either platform manually. A realistic workflow for a paid course looks like this:

    1. Enrollment fires: tag applied in AC, student added to onboarding list, welcome sequence starts.
    2. Lesson completion fires (optional, for engagement tracking): progress field updated in AC.
    3. Quiz failure fires: tag applied, support sequence triggered asking if they need help.
    4. Quiz pass fires: score written to custom field, different tag applied.
    5. Course completion fires: enrollment tag removed, completion tag applied, upsell sequence starts for the next course.

    The article on automating new user onboarding covers how to structure the welcome and engagement sequences in more detail, including delay timing between emails.

    If you also sell courses through WooCommerce, the enrollment trigger can be combined with a WooCommerce order completion trigger to ensure students are only enrolled after payment is confirmed. The WooCommerce Subscriptions integration documentation covers how subscription renewals can re-trigger enrollment for cohort-based courses.

    The completion trigger is not the end of the student relationship. It is the most reliable moment you have to start the next one. Most sites waste it with a generic “congratulations” email and nothing else.

    Krom Automation Pricing for This Integration

    The LearnDash and ActiveCampaign integrations are both Pro features. The free version of Krom Automation includes 16 triggers and 21 actions, none of which are LearnDash-specific. Pro starts at $119 per year for a single site or $299 as a one-time lifetime purchase.

    PlanSitesAnnualLifetime
    Basic1$119/year$299
    Standard5$199/year$499
    EnterpriseUnlimited$369/year$799

    Every plan includes every Pro feature: all 24 integrations, 80+ additional triggers, 60+ additional actions, and the incoming webhook receiver needed for the reverse enrollment direction. The only difference between plans is site count.

    There are no per-task fees and no execution caps. See full pricing details or download the free version from the WordPress.org plugin directory to test the canvas before committing.

    Also from wpRigel

    Pollify is a Gutenberg-native poll, survey, and quiz plugin for WordPress. Polls are built as real blocks inside the editor, so there are no shortcodes to paste and no separate admin interface to navigate. It is useful for course sites that want mid-lesson knowledge checks or post-completion satisfaction surveys without adding a separate tool.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump anywhere, search any post or user, and run admin actions without clicking through menus. It is the only command palette with real WooCommerce order, product, and customer commands built in, which makes it worth knowing about if your course site also runs a WooCommerce storefront.

    Frequently Asked Questions

    Does LearnDash have a native ActiveCampaign integration?

    No. LearnDash does not include a built-in ActiveCampaign connection. You need a third-party plugin such as Krom Automation or WP Fusion, or a middleware service such as Zapier, to pass data between the two platforms.

    Will the integration sync past course completions for existing students?

    No. Workflow-based integrations only capture events that happen after the workflow is activated.

    Existing completions will not retroactively sync to ActiveCampaign. You need a one-time manual import or a CSV upload to backfill historical data.

    Can I enroll a student in a LearnDash course automatically when I apply a tag in ActiveCampaign?

    Yes, but it requires the incoming webhook direction. ActiveCampaign sends a webhook when the tag is applied, Krom Automation receives it and runs a workflow that enrolls the user. This needs the Krom Automation Pro incoming webhook receiver and HMAC signature verification configured to prevent unauthorized enrollments.

    What happens if the student has no WordPress account when ActiveCampaign triggers enrollment?

    The enrollment action requires an existing WordPress user. If the student does not have a WordPress account yet, the workflow needs a preceding action: Create User, using the email address from the webhook payload. The Create User action in Krom Automation handles this and will update rather than duplicate if the email already exists.

    How do I know if the workflow is working or silently failing?

    Check the execution log under Krom Automation Logs after the first few real events. Each log entry shows the trigger data, every action that ran, the exact value each merge tag resolved to, and the response from ActiveCampaign’s API. A failure at the API response level shows the error message ActiveCampaign returned, which is almost always either an invalid field name or an expired API key.

    Is quiz score data available in the ActiveCampaign integration?

    Yes. The LearnDash Quiz Completed trigger exposes the score as a percentage, a pass/fail boolean, and the quiz title. You can write the score to an ActiveCampaign custom field and apply different tags depending on the pass/fail result using conditional branching in the same workflow.

    Compare all three Krom Automation plans and see which fits your site count and budget. A 14-day money-back guarantee applies to every plan, so you can test the full LearnDash and ActiveCampaign integration on a real site before committing.

    The wpRigel Team

    September 13, 2026
    User Guide
1 2 3 … 9
Next Page
wprigel logo

wpRigel builds innovative WordPress plugins for developers, marketers and agencies. Be with us, get more users for your business and increase conversion using our powerful tools.

  • x.com icon
  • linkedin icon

Products

  • Pollify
  • Commandify
  • Krom Automation (Now Live 🎉)

Company

  • Affiliate Program
  • About Us
  • Contact Us
  • Privacy Policy

Resources

  • Docs
  • Blog
  • Support Area
  • Refund policy

Comparisons

  • Commandify vs CommandUI
  • Pollify vs CrowdSignal
  • Krom Automation vs others

Changelogs

  • Commandify Changelog
  • Pollify Changelog
  • Krom Automation Pro Changelog

wpRigel 2026. All Rights Reserved

  • Terms of use
  • Privacy Policy
  • Cookie Policy