Build visual workflows that chain audits, agents, and alerts — run them on demand or on a schedule.
Last updated
Workflows let you turn a repeatable process — a weekly visibility check, a citation-gap review, an audit-then-alert chain — into a visual graph that runs on demand or on a schedule.
Note: Workflows is in private beta for Pro, Ultra, and Enterprise plans. If you don't see Workflows in the sidebar, contact support to request access.
Prompt-scoped nodes (Citation Patterns, Scrape AI engines) work on one monitored prompt. Pick which one in the node's Context tab — or leave it on Automatic to use the first prompt from a connected Monitored prompts node.
Citation Patterns reads the analysis Vizzybl saved after that prompt's last nightly run, and reports its date. The step takes seconds and costs nothing. If the prompt has been checked again since, the step says its newest answers are not in the analysis yet; if there is no analysis for the prompt yet, the step is skipped and says so. To have it worked out again, use Recalculate on the prompt's Citation Patterns tab.
Every workflow starts with exactly one trigger node. Connect nodes left to right — each node's output flows into the nodes it connects to.
The palette groups nodes into six categories:
| Category | What it does | Examples |
|---|---|---|
| Triggers | Start the workflow | Manual run, Schedule, Visibility drop, New citation |
| Data & Sources | Read your Vizzybl data, or a connected tool | Visibility stats, Citations, Monitored prompts, Latest audit, Search Console, GA4, WordPress posts, AI crawlers, Workfront projects |
| Agents | Run an AI agent | GEO audit, Brand Intelligence, Content Authority, Draft a page, Brand Protection, llms.txt |
| Recipes | Ready-made composite reports | Weekly Pulse, Citation Gap, Engine Scorecard, Source Authority |
| Logic & Control | Branch, wait, ask for approval, or fan out | Condition, Switch, Wait, Ask for approval, Repeat for each, Parallel, Merge |
| Actions & Outputs | Deliver results | Channel message, Email, Action Board card, Trello/Workfront, Publish to WordPress, Call a webhook, Dashboard notification |
Agent nodes charge the same credits as running the action anywhere else in Vizzybl. A failed run never double-charges — retries reuse the original charge, and a step that fails after charging is refunded automatically. Steps that read or write a connected tool cost nothing. See What a run costs below for the estimate and for a limit you can put on one run.
If your workspace cannot be charged for a step — not enough credits, a monthly limit that is used up, or a step your plan does not include — the step fails once, before it does any work, and says what was needed. Nothing is charged for it.
Steps that use a tool you've connected in Settings → Connections all behave the same way: if the tool isn't connected, needs reconnecting, or isn't on your plan, the step is marked skipped with the reason and the rest of the workflow carries on. A workflow never fails because of something you fix in Settings.
| Tool | Read | Write | Plan |
|---|---|---|---|
| Search Console | Top queries, top pages | — | Pro |
| Google Analytics 4 | AI referral traffic, engagement overview | — | Ultra |
| WordPress | List posts | Publish a post, update a post | Ultra |
| Cloudflare | AI crawlers, crawled pages, crawl trend | — | Pro |
| Workfront | Current projects | Create a task, set a task's status | Pro |
| Keyword research | AI search volume, AI top domains, AI share of voice | — | Ultra |
| Anything else | — | Call a webhook | Pro |
WordPress. Publishing creates a draft unless you change Publish as. Publishing live, and updating a post, need an Ask for approval step directly before them, so nothing reaches your site until an owner or admin approves it — see Approvals and WordPress below. Content comes from the step's own setup, or from what the previous steps found (see What each step sends). If you've connected more than one site, choose which one in the step's Site setting — a workflow will never guess between your sites. Republishing after a retry can't create a duplicate post.
A step writes a post or a page (its Type setting). Categories, tags and the author are picked by name from the site itself; a page has no categories or tags. A page that Draft a page rewrote is updated where it already is: the step finds it by its exact address, and a draft already written to the site is updated in place, never created a second time.
Each connected site has two safety settings in Settings → Connections, which owners and admins can change:
Connecting and disconnecting a site is also for owners and admins.
Cloudflare. These steps read the AI-crawler data Vizzybl already collects for the AI Crawlers dashboard, so they cover a trailing 28 days and can be up to a day old — each step reports the exact window it used. AI-crawled pages needs the beacon or Logpush ingest; the Cloudflare API method doesn't report individual pages.
Keyword research. Three steps answer what people actually ask AI engines, which domains those engines quote, and how often a domain is mentioned across them. Pick a location from the list — the research API only recognises those, and an unsupported one would quietly return US figures. These are the only data steps that cost credits — 1 credit per step, because they call a paid research API. If the API has no data for your keywords, the step is marked skipped and the credit is refunded rather than spent. Give it keywords in the step's setup, or connect a Monitored prompts step and it will use those.
Call a webhook. Sends the run's data to any HTTPS endpoint — Zapier, Make, n8n, or your own service — so you can reach a tool Vizzybl has no step for. By default it posts everything the previous steps produced; set a body to send something specific. Private and internal addresses are refused. If the endpoint needs a key, put it in the URL: don't paste secrets into step settings, because they're stored with the workflow and visible to everyone in your workspace.
A connection carries the whole output of the node it leaves, so most workflows need nothing more than a line between two nodes. Select a connection to open its inspector when you need more control.
Branches. A connection leaving a Condition node takes either the true or the else side — pick one in the inspector. Exactly one connection should be else, or the else path never runs.
A connection leaving an Ask for approval step is either Approved or Not approved — pick one in the inspector. A connection with neither set counts as Approved, never the other way round. Approved can lead to several steps; Not approved can lead nowhere, which simply stops that path.
A connection leaving a Switch node carries the value it matches — type weekly to follow the branch where the switched value is "weekly". Use default for the connection that should run when nothing else matches, including when the value is missing.
Important: on a Switch, a connection left blank is not the default — it only runs when the value is literally "true". Set a value, or use
default.
Field mapping. By default a step reads whatever it needs from everything upstream. When two upstream nodes offer the same field, or a step needs a value from deeper in an output, open the connection's Mapping tab and point the field at an exact path, starting with the step's id — for example prompts.0.promptId. The editor shows the paths seen in the last run and tells you whether a path resolves.
A Condition node compares one value from an earlier step against a number, or against true/false:
sovDelta < -5
brandIsCited == false
gapDomains.length > 0
Which values can I use? Open the node's Context tab: it lists exactly what the steps connected to this one produce, and clicking one adds it to the condition. Those are the only names that work — a name from a step further back does not arrive here unless that step is connected, directly or through a Condition, Switch, Wait or Ask for approval.
Two steps producing the same name. Write which one you mean, using the step's id: citationGap-1a2b.brandDomain. The Context tab does this for you when it needs to.
Lists. gapDomains.length > 0 means "the list is not empty". .length only works on a list.
Combine comparisons with AND and OR, up to five:
sovDelta < -5 AND brandIsCited == false
AND is applied before OR, so a OR b AND c means "a, or both b and c". There are no brackets; if you need different grouping, use two Condition nodes in a row — which reads as AND — or two branches into a Merge, which reads as OR.
When a value isn't there yet. Some values are legitimately empty — share-of-voice change needs eight days of history before it means anything. A condition that cannot be answered takes the else path rather than failing the run, so a new workspace does not get a red run every week. A name that does not exist at all is a different thing: that fails the step, so a typo is loud rather than silent.
What reaches the next step. A Condition passes the values it received on to whatever follows it, so an alert after a condition can report what the earlier step found. That is what makes gapDomains.length > 0 → Create action card produce a card naming the domains, rather than a card with only its title. Ask for approval does the same, so a channel message on its Approved branch still reports what the steps before the approval found, and an email there shows the decision followed by those findings.
An action with no message of its own — a channel message, an Action Board card, a dashboard notification, a Trello card or a Workfront task — sends a report of the steps before it: a section per step, with the actual numbers, tables and links. Write your own text in its message and that is sent instead. On an email, your text is an introduction shown above the sections.
What each step contributes:
| Step | What a message after it shows |
|---|---|
| Manual run | The inputs the run was started with, when someone supplied any. |
| On visibility drop | The share-of-voice change that started the run: current and previous week, the change in points, and the date. |
| On new citation | The domain AI engines newly cited, the prompt it appeared for, and the date. |
| Visibility stats | Latest share of voice, mentions, rank and sentiment, the change over the window in points, and a daily table. |
| Citations | Citation totals, the most-cited domains with their share and which are yours, and the most-cited pages. |
| Monitored prompts | Each monitored prompt with its status, country, brand mentions, citations, competitors, sentiment, engines and when it was last scraped. |
| GEO audit data | The latest GEO audit: AI Visibility Index and pillar scores, robots.txt and blocked AI bots, llms.txt, page speed and content stats. |
| WordPress posts | Posts on the connected WordPress site: title (linked), status and when each was last modified, out of the site total. |
| AI search volume | Monthly AI search volume per keyword, how many of the requested keywords have data, and the total. |
| AI top domains | The domains AI answers cite most for a keyword, with mentions, AI search volume and their top cited page. |
| AI share of voice | AI mentions, impressions and search volume for a domain, by AI platform, and its most-cited pages. |
| Workfront projects | Current Workfront projects by name and ID, out of the total. |
| AI crawlers | AI crawler activity over the rollup window: total hits, training and search shares, each bot with hits, data and last seen, and a per-category breakdown. |
| AI-crawled pages | The pages AI crawlers fetched most over the rollup window, with hits, data and the top bots per page. |
| AI crawl trend | AI crawler hits by day, and the change between the recent and the earlier half of the window. |
| GA4 report | GA4 sessions and users from AI assistants, per assistant with engagement, bounce and conversions (or the engagement overview), for the real date range. |
| Search Console | Search Console clicks, impressions, CTR and average position — totals and the top queries or pages — for the real date range. |
| AI-sourced pipeline | HubSpot contacts or deals attributed to an AI assistant, with the assistant that sent each (and deal stage and amount); contact names and emails only in the owner’s own email. |
| Read a Notion page | The Notion page’s content, as written. |
| Ad account insights | ChatGPT Ads spend, impressions, clicks, CTR, CPC, CPM and click- and view-through conversions for the account, in its own currency, with a daily table. |
| Campaign insights | Each ChatGPT Ads campaign with spend, impressions, clicks, CTR, CPC, CPM and conversions, highest spend first. |
| Ad group insights | Each ChatGPT Ads ad group with the context hints it targets, spend, clicks, CTR and conversions. |
| Ad insights | Each ChatGPT Ads ad with spend, impressions, clicks, CTR, CPC, CPM and conversions. |
| Paid vs organic | Paid vs organic conversations: hints matched and spend, then the wasting, working, gap and undefended conversations with share of voice, spend and clicks, and any unmatched hints. |
| Run GEO audit | That a GEO audit was started, with a link to follow it; the results arrive in the app, not in this step. |
| Scrape AI engines | Each engine’s answer to the prompt: whether your brand was mentioned and how often, citations, citations of your domain and the competitors named. |
| Brand Intelligence | The brand-intelligence summary, prioritised insights with their recommendations, metric trends with their change, and anomalies. |
| Citation Patterns | Why AI engines cite the pages they cite for a prompt: the summary, your content gaps by severity with what to do, recommendations, the most-cited domains and how often each signal appears. |
| Content Authority | A page’s citation-readiness score and each citation gap by severity, with the suggested fix and where on the page it applies. |
| Draft a page | The drafted page as written. Outside the published post: whether it is a rewrite or a new page, what it was written from, related pages on your site, and how many items are marked for a person to check. |
| Brand Protection | How your content matches the topics buyers ask about against competitors’: overall scores, each topic gap by severity, and recommended actions. |
| llms.txt | The generated llms.txt with its quality score, pages crawled out of those found, and the pages it covers. |
| Ask an AI | The model’s reply as written — or, when a JSON shape is set, its structured fields and lists. |
| Weekly Pulse | This week against last week: share of voice with its change in points, average rank (lower is better), sentiment, and days of data. |
| Citation Gap | The domains AI answers cite that are not yours, with citation counts, and whether your own domain is cited at all. |
| Engine Scorecard | Every AI engine with its share of voice now and on average, the change in points over the window, mentions and days with data, led by the top engine and the biggest move. |
| Source Authority | The share of AI citations that point to your own domains, your domains and most-cited pages, and the most-cited pages overall. |
| Repeat for each | Inside a repeat: which item this is ("Item 3 of 10") and the item itself. |
| Collect results | What each pass of a repeat produced — a list of replies or a results table — and how many passes failed. |
| Ask for approval | The approval decision — approved, rejected, expired, cancelled or skipped — and when it was asked for and decided. Never who decided. |
| Create a card | The Trello card that was created (or the Workfront task, when Trello is not connected), with a link to it. |
| Call a webhook | The webhook call: method, host (never the URL, which may carry a token) and response status. |
| Create Workfront task | The Workfront task that was created, with a link to it. |
| Update Workfront task | The Workfront task whose status was changed, and its new status. |
| Publish to WordPress | Whether the post was published or saved as a draft, with links to view and edit it. |
| Update a WordPress post | Which post was updated and its status, with links to view and edit it. |
| Create a HubSpot blog draft | The HubSpot blog draft that was created and its state. HubSpot never publishes from a workflow. |
| Publish a page to Notion | The Notion page that was created, with a link to it. |
Schedule, Condition, Switch, Wait / delay, Send channel message, Send email, Action Board card and Notify dashboard add nothing of their own: they start a run, route or delay it, or deliver the message. Parallel and Merge show each step before them, as that step.
How each destination fits the report:
A long report is never cut silently: it says how much more there is and links to the run, where every result is kept. Personal details from a connected tool, such as HubSpot contact names and email addresses, appear only in an email to the workflow's owner.
Ask for approval pauses a run until a person decides. Put it in front of anything that shouldn't happen without someone saying yes — above all, publishing to your website.
Required before WordPress goes live. A Publish to WordPress step with Publish as set to publish, and every Update a WordPress post step, must come directly after an Ask for approval step, connected on its Approved branch, with no other connection into it. Drafts don't need one. The editor won't publish a workflow that breaks this rule, and a workflow published before approvals existed stops at that step, with nothing published, until you add the approval and publish it again. For example: Schedule → AI crawlers → Ask for approval → Publish to WordPress on Approved, and a Send channel message on Not approved.
Who decides. Workspace owners and admins. Members and viewers can open a request and see what it would do, but can't decide. A test or manual run asks the person who started it when they're an owner or admin, and every owner and admin otherwise; scheduled and event runs ask every owner and admin.
How they're asked. A notification in Vizzybl, an email, and a message in the workflow owner's connected chat channels, each with a Review and decide link. The decision is always made on the approval page in Vizzybl, signed in — there are no approve buttons in emails or chat. Emails follow each approver's contact preferences, and owners and admins can see on the request who was notified and how.
What the approver sees. The workflow, who or what started the run, your message to approvers (the step's Message to approvers setting), and the post exactly as it will be written: rendered, with its source, title, slug, excerpt, status, categories and tags. Images load only when the approver asks. For an update, the current post is shown next to the new version. Warnings point out content WordPress may show differently — shortcodes, tables, task lists and images hosted elsewhere. Below that is the report of the steps before the approval. Approvers approve or reject, with an optional note.
Reviewing a drafted page. A page written by Draft a page can contain marks the writer left for a person: [VERIFY: …] beside anything it could not confirm, and [EXPERT: …] where it needs something only you know. The approval page lists every one. While any remain, approving needs a tick: "I have checked the marked items, and they are fine to publish as they are." Rejecting needs no tick.
Editing before approving. An owner or admin can change the title and the text of what a WordPress step will publish before deciding. The page then shows the edited version, and that version is what is published. Anyone who had the earlier version open has to reload before they can decide, so nobody approves something they have not seen.
Exactly what was approved is published. The post is fixed when approval is requested, from what reached the approval step, and approving writes that version once. If the post is edited in WordPress after approval was requested, the update is not written over those edits — run the workflow again to ask for a fresh approval. If the workflow is deleted, or a scheduled or event-triggered workflow is turned off, before the post is written, nothing is published. Because the post is fixed at that point, the connection from the approval into WordPress can't carry a field mapping; put mappings on the connection into the approval instead.
Approved and Not approved. Not approved runs when someone rejects the request, when nobody decides in time, or when Vizzybl couldn't ask — for example, because the same step is still waiting on an approval from an earlier run. The step shows the reason.
How long it waits. 72 hours unless you change it, anything from 1 hour to 30 days. If nobody decides in time, the run takes Not approved and finishes — nothing is published. A waiting run holds its schedule: scheduled runs that fall due while it waits are skipped, not queued. So an approval added to a daily workflow starts at 12 hours, and the editor warns when the wait is about as long as the schedule.
While it waits. The run shows Waiting for approval, the step shows Awaiting approval, and Review approval in the editor opens the request. The Workflows page shows how many approvals are waiting. For owners and admins, Approvals also appears in the header of every page while something is waiting for them: one request opens directly, several open a short list. The approval page has a way back, and returns you to where you were once your decision is recorded. Cancel run closes the request, and nothing is published. Once decided, the request shows who decided and when, and links to the published post.
An approval's own result is the decision and when it was made — never who made it — so it can't leak into a webhook or a message. Ask for approval can't go inside a Repeat for each region.
Publishing from Create. Where it is switched on for your workspace, Publish to WordPress in Create asks in the same way before a page goes live or an existing post is changed: the request appears under Approvals, an owner or admin sees exactly what would be written, and approving writes it. Saving a new draft to WordPress needs no approval. An owner or admin publishing their own page approves it on the same page, and nobody else is notified.
When the page is already on your site, the panel shows Update the existing post. Leave it ticked to change that post, or untick it to make a new one. Status starts at what that post is now; choosing Draft for a post that is live takes it off the site, and the panel says so before you send it.
Draft a page writes a page for your site inside a workflow: a better version of a page you already have, or a new page on a topic you give it. It is the same writer as in Create and in Vizzy's drafts, at the same price: 10 credits for a rewrite and 15 credits for a new page.
Note: This step is being switched on one workspace at a time. If it is not in your palette, or a run says the step is not switched on for your workspace, it is not available to you yet.
[VERIFY: …], and places that need your own knowledge are marked [EXPERT: …]. Check them before the page is published.To put the draft on your site, follow it with Ask for approval and a WordPress step: Schedule → Draft a page → Ask for approval → Publish to WordPress on Approved. The approver sees the page, its marked items, and can edit it first.
The editor shows what a run could cost before it runs, and what it took afterwards.
Every figure is an upper bound, read from the same prices the steps are charged at. When a price changes, the editor shows the new one without anything being republished.
A spend limit for one run. In Cost you can set the most credits one run may take. Before a step that charges starts, Vizzybl adds what the run has already taken to what that step could take; if that would pass your limit, the step is skipped, with the reason, and the run finishes with a warning. A step that has started is never cut short, and steps that take nothing are not affected. Leave the field empty for no limit.
Every step has a limit on how long it may run: up to a minute for a step that reads data or sends something, and up to about five minutes for a step that runs an AI agent. Wait, Ask for approval and Repeat for each keep their own time.
These limits are being switched on. Once they are:
The editor already warns when a scheduled workflow's steps, each at its limit, could still be running when the workflow next falls due. A run that falls due while one is still going is skipped, not queued — repeat for fewer items, or run it less often.
Use Run test in the editor to execute the graph exactly as it appears on the canvas — the draft is saved automatically first, so a test always runs what you see. Manual and scheduled runs use the last published version.
The run button shows the most the run could take from your balance, for example Run test (up to 15 credits). It is always an upper bound: steps that skip don't charge, only one side of a branch runs, and a GEO audit is billed when the audit itself runs. What a run costs below explains the figure.
To pass one-off values into a run, open the inputs control next to the run button and add key/value pairs. They arrive on the trigger node's output, so any downstream step can read them.
Watch it run. While a run is in flight the canvas shows it live: each node gets a status dot and a coloured border, and the top bar shows the current step, progress, and credits used so far. Cancel run stops it — steps already finished stay finished, and any credits held for a step that never completed are released. A run started by a schedule or an event lights up the canvas the same way.
Select any node and open its Output tab to see exactly what that step produced. Each run also appears in Runs with per-node status, duration, output, and the credits it used; Show on canvas pins an older run so you can inspect it against the graph, and Unpin run returns to following the latest.
If a node fails, open the run and use view error to see exactly which node failed and why. Nodes retry automatically on transient failures. A step shown as skipped completed without doing its work (for example, an email or chat step with nothing configured to send to, or an email step whose owner has unsubscribed, snoozed notifications, or turned off Transactional email) — the skip reason appears next to the step.
Publishing keeps a snapshot. Open Versions in the editor to see every published version with who published it and when, and what changed between it and the version before — nodes added or removed, configuration changed, connections changed.
The editor's top bar shows draft differs from v3 whenever the canvas has unpublished changes.
Use the ⋯ menu on any row in the workflow library to Duplicate or Delete.
A duplicate arrives as a disabled draft called "… (copy)" with no run history, and it never inherits a schedule — so copying a live scheduled workflow leaves the original firing and gives you a safe copy to edit.
The on/off toggle controls scheduled execution: off pauses the schedule without deleting anything, on resumes it. Edits you publish take effect from the next scheduled run.
Important: Schedule times are UTC. A workflow set to 09:00 runs at 09:00 UTC regardless of your local timezone.
Workflows can also start themselves when something changes — no schedule needed:
sovDelta, currentSov, and previousSov from the trigger.reddit.com) to watch one source. Downstream nodes can read domain and promptId from the trigger.Publish the workflow and turn it on — event-triggered workflows fire at most once per event (a given day's snapshot, or a given new domain), so retries and re-checks never run them twice.
Repeat for each runs the steps that follow it once per item — every page Search Console flagged, every domain the AI engines cited instead of you.
gsc.rowsSteps inside read the current item as {{item}} — reach into it with {{item.page}}, and use {{index}} and {{total}} for position. Collect results then gives everything after it results (one entry per item, in order), count, and failed.
Three things to know:
results keeps every position, so entry 3 is always item 3.results equal to that step's output rather than changing shape when you add a branch.Not supported yet: regions inside regions, a Wait or Ask for approval step inside a region, Draft a page inside a region, and Run GEO audit inside a region (its credits are charged later by the audit itself, which can't yet tell the iterations apart). Each is blocked at publish with an explanation.
The Ask an AI step takes an instruction you write and runs it against the data earlier steps produced — summarise, classify, draft, extract, compare.
Reference an earlier step with double braces naming the step and the field:
Write three bullets a marketer can act on, from these Search Console pages:
{{gsc.rows}}
The name before the dot is the step's id, shown in its inspector. If a reference doesn't match anything, the step still runs and lists what it couldn't resolve in its output, so a typo costs you a re-run rather than a failed workflow.
Two settings are optional. Model trades speed for depth. JSON shape takes an example object and returns parsed data on json alongside the prose on text, which is what you want when a later step needs to branch on the answer.
Each run of the step costs 1 credit, and is refunded if the model returns nothing.
Data from earlier steps is treated strictly as input. Text scraped from other websites or generated by another AI can contain wording that looks like an instruction, and this step is built to ignore it.
You don't have to design a workflow from a blank canvas. The Workflows page opens with a gallery of ready-made templates — a weekly engine scorecard, a citation-gap review, an llms.txt drift monitor, a Search Console decay chain. Browse the same set publicly at vizzybl.ai/templates.
Click Deploy on any template and it is copied into your workspace as a draft, disabled, at version 0. Nothing runs until you publish it yourself.
Two things a template deliberately does not carry:
Each template shows what it will cost before you deploy it, worked out from today's prices each time the card is shown. It is always an upper bound — branches you don't take and steps that skip are not charged. Once a template is on your canvas, the editor's Run test (up to N credits) shows what applies to your own workspace, which can be lower: a step that is not charged yet is in a template's figure and not in yours.
If you run several brands on one credit pool — an agency, or a group with multiple brand workspaces — you can build a workflow once and deploy it everywhere.
Sharing runs the same scrub as a public template, so your URLs, site ids and keys stay in your workspace. Vizzybl tells you how many fields were removed, and whoever deploys it is asked to supply them.
Only the workspace that shared a template can remove it. Sharing a credit pool lets colleagues deploy your work, not edit or delete it.