n8n is a self-hostable workflow automation tool that connects apps using a node-based visual editor. Unlike Zapier or Make, you can run it on your own server so your data never leaves your infrastructure. The node library covers over 400 integrations. This guide skips the overview and gets into five specific workflows you can build this week, with the actual node names and configuration steps so you can rebuild each one yourself.

How n8n Workflows Work Before You Start

Every workflow starts with a trigger node, which fires when something happens (a new form submission, a scheduled time, an incoming webhook). Each subsequent node takes the data from the previous node and does something with it: transforms it, sends it somewhere, or makes a decision. Data passes between nodes as JSON objects. You reference previous node outputs using expressions like {{ $node["Slack"].json.ts }} or {{ $json.email }}.

You do not need to write code for most workflows. The Code node (JavaScript or Python) is available for anything the built-in nodes cannot handle.

Workflow 1: Form Submission to CRM Contact Plus Slack Alert

This workflow fires every time someone fills out a contact form on your website and creates a CRM contact, then notifies your sales team in Slack.

Nodes in order:

  1. Webhook node (trigger): set to POST, create a test URL, paste it as your form's action endpoint. Output includes all form fields as JSON keys.
  2. HubSpot node (action: Create Contact): map {{ $json.body.email }} to Email, {{ $json.body.first_name }} to First Name, {{ $json.body.company }} to Company. Set Lifecycle Stage to "Lead".
  3. Slack node (action: Send a Message): channel = #new-leads, message text = New lead: {{ $json.body.first_name }} {{ $json.body.last_name }} from {{ $json.body.company }} -- {{ $json.body.email }}
  4. Gmail node (action: Send Email): to = {{ $json.body.email }}, subject = "Thanks for reaching out", body = your HTML welcome template with the lead's name interpolated.

Result: Every form submission creates a HubSpot contact, fires a Slack message to your sales channel, and sends a welcome email to the prospect. Setup time: about 25 minutes.

Workflow 2: Stripe Payment to Airtable Record Plus Receipt

When a customer pays, this workflow logs the transaction in Airtable and sends a formatted receipt to the customer automatically.

Nodes in order:

  1. Stripe Trigger node (event: payment_intent.succeeded): configure your Stripe webhook secret in n8n credentials. The output includes payment amount in cents, customer email, payment intent ID, and timestamps.
  2. Set node: create a formatted field called amount_dollars using the expression {{ ($json.amount / 100).toFixed(2) }}, and a formatted_date using {{ new Date($json.created * 1000).toLocaleDateString('en-US') }}.
  3. Airtable node (action: Create Record, table: Payments): map Customer Email, Amount (dollars), Date, Payment Intent ID, Status = "Paid".
  4. Gmail node (action: Send Email): to = {{ $json.receipt_email }}, subject = Your payment receipt -- ${{ $node["Set"].json.amount_dollars }}, body = HTML receipt with transaction ID and date.

Result: Every paid invoice creates a permanent Airtable record and delivers a professional receipt automatically. No manual bookkeeping for routine transactions.

Workflow 3: RSS Blog to LinkedIn and Twitter

This workflow checks your blog RSS feed every two hours, generates an AI-written social post for any new articles, and publishes to LinkedIn and Twitter automatically.

Nodes in order:

  1. Schedule Trigger node: interval = every 2 hours.
  2. RSS Read node: URL = your blog's RSS feed URL (e.g., https://yourblog.com/feed.xml). Outputs item title, link, description, pubDate.
  3. IF node: condition = {{ new Date($json.pubDate) > new Date(Date.now() - 2 * 60 * 60 * 1000) }}. This filters to only items published in the last 2 hours so you do not repost old articles.
  4. OpenAI node (action: Message a Model, model: gpt-4o-mini): prompt = Write a 240-character tweet promoting this article. Include a call to action. Article title: {{ $json.title }}. Article summary: {{ $json.description }}. The mini model is sufficient here and costs a fraction of GPT-4o.
  5. Twitter node (action: Create a Tweet): text = {{ $node["OpenAI"].json.choices[0].message.content }} {{ $json.link }}
  6. LinkedIn node (action: Create a Post): text = New article: {{ $json.title }} {{ $node["OpenAI"].json.choices[0].message.content }} Read more: {{ $json.link }}

Result: Articles automatically generate social posts and publish across channels within two hours of going live. One workflow replaces a recurring manual task entirely.

Workflow 4: Shopify Order to Fulfillment Queue Plus Inventory

When a paid Shopify order comes in, this workflow queues it for shipment and decrements inventory counts in Airtable.

Nodes in order:

  1. Shopify Trigger node (event: orders/create): outputs full order object including line items, customer address, financial status, and order number.
  2. IF node: condition = {{ $json.financial_status === "paid" }}. Only process paid orders, not pending or COD orders.
  3. ShipStation node (action: Create Order): map ship_to from $json.shipping_address, map line items from $json.line_items, order number from $json.order_number.
  4. Split In Batches node: set to loop over $json.line_items so the next node runs once per line item.
  5. Airtable node (action: Update Record): search for the record where SKU = {{ $json.sku }}, then update the Quantity field to {{ $node["Airtable"].json.fields.Quantity - $json.quantity }}.
  6. Slack node (action: Send a Message): channel = #fulfillment, message = Order #{{ $node["Shopify Trigger"].json.order_number }} queued. {{ $json.line_items.length }} items, shipping to {{ $json.shipping_address.city }}, {{ $json.shipping_address.province }}.

Result: Every new paid order instantly queues for shipping and keeps your inventory counts accurate without a single manual step.

