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
  • Login
Pricing
  • When an Automation Fails Silently on WordPress

    A WordPress automation that fails silently is more dangerous than one that crashes with an error. A loud failure produces a log entry, a notification, something you can respond to. A silent failure produces nothing.

    The workflow appears active, no alert fires, and the work it was supposed to do just doesn’t happen. This is the failure mode that leaves a WooCommerce order unconfirmed, a new member without a welcome email, or a course enrollment that never completes, sometimes for weeks.

    Most articles about WordPress automation failures focus on the visible kind: the “automated update has failed to complete” message, the .maintenance file, the PHP memory limit error. Those are easy to write about because the site tells you something went wrong. The harder problem is the failure that gives you no signal at all. That’s what this article is about, and it’s an observability problem, not a configuration one.

    We’ll cover why silent failures happen, how to detect them, how to build alerting that actually fires, and why partial failures are more operationally damaging than total ones. The framing throughout is for developers and agency owners managing automations across multiple sites, not single-site hobbyists.

    See how Krom Automation handles execution logging and failure alerting

    Why Silent Failure Is Worse Than a Crash

    When a workflow crashes with an exception, the execution state is wrong but your awareness is correct. You know something failed. You can check the logs, find the step, and fix it.

    When a workflow fails silently, both the execution state and your awareness are wrong simultaneously. You believe the automation is running. It isn’t.

    The operational cost difference is significant. A loud failure detected within an hour costs you the time to diagnose and fix it.

    A silent failure running undetected for 30 days costs you everything that workflow was supposed to do during that window: every welcome email that didn’t send, every Slack notification that didn’t fire, every contact that didn’t get added to your FluentCRM list. You don’t get those back.

    A crash is a problem. A silent failure is a debt you don’t know you’re accumulating.

    There’s also a compounding factor: silent failures erode trust in automation itself. When a team discovers that a workflow they relied on hasn’t been running for a month, the instinct is to go back to doing things manually. That’s the worst possible outcome, because manual processes don’t scale and they fail too, just more visibly.

    The Most Common Causes of Silent Failure in WordPress

    Understanding why automations fail silently is the first step toward detecting them. The causes generally fall into four categories.

    WP-Cron Reliability on Shared Hosting

    WordPress uses WP-Cron to schedule background tasks. WP-Cron is not a real cron job. It fires when a visitor loads a page, which means on low-traffic sites or during quiet periods, it can be hours late or miss entirely.

    A workflow scheduled to run at 09:00 on shared hosting might run at 11:30, or not until the next day. No error is thrown. The job just sits in the queue.

    This is the most common cause of silent delay failures. The automation isn’t broken, but its timing is completely unreliable, and nothing tells you that.

    The fix is to disable WP-Cron in wp-config.php and configure a real server cron to hit /wp-cron.php every 60 seconds. Until that’s done, any workflow using delay scheduling is operating on a best-effort basis.

    PHP Execution Limits

    Shared hosting providers typically set PHP execution time between 30 and 60 seconds. A workflow running an HTTP request to a slow external API, followed by a database write and an email send, can exceed that limit mid-execution. The process dies, the remaining steps don’t run, and depending on how the workflow engine handles the interrupt, no failure record is written. From the outside, the workflow appears to have run.

    Third-Party API Failures

    Any workflow that touches an external service, whether that’s a Mailchimp subscriber add, a Google Sheets row write, or a Slack message, depends on that service being available and responsive. When an API returns a 500 error or a timeout, the outcome depends entirely on how the automation layer handles it. If it doesn’t retry and doesn’t log the failure, you get silence.

    Conditional Branches That Route Incorrectly

    A workflow with conditional branching can route every execution down the wrong path if a condition is misconfigured. Every trigger fires, every execution completes, the logs show green, and the actual outcome is wrong. This is the most insidious type of silent failure because the automation technically ran.

    It just ran incorrectly. You’ll only catch it by checking outputs, not by checking whether executions completed.

    Partial Failures Are More Damaging Than Total Failures

    A workflow that always fails is easy to detect: the output is consistently missing. A workflow that fails 20% of the time is far harder, because 80% of executions produce the correct result.

    That success rate looks acceptable in aggregate. The 20% failure rate doesn’t show up unless you’re looking at per-execution outcomes, not totals.

    An 80% success rate on a critical workflow means 1 in 5 customers gets the wrong experience. That’s not a minor bug. That’s a systemic problem dressed as normal operation.

    Partial failures also have a specific cause pattern. They tend to be triggered by data edge cases: a user with an unusual character in their name, an order with a product in a category the workflow wasn’t configured to handle, a form submission with an empty required field that the workflow expects to be populated. The fix isn’t the workflow itself, it’s the missing input validation before the workflow runs.

    This is why per-execution logging matters more than aggregate dashboards. If you can only see “200 executions this week”, you can’t detect a 20% failure rate. If you can see each execution with its per-step result, you can spot the pattern immediately.

    What Good Execution Logging Actually Looks Like

    Most WordPress automation plugins offer some form of execution history. The question is what that history actually tells you. There’s a meaningful difference between these two logging levels:

    Logging levelWhat you can detectWhat you miss
    Workflow-level only (pass/fail)Total failures, complete workflow crashesPartial step failures, branch routing errors, API errors that didn’t throw
    Per-step audit trailWhich exact step failed, what data it received, what error it returnedNothing that happened, every step is visible

    Workflow-level logging is better than nothing. Per-step logging is what you need to diagnose a partial failure or a branch routing problem.

    Krom Automation logs every step of every execution, so you can see the exact data each node received and what it returned. That’s the level of detail that makes silent failures visible.

    The analytics dashboard shows total executions, active workflows, success rate, and failed execution count alongside an execution trend chart. The reports page adds date range filtering, per-workflow breakdown, and CSV export. Those two views together let you spot a declining success rate before the failure becomes a customer-facing problem. You can read more about how workflows are built and what data they capture in the Krom Automation overview documentation.

    Setting Up Failure Alerting That Actually Fires

    Detection through manual log review is not a monitoring strategy. For automation failures to be caught quickly, alerting needs to be automatic and immediate. Here’s the alerting hierarchy we recommend, ordered by how much difference each makes.

    1. Email failure notifications on first failure, the minimum viable setup. Configure your automation layer to send an email when any workflow execution fails. The email should name the workflow, the trigger event, the step that failed, and the error message. A generic “something failed” email wastes diagnostic time.
    2. Automatic retry with configurable backoff, a transient API error should not create a permanent failure. A retry schedule that attempts again at 5 minutes, 30 minutes, and 2 hours catches the majority of third-party service blips without intervention. Without retry, every API hiccup becomes a failed execution in your logs.
    3. Success rate thresholds, not just failure counts, alerting only on failure count misses the partial failure pattern. If you had 100 executions last week and 20 this week, that’s not a failure alert, it’s a volume drop. Alert on success rate falling below a threshold, not just on failures appearing.
    4. Messaging channel alerts for critical workflows, for workflows that touch revenue-critical processes, email alone is too slow. A Slack or Discord notification via the messaging integrations means the right person sees the failure within minutes, not the next time they check their inbox.

    Krom Automation handles points one and two natively: failure notifications go out by email and the retry mechanism uses configurable backoff. For point four, you can build a secondary workflow that triggers on a failed execution and posts to Slack. That’s the kind of meta-automation most teams don’t think to build until after a significant failure has already happened.

    The Observability Stack for WordPress Automation

    Treating automation as an observability problem means asking: at any moment, do I know the current state of every workflow, and would I know within 15 minutes if that state changed? Most WordPress sites would answer no to both. Here’s what a complete observability stack looks like.

    LayerWhat to monitorHow to catch failure within 15 minutes
    Execution healthSuccess rate per workflow over rolling 7 daysAlert when success rate drops below 90%
    Queue healthPending jobs older than 2x their expected intervalAlert if a scheduled workflow hasn’t fired within its window plus 10 minutes
    API dependency healthThird-party service response times and error ratesHTTP request action logs will show consistent timeouts before a full outage
    Data correctnessOutput records in destination systemsSpot-check: query the destination (FluentCRM contact count, Google Sheets row count) and compare to expected trigger volume

    The data correctness layer is the one nobody implements and the one that catches branch routing errors. If your WooCommerce Order Completed trigger should be firing roughly as often as new completed orders appear in WooCommerce, and it isn’t, something is wrong even if every execution shows as successful. Reconciling trigger volume against destination records is the only way to catch a correctly-executing but incorrectly-routing workflow.

    Using the Workflow Simulator Before Production

    The best time to catch a silent failure is before the workflow goes live. A dry-run simulator lets you fire a workflow against real or synthetic data without executing the actual actions, so you can verify that branch conditions route correctly, merge tags resolve to the expected values, and every step receives the data it needs.

    Krom Automation’s workflow simulator runs a complete dry run with zero side effects. You see the exact data each node would receive and the path each branch would take, without sending a single email or writing a single database record. Running the simulator against edge-case inputs, not just the happy path, catches the conditional routing errors that cause partial failures in production.

    The test cases worth running for any workflow are:

    • The expected happy-path input that should produce the desired output
    • An input where the primary condition evaluates false, to verify the No branch is configured correctly
    • An input with missing or empty fields that the workflow uses in merge tags
    • An input that represents a boundary case, such as a user with no assigned role, or an order with zero line items

    Four test cases takes about 10 minutes. Discovering a branch routing error in production after 500 executions have silently gone to the wrong path takes considerably longer to diagnose and remediate.

    What to Check When You Suspect a Silent Failure

    If you suspect a workflow has been failing silently, work through these checks in order. Skipping ahead wastes time if an earlier issue is the actual cause.

    1. Check execution volume against trigger volume. How many times did the trigger fire in the period you’re investigating? How many executions completed? A gap between those two numbers means some triggers didn’t produce executions at all, which points to a queue or WP-Cron problem.
    2. Check per-step logs for the failing executions. If executions ran but outcomes are wrong, the per-step log will show which step received bad data or returned an error. Most silent failures are visible at this level.
    3. Check the destination system, not just the workflow. If the workflow log shows success but the FluentCRM contact doesn’t exist, the issue is at the API layer. The HTTP request may have returned a 200 that contained an error body, which the workflow treated as a success.
    4. Check WP-Cron queue depth. If scheduled workflows are queuing but not firing, WP-Cron is the problem. Check the queue using a plugin like WP Crontrol and verify events are processing, not accumulating.
    5. Check PHP error logs for the relevant time window. A timeout or fatal error that killed a workflow process may not surface in the workflow logs at all, but it will appear in the server’s PHP error log.

    Hidden Costs Nobody Mentions

    Silent automation failures have costs that don’t appear in a post-mortem until someone does the arithmetic. For an agency managing 20 client sites, each running 5 to 10 automations, a 5% silent failure rate across all workflows means dozens of missed events per week. At an average manual task time of 8 minutes per event, that’s several hours of rework per week that nobody has budgeted for, because nobody knew it was needed.

    There’s also a compounding liability for WooCommerce sites. An order fulfillment workflow that silently fails on 3% of orders means 3% of customers don’t receive their confirmation, their shipping notification, or their digital download. Those customers open support tickets.

    Support tickets cost money to resolve, and they arrive without any context that automation was involved, so the connection to a workflow failure is rarely made. You can read more about the real cost structure of WordPress automation in our breakdown of what client automation costs per site.

    For sites handling sensitive workflows, such as membership access provisioning or course enrollment, a silent failure has a direct revenue impact. A student whose LearnDash enrollment didn’t complete after payment will request a refund if they can’t access their course.

    The workflow ran, the execution shows as complete, and the enrollment still didn’t happen. Without per-step logging, you have no way to explain what went wrong.

    The workflows you never check are the ones with the highest silent failure rate. Confidence in automation you haven’t verified is not confidence, it’s exposure.

    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 to paste and no separate configuration interface. It’s worth knowing about if you’re already using Gutenberg as your primary editor and want audience engagement tools that work the same way.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump anywhere, search everything, and run admin actions without clicking through menus. For agencies managing multiple sites, it’s the fastest way to navigate a WordPress admin, and it’s the only command palette plugin with genuine WooCommerce order, product and customer management built in.

    Our Verdict

    Silent automation failure is an observability problem, and it doesn’t have an observability solution on most WordPress sites because most WordPress automation tooling wasn’t built with observability in mind. The result is a large class of failures that are actively invisible: no alert, no log entry, no customer complaint until the damage has been running for weeks.

    Who needs to act on this immediately: any agency or developer running business-critical workflows on client sites, particularly anything touching WooCommerce orders, membership access, or email sequences. If you don’t have per-step execution logs and automatic failure alerting today, you are operating blind.

    Who can take a more measured approach: single-site owners running simple, low-stakes automations where a missed execution is inconvenient but not damaging. Set up email failure notifications as a minimum, and check execution volume monthly.

    What we would do: deploy Krom Automation for the per-step audit trail and built-in failure alerting, configure a real server cron instead of relying on WP-Cron, and build one meta-workflow that posts critical failures to Slack. That stack catches the vast majority of silent failures within 15 minutes of occurrence. The free version is available at the WordPress.org plugin directory with no trial period and no execution caps.

    For teams ready to move beyond reactive debugging, the full feature comparison and Pro plan details are on the Krom Automation pricing page.

    Frequently Asked Questions

    How do I know if a WordPress workflow is failing silently if nothing appears in the logs?

    Start by comparing trigger volume to execution count. If fewer executions completed than triggers fired, some events never reached the workflow queue, which points to a WP-Cron or queue processing problem. Then check the destination system directly: if expected records aren’t appearing in your CRM, email list, or database, the workflow may be executing but routing incorrectly.

    Can a WordPress automation show as “completed” even when it failed?

    Yes, in two scenarios. First, if a third-party API returns a 200 status with an error body, the automation layer may record a success even though the action didn’t complete.

    Second, if a conditional branch routes an execution to a path that does nothing, the workflow completes with no output and no error. Per-step logging and destination-side reconciliation are the only reliable ways to catch both of these.

    Does replacing WP-Cron with a real server cron actually fix silent failure?

    It fixes the timing and reliability problem, not all silent failures. A real server cron ensures scheduled workflows fire on time and that background execution queues don’t stall.

    It doesn’t fix API errors, misconfigured conditions, or PHP execution timeouts. It’s a necessary foundation, but not a complete solution.

    What’s the minimum alerting setup for a production WordPress automation?

    At minimum: email notification on first failure, and automatic retry on transient errors. That combination catches the majority of third-party API blips without manual intervention. For revenue-critical workflows, add a Slack or Discord alert via a secondary notification workflow so failures appear in real time rather than waiting for someone to check their email.

    How often should I review automation execution reports?

    Weekly for any automation touching revenue, access provisioning, or customer communication. Monthly is acceptable for low-stakes automations where a missed execution is recoverable.

    Don’t wait for a customer complaint to initiate a review. By the time a customer reports a missing email or access problem, the failure has typically been running for days.

    The wpRigel Team

    September 16, 2026
    User Guide
  • Zapier Pricing 2026: Every Plan, Real Task Costs, and What WordPress Sites Actually Pay

    Zapier’s Professional plan starts at $19.99 per month. Most WordPress sites running real automation pay two to five times that within 60 days.

    Here is the full breakdown of every plan, how task billing actually works, what trips people up, and whether it is worth it for a WordPress-first business.

    Quick answer: Zapier charges per action step, not per workflow. A five-step Zap costs five tasks every time it runs, not one. At 200 WooCommerce orders a month with a four-step order workflow, you burn 800 tasks before any other automation runs. The Professional plan includes 750.

    Running a WordPress site?

    Krom Automation is a visual workflow automation plugin that runs natively inside WordPress. No per-task billing, no external service, no overage surprises. See pricing to 60% off launch week with code GETFLAT60.

    krom Automation launch social

    Zapier pricing plans in 2026

    PlanMonthly (annual billing)Monthly (monthly billing)Tasks per month
    Free$0$0100
    ProfessionalFrom $19.99From $29.99750 to 2M+
    TeamFrom $69.00From $103.502,000+ shared
    EnterpriseCustomCustomCustom

    Two things on that table worth flagging immediately.

    The gap between annual and monthly billing is large. The Professional plan at the 2,000-task tier is $33.99 a month billed annually and roughly $50 billed monthly. That is a 47% premium for flexibility.

    The entry Professional price you see advertised, $19.99, buys 750 tasks. Most teams discover within two weeks that they bought the wrong tier.

    What a task in Zapier actually is

    Zapier charges by tasks, not by Zaps.

    A Zap is the automation. A task is each individual action step that runs successfully inside it. The trigger that starts a Zap is free. Filters, formatters and path logic steps are free. Every other action step costs one task every time it fires.

    This distinction matters once your automations have more than two steps. Almost nothing useful is a two-step Zap.

    A Zap that catches a new WooCommerce order, creates a contact in your CRM, adds them to Mailchimp, and posts a Slack alert uses four tasks per run. Not one. Every order consumes four tasks.

    At 200 orders a month, that single workflow burns 800 tasks. The Professional plan’s base allowance is 750.

    Zapier Pricing: The per-tier breakdown

    Free

    100 tasks a month. Two-step Zaps only, meaning one trigger and one action. No filters, no conditional logic, no multi-step flows.

    Suitable for a single simple relay, like saving Gmail attachments to Google Drive. The moment you need a filter or a second action, you have outgrown it. Most users hit that wall within a week of serious use.

    Professional

    The plan where Zapier actually becomes useful. Unlocks unlimited multi-step Zaps, filters, paths, webhooks, and all app connectors.

    Tasks per monthMonthly (annual)Monthly (monthly)
    750$19.99$29.99
    2,000$33.99$49.99
    5,000$66.99$99.99
    10,000$93.99$139.99

    Paths (conditional branching) and Autoreplay (automatic retry on failure) are Professional-only features. For any workflow where reliability matters, these are not optional.

    Team

    Starts at $69 a month billed annually. Adds shared Zap folders, multiple users with permission controls, and premier support. The task pool is shared across all users on the account.

    Team sizeMonthly (annual)Per person
    3 people$69$23.00
    5 people$69$13.80
    10 people$69$6.90

    The Team plan makes financial sense at around four or five active users. Below that, two separate Professional accounts at $19.99 each are cheaper unless you specifically need shared folders and permission controls.

    Enterprise

    Custom pricing, typically starting above $1,000 a month for most contracts. Adds SSO, audit logs, advanced admin controls, custom data retention, and a dedicated customer success manager.

    If you are negotiating Enterprise, bring documented task volume, team size, and competitor quotes. Zapier sales will move on price at annual commitments above $10,000.

    How overage billing works on Zapier

    When you exceed your monthly task allowance, Zapier keeps running your Zaps if pay-per-task billing is enabled. Overage tasks are billed at 1.25 times your plan’s per-task rate, capped at three times your included volume.

    On the Professional 750-task plan, your included per-task rate is roughly $0.027. Each overage task costs about $0.033.

    Pay-per-task billing is enabled by default for accounts created after January 2024. If it is disabled, your Zaps pause when you hit the limit until the next billing cycle.

    A user on the $19.99 Professional plan who hits overages twice in a busy month can land at $50 to $60 without changing anything about their setup.

    The premium app multiplier

    This is the hidden cost most people discover after their first bill.

    Zapier marks certain apps as premium in its directory. Connecting a premium app to your Zap doubles the task cost for that step. A Zap using two premium apps in sequence consumes four tasks per run instead of two.

    Before assuming your task count, check which apps in your stack carry the premium flag. If any do, every run through that Zap costs double what you calculated.

    What WordPress sites actually use with Zapier

    Most Zapier pricing articles model generic SaaS use cases. Here is what three common WordPress setups actually consume.

    WooCommerce store at 200 orders a month

    WorkflowSteps per runMonthly tasks
    New order to CRM, email and Slack3600
    Abandoned cart 2-email sequence280
    Review request 7 days after delivery1200
    Payment failure 3-email recovery336
    Total916 tasks

    916 tasks puts a store with 200 monthly orders over the 750-task Professional plan allowance before adding anything unusual. Real monthly cost at that volume: around $26 to $28 including overages.

    Membership site at 50 new sign-ups a month

    WorkflowSteps per runMonthly tasks
    Sign-up to welcome email, CRM and Slack3150
    Payment failed 3-email dunning327
    Renewal reminder sequence2100
    Forum post moderation alert1150
    Total427 tasks

    427 tasks stays inside the 750 cap at this volume. Add one more workflow or let the membership grow and you tip over. Real monthly cost: $19.99 until it grows.

    Course site at 100 completions a month

    WorkflowSteps per runMonthly tasks
    Course complete to certificate, CRM and next enrolment3300
    Lesson reminder emails1400
    New enrolment to Slack and email2200
    Total900 tasks

    900 tasks means 150 in overage every month on Professional. Real monthly cost: around $24 to $25 including overages.

    Zapier Pricing: The three places invoices surprise people

    Loops count per iteration

    A Zap that processes 50 rows in a loop burns 50 tasks for that step, not one. People audit their Zap count and feel safe. The meter cares about executions, not Zaps.

    AI steps share the task pool

    Zapier AI steps added in 2026 draw from the same task allowance as regular action steps. Adding an AI summarisation step to a Zap costs one more task per run.

    The Free plan is a sandbox

    Two-step Zaps with 15-minute polling rule out almost every real workflow. It exists to teach you the editor. Budgeting around it for a real business is the mistake.

    How to reduce your Zapier bill

    Consolidate Zaps that share triggers

    Three Zaps that each respond to a new order and write to different places can often become one multi-path Zap. Fewer runs means fewer tasks.

    Place Filter steps early

    A Filter at step 2 stops a six-step Zap when conditions are not met. Stopping at step 2 saves four tasks per skipped run.

    Audit inactive Zaps monthly

    Zapier keeps running Zaps you have forgotten about. A quarterly audit typically finds 20 to 30 percent of plans triggering with no useful output.

    Replace Formatter chains with one Code step

    Three Formatter steps cost three tasks. The same logic in one Code step costs one task. This requires basic JavaScript or Python but is worth learning for high-volume Zaps.

    Batch-trigger where you can

    Instead of triggering on every row update, use a scheduled Zap that processes a batch of rows hourly. Same outcome, a fraction of the task count.

    Is Zapier worth it in 2026

    Yes, in specific situations.

    Zapier connects more than 9,000 apps. No other automation platform is close. If your stack includes rare SaaS tools, Zapier almost certainly reaches them. The editor is the most beginner-friendly in the category. For low-volume, high-value automations, per-task pricing is genuinely cheap.

    The economics stop working in your favour once you are running serious automation volume. Overage billing is aggressive. There is no reseller pricing for agencies. The task ceiling is a structural limit, not a bug that will be patched.

    The tipping point is around $100 to $150 a month. At that spend and still hitting limits, re-running the ROI calculation against alternatives is worth the time.

    Automation platform comparison for WordPress 2026

    PlatformPricing modelFree tierMid-tier monthlyBest for
    ZapierPer task100 tasks$49 to $99Broad app coverage, non-technical users
    MakePer operation1,000 operations$9 to $29Visual builders, complex logic
    n8nPer execution or self-host freeFree self-host$20 to $50Developers, self-hosted infrastructure
    Krom AutomationFlat annual or lifetimeFree plugin$10 per month (yearly)WordPress-native automation

    Krom Automation belongs in a separate category from the others because it is not a SaaS platform at all. It is a WordPress plugin. All automation runs inside your own install. No external account, no task counter, no execution cap.

    What this means for WordPress-first sites

    Zapier is the right tool when your automations span a wide SaaS stack where WordPress is one small part of a larger operation.

    For sites where most events happen inside WordPress, the calculation is different. A WooCommerce order fires inside WordPress. A course completion fires inside WordPress. A membership sign-up fires inside WordPress. Routing those events out to an external service, paying per task to process them, and storing your workflow logic on someone else’s server is solving a WordPress problem with a non-WordPress tool.

    Krom Automation handles these natively. The same WooCommerce order triggers a confirmation email, a CRM update and a Slack alert on a drag-and-drop canvas inside your dashboard. 96 plus triggers, 81 plus actions, 25 integrations, 121 ready-made templates. One flat annual price, no task counter.

    Three-year cost comparison for the WooCommerce scenario above

    ZapierKrom Automation
    Year 1$312$119 (or $48 with GETFLAT60)
    Year 2$312$119
    Year 3$312$119
    3-year total$936$357

    The free version on WordPress.org includes 16 triggers, 21 actions and WooCommerce support with no task limits. The Pro version adds 25 integrations and 121 templates.

    See the full free vs Pro comparison and the integration docs for setup guides covering every supported plugin.

    How to choose your plan

    Just testing automations? Start on the Free plan. No commitment needed.

    Need multi-step Zaps working solo? Professional at the 750-task tier. Upgrade when you consistently hit the limit two months running.

    Three or more people sharing workflows? Team plan billed annually. The per-person cost drops sharply after four users.

    Need SSO, audit logs or dedicated support? Enterprise. Get two or three competitor quotes before negotiating.

    Bill above $100 a month and still constrained? Re-evaluate Make or a self-hosted alternative. The migration cost is one-time. The savings are monthly.

    Running automation primarily on a WordPress site? A native WordPress plugin eliminates the per-task model entirely. See how Krom Automation compares.

    Frequently asked questions

    What counts as a task in Zapier?

    A task is counted each time an action step in a Zap runs successfully. The trigger is free. Filters, formatters and path steps are free. Every other action step costs one task per execution. A five-step Zap with one trigger and four actions costs four tasks every time it runs.

    What happens when I run out of Zapier tasks?

    If pay-per-task billing is enabled, your Zaps keep running and you are charged 1.25 times the per-task rate on your plan for each overage task, capped at three times your included volume. If pay-per-task is disabled, Zaps pause until your next billing cycle.

    Is the Zapier Free plan enough for a small business?

    Rarely. The 100-task cap and the two-step limit rule out multi-step workflows. It works as a sandbox for testing the editor. Most businesses outgrow it within the first week of serious use.

    Can agencies manage multiple clients on one Zapier account?

    Technically yes, but there is no native multi-client or reseller structure. All tasks from all clients run against a single pool billed to one account, with no built-in way to attribute or invoice by client. For agencies managing more than a handful of clients this becomes a significant operational problem.

    Is there a Zapier alternative with no per-task billing for WordPress?

    Yes. Krom Automation is a WordPress plugin that runs automation natively on your own install with a flat annual licence and no execution caps. For WordPress-native events like orders, form submissions, course completions and membership activity, it replaces Zapier entirely without the per-task model.

    How does Zapier compare to Make on price?

    Make is significantly cheaper at equivalent mid-tier usage. Make’s Core plan starts at $9 a month for 10,000 operations versus Zapier’s $49 a month for 2,000 tasks. The units are not identical, but in practice Make delivers more execution volume per dollar at most usage levels. The trade-off is a steeper learning curve.

    Stop paying per task for WordPress automation.

    Krom Automation connects any WordPress event to any action on a visual canvas. 96 plus triggers, 25 integrations, 121 ready-made templates. One flat price. Runs on your own server. 60% off launch week with code GETFLAT60. See all plans

    The wpRigel Team

    September 16, 2026
    Tools
  • WooCommerce Low Stock Notification Emails: Complete Setup Guide

    WooCommerce low stock notification emails work out of the box, no plugin required, but the settings are not where most people look. The alert is enabled at WooCommerce > Settings > Products > Inventory, not under Settings > Emails, and the recipient defaults to your store admin address. This guide covers the complete setup, how to send alerts to multiple recipients including suppliers, how to set per-product thresholds, and what to do when the emails stop arriving.

    The native system covers the basics and costs nothing. Where it falls short is routing, per-product control, and anything that happens after the alert lands in an inbox. For stores that need more than one recipient or want to trigger a restocking workflow automatically, we will cover both the native path and the automation layer that closes the gap.

    If you want to go further than a single email to a single address, Krom Automation handles the downstream workflow without requiring a third-party SaaS subscription.

    Where WooCommerce Low Stock Email Settings Actually Live

    This is the question that generates the most support threads. Developers and store managers search under WooCommerce > Settings > Emails, find nothing related to stock, and assume the feature does not exist. It does exist, but it is controlled from a different screen.

    The correct path is WooCommerce > Settings > Products > Inventory. The relevant fields on that screen are:

    • Manage stock: must be checked. Without this, no stock tracking occurs and no alerts fire.
    • Low stock threshold: the inventory level that triggers the email. Default is 2, meaning the alert fires when stock drops to 2 units.
    • Out of stock threshold: separate from the low stock alert. Set this to 0 unless you want products marked out of stock before they actually reach zero.
    • Notifications: two checkboxes. “Enable low stock notifications” and “Enable out of stock notifications”. Both default to enabled but can be toggled independently.
    • Notification recipient(s): a single email field. This is where the alert goes. It defaults to your WordPress admin email.

    The actual email template is controlled at WooCommerce > Settings > Emails > Low Stock. That is where you set the subject line, email type (plain text or HTML), and whether the notification is enabled at all.

    If the checkbox under the Emails tab is unchecked, no alert fires regardless of what the Inventory tab says. Both settings must be active.

    What the Native WooCommerce Low Stock Email Contains

    Understanding what the alert actually sends helps you decide whether the default is enough or whether you need a custom template or an additional workflow.

    Field in the email Where the data comes from
    Product name Product title in WooCommerce
    Product SKU Inventory tab on the product edit screen
    Current stock quantity Stock quantity field on the product
    Low stock threshold that triggered the alert Global threshold from Settings > Products > Inventory, or per-product override
    Product edit link Direct link to the WooCommerce product editor
    Recipient address Notification recipient field in Settings > Products > Inventory

    The alert does not include supplier contact details, reorder quantities, lead times, or any store branding beyond your site name. If your restocking process needs any of that information in the email itself, you are looking at a custom template or an additional automation layer.

    Setting Per-Product Low Stock Thresholds

    The global threshold at Settings > Products > Inventory applies to every product that has stock management enabled. A threshold of 2 makes sense for a high-volume consumable but is dangerously low for a product with a 6-week supplier lead time.

    To override the threshold for a specific product, go to the product edit screen and navigate to Product data > Inventory. Check Enable stock management at product level, then set the Low stock threshold field to your product-specific number.

    This overrides the global setting for that product only. Products without a per-product override continue using the global threshold.

    For product variations, the same logic applies at the variation level. Expand the variation, enable stock management for that variation, and set the threshold there. Each variation can carry its own threshold independently of the parent product and of every other variation.

    A global threshold of 2 works for toilet paper. For a product with a 6-week lead time, it is a guarantee you will stock out before the reorder arrives.

    Sending Low Stock Alerts to Multiple Recipients

    The notification recipient field in WooCommerce accepts a single email address. If you need alerts to reach a warehouse manager, a supplier, and a store owner simultaneously, the native field cannot do it without a workaround.

    The two practical options are:

    • Email alias or distribution list: set the recipient field to a shared inbox or group address that forwards to multiple people. This requires no plugin and works immediately. The limitation is that everyone on the list gets every alert, with no filtering by product category or supplier.
    • Automation workflow: use a tool like Krom Automation to intercept the low stock event and send separate, targeted emails to different recipients based on conditions. This approach lets you route alerts about specific product categories to the relevant supplier while sending a summary to the store owner.

    For the automation approach, the workflow builder walks through the exact steps for creating a conditional branching flow. You can use the WooCommerce Order triggers alongside post meta conditions to segment by product tag, category, or any other attribute.

    Step-by-Step: Enable and Configure the Native Low Stock Email

    Work through these in order. Skipping to the email template before confirming stock management is enabled will waste time because the template setting has no effect if the inventory tab is not configured first.

    1. Go to WooCommerce > Settings > Products > Inventory.
    2. Check Enable stock management if it is not already checked.
    3. Set Low stock threshold to the number that makes sense for your slowest-moving product. You can override this per product later, so start conservative.
    4. Confirm Enable low stock notifications is checked.
    5. Enter the recipient address in the Notification recipient(s) field. For a distribution list, enter the group address here.
    6. Click Save changes.
    7. Go to WooCommerce > Settings > Emails.
    8. Find Low Stock in the email list and click Manage.
    9. Confirm Enable this email notification is checked.
    10. Edit the Subject and Heading fields if the defaults do not match your team’s workflow. The default subject is “Low stock: {product_title}” and the default heading is “Product stock is running low”.
    11. Set Email type to HTML, Plain text, or Multipart depending on your mail client preferences.
    12. Click Save changes.

    To verify the configuration is working without waiting for stock to drop naturally, reduce a test product’s stock quantity to just above your threshold, then manually reduce it by 1. The alert should fire within a few minutes, depending on how your server processes WooCommerce hooks.

    What the Native Setup Does NOT Handle

    This is the section the marketing pages leave out. Knowing the gaps before you rely on the native system prevents the kind of failure that only becomes visible when a product stocks out unexpectedly.

    • One recipient only: the Notification recipient(s) field sends to one address. Multiple addresses entered with commas do not work reliably across all WooCommerce versions and hosting configurations.
    • No supplier routing: there is no way to send the alert to a different address based on the product’s supplier, brand, or category. Every alert goes to the same inbox.
    • No reorder information: the email tells you stock is low. It does not tell you what to order, how much, or from whom. That context has to come from your own documentation or a separate system.
    • No back-in-stock customer notification: the native system notifies the admin when stock drops. It does not notify customers when stock is restored. That requires a separate plugin or a custom workflow.
    • No escalation: if the alert is ignored and stock reaches zero, there is no second alert or escalation to a different contact. The out-of-stock email fires once to the same address.
    • No CSV export or audit log: there is no record of when alerts fired, which products triggered them, or whether the alert was acted on.
    • Variable products alert at the variation level, not the parent: if you have stock management on variations, the alert fires with the variation name and ID. The parent product does not aggregate and alert. This surprises store owners who only check the parent product in the admin.

    The native low stock email tells you a problem exists. It does nothing to help you solve it, route it to the right person, or track whether anyone acted on it.

    Building the Downstream Workflow: What Happens After the Alert

    No competitor guide covers this part. Receiving a low stock alert is step one. The actual work is what happens in the next 30 minutes: finding the supplier contact, placing the reorder, updating the product status, and notifying customers who may be waiting.

    With Krom Automation, you can build that response once and run it automatically every time a low stock event fires. A complete restocking workflow might look like this:

    • Trigger: WooCommerce Order Completed fires when an order drops stock to the threshold level.
    • Condition branch: check product category or tag to identify the supplier.
    • Action 1: Send Email to the store admin with product name, SKU, current quantity, and a direct link to the product editor.
    • Action 2: HTTP Request to your supplier’s ordering API or a Google Sheet that logs the reorder request. The Google Sheets integration handles this without code.
    • Action 3: Update Post Field to add an internal note to the product, timestamping when the reorder was triggered.
    • Delay: wait 48 hours.
    • Action 4: Send a follow-up email if the stock has not been updated, escalating to a second contact.

    The conditions and branching documentation shows how to set up the Yes/No paths that route alerts to different suppliers based on product attributes. The delays and scheduling documentation covers how to configure the 48-hour follow-up without any cron job setup.

    For stores that also send order alerts to Slack or SMS, the WooCommerce order alerts guide covers the messaging integrations that work alongside this restocking workflow.

    Back-in-Stock Customer Notifications

    The native WooCommerce low stock system notifies the admin. It does not notify customers who want to know when a product is available again. These are two different problems solved by two different mechanisms.

    For back-in-stock customer notifications, the standard options are:

    • A dedicated back-in-stock plugin that adds a waitlist form to out-of-stock product pages and emails subscribers when stock is restored.
    • A custom automation workflow that monitors stock quantity changes and sends email to a stored list of interested customers when the quantity rises above zero.

    The automation approach gives you more control over the email content, timing, and segmentation, and it does not require customers to sign up through a separate form if you already have their contact details from a previous order. If you need to send that restocking email through a styled template rather than a plain text alert, the visual email builder in Krom Automation Pro handles block-based email design without touching code.

    Troubleshooting: Why Low Stock Emails Are Not Arriving

    These are the three failure modes that account for the majority of support threads on this topic.

    Failure Mode 1: Stock Management Is Not Enabled at the Product Level

    The global setting at WooCommerce > Settings > Products > Inventory enables stock tracking site-wide, but each product also needs stock management enabled individually. Go to the product edit screen, open Product data > Inventory, and confirm Enable stock management at product level is checked and a stock quantity is entered. If stock management is off at the product level, WooCommerce never tracks the quantity and never fires the alert regardless of the global setting.

    Failure Mode 2: The Low Stock Threshold Is Set Too High or Too Low

    If your global threshold is 2 and a flash sale drops stock from 50 to 3 in one transaction, the alert fires. If the same sale drops stock from 50 to 1 in a single transaction that bypasses the threshold entirely, the alert does not fire because the quantity crossed through the threshold without stopping there.

    Set your threshold to a number where normal order volume reaches it gradually rather than jumps past it. A threshold of 5 on a product that sells in packs of 6 will frequently be skipped.

    Failure Mode 3: The Emails Are Arriving but Going to Spam

    WooCommerce sends transactional email through WordPress’s wp_mail function, which defaults to using PHP mail without authentication. Many mail servers treat unauthenticated PHP mail as spam, especially from shared hosting. The fix is to route all WordPress email through an authenticated SMTP service.

    A dedicated SMTP plugin pointed at SendGrid, Mailgun, or Amazon SES resolves this for most sites. Our full breakdown of why automated WordPress emails go to spam covers the diagnosis steps and the SMTP configuration in detail.

    Cost Comparison: Native Setup vs. Automation Layer

    Capability Native WooCommerce Krom Automation Free Krom Automation Pro
    Low stock email to admin Yes Yes, via Send Email action Yes
    Multiple recipients No (one address only) Yes, separate workflow branches Yes
    Per-product threshold Yes Yes Yes
    Supplier routing by category No Yes, with conditional branching Yes
    Downstream reorder workflow No Yes, via HTTP Request action Yes, plus 60+ additional actions
    Execution log and audit trail No Yes, per-step logging included Yes
    Styled email template Basic HTML Plain text or basic HTML Yes, visual block-based builder
    Back-in-stock customer alert No Yes, via stock change workflow Yes
    Annual cost (1 site) $0 $0 $119/year

    The native WooCommerce low stock email is not broken. It just stops at the inbox. Everything that needs to happen after that is your problem to solve manually, every single time.

    Also from wpRigel

    Pollify is a Gutenberg-native poll, survey and quiz plugin. Every poll is built as a real block inside the editor, so there are no shortcodes to paste and no separate interface to configure. It is useful for stores that want to collect customer feedback directly on product or post pages.

    Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump anywhere in the admin, search orders by number or customer name, and run product updates without navigating through menus. It is the only WordPress command palette with real WooCommerce order, product, and customer commands built in, which makes it genuinely useful for anyone managing a store day to day.

    Our Verdict

    If you manage a single WooCommerce store with one admin and a simple product catalogue, the native low stock email is sufficient. Enable it at WooCommerce > Settings > Products > Inventory, confirm it is active under Settings > Emails > Low Stock, and set a threshold that gives you enough lead time to reorder before you stock out. That setup takes under 10 minutes and costs nothing.

    If you manage multiple product lines with different suppliers, need alerts routed to specific people, or want a record of when alerts fired and whether anyone acted on them, the native system will fail you at some point. Download Krom Automation free from the WordPress.org plugin directory and build the workflow once. The free version includes conditional branching, HTTP Request actions, and full execution logging, which covers the supplier routing and audit trail gaps without a paid tier.

    Pro, starting at $119 per year for a single site, adds the visual email builder and the additional integrations if your restocking workflow connects to an external system. See the full plan breakdown to decide whether free covers your needs or whether Pro is worth it.

    Frequently Asked Questions

    Why does my WooCommerce low stock email setting not appear under Settings > Emails?

    The threshold and recipient settings live under WooCommerce > Settings > Products > Inventory, not the Emails tab. The Emails tab only controls the template, subject line, and whether the notification type is enabled. Both locations must be configured correctly or the alert will not fire.

    Can I send WooCommerce low stock alerts to my supplier instead of the admin?

    The native recipient field sends to one address. To route alerts to a supplier, either use a shared distribution list as the recipient, or build a conditional workflow in Krom Automation that checks the product category and sends to the corresponding supplier address. The conditions and branching documentation shows how to configure the routing logic.

    What happens to low stock alerts for product variations?

    If stock management is enabled at the variation level, each variation triggers its own alert independently when it hits the threshold. The alert includes the variation name and ID. The parent product does not aggregate stock across variations for alerting purposes, so a parent with 3 variations can generate 3 separate low stock emails as each variation individually hits its threshold.

    Why do my low stock emails arrive but land in spam?

    WooCommerce uses WordPress’s wp_mail function, which defaults to PHP mail with no authentication. Most modern mail servers treat unauthenticated PHP mail as suspicious, particularly on shared hosting.

    Install an SMTP plugin and connect it to an authenticated sending service like SendGrid, Mailgun, or Amazon SES. Our guide on why automated WordPress emails go to spam covers the full diagnosis and fix.

    Does Krom Automation replace the native WooCommerce low stock email?

    No, it extends it. The native alert still fires to the admin address as configured. Krom Automation adds a parallel workflow layer: supplier routing, downstream reorder actions, execution logging, and back-in-stock customer notifications.

    You can run both simultaneously. The WooCommerce integrations documentation covers which triggers and actions are available in the free version.

    Is there a way to notify customers automatically when a low-stock product is restocked?

    Not through the native WooCommerce system. You need either a dedicated back-in-stock plugin or a custom automation workflow that monitors stock quantity changes. In Krom Automation, you can build a workflow that detects when a product’s stock quantity updates above zero and sends a targeted email to customers who previously expressed interest, using the Send Email action combined with stored user meta.

    The wpRigel Team

    September 16, 2026
    User Guide
  • 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
  • Krom Automation Pro Is Live: Visual WordPress Workflow Automation Without Monthly Fees

    Krom Automation Pro Is Live: Visual WordPress Workflow Automation Without Monthly Fees

    We built something we needed ourselves and could not find anywhere. Today it is yours.

    Krom Automation is officially live on WordPress.org. It is a visual workflow automation plugin for WordPress- the kind that connects any site event to any action on a drag-and-drop canvas, no code, no external dashboard, no per-task billing.

    To celebrate the launch, we are offering flat 60% off all plans, both yearly and lifetime, for this week only.

    Use code GETFLAT60 at checkout.

    Get Krom Automation Pro- 60% Off

    This offer runs for a few days. If you have been looking for a Zapier alternative that actually lives inside WordPress, keep reading.

    The problem every WordPress site owner eventually hits

    Your WordPress site is not passive. It generates events constantly.

    Users register. Orders complete. Payments fail. Courses finish. Forms get submitted. Posts get published. Comments land in the queue waiting for someone to approve them.

    Most sites respond to almost none of this automatically.

    • A new member signs up and gets a bare WordPress default email. Then nothing for days, sometimes weeks.
    • An order completes and the customer hears silence until the product ships.
    • A payment fails and the member quietly loses access without a single follow-up.
    • A course finishes and nobody sends the certificate or nudges the student toward the next one.

    This is not a technical problem. The events are happening. The data is right there in WordPress. What is missing is the wiring between the event and the response.

    For a while, most people solve this with Zapier or Make.com. Until the bill arrives. Or until a workflow breaks silently at 2am and nobody knows for three days. Or until the task count spikes one busy month and the overages add up.

    Krom Automation is the native solution to that problem. Everything runs on your own WordPress install. Your data never leaves your server.

    There is no per-task cap. And when something runs, you get a full step-by-step log of exactly what happened.

    What Krom Automation actually does

    krom automation pro is live

    At its core, Krom Automation works on a simple principle: pick something that happens on your site, then decide what should happen next.

    You build it on a drag-and-drop canvas inside WordPress. Pick a trigger — the thing that fires. Add actions — what happens next. Connect them. Set it live. That is the whole model.

    Triggers are the events. A user registering. A WooCommerce order completing. A LearnDash course finishing. A form being submitted. A payment failing. A product going out of stock.

    Actions are the responses. Send an email. Update a CRM contact. Post a Slack message. Log a row to Google Sheets. Create a coupon. Tag someone in Mailchimp. Enrol them in the next course. All in the same workflow, one after another, with delays and conditions in between.

    Merge tags inject live data into any field. {{first_name}} becomes the actual person. {{order.total}} becomes the real number. Every email, every message, every action is specific to that event, not a generic blast.

    Conditions let you branch. Order over $500? Alert the team and send a VIP welcome. Under $500? Just send the confirmation. One workflow, different paths.

    Delays let you time it right. Welcome email ten minutes after registration, not one second. Review request seven days after delivery, not at the moment of shipping.

    And before any of it touches real people, the workflow simulator runs the whole thing against real site data with zero actual emails sent, zero CRM records updated, zero side effects of any kind. You see exactly what would have happened at every step.

    Krom Automation Pro in numbers

    The free version alone is more capable than most people expect.

    FreePro
    Triggers1696+
    Actions2181+
    IntegrationsWooCommerce built in25 integrations
    Templates20121
    AI actionsIncludedIncluded
    Schedule trigger—Hourly, daily, weekly, custom
    Incoming webhooks—Yes, HMAC-secured
    Visual email builder—Yes

    Free version on WordPress.org

    Pro features and integrations

    AI is part of the workflow, not a separate tab

    AI in krom automation pro

    Three AI actions are built into Krom Automation, and they are available in the free version.

    AI Generate Text: Write a prompt, get text back. Use it to generate personalised email copy, post excerpts, social captions, or anything else you would normally write by hand for every occurrence.

    AI Content Moderation: Run any comment or form submission through an AI filter before it goes anywhere. Flag it, hold it, move it to spam — with thresholds you control.

    AI Auto-Tag: Analyse a post and apply the right tags and categories automatically. Works on publish or as part of a batch processing workflow.

    You connect your own OpenAI, Gemini, or Groq API key. No token markups, no per-call charges, no credits to buy. The AI costs what your provider charges, and not a cent more.

    And in Pro, there is one more AI capability worth knowing about. AI Workflow Generation lets you describe what you want to automate in plain English and it builds the workflow for you. Type “when a WooCommerce order completes, send a thank-you email and add the customer to my Mailchimp audience.” It maps the triggers, sets the actions, and opens the result paused for your review before anything runs.

    See all AI features

    25 integrations for Krom Automation Pro: Everything your stack already uses

    Krom automation 25 integrations

    Pro connects to 25 integrations across every major WordPress plugin category. Every one uses the same canvas, the same merge tags, the same execution logs.

    • eCommerce: WooCommerce, WooCommerce Subscriptions, Easy Digital Downloads
    • CRM: FluentCRM, ActiveCampaign
    • Email marketing: Mailchimp, ConvertKit, MailerLite, MailPoet
    • LMS: LearnDash, TutorLMS
    • Membership & community: MemberPress, BuddyBoss
    • Forms: Gravity Forms, WPForms, Fluent Forms, Contact Form 7, Elementor Forms, Ninja Forms
    • Messaging: Slack, Discord, Telegram, Twilio SMS
    • Data & productivity: Google Sheets, Google Calendar
    • Affiliate: AffiliateWP

    WordPress plugins are detected automatically. No setup needed beyond activating them. External platforms connect with an API key.

    Browse all integrations

    Krom Automation Pro: Who it is for

    WooCommerce store owners

    Your orders, subscriptions and customers generate events all day. Most go unanswered.

    Set up a review request that goes out seven days after delivery, not the moment the order ships. Build a payment failure recovery sequence that sends three timed emails before a subscription lapses. Create a coupon automatically when a customer hits their fifth order. Alert your team on Slack for high-value orders without checking the dashboard.

    WooCommerce automation guide

    Course creators and LMS operators

    Students who complete one course are your best candidates for the next. Most sites wait for them to come back on their own.

    Automate the full journey: enrolment welcome email, lesson reminders, quiz result branching, certificate delivery, and automatic enrolment in the next course. LearnDash and TutorLMS both connect natively.

    LearnDash integration

    Membership site owners

    New member joins, gets a default WordPress email, and then nothing. That gap is where communities lose people.

    Build a welcome sequence that starts the moment someone activates. Set up dunning emails when a payment fails. Send a win-back campaign when a subscription is cancelled. Tag members in your CRM by plan level. None of this should require your attention once it is built.

    MemberPress integration · BuddyBoss integration

    Agencies and developers

    Export any workflow as JSON and import it on any client site running Krom Automation. The same welcome sequence, the same order automation, the same CRM sync — deployed in minutes rather than built from scratch every time.

    Connect to external services via the incoming webhook receiver: a unique HMAC-secured URL per workflow, compatible with Stripe, GitHub, Shopify and anything else that sends webhooks. Or use the HTTP Request action to call any external API directly from a workflow step.

    REST API reference

    Krom Automation Pro Pricing

    Krom Automation Pro Yearly Pricing
    Krom Automation Pro Lifetime Pricing

    This is the section most tools hide in small print. We prefer to put it front and centre.

    Uncanny AutomatorWP FusionZapier ProfessionalKrom AutomationWith GETFLAT60
    Entry plan, 1 site$199/year$297/year$240/year$119/year$48/year
    Per-task billingNoNoYesNoNo
    Self-hostedYesYesNo, SaaSYesYes
    Lifetime planNoYesNoYes$119 once
    BuddyBoss integrationYesCRM sync onlyNoYes, 14 triggersYes
    Visual canvas builderLimitedNoNoYesYes
    Execution logsBasicBasicBasicStep-levelStep-level

    On Uncanny Automator: A solid plugin and the most common comparison. Their entry plan is $199/year for one site, integrations sometimes sold separately as add-ons. At full price Krom is 40% less. At launch price it is less than a quarter of what Uncanny charges at entry.

    On WP Fusion: Excellent at CRM sync, but that is specifically what it does. It is not a general automation engine and is often purchased alongside an automation plugin, adding to your total stack cost.

    On Zapier: The most recognisable name in automation, and not a bad tool. But it is external SaaS with per-task billing. The Professional plan gives you 750 tasks per month. A five-step workflow burns four tasks per run — 200 form submissions a month blows past the base tier on a single workflow. And your workflow data, credentials and execution history all live on Zapier’s servers, not yours.

    Krom Automation at $48 this week is less than two months of Zapier’s entry plan. With a lifetime option at $119 — or $48 with GETFLAT60 — you pay once and you are done.

    See all plans and pricing

    The launch discount on Krom Automation

    This week only, 60% off all plans, yearly and lifetime.

    Use code GETFLAT60 at checkout. No complicated tiers. No “up to” fine print. Flat 60% off whatever you choose.

    Grab 60% Off Krom Automation

    The honest version of how we got here

    We wanted to ship this six months ago.

    The original name was Automatify. That was taken. We rebuilt the brand around Flowmator, got it ready, wrote 51 documentation pages, built the site, locked the colours.

    Three weeks before launch the WordPress.org review team flagged it as too close to an existing plugin.

    So we started again. Third name: Krom Automation. Approved.

    Along the way we hit the payment problem. We operate from Bangladesh, where PayPal is not available and most payment processors are not ready to support a new software business.

    We delayed the launch of our first plugin by five months trying to find an alternative to Freemius before eventually shipping on it anyway. A customer told us plainly that Freemius was the reason he would not buy. He was not wrong.

    So we built our own licensing system in collaboration with Paddle. Krom Automation runs on it from day one. No Freemius. No third-party checkout. No external account required to purchase.

    We are later than planned. Every piece of it works better for the delay.

    Get started Today

    krom automation Pro is live

    Three ways in, depending on where you are:

    1. Start free. Install the free version from WordPress.org. 16 triggers, 21 actions, AI actions, WooCommerce, full execution logs. Build your first workflow today.

    Free Download on WordPress.org

    2. Get Pro at 60% off. Unlock all 25 integrations, 121 templates, AI workflow generation, the visual email builder, and the incoming webhook receiver. Code GETFLAT60 at checkout. This week only.

    Get Pro — 60% Off This Week

    3. Read the docs first. If you want to understand the full capability before committing, the documentation covers every trigger, action, integration and feature in detail.

    Krom Automation Documentation

    Frequently asked questions on Krom Automation Pro Launch

    Does Krom Automation work without WooCommerce?

    Yes. WooCommerce is optional and auto-detected when active. The core plugin works for any WordPress site regardless of whether you run an online store.

    Do I need an AI API key?

    Only for AI actions. The core plugin, all triggers, all standard actions, and all integrations work without one. You only need a key from OpenAI, Gemini or Groq if you want to use AI Generate Text, AI Content Moderation or AI Auto-Tag.

    Is there a free version?

    Yes, and it is genuinely capable. 16 triggers, 21 actions, full WooCommerce support, AI actions, merge tags, conditions, delays, execution logs and 20 workflow templates. Available on WordPress.org with no account required.

    How is this different from Uncanny Automator?

    Uncanny Automator is a list-based rule editor. Krom Automation is a visual drag-and-drop canvas. The pricing is different (Krom starts at $119 vs $199 for Uncanny’s entry tier). And Krom includes a lifetime plan, AI workflow generation, an incoming webhook receiver and step-level execution logs — none of which Uncanny offers at entry level.

    What happens after the launch discount ends?

    Full pricing applies and all plans remain available. The 60% off with code GETFLAT60 is a launch-week offer. Yearly and lifetime plans are both available permanently at regular price after this week.

    Can I import and export workflows?

    Yes. Any workflow can be exported as a JSON file and imported on any site running Krom Automation. This is how agencies deploy the same automation stack across multiple client sites.

    Krom Automation is made by wpRigel. We also make Pollify (Gutenberg-native polls and surveys) and Commandify (a command palette for the WordPress admin). All three run natively inside WordPress with no external accounts required.

    The wpRigel Team

    September 14, 2026
    Krom Automation
  • 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
Previous Page
1 2 3 4 5 … 18
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