Automated Content Quality with n8n
The Markup AI node for n8n runs the Style Agent against text from any source n8n can reach — cloud storage, CMSs, ticketing systems, emails, webhooks, and more. It returns a content-risk assessment, issues grouped by severity, and a ready-to-send HTML report, so you can enforce style and brand standards automatically, wherever your content lives.
This guide walks you through installing the node, configuring it, and using it inside a complete Google Drive → Markup AI → Gmail workflow you can copy and adapt.
What Markup AI does for you in n8n
- One node, agentic workflow: A single Run Agent operation submits your text to the Markup AI Style Agent and waits for the result. Long documents won’t block the workflow — the node submits the run, polls the workflow until it reaches a terminal state, and returns the full payload.
- Style Agent: Pick the Style Guide (your team’s style standards) at the node level.
- Structured result: Every successful run returns issues grouped by severity (High, Medium, Low), an
issue_countssummary, aworkflow_idfor traceability, and anhtml_reportyou can drop straight into an email body. - Filter and route: Use n8n IF nodes on the issue counts to alert reviewers, block publishing, or open a ticket only when content needs attention.
Which agents are supported
- Style Agent
Prerequisites
To use the Markup AI node in n8n, you’ll need:
- An active n8n instance (self-hosted or n8n Cloud).
- A Markup AI account with the Style Agent enabled for your organization. The Style Agent is not on self-serve signup yet — talk to us to get it enabled.
- A Markup AI API token generated from the Markup AI console.
- At least one content source node (Google Drive, Notion, HTTP Request, Webhook, Email, etc.) that can deliver your content to the Markup AI node.
- (Optional) An output channel such as Gmail, Slack, or a ticketing integration to deliver results to stakeholders.
The Style Agent must be enabled for your organization for the node to succeed. If it isn’t, the node fails fast with a clear error — reach out to support to get it turned on.
Supported content sources
The Markup AI node works with any upstream node that delivers your content — the Style Agent accepts multiple content formats, so you don’t need to convert ahead of time. Typical patterns:
- File-based nodes (Google Drive, S3, WebDAV) combined with an Extract from File node so the content reaches Markup AI.
- Direct content from APIs, forms, webhooks, or transactional email nodes.
- CMS and documentation platforms connected via their n8n integrations.
Installing the Markup AI node
The node ships as the community package @markupai/n8n-nodes-markupai.
Community Nodes (recommended)
- In n8n, open Settings → Community Nodes.
- Click Install.
- Enter
@markupai/n8n-nodes-markupaiin the package field. - Click Install and wait for n8n to confirm.
The full Markup AI node now appears in the node panel.
Manual installation
If your n8n instance doesn’t allow community-node installs from the UI, install the package directly:
See the n8n community nodes installation guide for details on self-hosted setups.
Connect your Markup AI account
The node uses an n8n credential of type Markup AI API.
- In n8n, open Credentials → New.
- Search for Markup AI API and select it.
- Paste your Markup AI API token into the API Key field.
- Click Save. n8n validates the token against your Markup AI workspace.
You can reuse the same credential across every Markup AI node in your instance.
Configuring the Run Agent operation
The Markup AI node exposes one resource (Agent) and one operation (Run Agent).
The fields you’ll see on the node:
- Agent (required) — Pick the Style Agent.
- Style Guide (shown for the Style Agent) — Choose the Style Guide for this workflow. The dropdown is populated from the Style Guides configured for your organization. Leave it blank to use your default Style Guide.
- Content (required) — A multiline string. Map this to the content from your upstream node (for example
{{$json.data}}after an Extract from File node). - Additional Options → Document Name (optional) — A human-readable name (for example, the filename) that’s echoed back on the result.
- Additional Options → Document Reference (optional) — A caller-supplied identifier (such as a CMS page ID) echoed back on the result. Useful for matching results to records in downstream systems.
- Additional Options → Timeout (Ms) (optional) — Maximum time to wait while polling for the workflow to finish. Default is
120000(2 minutes); raise it for long documents.
The Style Guide is a starting point. Different workflows can pick different Style Guides, so one workflow can check marketing copy against your Marketing guide while another checks technical docs against an Engineering guide.
Understanding the output
A successful Run Agent execution returns a single JSON item with these top-level fields:
workflow_id— Unique ID for the run. Include it when contacting Markup AI support about a specific check.status—completed,failed,timed_out, orcancelled. Successful runs are alwayscompleted.document_ref— Echoes the Document Reference you provided.result.issues[]— Every issue the Style Agent found, with severity, category, original phrase, suggestion, and explanation.issue_counts—{ total, high, medium, low }summary of issues by severity — the Content Risk assessment for the run. The node computes it so you can use it in IF nodes without writing JavaScript.html_report— A self-contained, email-safe HTML report you can drop into the body of a Gmail or Slack node.started_at,completed_at,duration_seconds— Timing metadata.
If you enable Continue On Fail on the node, errors are emitted as { error: "<message>" } items so downstream branches can handle them; otherwise the workflow stops on error.
Example workflow — Google Drive → Markup AI → Gmail
This workflow watches a Google Drive folder, runs the Style Agent on every new or updated document, and emails the report to stakeholders. You can swap Google Drive for any n8n source node and Gmail for any messaging or task-management node.
Goal: Whenever a document is added to (or updated in) a watched Google Drive folder, extract its text, run the Style Agent, and email the report to a reviewer.
Google Drive Trigger
Start the workflow when a file appears in the watched folder.
- Node: Google Drive Trigger
- Trigger On: File Created or File Updated
- Folder: the folder you want to monitor
- File types: any types you plan to support (PDFs, text, Markdown)
This step emits the file metadata that drives the rest of the workflow.
Download the file
Retrieve the file contents as binary data.
- Node: Google Drive
- Operation: Download
- File ID:
{{$json.id}}(from the trigger output)
Extract the file contents
Pull the file contents out of the binary data so the Markup AI node can analyze them.
- Node: Extract from File
- Operation: pick the operation that matches your source (n8n offers extractors for common document formats).
- Input Binary Field:
data - Destination Output Field:
data
If you mix formats in the same workflow, use an IF node ahead of this step to route each format to its matching extractor; both branches should end with the same data field so the Markup AI node downstream stays identical.
Run the Style Agent
Wire the Markup AI node downstream of the extraction step.
- Node: Markup AI
- Credential: the Markup AI API credential you created above
- Resource: Agent
- Operation: Run Agent
- Agent: Style Agent
- Style Guide: your team’s Style Guide (or leave blank to use the default)
- Content:
{{$json.data}}(the extracted content) - Additional Options:
- Document Name: the original filename from the trigger
- Document Reference: the Google Drive file ID (or any identifier you want echoed back)
- Timeout (Ms): raise from
120000if you expect very long documents
The node submits the run, polls until it finishes, and returns the full result JSON.
Gate on issue severity (optional)
Skip notifications for content that already passes.
- Node: IF
- Condition: for example
{{$json.issue_counts.high}}> 0 — alert whenever any High severity issue is found. For a stricter gate, add a second condition on{{$json.issue_counts.medium}}.
Only items that fail the condition continue to the next step.
Email the report
Send a ready-made notification with the Markup AI HTML report embedded.
- Node: Gmail
- Operation: Send Email
- To: the stakeholders to notify
- Subject:
Content risk report: {{$json.document_ref}} - Email Type: HTML
- Message:
{{ $json.html_report }}
Reviewers receive the full styled Markup AI report inline. Including the workflow_id in the subject or body makes troubleshooting trivial later.
Best practices
Workflow design
- Keep workflows modular. Use separate workflows for distinct sources (Drive, CMS, tickets) so each one stays focused.
- Filter early. Use triggers and IF nodes so you only analyze relevant files.
- Set risk gates. Use
issue_counts.high(and optionallyissue_counts.medium) to decide when to alert, block publishing, or open a ticket. - Log results. Append
workflow_idandissue_countsto a sheet or database to track Content Risk trends over time.
Configuration management
- Centralize credentials. Store the Markup AI API token once as a Markup AI API credential and reuse it across nodes.
- Standardize settings. Use a consistent Style Guide across workflows that cover the same content type.
- Start simple. Begin with a single workflow that emails the report, then layer on routing, ticketing, and dashboards as you learn what your team needs.
Team integration
- Agree on the risk gate. Define what good enough looks like (for example, no High severity issues) before you wire the gate.
- Make notifications actionable. Embed the
issue_countsand thehtml_reportin every alert so reviewers can act without opening the source document. - Iterate. Adjust Style Guides and risk gates as you review real results — the goal is high signal, not high volume.
Troubleshooting
Workflow not triggering
- Confirm the trigger node is configured (folder ID, event type, schedule).
- Check that the workflow is Active in n8n.
- Review the Executions list — n8n only polls when the workflow is active.
No text extracted
- Confirm the Input Binary Field in the Extract from File node matches the field name from the previous step (usually
data). - Confirm the file type matches the extractor (PDF vs text).
- Inspect the node output — the destination field should contain a non-empty string.
Markup AI node errors
- Verify the Markup AI API credential is still valid.
- Make sure Content is mapped to a non-empty string from the extractor node.
- The error message includes the
workflow_idfor the failed run — share it with Markup AI support when reporting an issue. - If the run times out, raise Additional Options → Timeout (Ms) for long documents.
Email not sending
- Confirm the Gmail (or email) node credential is authenticated.
- Confirm the To address is valid.
- Check the workflow execution to see if an earlier IF node filtered the item out before the email step.
Need help?
Reach out at the Markup AI Community. Include the workflow_id from the node’s output and a short description of what you saw — that’s everything support needs to investigate a specific run.