Workflow 5: Weekly Support Ticket Digest with AI Summary

Every Monday morning, this workflow pulls open tickets from Zendesk, generates an AI summary, and emails a digest to the support manager.

Nodes in order:

  1. Schedule Trigger node: cron expression = 0 8 * * 1 (Monday 8:00 AM).
  2. Zendesk node (action: Get All Tickets): filter status = open, created_at greater than 7 days ago. Outputs ticket array with subject, requester, assignee, created date, and priority.
  3. Code node (JavaScript): group tickets by assignee name, count per category, build a summary string. Example: const grouped = items.reduce((acc, item) => { const assignee = item.json.assignee_id; acc[assignee] = (acc[assignee] || 0) + 1; return acc; }, {}); return [{json: {summary_data: JSON.stringify(grouped), total: items.length}}];
  4. OpenAI node: prompt = Here is this week's support ticket data: {{ $json.summary_data }}. Total tickets: {{ $json.total }}. Write a 3-bullet executive summary for the support manager. Highlight any concerning patterns.
  5. Gmail node: to = [email protected], subject = Weekly Support Digest -- {{ $now.toLocaleDateString() }}, body = HTML table showing ticket counts per agent plus the AI-generated summary.

Result: The support manager arrives Monday morning with a clear picture of last week's ticket load, distribution, and any flagged patterns, without anyone having to compile it.

Workflow Comparison at a Glance

WorkflowTriggerKey NodesEst. Build TimeDifficulty
Form to CRM + SlackWebhookHubSpot, Slack, Gmail25 minBeginner
Stripe to Airtable + ReceiptStripe TriggerSet, Airtable, Gmail30 minBeginner
RSS to LinkedIn + TwitterScheduleRSS Read, IF, OpenAI, Twitter, LinkedIn40 minIntermediate
Shopify to ShipStation + InventoryShopify TriggerIF, ShipStation, Split, Airtable, Slack50 minIntermediate
Weekly Ticket DigestScheduleZendesk, Code, OpenAI, Gmail45 minIntermediate

Tips for Building Your Own Workflows

Start with one workflow that solves a problem you hit every week. Not a problem you might have, one you definitely have. The moment of success (watching a real order queue automatically while you are in a meeting) is what makes the investment click.

Use the Pin Data feature in n8n to freeze a sample payload from your trigger while you build and test downstream nodes. This way you can iterate on the HubSpot or Airtable steps without needing a real event to fire each time.

Always add error handling. Use the Error Trigger node to catch workflow failures and send a Slack or email alert when something breaks. Without this, failed executions happen silently.

Quick Reference: Node Expression Syntax

n8n uses expressions in double curly braces to pass data between nodes. Here are the patterns you will use most often:

-- Referencing previous node output --
{{ $json.email }}
  Access the "email" field from the current item

{{ $node["Stripe Trigger"].json.amount }}
  Access the "amount" field from a specific named node

{{ $json.amount / 100 }}
  Math expressions work inline

{{ new Date($json.created * 1000).toLocaleDateString('en-US') }}
  Convert a Unix timestamp to a readable date

{{ $json.line_items.length }}
  Count items in an array

-- Common IF node conditions --
{{ $json.financial_status === "paid" }}
  String equality check

{{ new Date($json.pubDate) > new Date(Date.now() - 7200000) }}
  Date comparison (is pubDate newer than 2 hours ago?)

{{ $json.email.includes("@gmail.com") }}
  String contains check

Frequently Asked Questions

What is the difference between n8n and Zapier?

Zapier is a cloud-only service with a simpler interface and more out-of-the-box app connections, but it charges by task and gets expensive at volume. n8n can be self-hosted (your data, your server, your costs) and is free for the self-hosted version. n8n also supports more complex logic with branching, loops, and custom code nodes. Zapier is easier to start with. n8n is more powerful and cheaper at scale.

Do I need coding skills to use n8n?

No for most workflows. The visual node editor handles triggers, actions, IF conditions, and data mapping without code. The Code node (JavaScript or Python) is available when you need custom logic that built-in nodes cannot handle, but the five workflows in this guide require no code at all except the Zendesk digest, which uses a simple grouping snippet.

How do I host n8n?

The simplest self-hosted setup is Docker. Run docker run -it --rm --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n and visit localhost:5678. For a permanent installation, use a small cloud server (a $6/month VPS is sufficient for most small-business workflows). n8n also offers a managed cloud version starting at $20/month if you prefer not to manage the server yourself.

Are n8n workflows reliable for production use?

Yes, with proper setup. Self-hosted n8n needs a persistent database (SQLite works for low volume, PostgreSQL for higher load), a process manager so it restarts on crash (Docker restart policies or PM2), and error notifications so failed executions do not go unnoticed. The cloud version handles reliability for you. Thousands of businesses run production workflows on n8n including multi-step automations that process hundreds of events per day.

Can I import pre-built n8n workflow templates?

Yes. n8n's official template library at n8n.io/workflows has hundreds of community-shared workflows in JSON format. To import, copy the JSON, open your n8n editor, click the menu in the top right, and choose "Import from JSON." The workflow appears in your editor with all nodes configured, though you will need to reconnect your own credentials for each service.

Getting Started

Pick one workflow from this list that matches a real problem you have this week. Set up n8n using Docker or the cloud trial, build the workflow, and test it with a real event. The first successful automation, watching data flow from your form into your CRM and Slack without you touching it, makes the concept real in a way that reading about it does not. Once that first one is running, the second and third workflows take a fraction of the time.