{"id":386763,"date":"2026-10-16T13:00:22","date_gmt":"2026-10-16T13:00:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flowwp\/"},"modified":"2026-10-16T13:00:03","modified_gmt":"2026-10-16T13:00:03","slug":"flowwp-workflow-automation","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/flowwp-workflow-automation\/","author":23585725,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"1.2.2","tested":"7.1.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"FlowWP \u2013 Visual Workflow Automation","header_author":"FlowWP","header_description":"WordPress Automation, Visualized. Build automations visually by connecting triggers, conditions, and actions.","assets_banners_color":"182542","last_updated":"2026-10-16 13:00:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.flowwp.net\/wordpress-automation-plugin\/","header_author_uri":"https:\/\/www.flowwp.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"flowwp","date":"2026-10-16 13:00:03","revision":3750457}},"upgrade_notice":{"1.2.2":"<p>Removes Google Analytics and Gravatar from the Pricing page, and documents exactly what Freemius receives. Nothing changes in how FlowWP works.<\/p>","1.2.1":"<p>Removes the last mentions of tracking parameters from the plugin&#039;s files. Nothing changes in how FlowWP works.<\/p>","1.2.0":"<p>A new name, no limits or usage counting of any kind, no tracking on links, and Action Scheduler 4.2.0. Connections to outside services move to FlowWP Pro.<\/p>","1.1.2":"<p>Updates the plugin&#039;s homepage link. Nothing changes in how FlowWP works.<\/p>","1.1.1":"<p>Includes the source of the editor and pricing page. Nothing changes in how FlowWP works.<\/p>","1.1.0":"<p>The free version no longer has caps: unlimited workflows, steps and runs, with AND \/ OR conditions, error paths and retries included.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3750457,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3750457,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3750457,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3750457,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3750457,"resolution":"1","location":"assets","locale":"","width":1440,"height":962},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3750457,"resolution":"2","location":"assets","locale":"","width":1440,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3750457,"resolution":"3","location":"assets","locale":"","width":1440,"height":626},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3750457,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3750457,"resolution":"5","location":"assets","locale":"","width":1440,"height":787}},"screenshots":{"1":"The dashboard \u2014 what ran, what failed, and what you were last working on.","2":"The canvas \u2014 a trigger joined to a condition and three actions, the step library on the left, and the step being configured on the right with a picker for every value earlier steps produced.","3":"Your workflows: what each one connects and how often it has run.","4":"The template gallery \u2014 ready-made workflows, filtered by plan, category, and what this site actually has installed.","5":"Run history \u2014 every run, what started it, how long it took, and why one of them failed."}},"plugin_section":[],"plugin_tags":[569,16179,201155,286,8197],"plugin_category":[45],"plugin_contributors":[287118],"plugin_business_model":[],"class_list":["post-386763","plugin","type-plugin","status-publish","hentry","plugin_tags-automation","plugin_tags-integrations","plugin_tags-no-code","plugin_tags-woocommerce","plugin_tags-workflow","plugin_category-ecommerce","plugin_contributors-flowwp","plugin_committers-flowwp"],"banners":{"banner":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/banner-772x250.png?rev=3750457","banner_2x":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/banner-1544x500.png?rev=3750457","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/icon-128x128.png?rev=3750457","icon_2x":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/icon-256x256.png?rev=3750457","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/screenshot-1.png?rev=3750457","caption":"The dashboard \u2014 what ran, what failed, and what you were last working on."},{"src":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/screenshot-2.png?rev=3750457","caption":"The canvas \u2014 a trigger joined to a condition and three actions, the step library on the left, and the step being configured on the right with a picker for every value earlier steps produced."},{"src":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/screenshot-3.png?rev=3750457","caption":"Your workflows: what each one connects and how often it has run."},{"src":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/screenshot-4.png?rev=3750457","caption":"The template gallery \u2014 ready-made workflows, filtered by plan, category, and what this site actually has installed."},{"src":"https:\/\/ps.w.org\/flowwp-workflow-automation\/assets\/screenshot-5.png?rev=3750457","caption":"Run history \u2014 every run, what started it, how long it took, and why one of them failed."}],"raw_content":"<!--section=description-->\n<p>FlowWP watches for things happening on your site \u2014 an order, a form submission, a new member, a published post \u2014 and does what you would otherwise have done yourself. You build it by dragging steps onto a canvas and joining them up. Nothing runs until you activate it.<\/p>\n\n<p>It runs inside WordPress. There is no external service in the middle, no per-task pricing, and no account to create: your workflows execute on your own site, on WordPress' own hooks, using Action Scheduler for anything that needs to happen later.<\/p>\n\n<h4>What you can build<\/h4>\n\n<ul>\n<li><strong>When something happens<\/strong> \u2014 a WooCommerce order is paid, a form is submitted, a user registers or changes role, a post is published, a comment arrives, or a webhook is called. The paid plans add scheduled times and more triggers.<\/li>\n<li><strong>Decide what to do about it<\/strong> \u2014 branch on any value with If, or stop a run that does not qualify with Filter, with as many AND \/ OR rules as you need. The paid plans add Switch, to split several ways.<\/li>\n<li><strong>Then do it<\/strong> \u2014 send an email, call an external API, update a custom field, add a note to an order, or use one of the steps a plugin you already have contributes. The paid plans add creating and updating posts, changing roles, and more.<\/li>\n<\/ul>\n\n<p>Every value produced by an earlier step is available to a later one as a token \u2014 <code>{{ trigger.order.email }}<\/code>, <code>{{ nodes.lookup.output.name }}<\/code> \u2014 with a picker so you do not have to remember them.<\/p>\n\n<h4>You can see what happened<\/h4>\n\n<p>Every run is recorded: which steps ran, what each was given, what each returned, and where it stopped if it stopped. A failed step can be retried on its own rather than re-running the whole thing. This is usually the difference between an automation you trust and one you turn off.<\/p>\n\n<h4>What the free version includes<\/h4>\n\n<ul>\n<li>As many workflows as you want, with as many steps as each one needs<\/li>\n<li>Unlimited runs, webhooks and HTTP requests \u2014 nothing stops at a monthly count<\/li>\n<li>Every free step, including If, Filter, AND \/ OR conditions, On error paths and retries<\/li>\n<li>Every ready-made template built from those steps<\/li>\n<li>30 days of run history<\/li>\n<li>The visual editor and the run inspector<\/li>\n<\/ul>\n\n<p>There are no caps in the free version and nothing in it is a trial: it does not count down, expire, or stop after a number of runs.<\/p>\n\n<h4>Works with what you already have<\/h4>\n\n<p>FlowWP adds steps for the plugins it finds installed, and says so plainly when one is missing rather than hiding it:<\/p>\n\n<p>WooCommerce, WPForms, Gravity Forms, Fluent Forms, Formidable Forms, Ninja Forms, Forminator, Contact Form 7, Elementor, Advanced Custom Fields, LearnDash, Tutor LMS, LearnPress, LifterLMS, MemberPress, Paid Memberships Pro, Ultimate Member, BuddyPress, GamiPress, FluentCRM, Groundhogg, MailPoet, Easy Digital Downloads, GiveWP, The Events Calendar. FlowWP Pro adds Slack, Discord, Telegram, WhatsApp, Mailchimp and the major AI providers, which need a connection rather than a plugin.<\/p>\n\n<h4>Built to be extended<\/h4>\n\n<p>Node types, triggers, conditions and actions are all registered through a documented contract, so another plugin can contribute its own steps without touching FlowWP. Registered functions let a developer expose a PHP function to workflow authors safely.<\/p>\n\n<h4>Source code<\/h4>\n\n<p>The editor and the pricing page are JavaScript, shipped minified in <code>admin\/dist<\/code> and <code>assets\/freemius-pricing<\/code>. Their full source is included in the plugin: <code>admin\/src<\/code> (TypeScript and React, built with Vite) and <code>pricing-app\/src<\/code> (React, built with webpack), with the <code>package.json<\/code> and lock files that pin every dependency.<\/p>\n\n<p>To rebuild both from the plugin's folder, with Node.js 24 or later:<\/p>\n\n<pre><code>npm ci\nnpm run build\n\nnpm ci installs the dependencies for both, and `npm run build` type-checks the editor and writes `admin\/dist` and `assets\/freemius-pricing`.\n<\/code><\/pre>\n\n<h4>Premium<\/h4>\n\n<p>FlowWP has paid plans that add steps and features the free version does not include \u2014 loops, delays, Switch, scheduled triggers, more condition operators, the messaging and marketing integrations, the AI steps and the AI workflow builder, file imports, workflow import and export \u2014 and keep run history for longer on the Business and Agency plans. They add to the free version rather than lifting limits on it: everything listed under \"what the free version includes\" keeps working, unchanged, whether or not you ever upgrade.<\/p>\n\n<h4>External services<\/h4>\n\n<p>Apart from Freemius, below, the plugin contacts no outside service on its own and loads no analytics. It has no connections to one either: the connections to Slack, Discord, Telegram, WhatsApp, Mailchimp and the AI providers are part of FlowWP Pro and are not included in it.<\/p>\n\n<p><strong>Freemius<\/strong> (freemius.com, including api.freemius.com, checkout.freemius.com, img.freemius.com and wp.freemius.com) runs FlowWP's plans, checkout and licences. FlowWP talks to it only in these cases:<\/p>\n\n<ul>\n<li><strong>If you opt in when activating FlowWP.<\/strong> Nothing is sent if you skip. If you allow it, Freemius receives your WordPress user's first and last name and email address; the site's homepage address and title, WordPress and PHP versions and language; the FlowWP and Freemius SDK versions, and whether FlowWP is active or uninstalled; and, if you leave that option on, the names, slugs and versions of your plugins and themes. Freemius uses it to send security and product updates and to keep FlowWP compatible with your site.<\/li>\n<li><strong>When you open the Pricing page.<\/strong> The site asks Freemius for FlowWP's current plans and prices, identifying FlowWP and, if this site has opted in, the site's Freemius account. The page shows Freemius's loading image, from img.freemius.com.<\/li>\n<li><strong>When you buy a plan.<\/strong> Choosing a plan opens Freemius's checkout, at checkout.freemius.com, which receives the plan you chose and what you enter there, such as your name, email address and payment details.<\/li>\n<li><strong>When you activate a licence key.<\/strong> The key is sent to Freemius with the site's homepage address, the FlowWP version and the SDK version, so the licence can be checked and kept to the sites you allow.<\/li>\n<li><strong>When you write to us through FlowWP's Contact page.<\/strong> The form is Freemius's, from wp.freemius.com, and it receives what you type into it.<\/li>\n<\/ul>\n\n<p>Freemius: <a href=\"https:\/\/freemius.com\/terms\/\">Terms of service<\/a> \u00b7 <a href=\"https:\/\/freemius.com\/privacy\/\">Privacy policy<\/a><\/p>\n\n<p>The HTTP Request step sends data to whatever address you give it. That address is yours, not ours, and FlowWP neither chooses it nor sees the response.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>FlowWP<\/strong> in the admin menu. The dashboard offers two ways to start: a ready-made template or a blank canvas.<\/li>\n<li>Build a workflow, then press <strong>Activate<\/strong>. Nothing runs until you do.<\/li>\n<li>Watch the first few runs under <strong>Run history<\/strong> to see exactly what happened.<\/li>\n<\/ol>\n\n<p>FlowWP needs WordPress 6.5 or newer and PHP 8.1 or newer.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20my%20site%27s%20data%20to%20a%20third%20party%3F\"><h3>Does this send my site's data to a third party?<\/h3><\/dt>\n<dd><p>No. Workflows run on your own server, and the plugin contacts no outside service on its own. It sends something elsewhere only when a workflow uses the HTTP Request step, to the address you give it, or through Freemius: when you open the Pricing page, or if you opt in to anonymous usage data when activating \u2014 see \"External services\" above.<\/p><\/dd>\n<dt id=\"does%20anything%20run%20before%20i%20want%20it%20to%3F\"><h3>Does anything run before I want it to?<\/h3><\/dt>\n<dd><p>No. A new workflow is a draft. It does nothing at all until you activate it, and deactivating it stops it immediately.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20step%20fails%3F\"><h3>What happens when a step fails?<\/h3><\/dt>\n<dd><p>The run stops and is recorded with the step that failed and why. You can retry that step on its own, and steps that would be unsafe to repeat \u2014 a sent message, a created order \u2014 are marked so the engine never retries them for you.<\/p><\/dd>\n<dt id=\"can%20it%20handle%20things%20that%20take%20a%20while%3F\"><h3>Can it handle things that take a while?<\/h3><\/dt>\n<dd><p>Yes. Retries \u2014 and, on the paid plans, delays and scheduled workflows \u2014 go through Action Scheduler, which WordPress plugins have used for this for years. A workflow waiting three days does not hold a request open.<\/p><\/dd>\n<dt id=\"is%20the%20free%20version%20limited%3F\"><h3>Is the free version limited?<\/h3><\/dt>\n<dd><p>No. There is no cap on workflows, steps, runs, webhooks or HTTP requests, and nothing in it is a trial. The paid plans add steps and features the free version does not contain; they never lift a limit on what it already does.<\/p><\/dd>\n<dt id=\"will%20my%20workflows%20survive%20deactivating%20the%20plugin%3F\"><h3>Will my workflows survive deactivating the plugin?<\/h3><\/dt>\n<dd><p>Yes. Deactivating stops workflows running and changes nothing else. Deleting the plugin only removes your data if you explicitly ask it to \u2014 the default is to leave everything where it is.<\/p><\/dd>\n<dt id=\"someone%20has%20asked%20me%20to%20export%20or%20delete%20their%20data.%20does%20flowwp%20help%3F\"><h3>Someone has asked me to export or delete their data. Does FlowWP help?<\/h3><\/dt>\n<dd><p>Yes. FlowWP registers with WordPress' own <strong>Tools \u2192 Export Personal Data<\/strong> and <strong>Erase Personal Data<\/strong>, so a request made there covers FlowWP's run history alongside everything else.<\/p>\n\n<p>Two things it deliberately does not delete, and tells you about rather than hiding: a run still in progress, which the ordinary history sweep removes once it finishes, and a workflow whose own setup contains that address \u2014 deleting that would stop an automation working, so FlowWP names the workflow and leaves the decision to you.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20steps%3F\"><h3>Can I add my own steps?<\/h3><\/dt>\n<dd><p>Yes. Nodes are registered through a documented contract, so a plugin or a site's own code can add triggers, conditions and actions that behave exactly like the built-in ones.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>The Pricing page no longer loads Google Analytics, which came with the Freemius pricing page it is built on, or reviewers' pictures from Gravatar.<\/li>\n<li>External services describes exactly what Freemius receives and when.<\/li>\n<li>Every REST route checks the user's capability where the route is registered.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>No file in the plugin mentions a tracking parameter any more, including the build configuration and an unused script from the Freemius SDK.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed to FlowWP \u2013 Visual Workflow Automation.<\/li>\n<li>Nothing in the plugin is counted or limited: no caps on workflows, steps, runs, webhooks or HTTP requests, and AND \/ OR conditions, retries and On error paths work on every site, whatever its licence.<\/li>\n<li>Run history is kept for 30 days. Developers can change that with the <code>flowwp_history_retention_days<\/code> filter.<\/li>\n<li>Links to flowwp.net no longer carry tracking parameters.<\/li>\n<li>The connections to Slack, Discord, Telegram, WhatsApp, Mailchimp and the AI providers, and the AI workflow builder, are now part of FlowWP Pro only. The plugin contacts no outside service on its own.<\/li>\n<li>Updated Action Scheduler to 4.2.0.<\/li>\n<li>Translations load the way WordPress loads them for every plugin in the directory.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>The plugin's homepage link now points to the FlowWP plugin page; the author link stays on flowwp.net.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>The JavaScript source now ships with the plugin: <code>admin\/src<\/code> and <code>pricing-app\/src<\/code>, with the build files and lock files that rebuild the minified editor and pricing page. See \"Source code\" above.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<p>The free version has no caps.<\/p>\n\n<ul>\n<li>Unlimited workflows, steps per workflow, runs, webhooks and HTTP requests. Nothing stops at a monthly count.<\/li>\n<li>AND \/ OR conditions, On error paths and retry policies are now part of the free version.<\/li>\n<li>Every ready-made template built from free steps can be used, not just three.<\/li>\n<li>Run history is kept for 30 days on every plan in the free version, up from 7. The Business and Agency plans still keep it for 90 and 180 days.<\/li>\n<li>The paid plans add steps and features the free version does not include; they no longer lift limits on what it does.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>First public release.<\/p>\n\n<ul>\n<li>Build automations on a canvas: a trigger, conditions, and the actions that follow, joined up by dragging.<\/li>\n<li>395 steps across 36 integrations \u2014 WooCommerce, the form plugins, the LMS and membership plugins, the CRMs, Slack, Telegram, Discord, WhatsApp, Mailchimp, MailPoet and WordPress itself \u2014 each one appearing only when the plugin it belongs to is active, and saying so plainly when it is not.<\/li>\n<li>72 ready-made templates, filtered by what the site actually has installed.<\/li>\n<li>Every value an earlier step produced is available to a later one as a token, with a picker so you do not have to remember them.<\/li>\n<li>Test a workflow before it goes live: it runs once with sample data, and emails, HTTP requests and other side effects are simulated rather than sent.<\/li>\n<li>Every run is recorded \u2014 which steps ran, what each was given, what each returned, and where it stopped. A failed step can be retried on its own.<\/li>\n<li>Connections are stored encrypted, and a workflow exported for someone else leaves its secrets behind.<\/li>\n<li>Workflows run on your own site, on WordPress' own hooks, through Action Scheduler. No external service, no per-task pricing, no account.<\/li>\n<li>Triggers, actions, conditions and formatters are all registered through a documented contract, so another plugin can add its own without touching FlowWP. See docs\/SDK.md.<\/li>\n<li>Answers personal-data export and erasure requests for the data FlowWP stores about a person.<\/li>\n<li>Translation-ready throughout, PHP and the editor both.<\/li>\n<\/ul>","raw_excerpt":"Build automations visually. Connect a trigger to conditions and actions on a canvas, and let your site do the work you were doing by hand.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386763","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=386763"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/flowwp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386763"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386763"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386763"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386763"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386763"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}