# GenAI Unplugged — Full Content (llms-full.txt) > Comprehensive full-text companion to /llms.txt for AI assistants and crawlers. Curated index: https://www.genaiunplugged.com/llms.txt Generated: 2026-08-30. 121 pages. --- # How to Self-Host WordPress for Free on Oracle Cloud (2026 Guide) URL: https://www.genaiunplugged.com/wordpress-self-host/self-host-wordpress-free-oracle-cloud.html > Deploy WordPress on Oracle Cloud's free tier with 24GB RAM. Save $300-600/year vs managed hosting. Complete step-by-step guide with NGINX, SSL, and security. Your hosting company charges $25-50/month for 2GB of shared RAM. Oracle Cloud gives you 24GB for free. Here is how to make the switch. This is not a theoretical exercise. I run production sites on Oracle Cloud's Always Free tier. The servers have been up for years. The bill has been $0 every month. And the performance destroys what most managed hosting companies deliver at 10x the price. In this guide, you will learn exactly why self-hosting WordPress on Oracle Cloud makes financial and technical sense, and then walk through every step of setting it up. By the end, you will have a fully configured WordPress site running on a server with more RAM than most dedicated hosting plans, with HTTPS, security hardening, and performance optimization included.
## The Managed Hosting Problem The WordPress hosting industry is built on a pricing model that depends on you not asking questions. Here is how it works. ### The Introductory Pricing Trap Every major hosting company leads with an impossibly low price. SiteGround advertises $2.99/month. Bluehost shows $2.95/month. Hostinger leads with $1.99/month. What they do not advertise as prominently: those prices require 36-month commitments paid upfront, and when your term ends, the renewal price jumps 200-400%. That $2.99/month SiteGround plan renews at $17.99/month. Bluehost's $2.95 becomes $11.99. You locked in a cheap first year, and now you are paying premium prices for the same shared server you started on. ### The Feature Upsell Machine Managed hosting companies have turned basic server features into premium add-ons: - **SSL certificates**: $10-15/month. Let's Encrypt provides these for free on any server. - **Automatic backups**: $2-5/month. A cron job and a shell script do the same thing. - **Staging environments**: $10-20/month. A second directory on your server costs nothing. - **CDN integration**: $5-10/month. Cloudflare's free tier handles this. - **Email hosting**: $5/month per mailbox. Zoho offers free business email. Add these up and your "affordable" $3/month hosting plan quietly becomes $30-50/month. ### The Shared Resource Problem The most fundamental issue with managed hosting is what you are actually buying. On shared hosting, your site lives on a server with hundreds of other sites. That 2GB of RAM the plan advertises? You share it. When your neighbor's site gets a traffic spike, your site slows down. When the server runs a backup cycle, everyone's performance drops. You are paying premium prices for resources you do not exclusively own. ### The Control Deficit Managed hosting restricts what you can do on "your" server: - Cannot install custom PHP extensions - Cannot modify server configuration files - Cannot run custom cron jobs at the system level - Cannot install certain plugins (some hosts blacklist security or caching plugins that compete with their upsells) - Cannot access server logs for debugging - Cannot optimize MySQL configuration You are renting a walled garden and paying for the privilege of being locked in. ## Cost Comparison: Managed Hosting vs Self-Hosting Let us put real numbers on this. Here is what popular WordPress hosting options actually cost over time, compared to Oracle Cloud's free tier. ### Year 1 Costs (Introductory Pricing) | Provider | Plan | Monthly | Annual | RAM | Storage | SSL | Backups | |----------|------|---------|--------|-----|---------|-----|---------| | **SiteGround** | StartUp | $2.99 | $36 | 1 GB (shared) | 10 GB | Free | $24/yr extra | | **Bluehost** | Basic | $2.95 | $35 | 2 GB (shared) | 50 GB | Free | $36/yr extra | | **WP Engine** | Startup | $20 | $240 | 2 GB (shared) | 10 GB | Free | Included | | **Cloudways** | DigitalOcean 2GB | $14 | $168 | 2 GB (dedicated) | 50 GB | Free | $12/yr extra | | **Kinsta** | Starter | $30 | $360 | 2 GB (shared) | 10 GB | Free | Included | | **Oracle Cloud** | Always Free ARM | $0 | $0 | 24 GB (dedicated) | 200 GB | Free (Let's Encrypt) | Free (you set up) | ### Year 2-3 Costs (Renewal Pricing) This is where the real cost becomes visible. Introductory pricing is gone. You are now paying what the hosting actually costs. | Provider | Monthly (Renewal) | Year 2 | Year 3 | **3-Year Total** | |----------|-------------------|--------|--------|-------------------| | **SiteGround** | $17.99 | $216 | $216 | **$468** | | **Bluehost** | $11.99 | $144 | $144 | **$323** | | **WP Engine** | $25 | $300 | $300 | **$840** | | **Cloudways** | $14 | $168 | $168 | **$504** | | **Kinsta** | $35 | $420 | $420 | **$1,200** | | **Oracle Cloud** | $0 | $0 | $0 | **$0** | **The only cost of self-hosting on Oracle Cloud is your domain name: $10-15/year.** Over three years, that is $30-45 total versus $323-1,200 for managed hosting. ### What You Get for $0 vs $25-50/Month | Resource | Managed Hosting ($25-50/mo) | Oracle Cloud Free Tier ($0/mo) | |----------|---------------------------|-------------------------------| | RAM | 1-4 GB shared | 24 GB dedicated | | CPU | Shared (unknown allocation) | 4 OCPUs dedicated | | Storage | 10-50 GB | 200 GB | | Root Access | No | Yes | | Custom PHP Config | No | Yes | | Server-Level Caching | Limited | Full control | | Custom NGINX Config | No | Yes | | Firewall Control | No | Yes | | SSH Access | Limited or none | Full | | Automatic Scaling | No (pay to upgrade) | Manual (but 24GB is already massive) | The numbers speak for themselves. You get more resources for free than most people pay $50/month to access. ## Oracle Cloud Free Tier Explained Oracle Cloud Infrastructure (OCI) launched its Always Free tier in September 2019. Unlike AWS Free Tier (12 months) or Google Cloud Free Tier (limited credits that expire), Oracle's Always Free resources do not expire. Ever. ### What You Actually Get The Always Free tier includes: **Compute (ARM-based Ampere A1):** - Up to 4 OCPUs (Oracle CPUs, roughly equivalent to 4 vCPUs) - Up to 24 GB RAM - These resources can be split across multiple instances or used in a single instance **Storage:** - 200 GB total block volume storage - 2 block volumes - 10 GB object storage - 10 GB archive storage **Networking:** - 10 TB outbound data transfer per month - 1 public IP address per instance - Virtual Cloud Network (VCN) with subnets, route tables, and security lists **Additional Services:** - Oracle Autonomous Database (2 instances, 20 GB each) - Load Balancer (1 instance, 10 Mbps) - Monitoring and Notifications For WordPress, the compute and storage are what matter. A single ARM instance with 24 GB RAM and 200 GB storage is more than enough to run multiple WordPress sites. ### ARM vs x86: Does It Matter? Oracle's Always Free compute uses ARM-based Ampere A1 processors, not x86 (Intel/AMD). For WordPress, this makes zero practical difference: - PHP runs natively on ARM - MySQL/MariaDB runs natively on ARM - NGINX runs natively on ARM - Ubuntu has full ARM support - All major WordPress plugins are PHP-based and CPU-architecture agnostic ARM processors are actually more power-efficient, meaning Oracle can offer more resources for free. The A1 instances deliver excellent single-thread performance, which is exactly what WordPress needs for page rendering. The only potential issue: if you use a WordPress plugin that relies on a compiled binary specifically built for x86. This is extremely rare. In practice, I have never encountered a WordPress plugin that does not work on ARM. ### How to Stay on the Free Tier Oracle's billing model separates Always Free resources from paid resources. To ensure you are never charged: 1. **Only use Always Free eligible shapes** when creating instances (the Ampere A1 Flex shape with up to 4 OCPUs and 24 GB RAM) 2. **Do not exceed the free storage limit** (200 GB block volume total) 3. **Do not enable paid services** (Oracle will clearly label what is Always Free vs paid) 4. **Monitor your usage** in the OCI console dashboard Oracle requires a credit card at sign-up for identity verification. But Always Free resources cannot generate charges. If you accidentally provision a paid resource, Oracle sends warnings before billing, and you can terminate the resource immediately. ### The Sign-Up Availability Issue One thing to know upfront: Oracle Cloud free tier account creation is subject to capacity in your selected home region. During high-demand periods, you may get an error saying the region is full. If this happens: - Try a different home region (Ashburn, Phoenix, and US-based regions tend to have good availability) - Try again in a few days - Try during off-peak hours (early morning or late night) Once your account is created and your instance is launched, it is yours permanently. The availability limitation only affects new account creation, not existing instances. ## Performance Comparison: Why 24 GB Dedicated RAM Changes Everything Most WordPress performance discussions focus on caching plugins and CDNs. Those matter. But the single biggest factor in WordPress performance is available memory, and whether that memory is shared or dedicated. ### How WordPress Uses Memory When a visitor loads a WordPress page, here is what happens on the server: 1. **NGINX** receives the request and routes it to PHP-FPM 2. **PHP-FPM** spawns a worker process (each worker uses 30-60 MB of RAM) 3. **WordPress core** loads (~15 MB) 4. **Active plugins** load (varies: 5-50 MB depending on plugins) 5. **Theme** renders the page (5-20 MB) 6. **MySQL** executes database queries (each connection uses 10-50 MB) 7. The rendered HTML is sent back to the visitor A single WordPress page load can consume 50-150 MB of RAM. On shared hosting with 1-2 GB total (shared among hundreds of sites), your site is already fighting for resources before the first visitor arrives. ### Shared Hosting: The Bottleneck On a shared hosting plan with 2 GB RAM (shared): - PHP-FPM can handle approximately 5-10 concurrent workers - More than 10 simultaneous visitors and your site starts queuing requests - Database queries compete with other sites on the same MySQL instance - During peak traffic, response times spike from 200ms to 2-5 seconds - Your hosting provider may throttle your site if it uses "too many" resources ### Oracle Cloud Free Tier: The Difference On Oracle Cloud with 24 GB dedicated RAM: - PHP-FPM can handle 100+ concurrent workers - MySQL gets dedicated memory for query caching and buffer pools - OPcache can store your entire WordPress codebase in memory - NGINX FastCGI cache can hold thousands of cached pages in RAM - Redis object cache can store the entire WordPress object cache in memory - Simultaneous visitors measured in hundreds, not tens ### Real-World PageSpeed Impact The performance difference is measurable. A standard WordPress site with a modern theme and 10-15 plugins: | Metric | Shared Hosting (2 GB) | Oracle Cloud Free (24 GB) | |--------|----------------------|--------------------------| | Time to First Byte (TTFB) | 400-800 ms | 50-150 ms | | Largest Contentful Paint | 2.5-4.0 s | 0.8-1.5 s | | PHP Response Time | 200-500 ms | 30-80 ms | | Concurrent Users Before Slowdown | 10-20 | 200+ | | Google PageSpeed Score (Mobile) | 40-65 | 85-100 | These are not theoretical numbers. The difference comes from one thing: dedicated resources versus shared resources. When your PHP workers do not compete for memory, when MySQL has enough buffer pool to cache your entire database, when OPcache keeps compiled PHP in memory permanently, everything is faster. ### Why This Matters for SEO Google has used page speed as a ranking factor since 2010, and Core Web Vitals became a ranking signal in 2021. A faster site directly impacts: - **Search rankings**: Google prefers faster sites, all else being equal - **Bounce rate**: 53% of mobile visitors leave if a page takes longer than 3 seconds to load - **Conversion rate**: Every 100ms improvement in load time increases conversions by 1-2% - **Crawl budget**: Googlebot can crawl more pages per visit on faster sites Moving from shared hosting to Oracle Cloud's free tier is not just a cost savings. It is an SEO upgrade. ## Step-by-Step: WordPress on Oracle Cloud Here is the high-level walkthrough of deploying WordPress on Oracle Cloud. Each step includes the key commands and decisions you will need to make. **Note:** If you want a guided, interactive setup experience, the [WordPress Self-Host Autopilot](/wordpress-self-host/) walks you through every command with explanations and confirmation prompts. What follows here is the manual process for those who prefer to work independently. ### Step 1: Create an Oracle Cloud Account 1. Go to [cloud.oracle.com](https://cloud.oracle.com) and click "Sign Up for Free" 2. Enter your email and personal information 3. Select a **Home Region** (choose one close to your target audience; US East Ashburn is a solid default for North American traffic) 4. Add a credit card for verification (you will not be charged for Always Free resources) 5. Wait for account activation (usually instant, sometimes up to 24 hours) **Important:** Your home region cannot be changed after account creation. Choose carefully. If your audience is primarily in Europe, pick a European region. If North America, pick Ashburn or Phoenix. ### Step 2: Launch an ARM Instance (Always Free) 1. In the OCI Console, navigate to **Compute > Instances** 2. Click **Create Instance** 3. Configure the instance: - **Name**: `wordpress-server` (or whatever you prefer) - **Image**: Ubuntu 22.04 (or the latest LTS available) - **Shape**: Ampere A1 Flex (this is the Always Free ARM shape) - **OCPUs**: 4 - **Memory**: 24 GB - **Boot Volume**: 100 GB (up to 200 GB available) 4. Under **Networking**, ensure a public IP is assigned 5. Under **SSH Keys**, either upload your existing public key or let Oracle generate a key pair (download and save the private key immediately) 6. Click **Create** The instance will be provisioned in 1-2 minutes. Note the public IP address displayed in the instance details. ### Step 3: SSH Into Your Server Open your terminal and connect: ```bash ssh -i /path/to/your/private-key ubuntu@YOUR_PUBLIC_IP ``` If you generated the key through Oracle's console, you may need to set the permissions first: ```bash chmod 600 /path/to/your/private-key ``` Once connected, update the system: ```bash sudo apt update && sudo apt upgrade -y ``` ### Step 4: Open Firewall Ports Oracle Cloud uses two layers of firewalls: the VCN Security List (cloud-level) and the OS-level firewall. You need to open ports in both. **Cloud-level (OCI Console):** 1. Navigate to your VCN > Security Lists > Default Security List 2. Add Ingress Rules for ports 80 (HTTP) and 443 (HTTPS) **OS-level (on the server):** ```bash sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT sudo netfilter-persistent save ``` ### Step 5: Install NGINX ```bash sudo apt install nginx -y sudo systemctl start nginx sudo systemctl enable nginx ``` Verify NGINX is running by visiting `http://YOUR_PUBLIC_IP` in a browser. You should see the default NGINX welcome page. ### Step 6: Install PHP 8.x and Required Extensions WordPress requires PHP with specific extensions. Install PHP 8.2 (or latest stable 8.x) with all necessary modules: ```bash sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \ php8.2-mbstring php8.2-xml php8.2-zip php8.2-intl php8.2-soap \ php8.2-bcmath php8.2-imagick php8.2-opcache php8.2-redis -y ``` Verify the installation: ```bash php -v ``` You should see PHP 8.2.x (or whichever version you installed). ### Step 7: Install MariaDB MariaDB is a drop-in replacement for MySQL with better performance on ARM: ```bash sudo apt install mariadb-server mariadb-client -y sudo systemctl start mariadb sudo systemctl enable mariadb ``` Secure the installation: ```bash sudo mysql_secure_installation ``` Follow the prompts: set a root password, remove anonymous users, disallow remote root login, remove test database, and reload privileges. Create a WordPress database and user: ```bash sudo mysql -u root -p ``` ```sql CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD_HERE'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` Replace `YOUR_STRONG_PASSWORD_HERE` with a strong, unique password. ### Step 8: Download and Configure WordPress ```bash cd /tmp curl -O https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz sudo mv wordpress /var/www/wordpress sudo chown -R www-data:www-data /var/www/wordpress sudo chmod -R 755 /var/www/wordpress ``` Create the WordPress configuration: ```bash cd /var/www/wordpress sudo cp wp-config-sample.php wp-config.php ``` Edit `wp-config.php` with your database credentials: ```bash sudo nano wp-config.php ``` Update these lines: ```php define('DB_NAME', 'wordpress'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'YOUR_STRONG_PASSWORD_HERE'); define('DB_HOST', 'localhost'); ``` Also update the authentication keys and salts. Visit [api.wordpress.org/secret-key/1.1/salt/](https://api.wordpress.org/secret-key/1.1/salt/) and paste the generated keys into your config file, replacing the placeholder lines. ### Step 9: Configure NGINX for WordPress Remove the default NGINX site and create a WordPress configuration: ```bash sudo rm /etc/nginx/sites-enabled/default sudo nano /etc/nginx/sites-available/wordpress ``` Add this configuration (replace `yourdomain.com` with your actual domain): ```nginx server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/wordpress; index index.php index.html; # Security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; # Gzip compression gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml; # Static file caching location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|webp)$ { expires 30d; add_header Cache-Control "public, immutable"; } # WordPress pretty permalinks location / { try_files $uri $uri/ /index.php?$args; } # PHP processing location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; } # Deny access to sensitive files location ~ /\.ht { deny all; } location = /wp-config.php { deny all; } # Deny access to xmlrpc.php location = /xmlrpc.php { deny all; access_log off; log_not_found off; } # Limit upload size client_max_body_size 64M; } ``` Enable the site and test the configuration: ```bash sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` ### Step 10: Set Up SSL with Let's Encrypt Before setting up SSL, point your domain to your server's public IP address by creating an A record with your domain registrar. Install Certbot: ```bash sudo apt install certbot python3-certbot-nginx -y ``` Obtain and install the certificate: ```bash sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com ``` Certbot will automatically modify your NGINX configuration to add HTTPS redirects and SSL settings. Set up auto-renewal (Certbot does this by default, but verify): ```bash sudo certbot renew --dry-run ``` Your site now has HTTPS with automatic certificate renewal every 90 days. ### Step 11: Complete WordPress Installation Visit `https://yourdomain.com` in your browser. You will see the WordPress installation wizard: 1. Select your language 2. Enter your site title 3. Create your admin username and password 4. Enter your email address 5. Click "Install WordPress" Your WordPress site is live. ## NGINX Configuration for WordPress: Key Directives The NGINX configuration in Step 9 covers the basics, but there are additional directives worth understanding for production WordPress hosting. ### PHP Processing The `fastcgi_pass` directive tells NGINX where to send PHP requests. On Ubuntu with PHP-FPM, this is a Unix socket: ```nginx fastcgi_pass unix:/run/php/php8.2-fpm.sock; ``` Unix sockets are faster than TCP connections (`127.0.0.1:9000`) because they skip the network stack entirely. Always use sockets when PHP-FPM and NGINX are on the same server. The buffer directives prevent 502 errors on pages with large outputs (WooCommerce checkout pages, large admin panels): ```nginx fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; ``` ### Static File Caching Static assets (images, CSS, JavaScript, fonts) do not change between deployments. Tell browsers to cache them aggressively: ```nginx location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|webp)$ { expires 30d; add_header Cache-Control "public, immutable"; } ``` The `immutable` flag tells browsers the file will never change at this URL. When you update CSS or JS, WordPress appends version query strings (`?ver=6.4.3`), so cached versions are naturally invalidated. ### Gzip Compression Gzip reduces the size of text-based responses by 60-80%: ```nginx gzip on; gzip_vary on; gzip_min_length 1024; gzip_comp_level 5; gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml; ``` `gzip_comp_level 5` is the sweet spot. Higher levels (6-9) use significantly more CPU for marginal size reduction. Level 5 gives roughly 90% of maximum compression at a fraction of the CPU cost. ### Security Headers These headers protect against common web attacks: ```nginx add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; ``` - **X-Frame-Options**: Prevents your site from being embedded in iframes (clickjacking protection) - **X-Content-Type-Options**: Prevents MIME type sniffing - **X-XSS-Protection**: Enables browser-level XSS filtering - **Referrer-Policy**: Controls what information is sent in the Referer header - **Content-Security-Policy**: Restricts which resources the browser can load - **Permissions-Policy**: Disables unused browser APIs ### FastCGI Cache (Advanced) For high-traffic sites, NGINX can cache rendered PHP pages and serve them without touching PHP at all. This is the single most impactful performance optimization for WordPress: ```nginx # In the http {} block (nginx.conf): fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=512m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; # In the server {} block: set $skip_cache 0; # Do not cache POST requests if ($request_method = POST) { set $skip_cache 1; } # Do not cache URLs with query strings if ($query_string != "") { set $skip_cache 1; } # Do not cache WordPress admin or login pages if ($request_uri ~* "/wp-admin/|/wp-login.php") { set $skip_cache 1; } # Do not cache for logged-in users if ($http_cookie ~* "wordpress_logged_in") { set $skip_cache 1; } location ~ \.php$ { fastcgi_cache WORDPRESS; fastcgi_cache_valid 200 60m; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; add_header X-Cache-Status $upstream_cache_status; # ... rest of PHP config } ``` With FastCGI caching enabled, cached page requests are served directly from NGINX memory in under 5ms. Your 24 GB of RAM can cache thousands of pages simultaneously. ## SSL Setup with Let's Encrypt ### Why HTTPS Is Non-Negotiable HTTPS is not optional in 2026. Here is why: **SEO**: Google confirmed HTTPS as a ranking signal in 2014. Sites without HTTPS are actively penalized in search results. **Browser Warnings**: Chrome, Firefox, and Safari all display "Not Secure" warnings on HTTP pages. Visitors see this and leave. **Data Integrity**: HTTPS prevents man-in-the-middle attacks that could inject ads or malware into your pages. **API Requirements**: Many modern JavaScript APIs (geolocation, service workers, push notifications) require HTTPS. **Trust**: Visitors expect the lock icon. Its absence signals unprofessionalism. ### Certbot Configuration Certbot handles certificate issuance, NGINX configuration, and automatic renewal. After running `sudo certbot --nginx`, it modifies your NGINX config to add: ```nginx listen 443 ssl; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # Redirect HTTP to HTTPS server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; } ``` ### Auto-Renewal Let's Encrypt certificates expire every 90 days. Certbot installs a systemd timer that automatically renews certificates before expiration: ```bash # Verify the timer is active sudo systemctl status certbot.timer ``` You can also add a cron job as a safety net: ```bash sudo crontab -e ``` Add: ``` 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx" ``` This checks for renewal daily at 3 AM and reloads NGINX if a certificate was renewed. ## Security Hardening for WordPress Self-hosting means you are responsible for security. Here is a comprehensive hardening checklist covering both server-level and WordPress-level protections. ### Server-Level Security **1. SSH Key Authentication Only** Disable password-based SSH login to prevent brute force attacks: ```bash sudo nano /etc/ssh/sshd_config ``` Set these values: ``` PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin no ``` Restart SSH: ```bash sudo systemctl restart sshd ``` **2. UFW Firewall** Set up a firewall that only allows necessary traffic: ```bash sudo apt install ufw -y sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 'Nginx Full' sudo ufw enable ``` This blocks all incoming traffic except SSH (port 22), HTTP (port 80), and HTTPS (port 443). **3. Fail2ban** Fail2ban monitors log files and bans IP addresses that show malicious behavior: ```bash sudo apt install fail2ban -y sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local ``` Add a WordPress-specific jail: ```ini [wordpress] enabled = true port = http,https filter = wordpress logpath = /var/log/nginx/access.log maxretry = 5 bantime = 3600 findtime = 600 ``` Create the filter: ```bash sudo nano /etc/fail2ban/filter.d/wordpress.conf ``` ```ini [Definition] failregex = ^ .* "POST /wp-login.php ^ .* "POST /xmlrpc.php ``` Restart fail2ban: ```bash sudo systemctl restart fail2ban ``` **4. Automatic Security Updates** ```bash sudo apt install unattended-upgrades -y sudo dpkg-reconfigure -plow unattended-upgrades ``` This automatically installs security patches for Ubuntu packages, including PHP, NGINX, and MariaDB. ### WordPress-Level Security **1. Disable XML-RPC** XML-RPC is a legacy API that most sites do not need. It is commonly exploited for brute force attacks and DDoS amplification. The NGINX configuration above already blocks it, but you can also disable it in WordPress: Add to `wp-config.php`: ```php add_filter('xmlrpc_enabled', '__return_false'); ``` **2. Hide WordPress Version** Do not advertise which WordPress version you run: Add to your theme's `functions.php`: ```php remove_action('wp_head', 'wp_generator'); ``` **3. Limit Login Attempts** Install the "Limit Login Attempts Reloaded" plugin or add this to `wp-config.php`: ```php define('WP_LOGIN_TIMEOUT', 300); ``` Combined with fail2ban, this creates a two-layer defense against brute force attacks. **4. Change the Default Login URL** The default `/wp-login.php` and `/wp-admin` paths are targeted by automated bots. Use a plugin like WPS Hide Login to change the login URL to something unique. **5. Set Correct File Permissions** ```bash sudo find /var/www/wordpress -type d -exec chmod 755 {} \; sudo find /var/www/wordpress -type f -exec chmod 644 {} \; sudo chmod 400 /var/www/wordpress/wp-config.php ``` The `wp-config.php` permission of 400 means only the file owner can read it, and nobody can write to it. This is the most sensitive file on your WordPress installation. ## Performance Optimization With 24 GB of RAM at your disposal, you can implement performance optimizations that shared hosting does not allow. ### OPcache Configuration OPcache stores compiled PHP bytecode in shared memory, eliminating the need to parse PHP files on every request. Edit the OPcache configuration: ```bash sudo nano /etc/php/8.2/fpm/conf.d/10-opcache.ini ``` ```ini opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.save_comments=1 opcache.enable_cli=0 ``` With 24 GB available, allocating 256 MB to OPcache is generous. This caches your entire WordPress codebase plus all plugin code in memory. ### Redis Object Cache WordPress makes hundreds of database queries per page load. Redis caches the results of these queries in memory: ```bash sudo apt install redis-server -y sudo systemctl enable redis-server ``` Configure Redis memory: ```bash sudo nano /etc/redis/redis.conf ``` Set: ``` maxmemory 512mb maxmemory-policy allkeys-lru ``` Install the Redis Object Cache plugin in WordPress and activate it. Add to `wp-config.php`: ```php define('WP_REDIS_HOST', '127.0.0.1'); define('WP_REDIS_PORT', 6379); define('WP_CACHE', true); ``` With Redis, repeated database queries are served from memory in microseconds instead of milliseconds. For sites with complex queries (WooCommerce, membership sites, large blogs), this can reduce page generation time by 50-80%. ### PHP-FPM Tuning Edit the PHP-FPM pool configuration: ```bash sudo nano /etc/php/8.2/fpm/pool.d/www.conf ``` With 24 GB of RAM, you can run many more PHP workers than the default configuration: ```ini pm = dynamic pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20 pm.max_requests = 500 ``` Each PHP-FPM worker uses approximately 30-60 MB of RAM. With 50 workers at 60 MB each, that is 3 GB maximum. You still have 21 GB for MySQL, Redis, OPcache, and the operating system. ### Image Optimization Large images are the most common cause of slow WordPress pages. Server-level optimizations: 1. **WebP conversion**: Use the WebP Express plugin to automatically convert uploaded images to WebP format (30-50% smaller than JPEG) 2. **Lazy loading**: WordPress 5.5+ includes native lazy loading. Verify it is enabled. 3. **NGINX WebP serving**: Add to your NGINX config to serve WebP images when the browser supports them: ```nginx map $http_accept $webp_suffix { default ""; "~*webp" ".webp"; } ``` ## Backup Strategy Self-hosting means backups are your responsibility. Here is a reliable, automated backup strategy that costs nothing. ### Database Backups Create a backup script: ```bash sudo nano /usr/local/bin/wp-backup-db.sh ``` ```bash #!/bin/bash BACKUP_DIR="/var/backups/wordpress" DATE=$(date +%Y-%m-%d_%H%M) mkdir -p $BACKUP_DIR # Dump database mysqldump -u wpuser -p'YOUR_PASSWORD' wordpress | gzip > "$BACKUP_DIR/db_$DATE.gz" # Keep only last 30 days find $BACKUP_DIR -name "db_*.gz" -mtime +30 -delete ``` ```bash sudo chmod +x /usr/local/bin/wp-backup-db.sh ``` Schedule daily backups: ```bash sudo crontab -e ``` Add: ``` 0 2 * * * /usr/local/bin/wp-backup-db.sh ``` ### File Backups WordPress files change less frequently than the database. Weekly file backups are sufficient: ```bash sudo nano /usr/local/bin/wp-backup-files.sh ``` ```bash #!/bin/bash BACKUP_DIR="/var/backups/wordpress" DATE=$(date +%Y-%m-%d) mkdir -p $BACKUP_DIR # Backup WordPress files (excluding cache and temp files) tar -czf "$BACKUP_DIR/files_$DATE.tar.gz" \ --exclude='/var/www/wordpress/wp-content/cache' \ --exclude='/var/www/wordpress/wp-content/upgrade' \ /var/www/wordpress/wp-content/ # Keep only last 4 weeks find $BACKUP_DIR -name "files_*.tar.gz" -mtime +28 -delete ``` ### Off-Server Storage Backups stored on the same server that hosts your site are not real backups. If the server fails, you lose everything. Sync backups to an external location: **Option 1: Oracle Object Storage (Free)** Oracle's free tier includes 10 GB of object storage. Use the OCI CLI to sync backups: ```bash oci os object put --bucket-name wp-backups --file /var/backups/wordpress/db_latest.gz ``` **Option 2: Backblaze B2 (Cheap)** Backblaze B2 costs $0.005/GB/month. For WordPress backups, you are looking at pennies per month: ```bash b2 upload-file wp-backups /var/backups/wordpress/db_latest.gz db_latest.gz ``` **Option 3: rsync to Another Server** If you have access to any other server (even a Raspberry Pi at home): ```bash rsync -avz /var/backups/wordpress/ user@backup-server:/backups/wordpress/ ``` ### Restore Procedure If you need to restore from backup: **Database:** ```bash gunzip < /var/backups/wordpress/db_2026-02-18_0200.gz | mysql -u wpuser -p wordpress ``` **Files:** ```bash cd /var/www/wordpress tar -xzf /var/backups/wordpress/files_2026-02-18.tar.gz sudo chown -R www-data:www-data wp-content/ ``` Test your restores periodically. A backup you have never tested is a backup that might not work when you need it. ## Common Mistakes to Avoid After helping people set up self-hosted WordPress through [GenAI Unplugged](/) resources, these are the most common mistakes I see. ### 1. Running Everything as Root Do not run WordPress as the root user. Create a dedicated web user (Ubuntu uses `www-data` by default for NGINX), and never SSH in as root. The `PermitRootLogin no` setting in your SSH config prevents this. Running as root means a single WordPress vulnerability gives an attacker full server access. ### 2. No Backups "I'll set up backups later" is the most expensive sentence in self-hosting. Set up automated backups on day one. The backup section above takes 10 minutes to implement. ### 3. Skipping SSL Some people think SSL can wait because they are "just testing." Do not do this. Set up SSL immediately: - Search engines index your site within days - If they index the HTTP version first, you are fighting redirect chains later - Chrome marks HTTP sites as "Not Secure" immediately ### 4. Using Apache Instead of NGINX Apache is the traditional WordPress web server, and many tutorials still recommend it. For a self-hosted setup with limited resources (or even abundant resources), NGINX is the better choice: - NGINX uses significantly less memory per connection - NGINX handles static files natively without spawning processes - NGINX's event-driven architecture is better suited for high concurrency - FastCGI caching in NGINX eliminates the need for many caching plugins The only reason to use Apache is if you need `.htaccess` files. NGINX handles everything `.htaccess` does through its server configuration, more efficiently. ### 5. Not Monitoring Disk Space Oracle's free tier gives you 200 GB, which seems like a lot. But log files, backup files, WordPress upload directories, and database growth can consume space over time. Set up a simple monitor: ```bash # Add to crontab - alerts when disk usage exceeds 80% 0 6 * * * df -h / | awk 'NR==2 && int($5) > 80 {print "WARNING: Disk usage at "$5}' | mail -s "Disk Alert" you@email.com ``` Or simpler: check `df -h` manually every month. ### 6. Ignoring PHP and WordPress Updates Auto-updates for WordPress core are enabled by default. Do not disable them. For PHP, `unattended-upgrades` handles security patches. But major PHP version upgrades (8.2 to 8.3, for example) require manual intervention. Check compatibility with your plugins before upgrading. ### 7. Installing Too Many Plugins Every plugin adds PHP code that runs on every page load. On shared hosting, this is devastating. On Oracle Cloud's free tier with 24 GB RAM, the performance impact is smaller, but plugin bloat still increases: - Attack surface (more code = more potential vulnerabilities) - Update maintenance burden - Potential plugin conflicts - Database bloat from plugins that store excessive data Audit your plugins quarterly. If you installed something six months ago and do not use it, delete it. ### 8. Not Setting Up a Swap File Even with 24 GB of RAM, a swap file provides a safety net for unexpected memory spikes: ```bash sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ``` This creates a 2 GB swap file that the OS uses only when physical RAM is exhausted. It prevents out-of-memory crashes during traffic spikes or runaway processes. ## When Managed Hosting Still Makes Sense I am not going to pretend self-hosting is right for everyone. Here are legitimate reasons to pay for managed WordPress hosting: ### You Have Zero Technical Interest If reading this article felt like a foreign language and you have no desire to learn, managed hosting is the right choice. Running a server requires occasional troubleshooting: a failed PHP upgrade, a full disk, an SSL renewal that did not fire. If those sentences cause anxiety rather than curiosity, pay someone else to handle it. The [WordPress Self-Host Autopilot](/wordpress-self-host/) reduces the technical barrier significantly by guiding you through every command with explanations. But you still need basic comfort with a terminal. If the terminal is a hard no, managed hosting serves you better. ### You Need Guaranteed Uptime SLAs Oracle Cloud's free tier does not come with an SLA. Oracle can, in theory, reclaim Always Free instances during capacity shortages (though this is exceptionally rare and has not happened in practice). If your business absolutely requires a contractual uptime guarantee (99.9% or higher), you need a paid hosting plan that provides one. For most blogs, portfolios, and small business sites, the practical uptime of Oracle Cloud's free tier is excellent. But if downtime directly costs you thousands of dollars per hour, an SLA matters. ### You Manage Multiple Client Sites If you run a web development agency managing 50+ WordPress sites, the operational overhead of self-hosting each one on separate Oracle Cloud instances is substantial. Managed hosting platforms like WP Engine, Kinsta, or Cloudways provide multi-site dashboards, one-click staging, and centralized billing that saves hours of management time. The math changes when your time managing servers exceeds what you would pay for managed hosting. ### You Need Specialized Hosting Features Some managed hosts provide features that are genuinely difficult to replicate on a self-hosted setup: - **WP Engine's EverCache**: Proprietary caching layer with edge nodes - **Kinsta's Google Cloud Premium Tier Network**: Optimized global routing - **Cloudways' Managed Database Clustering**: Automatic failover - **Flywheel's Collaboration Tools**: Designer-focused workflows If you specifically need these features for your use case, the premium is justified. ### The Decision Framework Ask yourself these three questions: 1. **Am I comfortable running commands in a terminal?** If yes, self-hosting is viable. 2. **Is my site critical enough to need a contractual uptime guarantee?** If yes, consider managed hosting. 3. **Am I willing to spend 1-2 hours per month on server maintenance?** If yes, self-hosting saves you significant money. If you answered yes to 1 and 3 but no to 2, self-hosting on Oracle Cloud is the clear financial winner. ## Getting Started: Your Next Step You have two paths forward: **Path 1: Do It Yourself** Use this article as your reference. Follow the steps, troubleshoot as needed, and learn the systems by building them. It is the most educational approach, and it costs nothing but your time. **Path 2: Guided Setup** The [WordPress Self-Host Autopilot](/wordpress-self-host/) is a Claude Code skill that walks you through every command interactively. It explains what each command does before you run it, confirms before making changes, and handles the NGINX, PHP, MySQL, SSL, and security configuration in a structured sequence. It turns a multi-hour process into a 45-minute guided session. Either way, you end up with a WordPress site running on 24 GB of dedicated RAM, with HTTPS, security hardening, and performance optimization. For $0/month. While your old hosting company sends invoices to someone else. **The hosting industry charges $300-600/year for 2 GB of shared RAM.** Oracle Cloud gives you 24 GB of dedicated RAM for free. The only question is whether you will make the switch.

Ready to stop paying for hosting? The WordPress Self-Host Autopilot guides you through every command.

Get the Autopilot — $49

One-time purchase. 14-day money-back guarantee.

## FAQ ### Can you really host WordPress for free? Yes. Oracle Cloud's Always Free tier provides ARM instances with up to 24 GB RAM, 4 OCPUs, and 200 GB storage, permanently free. WordPress, NGINX, PHP, and MySQL all run on this instance. Your only cost is a domain name ($10-15/year). ### Is Oracle Cloud's free tier really free forever? Oracle calls it "Always Free" and has maintained it since 2019. Unlike AWS or GCP free tiers that expire after 12 months, Oracle's Always Free resources have no expiration. A credit card is required for sign-up verification, but Always Free resources are never billed. ### How does Oracle Cloud compare to shared hosting for WordPress? Oracle Cloud's free tier gives you 24 GB RAM and 4 dedicated OCPUs. Most shared hosting gives you 1-4 GB shared RAM. Your WordPress site will be significantly faster on Oracle Cloud because resources are not shared with hundreds of other sites. ### Do I need to know Linux to self-host WordPress? Basic terminal comfort is helpful, but not required. The [WordPress Self-Host Autopilot](/wordpress-self-host/) guides you through every command with explanations. If you can copy-paste commands into a terminal, you can complete the setup. ### Can I migrate my existing WordPress site to Oracle Cloud? Yes. Use standard WordPress migration methods: the All-in-One WP Migration plugin, manual file and database transfer, or hosting-provided migration tools. The Autopilot sets up the server environment. Standard WordPress migration tools handle the content. ### What about WordPress updates and maintenance? WordPress auto-updates work normally. PHP and system updates can be automated with unattended-upgrades. The main maintenance task is occasional server reboots for kernel updates. Oracle Cloud handles most infrastructure maintenance automatically. ### Is self-hosted WordPress secure? With proper configuration, self-hosted WordPress is as secure or more secure than managed hosting. The setup configures SSH key authentication, UFW firewall, fail2ban, security headers, and automatic SSL renewal. You have full control over your security configuration. ## Frequently Asked Questions ### Can you really host WordPress for free? Yes. Oracle Cloud's Always Free tier provides ARM instances with up to 24GB RAM, 4 OCPUs, and 200GB storage — permanently free. WordPress, NGINX, PHP, and MySQL all run on this instance. Your only cost is a domain name ($10-15/year). ### Is Oracle Cloud's free tier really free forever? Oracle calls it 'Always Free' and has maintained it since 2019. Unlike AWS or GCP free tiers that expire after 12 months, Oracle's Always Free resources have no expiration. A credit card is required for sign-up verification, but Always Free resources are never billed. ### How does Oracle Cloud compare to shared hosting for WordPress? Oracle Cloud's free tier gives you 24GB RAM and 4 dedicated OCPUs. Most shared hosting gives you 1-4GB shared RAM. Your WordPress site will be significantly faster on Oracle Cloud because resources aren't shared with hundreds of other sites. ### Do I need to know Linux to self-host WordPress? Basic terminal comfort is helpful, but not required. The WordPress Self-Host Autopilot guides you through every command with explanations. If you can copy-paste commands into a terminal, you can complete the setup. ### Can I migrate my existing WordPress site to Oracle Cloud? Yes. Use standard WordPress migration methods: the All-in-One WP Migration plugin, manual file + database transfer, or hosting-provided migration tools. The Autopilot sets up the server environment — standard WordPress migration tools handle the content. ### What about WordPress updates and maintenance? WordPress auto-updates work normally. PHP and system updates can be automated with unattended-upgrades. The main maintenance task is occasional server reboots for kernel updates — Oracle Cloud handles most infrastructure maintenance automatically. ### Is self-hosted WordPress secure? With proper configuration, self-hosted WordPress is as secure or more secure than managed hosting. The Autopilot configures SSH key authentication, UFW firewall, fail2ban, security headers, and automatic SSL renewal. You have full control over your security configuration. --- # WordPress Self-Host Autopilot — Stop Paying $25-50/Month for Managed Hosting URL: https://www.genaiunplugged.com/wordpress-self-host/ > Deploy WordPress on Oracle Cloud's free tier with a native LEMP stack, guided by Claude Code through 27+ commands, and save $300 to $600 a year. ## Frequently Asked Questions ### Is Oracle Cloud really free? Yes. Oracle's Always Free tier includes ARM instances with up to 24GB RAM, 4 OCPUs, and 200GB storage. It's been available since 2019. You need a credit card to sign up (for verification), but you won't be charged as long as you stay on Always Free resources. ### Why a native LEMP stack instead of Docker? Native installation gives you maximum performance — no container overhead. NGINX, MySQL 8.0, and PHP 8.3 with 13 extensions run directly on the OS. FastCGI caching, OPcache, and optional Redis object caching are configured for optimal WordPress performance. ### What are the 27+ commands? Organized into 7 categories: Cloud Setup (9 commands for Oracle/GCP/AWS/Azure), Deployment (4 commands for LEMP + WordPress + SSL), Domain (2 commands for Cloudflare + custom DNS), Migration (3 commands for export/import/full), WordPress Management (7 commands for status/logs/backup/security/optimize/upgrade/monitor), and Cost Guard + Capacity Hunter. ### Do I need Linux knowledge? No. The Autopilot guides you through every command with explanations. If you can copy-paste into a terminal, you can complete the setup. The Claude Code skill explains what each command does before running it. ### Can I migrate my existing WordPress site? Yes. The migration toolkit includes export commands (database + files from source), intelligent rsync for large transfers, database import with credential updates, and permission fixing. Handles sites up to 24GB+ with near-zero downtime. ### What is Cost Guard? Automatic spending protection for all 4 clouds. Monitors your cloud spending hourly via cron, sends alerts at thresholds, and can auto-stop instances if spending exceeds your configured limit. Prevents surprise cloud bills. ### What is the Capacity Hunter? Oracle's free 24GB ARM VMs are popular and often show 'out of capacity.' The Hunter script auto-retries every 15 minutes across multiple regions (US + EU), runs in the background, and sends macOS notifications when it secures a VM. ### What's the refund policy? 14-day money-back guarantee. If the Autopilot doesn't work for you, email support@genaiunplugged.com for a full refund. --- # SubflowAI - Automate Your Substack from Claude or ChatGPT URL: https://www.genaiunplugged.com/subflowai/ > Automate your Substack operations from Claude or ChatGPT. Schedule Notes server-side, see the analytics Substack hides, and clear your reply inbox. ## Frequently Asked Questions ### What do I need to run SubflowAI from Claude or ChatGPT? An active paid SubflowAI plan plus Connect, then Claude or ChatGPT. Install the extension, open the Connect tab and pair. Connect is included in Premium, or a one-time $30 add-on on Monthly and 5-Year. ### Does the assistant post things without asking me? No. Nothing is scheduled, published or replied to until you approve it. The assistant proposes and you decide. ### Does Substack have native Notes scheduling? Yes, Substack added basic one-at-a-time Notes scheduling in 2026. SubflowAI goes beyond: batch-schedule 30+ Notes in one click, AI repurposing in your Brand Voice, a visual calendar, and analytics. ### Do I need to keep Chrome open? No. SubflowAI v2.0 schedules Notes directly on Substack's servers. They publish even when Chrome is closed. Chrome alarm is kept as an automatic fallback for maximum reliability. ### How is SubflowAI different from Substack's native scheduling? Substack's native scheduling lets you schedule one Note at a time. SubflowAI adds batch scheduling (30+ Notes in one click), AI repurposing (turn one article into 7 Notes in your Brand Voice), a visual calendar for monthly planning, smart time slots, weekday selection, analytics, and remix from top-performing notes. ### Can I use SubflowAI with Claude or ChatGPT? Yes, with the Connect add-on. Drive SubflowAI from Claude (Desktop or Code) or ChatGPT through SubflowAI Substack MCP, our unofficial Substack connector. Ask your assistant to plan your week, draft and schedule Notes, repurpose an article, or pull your analytics, and SubflowAI runs it in your browser with your own Substack session (your login never leaves your device). Connect is a premium add-on for paid members. SubflowAI and SubflowAI Substack MCP are independent tools, not affiliated with or endorsed by Substack. ### Is my Substack password stored? No. SubflowAI uses your existing browser session. I never ask for or store your password. ### How many notes can I schedule? Unlimited. Schedule as many as you want across any time range. ### Can I get a refund? Yes. 14-day money-back guarantee. Email support@genaiunplugged.com for a full refund. ### Does the AI write in my voice? Yes. SubflowAI has a Brand Voice feature where you configure your identity, tone, content frameworks, and signature phrases. Every AI-generated Note reflects your unique writing style. --- # How to Schedule Substack Notes at Scale (2026 Guide) URL: https://www.genaiunplugged.com/subflowai/how-to-schedule-substack-notes.html > Substack added basic Notes scheduling in 2026. Here's how to batch-schedule 30+ Notes in 5 minutes with AI repurposing and a visual calendar. ## Can You Schedule Substack Notes? Yes — But Here's Why Writers Use SubflowAI **Quick Answer:** Yes — Substack added basic one-at-a-time Notes scheduling in March 2026. But for batch scheduling (30+ Notes in one click), AI repurposing in your Brand Voice, a visual calendar, and analytics, writers use SubflowAI. Most creators batch 30 days of content in one 5-minute session by repurposing their existing Substack articles or newsletter posts. ### Watch: Schedule 30 Days of Substack Notes in 5 Minutes
## The Problem: Why Substack Writers Struggle with Notes If you're reading this, you've probably experienced it: You start your Substack journey with grand plans. Three Notes a day. Consistent posting. Watch that subscriber count climb. Day 1? You post five Notes. Feeling unstoppable. Day 4? You missed one. It's fine. Day 10? What Notes? **You're not alone.** In my experience working with dozens of Substack writers, the pattern is painfully consistent: - **85% of writers** who commit to daily Notes quit within two weeks - The average creator posts **2.3 Notes in their first week**, then drops to **0.4 per week** by month two - Writers who maintain consistent Notes posting see **3-5x faster subscriber growth** than those who don't The problem isn't motivation. It's constant remembering, context switching, and friction. ### The Friction Points **1. One-at-a-Time Scheduling** Substack now lets you schedule Notes — but only one at a time. Want to schedule 30 Notes for the month? That's 30 separate scheduling sessions. Open the app, write the note, pick a time, confirm. Repeat 29 more times. Miss your batch window because of a meeting? The rest of your Notes don't get scheduled. **2. The "I'll Do It Later" Trap** Without scheduling, "later" becomes "never." Your brilliant idea at 6 AM gets forgotten by noon. **3. Inconsistent Quality Under Pressure** When you're scrambling to post something—anything—quality suffers. You know those Notes you've posted that felt forced? The ones that got crickets? That's pressure posting. **4. Time Zone Chaos** If you're targeting a US audience but live in Europe (or vice versa), optimal posting times mean setting alarms for 3 AM. Unsustainable. **5. The Content Drought Cycle** You have great weeks where ideas flow. Then dry spells. Without a content buffer, one bad week tanks your momentum. ### What This Actually Costs You Let's do quick math: - Average Substack Notes reach: **500-2,000 impressions** - Conversion rate to subscribers: **0.5-2%** - Missing 5 Notes per week = **2,500-10,000 lost impressions** - That's **12-200 potential subscribers** lost per week Over a year? **624-10,400 subscribers** you didn't gain. For many writers, that's the difference between a hobby and a business. ### The Manual Method (And Why It Fails) Some writers try the manual approach: 1. Set phone reminders 2. Pre-write notes in Apple Notes or Google Docs 3. Copy-paste-cut at posting time It works for about a week, some last even a month. Then: - You silence the alarm during a meeting - You can't find the right note in your messy doc - The copy-paste formatting gets mangled - The can't acces phone while driving - You just... stop **What writers actually need:** - Write notes when inspiration hits - Repurpose already created content in the form of articles/newsletters - Schedule them for optimal times - Batch a week's content in one focused session - Never think about posting again until next batch day That's exactly what I built SubflowAI for myself. It solved all these problems for me as I went through them. ## Solutions Landscape: What Are Your Options? Before diving into SubflowAI, let's be fair and look at what exists. What are your actual options for scheduling Substack Notes? ### Comparison Table: Substack Notes Scheduling Options | Solution | Scheduling | AI Help | Calendar View | Price | Best For | |----------|-----------|---------|---------------|-------|----------| | **Manual (reminders)** | No (fake scheduling) | No | No | Free | Person who has all the time | | **Buffer/Hootsuite** | No Substack integration | No | Yes | $5-15/mo | Other platforms | | **Notion + Zapier / n8n** | Complex | Yes | Yes | $10+/mo | Engineers who like to build | | **Substack Native** | Yes (one at a time) | No | No | Free | 1-2 Notes per week | | **SubflowAI** | Yes (batch + server-side) | Yes (AI + Brand Voice) | Yes | $9.97/mo | Writers who schedule at scale | ### Why Generic Schedulers Don't Work Tools like Buffer, Later, and Hootsuite are great for Twitter, Instagram, and LinkedIn. But they don't support Substack Notes because: 1. **No API access** - Substack doesn't offer a public API for Notes 2. **Authentication complexity** - Substack uses session-based auth that generic tools can't handle 3. **Formatting loss** - Copy-pasting destroys Substack's rich text formatting ### The "Zapier/n8n Hack - which I tried for a month" Some technically-minded folks including myself have tried building [n8n automation workflows](/courses/n8n/). The reality: - Takes 6-8 hours to design and set up the entire system including visual calendar - Breaks when Substack updates anything (happened all the time to me) - No preview before posting - No image support - No link cards support - Costs time to maintain and self-host n8n workflows ### What SubflowAI Does Differently SubflowAI is a Chrome extension purpose-built for Substack Notes. It: 1. **Server-side scheduling** - Notes sync directly with Substack's server-side publishing queue. They publish even when Chrome is closed 2. **Batch scheduling at scale** - Schedule 30+ Notes in one click, across multiple days with smart distribution 3. **Preserves formatting** - Rich text (bold, italic, lists) posts exactly as designed 4. **Adds AI superpowers** - Turn any article into 7 Note variations with one click 5. **Brand Voice** - Configure your identity, tone, and signature phrases so AI Notes sound like you 6. **@Mentions & Link Previews** - Tag other Substack writers and get rich link preview cards 7. **Visualizes your content** - Full calendar view of scheduled and published Notes 8. **Smart distribution strategies** - Quickly distribute & schedule content over next few days with weekday selection 9. **Bulk Import** - Import multiple Notes via JSON and batch-schedule them all at once 10. **Support inline images & link cards** - Full support for uploading inline images or links to your articles 11. **Remix top notes** - One-click AI variations from your best-performing content 12. **Auto-sync** - Reconciles local state with Substack's servers every 15 minutes 13. **Queue management** - Automatically manages Substack's server-side publishing queue It's not trying to be everything for everyone. It's specifically the best tool for Substack writers who want consistent Notes without the daily grind. **[→ Try SubflowAI free for 5 days — no credit card needed](https://chromewebstore.google.com/detail/subflowai/ppmojbkealmbiidpehhjnckomohjjcao)** ## Substack Native Scheduling vs SubflowAI: What's Different? In March 2026, Substack added the ability to schedule individual Notes. This is a welcome addition — and SubflowAI integrates seamlessly with Substack's server-side scheduling. Here's how they compare: ### What Native Scheduling Gives You - Schedule one Note at a time - Pick a date and time - Note publishes on Substack's servers (no browser required) ### What's Still Missing from Native - No batch scheduling (30+ Notes at once) - No AI content repurposing - No Brand Voice configuration - No visual calendar for monthly planning - No smart time slots or weekday selection - No analytics or top-performer tracking - No remix from best-performing content - No bulk import (JSON) ### Side-by-Side Comparison | Capability | Substack Native | SubflowAI | |-----------|----------------|-----------| | Schedule a single Note | Yes | Yes | | Schedule 30+ Notes at once | No | Yes (one click) | | Server-side publishing | Yes | Yes | | AI content generation | No | 7 variations per article | | Brand Voice | No | Full configuration | | Visual calendar | No | Monthly grid view | | Smart time slots | No | 5 configurable slots | | Weekday selection | No | Skip weekends/specific days | | Batch import (JSON) | No | Yes | | Analytics & patterns | No | Engagement tracking | | Remix top notes | No | AI-powered variations | | Queue management | Manual | Automatic | | Auto-sync | N/A | Every 15 minutes | ### When to Use Native vs SubflowAI **Use Substack native if:** You post 1-2 Notes per week and are happy scheduling them individually. **Use SubflowAI if:** You want to batch a week or month of Notes in one session, repurpose articles into Notes with AI, or see your content strategy on a calendar. The time savings start at 3+ Notes per week — and grow exponentially from there. ## Visual Calendar: Plan Your Entire Month When I surveyed 50+ Substack writers about what they wanted most in a Notes tool, "see the big picture" came up constantly. Writers don't just want to schedule posts, they want to **see their content strategy**. ### The Calendar View
SubflowAI Content Calendar — monthly grid view showing scheduled and published Substack Notes across January 2026
SubflowAI's Content Calendar — see your entire month of scheduled Notes at a glance
SubflowAI's calendar is a full monthly grid showing: - **Scheduled Notes** - Future posts queued and waiting - **Published Notes** - Past posts with status (delivered/failed) - **Capacity Indicators** - Headers turn teal when 5+ notes are scheduled for a day - **Empty Days** - Gaps in your posting schedule jump out visually ### How Writers Actually Use It **The "Content Audit"** Open the calendar and immediately see: - Are there posting gaps this week? - Am I front-loading Monday and ignoring Friday? - Do I have backup content if next week gets busy? **The "Batch Planning Session"** Most power users do this: 1. Open calendar on Sunday evening 2. See the next 2 weeks 3. Identify 10 empty slots 4. Batch-write notes to fill them 5. Close SubflowAI until next Sunday Time spent: **10-15 minutes** Notes scheduled: **10-15** Mental load for the next two weeks: **Zero** ### Click-to-Edit See a note scheduled for Tuesday that needs tweaking? Click it directly in the calendar: - Edit the content inline - Change the scheduled time - Delete if it no longer fits No hunting through lists. No confusion about what's where. ### Quick Add Hover over any future date and see a `+` button. Click it to: - Create a new note - Pre-filled with that date's first available time slot - Add to your schedule in seconds This is how you fill gaps without breaking flow. ### Capacity Management The teal header warning is subtle but powerful. When a day reaches 5+ scheduled notes, the visual cue tells you: *"Maybe spread these out?"* There's no hard-coded limit—some writers post 10+ Notes daily. But the visual hint helps prevent accidentally front-loading your week and leaving Friday empty. ### Synced with Drafts & Delivered The calendar connects to your: - **Drafts tab** - Notes saved but not scheduled - **Queue tab** - Scheduled notes awaiting publish - **Analytics tab** - Delivered notes with history One click switches views. The calendar is the hub, not an island. ## AI Repurposing: Turn 1 Article into 7 Notes Here's the secret weapon: You don't have to write Notes from scratch. With an [AI-powered content system](/courses/content-os/), you can repurpose everything you already create. Every week, you probably consume or create long-form content: - Your own Substack articles - Interesting articles you read - Podcast notes - Book highlights - Twitter threads **All of that is raw material for Notes.** SubflowAI's AI Studio takes any content and transforms it into 7 unique, ready-to-post Note variations — all written in your configured Brand Voice. ### How It Works (Step-by-Step)
SubflowAI AI Studio — paste a URL or text to generate Substack Note variations
AI Studio — paste any article URL or raw text to generate Note variations
1. **Paste a URL** - Drop in any public article link 2. **OR Paste raw text** - Copy-paste from anywhere 3. **Click "Generate Variations"** 4. **Review 7 AI-written Notes** - Each takes a different angle, all in your Brand Voice 5. **Edit as needed** - Fine-tune any variation 6. **Schedule all 7** - One-click batch scheduling
SubflowAI AI Studio with fetched article content and generated Note variations
AI Studio after fetching an article — content loaded and 6 unique variations generated
Total time: **Under 5 minutes** for 7 high-quality Notes. Repeat for a few articles and in under 5 minutes you will have 30 days of Notes scheduled. ### The AI System Behind It SubflowAI uses [Google's Gemini](https://ai.google.dev/) with custom prompts optimized for: - **Your Brand Voice** - Configure your identity, tone, content frameworks, and signature phrases - **Character limits** - Notes sweet spot is 280-375 characters - **Hook patterns** - Open with curiosity, close with insight - **No fluff** - "Unlock," "Leverage," "Game-changer" are banned ### Brand Voice: Your Notes, Your Style SubflowAI's Brand Voice feature lets you configure exactly how the AI writes for you. Set your: - **Identity** - Who you are and what you're known for - **Tone** - Your natural writing style (conversational, authoritative, witty, etc.) - **Content Frameworks** - The structures you prefer (stories, contrarian takes, data-driven, etc.) - **Signature Phrases** - Expressions and vocabulary unique to you Every AI-generated Note reflects these settings. No more generic AI output that sounds like everyone else. The system prompt — built with careful [prompt engineering](/courses/prompt-engineering/) — is tuned for what I call **"The Chaos → Clarity Pivot"**: 1. **The Hook** - A specific instance of a problem 2. **The Pivot** - The moment a solution worked 3. **The Hope** - The result (time saved, revenue gained, stress reduced) This structure resonates because it's relatable, specific, and actionable. ### Example: Real AI Output **Input:** A 2,000-word article about email marketing automation **AI-Generated Notes (7 variations — showing 3):** > **Note 1:** > I used to send newsletters manually. > Open Gmail. Copy-paste. Hit send. > Repeat 200 times. > > Then I set up one automation. > Now it happens while I sleep. > > The tool wasn't fancy. The system was. > **Note 2:** > "I don't have time for email marketing." > > Translation: "I'm still doing it manually." > > Automated: 1 hour setup, then 0 hours/week. > Manual: 0 hours setup, then 3 hours/week. > > Math is math. > **Note 3:** > The best email I ever sent took 2 minutes to write. > > ...3 months after I wrote it. > > Scheduled drip sequences are time machines. > Past you does the work. Future you gets the results. Each note hits differently. Some work better for certain audiences. You pick your favorites, tweak them, and schedule. ### AI Refine Tools
SubflowAI generated variations with Schedule All and Select & Edit options
Review variations, select & edit your favorites, or schedule all at once
Not happy with a specific note? Use the inline refine buttons: - **Fix Grammar** - Clean up typos and awkward phrasing - **Make Punchy** - Tighten the language - **Shorten** - Cut 30% while keeping the core - **Expand** - Add nuance for longer-form notes This is AI as a collaborator, not a replacement. You stay in control. ### Content Sources That Work Best | Source | Works Well? | Tips | |--------|-------------|------| | Your own Substack articles | Excellent | Repurpose your archive | | [YouTube video transcripts](https://support.google.com/youtube/answer/2734796) | Excellent | Repurpose your videos | | Blog posts you read | Great | Add your take | | Twitter threads | Good | Expand the ideas | | Podcast transcripts | Great | Pull key quotes | | YouTube video descriptions | Okay | Needs more editing | | Feed/homepage URLs | Blocked | Too thin for quality notes | ## Smart Scheduling: The Best Times to Post Notes Not all posting times are equal. SubflowAI's fixed time slots aren't arbitrary—they're based on Substack engagement data and creator best practices. ### The 5 Fixed Time Slots
SubflowAI Settings — configure your 5 preferred posting time slots
Configure your 5 posting time slots in Settings — defaults shown, fully customizable
| Slot | Time | Best For | |------|------|----------| | **Morning Early** | 7:00 AM | Catching commuters, early risers | | **Morning Peak** | 10:00 AM | Office workers checking feeds | | **Afternoon** | 1:00 PM | Post-lunch scroll | | **Evening Early** | 4:00 PM | End-of-workday break | | **Evening Prime** | 7:00 PM | After-dinner engagement | These times are in **your local timezone**, automatically detected. ### Why These Specific Times? **7 AM: The Early Bird Advantage** Many readers check Substack first thing. Your Note appears fresh at the top of their feed. Early risers have higher engagement rates—they're not yet overwhelmed by content. **10 AM: Peak Professional Attention** Workers settled into their day take "productive procrastination" breaks. A quick Note scroll feels like a reward. This slot gets highest clickthrough rates. **1 PM: The Lunch Scroll** Post-meal content consumption is universal. Your Note catches readers in relaxed mode. Great for longer-form Notes. **4 PM: The Afternoon Reset** Energy dips in late afternoon. Readers seek stimulation. Your Note provides a mental break before the final work push. **7 PM: Prime Time Personal** Work is done. Readers are in "me time" mode. This slot sees highest bookmark and save rates—readers intend to engage deeply. ### Quick Pick Chips When scheduling a note, SubflowAI shows the **next 3 available slots** as quick-pick chips: `[Today 4pm]` `[Today 7pm]` `[Tomorrow 7am]` One click schedules to that exact time. No date-picker fumbling. ### Can I pick Custom Times? Yes, it let you pick any minute. 3:47 PM? Sure! But, in practice, this causes: - **Decision paralysis** - "Is 3:47 or 4:45 better?" - **Inconsistent testing** - Can't compare performance across random times - **Overthinking** - Writers spend more time picking times than writing Fixed slots remove the decision. Pick a slot. Move on. Write more notes. If you need a very specific time (launching something at exactly 2:00 PM), you can still manually publish at that moment. But for 95% of use cases, the 5 slots cover optimal posting. ### Time Zone Intelligence SubflowAI auto-detects your timezone. All times shown match your location. If you're targeting a specific audience timezone (e.g., US East Coast but you live in London), adjust your mental mapping: - Your 12 PM = Their 7 AM (Morning Early) - Your 3 PM = Their 10 AM (Morning Peak) ## Batch scheduling: 30 Days in 5 Minutes OR 7 Days in 30 Minutes These are the workflows that changes everything. One suites speed while other provide more control. You **batch create and schedule** once per week with your fine tuned voice added or once per month repurposing existing content. ### The 5-Minute Batch Workflow **Minute 0-1: Setup** - Open SubflowAI - Open your content sources (articles, notes, ideas) - Open the AI Studio **Minute 2-5: AI Generation Rounds** - Paste your own article text or links → Click Fetch Content - Click Generate variations → Generate 7 notes - Click Schedule All → Select 'Smart- across days' Distribution Strategy - Repeat these steps for 5 more articles - Verify them in the Calendar view **Result:** 30 notes scheduled in under 5 minutes. Zero posting stress for next 30 days. ### The 30-Minute Batch Workflow **Minute 0-1: Setup** - Open SubflowAI - Open your content sources (articles, notes, ideas) - Open the Calendar view **Minute 5-15: AI Generation Round 1** - Paste your own article from last week → Generate 7 notes - Pick best 3, schedule for Mon/Tue/Wed **Minute 15-20: AI Generation Round 2** - Paste an interesting article you read → Generate 7 notes - Add your perspective to 2 of them - Schedule for Thu/Fri **Minute 20-30: Original Notes** - Write 2-3 original notes from scratch - These are your "voice" posts—personal insights, questions, opinions - Schedule as buffers or weekend posts **Result:** 8-10 notes scheduled. Zero posting stress for 7 days. ### The Batch Scheduling Feature After you've written or generated notes, you don't have to schedule them one by one. **Batch Schedule mode:** 1. Write multiple notes (or select from AI variations) 2. Click "Schedule All" 3. SubflowAI auto-assigns optimal times across your selected days 4. Review the calendar 5. Confirm
SubflowAI Batch Schedule Preview — choose Smart or Aggressive distribution strategy for 5 notes across 5 days
Batch Schedule Preview — choose Smart (spread across days) or Aggressive (fill ASAP), then schedule all with one click
The algorithm: - Avoids double-posting within 2 hours - Spreads notes across the day - Prefers morning and evening prime slots - Respects your existing scheduled notes ### Real Creator Results > "SubflowAI genuinely feels like the missing piece in my Substack workflow. Being able to plan and schedule Notes weeks ahead has taken away the daily pressure to post on time. The AI repurposing is surprisingly useful and helps turn one good idea into multiple engaging Notes without feeling repetitive. The editor is simple, focused, and actually enjoyable to use. This is clearly built by someone who understands how Substack writers think and work." > — Ashutosh Tripathi, Chrome Web Store Review (5 Stars) > "This extension is incredible! It makes my life as a Substack creator much easier. I don't need to post notes manually, and the ability to generate notes from existing content is an added bonus. I just click a few buttons and the extension does it for me. It also schedules each note in a smart way to fill your week. I'm amazed by this, and I know there's nothing else like it out there." > — Elena Calvillo, Chrome Web Store Review (5 Stars) > "Amazing product here by Dheeraj Sharma! I had the opportunity to test it for him and can vouch for how well-built it is. It truly is a game-changer where Substack notes are concerned!" > — Patrick Schaber, Approachable AI (Substack) > "I love Dheeraj Sharma's new Substack Notes scheduler. It's incredibly easy to use. I haven't saved much time scheduling notes until I tried his tool. The price is insanely attractive. I highly recommend it!" > — Elena, AI Product Leader (Substack) > "I'm so glad I found this app! I've only been using it for a couple of weeks but I love being able to batch and schedule my Substack notes. And they're adding functionality all the time! I tried to use the app as much as I could during the free trial and I paid for a subscription as soon as my free trial ended." > — Stephanie Thurrott, Chrome Web Store Review (5 Stars) > "So nice to have these type of tools to synthesize meaning from posts you already poured hours into writing! This looks like a nice, clean interface." > — Natalie Nicholson (Substack)

Ready to join them? Start batch scheduling your Substack Notes today.

Start Your Free Trial
### The Psychology of Batching **Why daily posting is harder than batching:** - **Context switching** - Each posting moment requires finding content, writing, scheduling - **Decision fatigue** - "What should I post today?" is exhausting - **Motivation dependency** - Bad days = no posts **Why batching works:** - **Deep work** - One focused session beats 7 scattered micro-sessions - **Bulk creativity** - Ideas flow when you're in writing mode - **Peace of mind** - Week's content is done, brain is free ## Rich Text Editor: Format Notes Without Hassle Plain text is fine for simple notes. But sometimes you need structure.
SubflowAI rich text editor with formatting toolbar, character count, scheduling panel, and AI refine buttons
The note editor — rich text formatting, character count, Quick Pick scheduling, and AI refine tools (floating buttons on the right)
SubflowAI's editor supports full Substack-compatible rich text: ### Formatting Options | Format | Keyboard Shortcut | Use Case | |--------|------------------|----------| | **Bold** | Ctrl/Cmd + B | Emphasis, key points | | *Italic* | Ctrl/Cmd + I | Titles, gentle emphasis | | ~~Strikethrough~~ | (toolbar) | Corrections, humor | | Bullet List | (toolbar) | Multiple points | | Numbered List | (toolbar) | Steps, rankings | | Quote | (toolbar) | Citations, callouts | | Code | (toolbar) | Technical terms | | Emojii | (toolbar) | Emotions | | Image | (toolbar) | Visuals | ### What You See Is What Posts Unlike copy-pasting from Google Docs, SubflowAI's editor output matches Substack exactly. The extension converts your formatted text to Substack's internal format (ProseMirror JSON) before posting. **This means:** - Bold stays bold - Lists stay lists - Line breaks don't multiply or vanish - No weird spacing issues ### AI Refinement in the Editor While editing, you can highlight text and apply AI refinements: - **Fix Grammar** - Corrects errors without changing meaning - **Make Punchy** - Tightens language, removes fluff - **Shorten** - Compresses by ~30% - **Expand** - Adds depth and nuance The AI respects your formatting. Bold stays bold after refinement. ### Character Count Notes have a sweet spot: 280-375 characters. The editor shows a live character count so you know when you're in range. Going over 500 characters? Consider splitting into two notes or trimming. ### Smart Format Button Got AI output in JSON array format? Or pasted multiple notes separated by blank lines? Click "Smart Format" and SubflowAI splits them into individual note variations, each ready to schedule independently. ## 50+ Features Overview SubflowAI is more than scheduling + AI. Here's the full feature breakdown: ### Writing & Editing - Rich text editor (bold, italic, strike, lists, quotes, code blocks) - @Mentions — tag other Substack writers natively - Link Previews — paste any URL for rich link preview cards - Character count with optimal range indicator - Smart Format for JSON/multi-note parsing - Emoji picker with 6 categories - Image support (inline uploads) - AI refinement tools (grammar, punchy, shorten, expand) ### Scheduling & Calendar - Server-side scheduling (syncs with Substack's servers — publishes even when Chrome is closed) - Visual monthly calendar grid - 5 configurable time slots (default: 7am, 10am, 1pm, 4pm, 7pm) - Quick-pick chips for next available slots - Batch scheduling across multiple days with weekday selection - Automatic server-side queue management - Auto-sync every 15 minutes with Substack's servers - Scheduling method badges (Server green / Chrome amber) - Capacity indicators (5+ notes/day warning) - Click-to-edit from calendar view ### AI Studio - URL-to-Notes: Paste any article link - Text-to-Notes: Paste raw content - 7 unique variations per generation - Brand Voice configuration (identity, tone, frameworks, signature phrases) - Bulk Import via JSON — import and schedule multiple Notes at once - Custom system prompt (advanced users) - Powered by Google Gemini models - 500 AI generations/month (Pro) - URL validation (blocks thin content) ### Drafts & Queue Management - Dedicated Drafts tab - Scheduled Queue tab - One-click edit from queue - Delete with confirmation - Bulk actions (select multiple) - Status indicators (pending, posted, failed) ### Analytics & History
SubflowAI Performance dashboard showing total published notes, monthly and weekly counts, and published history
Performance dashboard — track your total published notes, monthly/weekly counts, and full history
- Total notes posted (all time) - Monthly and weekly notes count - Top 10 performers ranking (reactions, restacks, replies) - Posting patterns analysis (best time, best day, optimal length) - AI content insights (Pro) - Remix top notes with one click — generate variations from your best content - Delivered notes history with tabbed layout (Overview, Top Notes, Patterns, Insights, History) - Clear history option ### Settings & Customization - Light/dark theme toggle - License key management - Trial status display - AI credits remaining - Export/import data (backup) - Help center with tutorials ### Reliability Features - Server-side scheduling (notes publish when browser is closed) - Automatic Chrome-to-server upgrade when slots are available - Duplicate post prevention - Cloud sync backup (Chrome storage) - Auto-restore on reinstall - Auto-retry on failure (up to 3x at 15-minute intervals) - Offline mode (view-only) - Backup reminder (7-day warning) - One-click manual export ### Security & Privacy - No passwords stored - Uses your existing Substack session - API keys stay local (for AI) - License validation via secure endpoint - XSS sanitization on all inputs ### User Experience - Keyboard shortcuts (Ctrl+B, Ctrl+I, etc.) - Toast notifications for actions - Modal confirmations for destructive actions - Onboarding flow for new users - "What's New" modal for updates - Video tutorial links ## Pricing & Value SubflowAI offers a free trial and two paid options: ### Free Trial: 5 Days, Full Access - All features unlocked - No credit card required - 500 AI generations included - Great for testing the workflow ### Monthly Plan: $9.97/month - Unlimited notes scheduling - 500 AI generations/month - Priority support (email) - Cancel anytime ### 5-Year Access: $69.97 (One-Time) - Everything in Monthly for 5 years - Best value for committed writers - Works out to **$1.17/month** ### Substack Paid Members: 25% Off - Monthly: **$7.48/mo** - 5-Year: **$52.48** ### Value Calculation **What's your time worth?** | Task | Manual Time | With SubflowAI | |------|-------------|----------------| | Write 5 notes | 45 min | 2 min (AI assist) | | Schedule 5 notes | 10 min (reminders) | 1 min | | Remember to post | Mental overhead all week | 0 min | | **Total** | **55+ min + stress** | **3 min, no stress** | Over a month, you save **4 hours** and significant mental energy. At $9.97/month, if your time is worth more than $2/hour, SubflowAI pays for itself. ### ROI from Growth If consistent posting adds just **5 extra subscribers per week** (conservative), that's: - 20 subscribers/month - 240 subscribers/year If you monetize at $5/month paid subscriptions and 5% convert: - 12 paid subscribers/year - **$720/year additional revenue** from a $69.97 tool **1,341% ROI.**

The math is clear. Start scheduling smarter.

5-day free trial. No credit card. Cancel anytime.

Install SubflowAI Free →
## FAQ: 10 Common Questions Answered ### 1. Does Substack have native Notes scheduling? **Yes** — as of March 2026, Substack lets you schedule one Note at a time. For batch scheduling (30+ Notes at once), AI repurposing, visual calendar, and analytics, writers use SubflowAI. ### 2. How does SubflowAI actually post to Substack? SubflowAI seamlessly integrates with Substack's undocumented server-side APIs to sync your Notes directly with Substack's publishing queue. Notes publish even when Chrome is closed — Substack's servers handle the delivery. The extension keeps a Chrome alarm fallback for edge cases to ensure maximum reliability. No passwords are stored — it uses your existing Substack login session. ### 3. Do I need to keep Chrome open for scheduled posts to work? **No.** Since v2.0, SubflowAI uses Substack's server-side scheduling. Notes publish on Substack's servers even when Chrome is closed or your laptop is off. You need Chrome open only when initially scheduling the Notes. A small number of Notes may use Chrome alarm fallback (shown with an amber badge) — for those, Chrome must be running at the scheduled time. ### 4. Is my Substack password stored? **No.** SubflowAI never asks for or stores your Substack password. It uses your existing browser session. You must be logged into Substack in Chrome for the extension to work. ### 5. What happens if I close my laptop before a scheduled post? Server-side scheduled Notes (the default) will publish on time regardless — SubflowAI schedules them directly on Substack's servers. Notes using Chrome alarm fallback will attempt to post when you reopen Chrome. ### 6. Can I edit a scheduled note after setting it? **Yes.** Click the note in the Calendar view or Queue tab. Make your edits. Save. The updated version will post at the scheduled time. ### 7. How many notes can I schedule? **Unlimited.** There's no cap on scheduled notes. You could schedule 100 notes across the next month if you wanted. ### 8. Does AI generation use my writing style? **Yes.** SubflowAI has a Brand Voice feature where you configure your identity, tone, content frameworks, and signature phrases. Every AI-generated Note reflects your unique writing style — no more generic AI output. ### 9. What if the AI generates something I don't like? Don't use it. The AI provides 7 variations per generation. Pick the ones that resonate, edit them, or regenerate with different source content. You're always in control of what gets scheduled. ### 10. Can I get a refund? Yes. If you're not satisfied within 14 days of purchase, contact support@genaiunplugged.com for a full refund. ## Getting Started: Your 5-Minute Setup Ready to schedule your first Notes? Here's exactly how to start: ### Step 1: Install the Extension (30 seconds) 1. Go to this [Chrome Web Store Link](https://chromewebstore.google.com/detail/subflowai/ppmojbkealmbiidpehhjnckomohjjcao) (or search "SubflowAI") 2. Click "Add to Chrome" 3. Pin the extension to your toolbar ### Step 2: Start Your Free Trial (1 minute) 1. Click the SubflowAI icon 2. Click "Start Free Trial" 3. You get 5 days of full access, no credit card needed ### Step 3: Write Your First Note (2 minutes) 1. Type or paste content into the editor 2. Use formatting tools if needed 3. Watch the character count (aim for 280-375) ### Step 4: Schedule It (1 minute) 1. Click the Schedule tab 2. Pick a date 3. Select a time slot (or use Quick Pick) 4. Click "Schedule" ### Step 5: Check the Calendar (30 seconds) 1. Click the Calendar view 2. See your scheduled note on the grid 3. Smile knowing it's scheduled on Substack's servers — it'll post even if Chrome is closed **That's it.** You've scheduled your first Substack Note. ### Next Steps - **Set up Brand Voice:** Configure your identity, tone, and signature phrases in Settings - **Try AI Studio:** Paste an article URL and generate 7 variations in your voice - **Batch schedule:** Fill your entire week in one session - **Use @Mentions:** Tag other Substack writers in your Notes ### Get Help - **Help Center:** Click the `?` icon in the extension - **Email:** support@genaiunplugged.com - **Response time:** Within 24-48 hours ### Upgrade When Ready After your trial, choose Monthly ($9.97/mo) or 5-Year ($69.97) to continue scheduling. ## Conclusion Consistent Substack Notes posting doesn't have to mean constant effort. With SubflowAI, you can: - **Write once, post all week** through batch scheduling - **Generate content in your voice** with AI repurposing + Brand Voice - **Tag and engage** with @mentions and rich link preview cards - **See your strategy at a glance** with the visual calendar - **Never miss a posting window** — server-side scheduling means Notes publish even when your browser is closed The writers who grow fastest aren't necessarily better writers—they're more consistent. SubflowAI makes consistency automatic. Want to build more AI automations like this? [Explore our free courses](/courses/) on AI, automation, and content systems. **[Start Your Free Trial →](https://chromewebstore.google.com/detail/subflowai/ppmojbkealmbiidpehhjnckomohjjcao)** ## Frequently Asked Questions ### Does Substack have native Notes scheduling? Yes — as of March 2026, Substack lets you schedule one Note at a time. For batch scheduling (30+ Notes at once), AI repurposing, visual calendar, and analytics, writers use SubflowAI. ### How does SubflowAI actually post to Substack? SubflowAI seamlessly integrates with Substack's server-side APIs to sync your Notes with Substack's publishing queue. Notes publish even when Chrome is closed. The extension also keeps a Chrome alarm fallback for maximum reliability. No passwords are stored — it uses your existing Substack login session. ### Do I need to keep Chrome open for scheduled posts to work? No. Since v2.0, SubflowAI schedules Notes directly on Substack's servers. They publish even when Chrome is closed or your laptop is off. You need Chrome open only when initially scheduling the Notes. A small number of Notes may use Chrome alarm fallback (shown with an amber badge) — for those, Chrome must be running at the scheduled time. ### Is my Substack password stored? No. SubflowAI never asks for or stores your Substack password. It uses your existing browser session. You must be logged into Substack in Chrome for the extension to work. ### What happens if I close my laptop before a scheduled post? Server-side scheduled Notes (the default) will publish on time regardless — SubflowAI schedules them directly on Substack's servers. Notes using Chrome alarm fallback (shown with an amber badge) will attempt to post when you reopen Chrome. ### Can I edit a scheduled note after setting it? Yes. Click the note in the Calendar view or Queue tab. Make your edits. Save. The updated version will post at the scheduled time. ### How many notes can I schedule? Unlimited. There's no cap on scheduled notes. You could schedule 100 notes across the next month if you wanted. ### Does AI generation use my writing style? Yes. SubflowAI has a Brand Voice feature where you configure your identity, tone, content frameworks, and signature phrases. Every AI-generated Note reflects your unique writing style. ### What if the AI generates something I don't like? Don't use it. The AI provides 7 variations per generation. Pick the ones that resonate, edit them, or regenerate with different source content. You're always in control of what gets scheduled. ### Can I get a refund? Yes. If you're not satisfied within 14 days of purchase, contact support@genaiunplugged.com for a full refund. --- # The AI Learning Roadmap for Non-Technical People: From Anxious to Automated in 5 Stages URL: https://www.genaiunplugged.com/roadmap/ > A 5-stage AI learning path for non-technical people. Free courses with alternate tracks, zero coding required. From ChatGPT basics to building AI agents and products. Covers vibe coding, prompt engineering, AI fluency, and more. # The AI Learning Roadmap for Non-Technical People You want to learn AI. You just don't know where to start. This page maps a practical, step-by-step path from "AI-curious" to "AI-productizer" using courses, real tools, and hands-on projects. No coding. No math. No prior tech experience required. **Free courses with alternate tracks. Zero code required. Pick your path.** > **[Learn with me: Claude Code Builder cohort →](/academy/claude-code-builder-virtual/)** > > Cohort 2 runs Oct 3 to Nov 8, 2026. $1,597 for six live sessions across six weeks, capped at 12 seats. Build the AI systems in this roadmap with me, live. > > Not ready to commit? Start free with my [45-minute Maven Lightning Lesson: Build an SEO/AEO Research Agent (No Code)](https://maven.com/p/0ea1c4/build-an-seo-aeo-research-agent-in-45-min-no-code). --- ## Before You Start: The Mindset Check Before stages and tools, let's address what actually holds most people back. ### You're Not Behind AI rewards domain expertise more than age or technical background. Your experience in your field is an advantage, not a handicap. ### Stop Researching. Start Doing. Analysis paralysis is the #1 killer of AI learning. Pick one thing from this roadmap and do it today. ### The Tutorial Hell Warning Passive consumption without building equals zero progress. Every stage has an exercise. Do it. ### AI Amplifies What You Already Know AI is a power tool for skills you already have. Find your real-world problem and start solving it. --- ## The Skills That Never Change AI tools will keep changing. These skills remain valuable no matter which tools win: ### Workflow-First Thinking Map your processes on paper before touching any tool. Ask: What do I do repeatedly? Which parts require my judgment? Which parts don't? ### Problem-Solving Over Tool Knowledge Knowing how to break a problem into AI-solvable pieces matters more than knowing every feature of any single tool. ### Daily Practice Over Course Binges 15 minutes of AI on real work beats a weekend course marathon. Do exercises on YOUR problems, not textbook examples. --- ## Do I Need to Learn Python or Code? **No.** For 90% of non-technical professionals, you don't need Python to get enormous value from AI. No-code tools have eliminated the Python prerequisite for builders. Claude Code writes any code you need when you describe what you want in plain English. Lovable and Replit let you build full web apps without seeing a line of code. n8n lets you automate anything visually. This entire roadmap requires zero coding. Other roadmaps include Python because they're built for a different audience - people who want to train AI models or do machine learning research. That's valuable work. It's just not what most non-technical people need. The real question isn't "Should I learn Python?" It's "What am I trying to do?" - **Want to build AI tools and automations?** You don't need Python. This roadmap covers that. - **Want to train custom AI models?** You'll need Python eventually. That's a different path. - **Want to do data science or ML research?** You'll need Python and math. That's a different path. We're not hiding Python from you. We're telling you when you actually need it. And if you do want it later, here's where to go: - [freeCodeCamp Python for Beginners](https://www.freecodecamp.org/learn/scientific-computing-with-python/) - Free, self-paced. For those who want Python later. - [Andrew Ng's Machine Learning Specialization](https://www.coursera.org/specializations/machine-learning-introduction) - Coursera. For those who want to go deeper into ML. *Coming in this series: "Why This AI Roadmap Skips Python (And When You'll Need It)"* --- ## What is Vibe Coding? Describe what you want in plain English, AI builds it. Coined by Andrej Karpathy. ### The Tool Spectrum **Beginner** (Point and click): Lovable, Bolt, v0 **Intermediate** (Browser-based): Replit, Firebase Studio **Advanced** (AI-powered IDEs): Cursor, Windsurf **What I Love** (CLI + Desktop + IDE): Claude Code ![The Vibe Coding Spectrum: four tiers from Beginner through Intermediate to Advanced to Most Advanced (Claude Code), showing the Zero Code to Full Control progression](/roadmap/images/ai-learning-roadmap-vibe-coding-spectrum.png) ### The Wrapper Test Before paying for a specialized AI tool, ask: Can I do this with Claude plus a good prompt? If yes, save your money. *Coming in this series: "The AI Tool Landscape: What's Worth Paying For"* --- ## Find Your Starting Point Not everyone starts at the beginning. Find yourself below: | If you are... | Start at | Quick Win | |---|---|---| | Completely new to AI, feeling overwhelmed | Stage 0 | Understand what AI actually is (15 min) | | Used ChatGPT but want better results | Stage 1 | Build a personal prompt library (1 hour) | | IT professional wanting career shift | Stage 1, fast-track to Stage 3 | Connect AI to your existing tools | | Freelancer wanting to scale income | Stage 2 | AI assistant saving 5 hrs/week | | Business owner automating processes | Stage 2 | Your first n8n automation | | Want to build apps and systems without coding | Stage 2 | Describe what you want, Claude Code builds it | | Already comfortable, want AI agents | Stage 4 | Build a research agent in 27 min | | Want to build AI products/services | Stage 5 | From demo to production | ![Your AI Scorecard: What you'll be able to do at each stage, from Stage 0 "I'm Curious" through Stage 5 "I Can Productize AI", with specific outcomes and timeframes](/roadmap/images/ai-learning-roadmap-scorecard.png) --- ## Stage 0: "I'm Curious" - Understanding AI Without Jargon (Week 1) **Transformation:** *"I went from anxious about AI to understanding how it actually works."* ### What to Study | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [LLMs and Prompts in Generative AI](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) | What LLMs are and how they work - 15-minute read, plain English | ### Must-Have External Resource | Resource | Details | |----------|---------| | [Andrew Ng's AI for Everyone](https://www.coursera.org/learn/ai-for-everyone) | Coursera course (7 hours). Most recommended 'start here' resource globally. Free to audit. | ### Optional: Strengthen Your Foundation | Resource | Details | |----------|---------| | [Elements of AI](https://www.elementsofai.com/) | University of Helsinki. Gentlest on-ramp, zero coding. | | [Google AI Essentials](https://www.coursera.org/learn/google-ai-essentials) | Hands-on with Gemini, includes certificate. | | [Futurepedia: How to Learn AI in 29 Minutes](https://www.youtube.com/watch?v=9c7zh2MkslY) | Best single video overview for visual learners. | | [Jeff Su: Give Me 9 Minutes, I'll Make You AI-Native](https://www.youtube.com/watch?v=E7YiKBeOneo) | Excellent emotional framework for the AI learning journey. | > **Try This Now** > > Open Claude (claude.ai, free), paste this prompt: 'I'm a [your job title] who has never used AI before. Explain what AI can realistically do for someone in my role. Be specific - give me 3 examples of tasks I do manually that AI could handle. No hype, just honest assessment.' ### Coming Soon - **AI Anxiety Antidote: Your First 15 Minutes with AI** - True beginner explainer for people who have never used ChatGPT. Zero jargon, 15-min read. **Milestone reached!** You understand what AI is, what it can do, and what it can't do. --- ## Stage 1: "I Can Talk to AI" - Prompt Engineering Foundations (Weeks 2-3) **Transformation:** *"I went from typing random questions to getting useful answers every time."* > **[Prompt Engineering for AI Automation →](https://genaiunplugged.com/courses/prompt-engineering/)** > > 9 lessons. The complete path from basic prompts to production AI workflows. ### What to Study *Lesson 1 (LLMs and Prompts) is covered in Stage 0. Start here at Lesson 2.* | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [How to Control Large Language Model Output](https://genaiunplugged.substack.com/p/how-to-control-the-large-language) | Stop getting essays when you wanted a bullet list. Control format, length, and tone. | | 2 | [Zero-Shot, One-Shot, and Few-Shot Prompting](https://genaiunplugged.substack.com/p/zero-shot-one-shot-and-few-shot-prompting) | The three basic ways to structure a prompt and when to use each. | | 3 | [Structured Outputs and JSON Prompts Guide](https://genaiunplugged.substack.com/p/structured-outputs-json-prompts-guide) | Get AI to output data you can use in other tools, not just paragraphs. | | 4 | [Chain-of-Thought Reasoning Prompts](https://genaiunplugged.substack.com/p/reasoning-prompts-chain-of-thought-guide) | Make AI reason step-by-step. The single biggest quality improvement. | | 5 | [Task Decomposition: Break Big AI Tasks](https://genaiunplugged.substack.com/p/break-big-ai-tasks-plan-draft-critique-workflow) | Large tasks fail. Broken-down tasks succeed. The Plan-Draft-Critique workflow. | | | [3 more lessons →](https://genaiunplugged.com/courses/prompt-engineering/) | *Continue in the full course* | ### Research Tools | Tool | Description | |------|-------------| | [Perplexity](https://www.perplexity.ai/) | AI-powered search that cites its sources. Like having a research assistant that shows its work. (free) | | [NotebookLM](https://notebooklm.google.com/) | Upload your documents, ask questions about them. Google's tool for making sense of large document sets. (free) | ### Reference Guides | Guide | Details | |-------|---------| | [Anthropic's Prompt Engineering Guide](https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering) | Official best practices from the makers of Claude | | [OpenAI's Prompt Engineering Guide](https://platform.openai.com/docs/guides/prompt-engineering) | The other major reference | **Milestone reached!** Your Personal Prompt Library - 5-10 tested prompts for your specific work. --- ## Stage 2: "I Can Build With AI" - First AI Systems (Weeks 4-8) **Transformation:** *"I went from chatting with AI to having it do real work for me."* ### Track A: Claude Cowork + Projects *Best for: Writers, consultants, coaches, content creators, service providers* > **[Claude Cowork + Projects Course →](https://genaiunplugged.com/courses/claude-systems/)** > > 7 hands-on lessons, all live (more on the way). The complete path from first project to advanced AI workspaces. | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [Claude Projects 101: Your First Custom AI Assistant](https://genaiunplugged.substack.com/p/claude-projects-ai-assistant-custom) | Setting up your first Claude Project | | 2 | [How to Give Claude Your Brand Voice](https://genaiunplugged.substack.com/p/train-claude-brand-voice) | Training AI to sound like you | | 3 | [The AI Writing System That 3x'd My Content Output](https://genaiunplugged.substack.com/p/ai-writing-system-output) | Full AI writing workflow | | 4 | [My AI Research Assistant That Saves 5 Hours Per Client](https://genaiunplugged.substack.com/p/ai-research-assistant-claude-projects) | AI-powered research workflow | | 5 | [Stop Juggling Claude Projects: Build One Unified Content Agent](https://genaiunplugged.substack.com/p/stop-juggling-claude-projects-build) | Merge scattered projects into one Cowork agent | | 6 | [A Cowork Agent That Tells Me What to Write](https://genaiunplugged.substack.com/p/claude-cowork-content-agent) | An agent that surfaces your next post | | 7 | [Bulk Schedule Substack Notes with Claude Cowork](https://genaiunplugged.substack.com/p/schedule-substack-notes-with-claude-cowork-ai) | Batch-schedule your Notes for free | ### Track B: n8n Visual Builder *Best for: Visual thinkers, automation lovers, process-heavy businesses* > **[n8n Full Course →](https://genaiunplugged.com/courses/n8n/)** > > 42 free lessons on YouTube. The complete path from zero to advanced automations. | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [Automate Email Attachments to Google Drive with n8n](https://genaiunplugged.substack.com/p/automate-email-attachments-n8n-workflow) | Quick automation win | | 2 | [n8n Competitor Analysis Automation](https://genaiunplugged.substack.com/p/n8n-workflow-competitor-analysis-ai-automation-workflow) | AI-powered competitive intelligence | ### Track C: Claude Code (The AI Builder) *Best for: Anyone who wants to build anything - apps, automations, systems* > **[Claude Code Masterclass →](https://genaiunplugged.com/courses/claude-code/)** > > 8 lessons. The complete path from first build to production systems. | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [1 Article, 6 Platforms: Content Multiplication Engine](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) | See Claude Code build a real system from scratch | | 2 | [The Claude Code Extension Stack](https://genaiunplugged.substack.com/p/claude-code-skills-commands-hooks-agents) | Skills, hooks, and commands for Claude Code | | 3 | [MCP + Hooks: The Integration Layer](https://genaiunplugged.substack.com/p/claude-code-mcp-servers-hooks-automation) | Connect Claude Code to external tools via MCP and hooks | | 4 | [I Built a 3-Agent Research Team in Claude Code](https://genaiunplugged.substack.com/p/claude-code-agents-ai-research-team) | Three agents research, write, and review in parallel | | 5 | [Claude Code Runs My Content Business While I Create](https://genaiunplugged.substack.com/p/claude-code-content-system-full-ai-pipeline) | The full integrated content pipeline with real costs | | 6 | [Advanced Claude Code: Plugins, SDK, and Building Tools](https://genaiunplugged.substack.com/p/create-claude-code-plugin) | Package your setup into distributable plugins | | 7 | [Claude Code Channels Setup Guide](https://genaiunplugged.substack.com/p/claude-code-channels-guide-telegram-discord) | Telegram and Discord webhooks into your terminal | | 8 | How to Supercharge Your Workflow with Claude Code and Chrome | *Coming soon* | ### Coming Soon - **Which AI Path is Right For Me?** - Quiz-style decision framework: Claude Cowork vs n8n vs Claude Code vs combination, based on your role and goals. **Milestone reached!** Your First Working AI System saving 2+ hours per week. --- ## Creative AI Tools: The Visual and Audio Side Not part of the 5-stage roadmap, but essential for creators. ### Image Generation - **MidJourney** - Quality leader for AI images. $10/mo basic plan. Best for: Marketing visuals, social media, concept art. - **DALL-E** - OpenAI's generator, built into ChatGPT. Best for: Quick images without leaving your chat. - **Ideogram** - Specializes in readable text in images. Best for: Logos, posters, banners with text. - **Google Imagen** - Available through Gemini. Improving rapidly. Best for: Photorealistic images. ### Video Generation - **Google Veo** - Google's video model. Short clips from text. Best for: Quick video clips. - **Runway** - Most established AI video tool. $12/mo starter. Best for: Short-form content, social media clips. - **Kling** - Realistic motion and longer clips. Best for: Natural-looking video. - **Hailuo** - Good quality, generous free tier. Best for: Free video generation. ### Audio and Music - **ElevenLabs** - Voice cloning and human-quality text-to-speech. Best for: Voiceovers, narration. - **Suno** - Full song generation from text descriptions. Best for: Background music, jingles. - **NotebookLM** - Generates podcast-style audio from documents. Best for: Audio summaries of content. ### Design - **Canva AI** - AI features throughout Canva: text-to-image, magic resize. Best for: General design with AI assist. - **Figma AI** - AI-powered design for UI/UX. Best for: App mockups, UI design. *Coming in this series: "The AI Tool Landscape: What's Worth Paying For"* --- ## Stage 3: "I Can Connect AI to Everything" - Integration and Automation (Weeks 9-12) **Transformation:** *"I went from one AI tool to a connected system that works while I sleep."* > **[MCP Masterclass →](https://genaiunplugged.com/courses/mcp/)** > > The complete path from understanding MCP to building integrations. ### What to Study | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [What is MCP?](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) | Lesson 1 - Plain English intro with real examples | | 2 | [Why MCP Was Created](https://genaiunplugged.substack.com/p/why-mcp-was-created-full-course-lesson) | Lesson 2 - The big picture of AI connectivity | | 3 | [How MCP Actually Works: Hosts, Clients, and Servers](https://genaiunplugged.substack.com/p/inside-mcp-how-hosts-clients-and) | Lesson 3 - The restaurant analogy that makes MCP architecture click | | 4 | [The Three Superpowers of MCP: Tools, Resources, and Prompts](https://genaiunplugged.substack.com/p/the-three-superpowers-of-mcp-tools) | Lesson 4 - Know when to use each MCP capability | | 5 | [Build an MCP Server in 30 Minutes](https://genaiunplugged.substack.com/p/how-to-build-an-mcp-server-and-connect) | Lesson 5 - First hands-on MCP build | | 6 | [Connect AI Assistants to n8n Workflows via MCP](https://genaiunplugged.substack.com/p/connect-ai-n8n-workflows) | Bridge between Claude and n8n | | 7 | [MCP + Hooks: The Integration Layer](https://genaiunplugged.substack.com/p/claude-code-mcp-servers-hooks-automation) | How MCP connects Claude Code to external tools and services | ### Coming Soon - **Integration Patterns for Non-Technical People** - When to use MCP vs n8n vs Claude Code for different integration scenarios. **Milestone reached!** Complete MCP Lesson 1 and connect Claude to one tool you already use (Google Drive, Notion, or your email). --- ## Stage 4: "I Can Build AI Agents" - Autonomous Systems (Weeks 13-16) **Transformation:** *"I went from manually running AI to having AI agents that work independently."* > **[Content OS Agents Series →](https://genaiunplugged.substack.com/p/build-research-ai-agents-automation-claude-code)** > > 6 articles. Build and deploy AI agents for real tasks. ### What to Study | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [Building 5 Research Agents for My Content System](https://genaiunplugged.substack.com/p/build-research-ai-agents-automation-claude-code) | Multi-agent system design and architecture | | 2 | [Build an AI Research Agent in 27 Minutes (No Code)](https://genaiunplugged.substack.com/p/build-ai-research-agent) | Your first AI agent - zero code | | 3 | [AI Agent That Analyzes SERPs (SEO/AEO Agent Build)](https://genaiunplugged.substack.com/p/seo-aeo-research-agent) | Specialized research agent | | 4 | [The Agent That Replaced My $150/Month Competitor Analysis Tool](https://genaiunplugged.substack.com/p/competitive-ai-analysis-agent) | Competitive intelligence agent | | 5 | [Never Publish Outdated Technical Content Again (Verification Agent)](https://genaiunplugged.substack.com/p/claude-code-subagent-technical-content-verification) | Technical verification agent | | 6 | [Gap Analyzer Agent Found 47 Content Opportunities](https://genaiunplugged.substack.com/p/content-gap-analyzer-ai-agent-claude-code) | Content strategy agent | > **Build a research agent live, with me.** This is exactly what we do in the [Claude Code Builder cohort](/academy/claude-code-builder-virtual/). Or watch the [free 45-minute lightning lesson](https://maven.com/p/0ea1c4/build-an-seo-aeo-research-agent-in-45-min-no-code) first. **Milestone reached!** Your First AI Agent working independently. --- ## Stage 5: "I Can Productize AI" - From User to Builder (Weeks 17+) **Transformation:** *"I went from using AI tools to building and selling my own AI solutions."* ### What to Study | # | Lesson | What You'll Learn | |---|--------|-------------------| | 1 | [What Nobody Tells You About AI Automation Costs - Start Tracking Them Now!](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) | The hidden costs of AI automation and how to track them | | 2 | [Build Your Content OS: AI-Powered Pipeline](https://genaiunplugged.substack.com/p/claude-code-content-system-full-ai-pipeline) | The full pipeline behind this newsletter | | 3 | [The 3-Day MVP: SubflowAI in 19 Days](https://genaiunplugged.substack.com/p/subflow-ai-chrome-extension-schedule-notes-substack) | Build-in-public product launch case study | | 4 | [macOS Backup App in 2 Hours with Claude Code](https://genaiunplugged.substack.com/p/build-macos-backup-app-claude-code) | Rapid prototyping with AI | | 5 | [What OpenClaw Actually Is (And Isn't)](https://genaiunplugged.substack.com/p/what-is-openclaw-beginner-non-developer-assessment) | Lesson 1 - Non-developer's honest assessment. Start here. | | 6 | [OpenClaw Deep Dive: Security, Cost, Architecture, and Setup](https://genaiunplugged.substack.com/p/openclaw-ai-agent-setup-security-cost) | Lesson 0 (standalone live session) - Architecture, security, cost control with Wyndo | | 7 | [60-Minute Secure OpenClaw Setup on Hetzner](https://genaiunplugged.substack.com/p/secure-openclaw-setup-hetzner-clawbot) | From zero to a running AI agent platform in one hour, about $30/month | ### The Commercial Side The From Demo to Dependable series covers the commercial side: client discovery, scoping, cost negotiation, break-even framework, delivery, handoff, and long-term support. ### Coming Soon - **How to Package and Sell Your AI Workflow** - Business side of productizing - pricing, packaging, delivery, support. **Milestone reached!** Your Productized AI Service or Tool. --- ## The Full Course Map Here's every course referenced in this roadmap, organized by stage. Stage 2 has three alternate tracks - pick the one that fits your goals (you don't need all three): | Stage | Course | Platform | |-------|--------|----------| | 0 | [AI Fundamentals for Everyone](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) | Substack | | 1 | [Prompt Engineering](https://genaiunplugged.com/courses/prompt-engineering/) | Substack | | **2** | **Pick your path (choose one):** | | | ↳ A | [Claude Cowork + Projects](https://genaiunplugged.com/courses/claude-systems/) | Substack | | ↳ B | [n8n Full Course](https://genaiunplugged.com/courses/n8n/) | YouTube | | ↳ C | [Claude Code Masterclass](https://genaiunplugged.com/courses/claude-code/) | Substack | | 3 | [MCP Masterclass](https://genaiunplugged.com/courses/mcp/) | Substack | | 4 | [Content OS Agents](https://genaiunplugged.substack.com/p/build-research-ai-agents-automation-claude-code) | Substack | | 5 | [From Demo to Dependable](https://genaiunplugged.com/courses/production-n8n/) | Substack | | 5 | [Build Your Content OS](https://genaiunplugged.com/courses/content-os/) | Substack | | 5 | [OpenClaw for Solopreneurs](https://genaiunplugged.substack.com/p/what-is-openclaw-beginner-non-developer-assessment) | Substack | **Ten courses backing every step (nine free, one premium). Your path is 5-7 courses depending on your choices.** ![The Full Course Map: free courses organized by stage, from Prompt Engineering in Stage 1 through OpenClaw for Solopreneurs in Stage 5 - pick your path](/roadmap/images/ai-learning-roadmap-course-map.png) --- ## Your Practice Framework Your daily AI practice routine in four steps: | Step | What to Do | |------|-----------| | **1** | Pick the task you hate most - that's your first AI target | | **2** | Open Claude before starting any task - make it a habit | | **3** | Track what worked - keep AI Breadcrumbs linking prompts to results | | **4** | Do exercises on YOUR problems - not textbook examples | > **The 15-Minute Rule** > > Spend 15 minutes each day using AI on one real task. Within a month, AI becomes second nature. --- ## Frequently Asked Questions **Do I need to learn Python to use AI?** No. This roadmap covers five stages of practical AI skills without any coding. Tools like Claude Code, Lovable, and n8n let you build AI systems by describing what you want in plain English. Python is only needed for training custom AI models or ML research. **Am I too late to start learning AI?** No. AI rewards domain expertise more than age or technical background. Your experience in your field is an advantage. A nurse who learns AI becomes more valuable than a fresh graduate who only knows AI but not nursing. **What is vibe coding?** Vibe coding means describing what you want an app or tool to do in plain English, and AI builds it. Coined by Andrej Karpathy. Tools like Claude Code, Lovable, Replit, and Cursor all enable vibe coding at different skill levels. **How long does the full AI learning roadmap take?** The five stages span roughly 17+ weeks at a comfortable pace. You can skip to any stage based on your current skill level. Most people see real value from Stage 1 within the first week. **Can I learn AI without coding?** Yes. All nine courses can be completed without writing a single line of code. Even Claude Code (Stage 2 Track C) works by describing what you want in plain English. **What if I'm not a technical person?** This roadmap was built specifically for non-technical people: freelancers, consultants, business owners, content creators, and professionals wanting to use AI practically. **What tools do I need to start?** A web browser and a free Claude account (claude.ai). That's it for Stages 0-1. As you progress you'll add tools, but nothing is needed upfront beyond a browser. **How much does it cost?** Stages 0-1 are completely free. From Stage 2 onward, budget $20-50/month for AI tools. Most tools have free tiers sufficient for learning. Don't pay for anything until Stage 2. **What about ChatGPT vs Claude?** Both are excellent. This roadmap uses Claude because its Projects feature (Stage 2) and MCP integration (Stage 3) create a natural progression. Prompting skills transfer to any AI tool. **What's the difference between AI literacy and AI fluency?** AI literacy is understanding what AI is and using basic tools. AI fluency is building AI systems that do real work - automation, agents, connected workflows. Most courses teach literacy. This roadmap teaches fluency. **How do I avoid tutorial hell?** Build something at every stage. Don't move to the next course until you've completed the exercise on YOUR real problems. 15 minutes of practice on real work beats hours of passive video watching. **What are the best free AI courses?** For AI understanding: Andrew Ng's AI for Everyone (Coursera, free). For this roadmap: all nine courses are free. For Python later: freeCodeCamp's Python for Beginners. **Will AI take my job?** AI changes jobs more than it eliminates them. By learning AI, you become the person who brings it to your team, not the person who gets replaced. Every stage here makes you more valuable - the nurse who uses AI for patient research, the consultant who delivers in hours not days. That's job security. **Is this roadmap for developers?** No. It's designed for non-technical professionals. Developers can benefit (especially Stages 2C-5) but will likely skip Stages 0-1. --- ## Start Now Pick your starting point above. Hit the milestone. Move to the next stage. The path exists. All you have to do is start walking. Want to walk it with me? The [Claude Code Builder cohort](/academy/claude-code-builder-virtual/) runs six live sessions across six weeks, and cohort 2 starts Oct 3, 2026 at $1,597. Or start free with the [45-minute lightning lesson](https://maven.com/p/0ea1c4/build-an-seo-aeo-research-agent-in-45-min-no-code). [Subscribe to GenAI Unplugged (free)](https://genaiunplugged.substack.com/) to get notified when new content fills the "Coming Soon" gaps. *This is a living document and Part 1 of the AI Learning Roadmap series. Seven more articles are coming to dive deeper into the topics introduced here.* ## Frequently Asked Questions ### Do I need to learn Python to use AI? No. This roadmap covers five stages of practical AI skills without any coding. Tools like Claude Code, Lovable, and n8n let you build AI systems by describing what you want in plain English. Python is only needed for training custom AI models or ML research. ### Am I too late to start learning AI? No. AI rewards domain expertise more than age or technical background. Your experience in your field is an advantage. A nurse who learns AI becomes more valuable than a fresh graduate who only knows AI but not nursing. ### What is vibe coding? Vibe coding means describing what you want an app or tool to do in plain English, and AI builds it. Coined by Andrej Karpathy. Tools like Claude Code, Lovable, Replit, and Cursor all enable vibe coding at different skill levels. ### How long does the full AI learning roadmap take? The five stages span roughly 17+ weeks at a comfortable pace. You can skip to any stage based on your current skill level. Most people see real value from Stage 1 within the first week. ### Can I learn AI without coding? Yes. All nine courses can be completed without writing a single line of code. Even Claude Code (Stage 2 Track C) works by describing what you want in plain English. ### What if I'm not a technical person? This roadmap was built specifically for non-technical people: freelancers, consultants, business owners, content creators, and professionals wanting to use AI practically. ### What tools do I need to start? A web browser and a free Claude account (claude.ai). That's it for Stages 0-1. As you progress you'll add tools, but nothing is needed upfront beyond a browser. ### How much does it cost? Stages 0-1 are completely free. From Stage 2 onward, budget $20-50/month for AI tools. Most tools have free tiers sufficient for learning. Don't pay for anything until Stage 2. ### What about ChatGPT vs Claude? Both are excellent. This roadmap uses Claude because its Projects feature (Stage 2) and MCP integration (Stage 3) create a natural progression. Prompting skills transfer to any AI tool. ### What's the difference between AI literacy and AI fluency? AI literacy is understanding what AI is and using basic tools. AI fluency is building AI systems that do real work - automation, agents, connected workflows. Most courses teach literacy. This roadmap teaches fluency. ### How do I avoid tutorial hell? Build something at every stage. Don't move to the next course until you've completed the exercise on YOUR real problems. 15 minutes of practice on real work beats hours of passive video watching. ### What are the best free AI courses? For AI understanding: Andrew Ng's AI for Everyone (Coursera, free). For this roadmap: all nine courses are free. For Python later: freeCodeCamp's Python for Beginners. ### Will AI take my job? AI changes jobs more than it eliminates them. By learning AI, you become the person who brings it to your team, not the person who gets replaced. Every stage here makes you more valuable - the nurse who uses AI for patient research, the consultant who delivers in hours not days. That's job security. ### Is this roadmap for developers? No. It's designed for non-technical professionals. Developers can benefit (especially Stages 2C-5) but will likely skip Stages 0-1. --- # AI Automation Tools & Templates | GenAI Unplugged Products URL: https://www.genaiunplugged.com/products/ > Ready-to-use tools and templates to end manual chaos. Chrome extensions, n8n workflows, AI agents, and automation templates. ## Frequently Asked Questions ### What payment methods do you accept? All products are sold through our store at store.genaiunplugged.com (powered by Lemon Squeezy), which accepts credit cards, PayPal, and Apple Pay. SubflowAI is also available directly in the Chrome Web Store. ### Do you offer refunds? Yes! All paid products come with a 14-day money-back guarantee. If you're not satisfied, just email support@genaiunplugged.com for a full refund. ### Can I use these products for client work? The n8n workflows and AI agents are licensed for your personal and commercial use, including client projects. SubflowAI is licensed per user. ### Do I need technical skills? No! All products are designed for non-developers. n8n Self-Host Autopilot uses Claude Code to guide you step-by-step. The AI agents come with copy-paste installation. --- # n8n Self-Host Autopilot — Stop Paying $20/Month for n8n Cloud URL: https://www.genaiunplugged.com/n8n-self-host/ > Deploy n8n yourself on free-tier cloud servers with Claude Code guiding setup step by step, and save $240 or more a year. ## Frequently Asked Questions ### Which cloud provider is best for self-hosting n8n? For free hosting, GCP works out of the box (Free tier). For power users, Oracle Cloud's Always Free tier is unbeatable — 24GB RAM, 4 OCPUs, 200GB storage, forever free. Oracle is included in the Pro tier. AWS and Azure also supported. ### Is Oracle Cloud's free tier really free? Yes. Oracle's Always Free tier includes ARM-based instances with up to 24GB RAM and 4 OCPUs. It's been available since 2019 and Oracle has publicly committed to keeping it free. You need a credit card to sign up, but you won't be charged. ### What's the difference between Free, Pro, and Pro+? Free: GCP deployment with 12 commands. Pro ($47): All 4 cloud providers, migration tools, security hardening, backup/monitoring — 28 commands. Pro+ ($79): Everything in Pro plus Multi-Region Capacity Hunter and Cost Guard for all clouds — 33 commands. ### What is the Capacity Hunter? Oracle's free 24GB ARM VMs are popular and often show 'out of capacity' errors. The Capacity Hunter script auto-retries every 15 minutes across multiple regions (US + EU), runs in the background, and sends you a notification when it secures a VM. With two regions, you can get 48GB total RAM — all free. ### What is Cost Guard? Automatic spending protection for all 4 clouds. Monitors your spending hourly, sends alerts at thresholds, and can auto-stop instances if spending exceeds your configured limit. Prevents surprise cloud bills. Runs via cron with detailed logging. ### How hard is this? Do I need Linux experience? The Autopilot guides you through every command. You don't need Linux experience — but you do need to be comfortable copy-pasting commands into a terminal. The guide explains what each command does. ### Can I migrate my workflows from n8n Cloud? Yes (Pro tier). The migration commands export your workflows as JSON from n8n Cloud and import them into your self-hosted instance. Credentials need to be re-entered, but workflow logic transfers perfectly. ### What's the refund policy? The Free tier is free — no refund needed. Pro and Pro+ have a 14-day money-back guarantee. Email support@genaiunplugged.com for a full refund. --- # How to Self-Host n8n for Free: The Complete Guide (2026) URL: https://www.genaiunplugged.com/n8n-self-host/how-to-self-host-n8n-free.html > Self-host n8n for $0/month on Oracle Cloud's free tier (24GB RAM). Complete step-by-step guide with cost comparison vs n8n Cloud. Save $240+/year. You're paying $20+/month for n8n Cloud. That's $240/year. Maybe you're on the Pro plan at $50/month — that's $600/year. For an open-source tool that's entirely free to self-host. Here's the thing: n8n is one of the most powerful workflow automation platforms available, and its entire codebase is open source under a fair-code license. The n8n Cloud service is a convenience layer — they host it, they manage it, you pay monthly. But you don't have to. With Oracle Cloud's Always Free tier, you can run n8n on a server with **24GB of RAM and 4 OCPUs** for exactly $0 per month. Not $0 for 12 months. Not $0 with a credit limit. Zero dollars, permanently. This guide walks you through the entire process: the cost math, the cloud provider comparison, the step-by-step setup, and the security hardening that turns a free server into a production-ready n8n instance. Whether you follow each command manually or use the [n8n Self-Host Autopilot](/n8n-self-host/) to guide you through it interactively, the result is the same — your own n8n instance, running on your server, at no monthly cost.
## n8n Cloud vs Self-Hosted: The Real Comparison Before you decide to self-host, you need to understand exactly what you're comparing. n8n Cloud is not a different product — it's the same n8n software, hosted on n8n's infrastructure, with usage limits applied based on your pricing tier. Self-hosting removes those limits entirely. You get the full, unrestricted version of n8n running on hardware you control. ### Feature-by-Feature Comparison | Feature | n8n Cloud Starter ($20/mo) | n8n Cloud Pro ($50/mo) | Self-Hosted (Free) | |---------|---------------------------|------------------------|---------------------| | **Active Workflows** | 5 | 50 | Unlimited | | **Executions/Month** | 2,500 | 10,000 | Unlimited | | **RAM** | Shared (unspecified) | Shared (unspecified) | 24GB (Oracle Free) | | **CPU** | Shared | Shared | 4 OCPUs (Oracle Free) | | **Storage** | Limited | Limited | 200GB (Oracle Free) | | **Custom Nodes** | No | Yes | Yes | | **Root Server Access** | No | No | Yes | | **Data Location** | n8n's servers (EU/US) | n8n's servers (EU/US) | Your server, your region | | **Version Control** | No | Yes | Yes (you control updates) | | **Community Nodes** | Limited | Yes | Yes | | **SSO/LDAP** | No | Add-on | Configure yourself | | **Uptime SLA** | 99.9% | 99.9% | Depends on you | | **Automatic Updates** | Yes | Yes | Manual (2-minute Docker pull) | | **Support** | Community | Priority | Community + self-reliance | | **Monthly Cost** | $20 | $50 | $0 | The differences are significant. On n8n Cloud Starter, you're capped at 5 active workflows. If you're building automation for a business — even a small one — you'll hit that wall fast. A simple CRM integration, an email automation, a lead enrichment pipeline, a reporting workflow, and a notification system: that's 5 workflows. You're full. Want a sixth? Upgrade to Pro at $50/month. Self-hosted n8n doesn't have these limits. You can run 50, 100, or 500 active workflows. The only ceiling is your server's hardware — and Oracle's free tier gives you more hardware than most small businesses need. ### Where n8n Cloud Genuinely Wins Let's be honest about the trade-offs: - **Zero maintenance.** n8n Cloud handles updates, backups, uptime monitoring, and SSL certificates. You don't think about infrastructure. - **Instant setup.** Sign up, pay, start building workflows. No server provisioning, no Docker, no SSH. - **Team features.** Built-in collaboration, role management, and audit logs on higher tiers. - **Compliance documentation.** SOC 2, GDPR compliance paperwork — useful for enterprise contexts. If you're a team of 5 people who need managed infrastructure with compliance documentation and zero DevOps overhead, n8n Cloud Pro makes sense. For solopreneurs, freelancers, and small service businesses? Self-hosting is overwhelmingly the better deal. ## The Cost Math: 1 Year, 3 Years, 5 Years Numbers don't lie. Let's look at what n8n costs over time across each option. ### Total Cost of Ownership | Timeframe | n8n Cloud Starter | n8n Cloud Pro | Self-Hosted (Oracle Free) | |-----------|-------------------|---------------|---------------------------| | **1 Year** | $240 | $600 | $0* | | **3 Years** | $720 | $1,800 | $0* | | **5 Years** | $1,200 | $3,000 | $0* | *Self-hosted costs: $0 server + ~$12/year for a domain name. Total 5-year cost: ~$60 for the domain. ### What $240/Year Actually Buys Elsewhere That $240/year you'd spend on n8n Cloud Starter could instead pay for: - **4 years of domain registration** for your self-hosted instance - **A full year of a premium VPN service** - **20 months of a password manager** - **The entire n8n Self-Host Autopilot Pro+ tier** and still have $161 left over Or you could just keep the $240. Every year. ### The Hidden Cost: Usage Limits The cost comparison above doesn't capture the full picture. n8n Cloud Starter caps you at 2,500 executions per month. If you have workflows that trigger frequently — say, a webhook listener that processes form submissions, or a scheduled job that runs every 15 minutes — you'll burn through 2,500 executions before the month is half over. When you exceed limits, you either upgrade (more money) or your workflows stop running (lost productivity). Self-hosted n8n doesn't have this problem. Your workflows run until your server's resources are exhausted, and with 24GB of RAM, that threshold is very, very high for typical automation workloads. ### Break-Even Analysis Even if you factor in the time cost of initial setup — roughly 45 minutes to an hour — the break-even point is immediate. One month of not paying $20 for n8n Cloud Starter already exceeds the time investment. And the savings compound every single month after that. For users currently on n8n Cloud Pro at $50/month, the math is even more dramatic. In one year, you save $600. In three years, $1,800. That's real money that could fund other tools, services, or growth investments for your business. ## Cloud Provider Comparison for Free n8n Hosting If you're going to self-host n8n for free, you need a free server. Every major cloud provider offers some form of free tier, but they are not created equal. Here's how the four major options stack up. ### Free Tier Comparison Table | Provider | Free RAM | Free CPUs | Free Storage | Free Duration | Best For | |----------|----------|-----------|--------------|---------------|----------| | **Oracle Cloud** | 24GB | 4 OCPUs (ARM) | 200GB | Forever | n8n self-hosting (winner) | | **AWS** | 1GB (t2.micro) | 1 vCPU | 30GB EBS | 12 months | Temporary testing only | | **Google Cloud (GCP)** | 1GB (e2-micro) | 1 vCPU | 30GB | Forever (Always Free) | Getting started with n8n | | **Azure** | $200 credits | $200 credits | $200 credits | 30 days | Quick trials | ### Oracle Cloud: The Clear Winner Oracle Cloud's Always Free tier is in a league of its own. The ARM-based Ampere A1 instances give you up to **24GB of RAM and 4 OCPUs** with **200GB of block storage** — and it never expires. Oracle introduced this in 2019 and has publicly committed to maintaining it. For context, 24GB of RAM is more than many paid cloud servers at the $50-100/month tier. It's enough to run n8n, a PostgreSQL database, a reverse proxy, and still have overhead for monitoring tools. The catch? Oracle Cloud's sign-up process occasionally rejects applicants (especially during high-demand periods), and ARM instances can be temporarily out of capacity in popular regions. The workaround: try a less popular region (e.g., Phoenix instead of Ashburn) and use the "create instance" API with a retry script if the web console shows "out of capacity." ### AWS Free Tier: Too Limited AWS gives you a t2.micro instance with 1GB of RAM for 12 months. That's barely enough to run n8n with a few basic workflows. Once you add PostgreSQL and a reverse proxy, you're pushing the memory limit hard. Workflows with larger data payloads will crash. Worse, after 12 months, it's no longer free. AWS starts billing you, and if you forget to terminate the instance, you'll get a surprise charge. For permanent free hosting, AWS doesn't work. ### Google Cloud Platform: Always Free e2-micro GCP offers an always-free e2-micro instance (1 vCPU, 1GB RAM, 30GB storage) in select US regions — permanently free, no expiration. This is enough to run n8n with basic workflows. GCP also gives $300 in trial credits for 90 days to try larger instances. The n8n Self-Host Autopilot's Free tier uses GCP's e2-micro — it's the easiest way to get started with self-hosting for $0. ### Azure: Same Story as GCP Microsoft Azure gives $200 in credits for 30 days. Even shorter than GCP. After those credits expire, you're on the meter. Azure does have some Always Free services, but compute instances are not among them at any useful size. ### Verdict For permanently free n8n self-hosting with production-grade resources, Oracle Cloud is the only real option. It's not even close. Twenty-four times the RAM of AWS free tier, with no expiration date. ## Oracle Cloud Free Tier: What You Actually Get Let's get specific about what Oracle's Always Free tier includes, because the details matter. ### Always Free Resources **Compute:** - Up to 4 ARM-based Ampere A1 OCPUs (can be split across instances) - Up to 24GB RAM (can be split across instances) - For n8n, a single instance with 2 OCPUs and 12GB RAM is more than sufficient - You can run a second instance with the remaining resources for other projects **Storage:** - 200GB total block volume storage - 2 block volumes included - 10GB object storage - 10GB archive storage **Networking:** - 10TB/month outbound data transfer - Load balancer (1 instance, 10 Mbps) - Public IP addresses (up to 2) - VCN (Virtual Cloud Network) **Databases:** - 2 Autonomous Database instances (20GB each) - This is a fully managed Oracle database — you probably won't need it for n8n, but it's there ### What's NOT Free Be aware of these potential costs: - **AMD-based instances** (VM.Standard.E2.1.Micro) are Always Free, but you only get 1GB RAM — not useful for n8n - **Additional block storage** beyond 200GB - **Additional bandwidth** beyond 10TB/month (you won't hit this with n8n) - **Windows OS instances** (Always Free only covers Oracle Linux, Ubuntu, and CentOS) - **GPU instances** (not included in free tier) ### The "Always Free" Promise Oracle distinguishes between "Free Tier" (trial credits that expire) and "Always Free" (resources that never expire). When you sign up, you get both: $300 in trial credits for 30 days AND the Always Free resources. After 30 days, the trial credits expire, but your Always Free resources continue running. Oracle has maintained this program since 2019 across multiple infrastructure updates. The key rule: don't upgrade your account to "Pay As You Go" unless you want to — Always Free resources are available on both free and paid accounts, but staying on a free account prevents accidental charges. ### Credit Card Requirement Yes, Oracle requires a credit card to sign up. No, you won't be charged. The card is used for identity verification only. Always Free resources are never billed. If you're uncomfortable, use a virtual credit card number from your bank or a service like Privacy.com. ## Step-by-Step: Setting Up n8n on Oracle Cloud This section walks through the high-level process of getting n8n running on Oracle Cloud's free tier. Each step includes the key decisions and commands involved. For a fully interactive, command-by-command guided experience, the [n8n Self-Host Autopilot](/n8n-self-host/) handles this entire process inside Claude Code. ### Step 1: Create an Oracle Cloud Account 1. Go to [cloud.oracle.com](https://cloud.oracle.com) and click "Sign Up" 2. Choose your home region — **Ashburn (US East)** or **Phoenix (US West)** are reliable choices. You cannot change your home region after signup. 3. Enter your details and credit card for verification 4. Wait for account activation (usually instant, sometimes up to 24 hours) **Tip:** If you're rejected during sign-up, try again with a different email and select a different home region. Oracle occasionally restricts sign-ups in high-demand regions. ### Step 2: Create an ARM Compute Instance (Always Free) 1. Navigate to **Compute > Instances > Create Instance** 2. Set the name (e.g., `n8n-server`) 3. Under **Image and Shape**: - Image: **Canonical Ubuntu 22.04** (or 24.04 if available) - Shape: **VM.Standard.A1.Flex** (this is the ARM Always Free shape) - OCPUs: **2** (use 2 of your 4 free OCPUs) - Memory: **12 GB** (use 12 of your 24 free GB) 4. Under **Networking**: Use the default VCN or create a new one. Ensure **Assign a public IPv4 address** is selected. 5. Under **SSH keys**: Upload your public SSH key or let Oracle generate one (download and save the private key immediately) 6. Click **Create** The instance should launch within a few minutes. If you see "Out of capacity," try selecting a different availability domain within the same region, or wait and retry later. ### Step 3: Configure Security Lists (Firewall) Oracle Cloud uses **Security Lists** to control network traffic. By default, only SSH (port 22) is open. You need to open ports for HTTP and HTTPS: 1. Go to **Networking > Virtual Cloud Networks > Your VCN > Subnet > Security List** 2. Add **Ingress Rules**: - Port 80 (HTTP) — Source: 0.0.0.0/0, Protocol: TCP - Port 443 (HTTPS) — Source: 0.0.0.0/0, Protocol: TCP 3. Save the rules ### Step 4: SSH Into Your Server Once the instance is running and you have the public IP address: ```bash ssh -i ~/.ssh/your-oracle-key ubuntu@YOUR_SERVER_IP ``` If you used Oracle-generated keys, specify the downloaded private key path instead. ### Step 5: Update the System and Install Docker First, update the package lists and install Docker: ```bash sudo apt update && sudo apt upgrade -y ``` Install Docker using the official convenience script: ```bash curl -fsSL https://get.docker.com | sudo sh ``` Add your user to the Docker group so you don't need `sudo` for every Docker command: ```bash sudo usermod -aG docker $USER ``` Log out and SSH back in for the group change to take effect: ```bash exit ssh -i ~/.ssh/your-oracle-key ubuntu@YOUR_SERVER_IP ``` Verify Docker is working: ```bash docker --version docker run hello-world ``` Install Docker Compose (it's included with modern Docker, but verify): ```bash docker compose version ``` ### Step 6: Create the Docker Compose Configuration for n8n Create a directory for your n8n setup: ```bash mkdir -p ~/n8n-docker && cd ~/n8n-docker ``` Create the `docker-compose.yml` file. This is covered in detail in the next section, but the core structure is: ```yaml version: '3.8' services: n8n: image: docker.n8n.io/n8nio/n8n restart: always ports: - "5678:5678" environment: - N8N_HOST=your-domain.com - N8N_PORT=5678 - N8N_PROTOCOL=https - WEBHOOK_URL=https://your-domain.com/ - GENERIC_TIMEZONE=America/New_York volumes: - n8n_data:/home/node/.n8n volumes: n8n_data: ``` Start n8n: ```bash docker compose up -d ``` Verify it's running: ```bash docker compose ps docker compose logs -f n8n ``` You should see n8n starting up and listening on port 5678. ### Step 7: Set Up a Reverse Proxy (Caddy or NGINX) n8n runs on port 5678, but you want users (and webhooks) to access it via standard HTTPS on port 443. A reverse proxy handles this. **Option A: Caddy (Recommended — Simplest SSL)** Caddy automatically provisions and renews Let's Encrypt SSL certificates. Add it to your `docker-compose.yml`: ```yaml caddy: image: caddy:2 restart: always ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config ``` Create a `Caddyfile`: ``` your-domain.com { reverse_proxy n8n:5678 } ``` That's it. Caddy handles SSL automatically. **Option B: NGINX + Certbot** If you prefer NGINX, install it and use Certbot for SSL certificates. This gives you more configuration flexibility but requires more setup. The Autopilot supports both options. ### Step 8: Point Your Domain Before SSL certificates will work, your domain must point to your server: 1. In your domain registrar's DNS settings, add an **A record**: - **Name**: `@` (or your subdomain, like `n8n`) - **Value**: Your Oracle Cloud instance's public IP - **TTL**: 300 (5 minutes) 2. Wait for DNS propagation (usually 5-15 minutes, can take up to 48 hours) 3. Verify: `nslookup your-domain.com` should return your server's IP ### Step 9: Basic Security Hardening A public-facing server needs security. These are the essentials: **Enable UFW (Uncomplicated Firewall):** ```bash sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable ``` **Disable password authentication** (SSH keys only): ```bash sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd ``` **Install fail2ban:** ```bash sudo apt install fail2ban -y sudo systemctl enable fail2ban sudo systemctl start fail2ban ``` **Enable automatic security updates:** ```bash sudo apt install unattended-upgrades -y sudo dpkg-reconfigure -plow unattended-upgrades ``` These four measures handle the vast majority of common server threats. The [n8n Self-Host Autopilot](/n8n-self-host/) configures all of this automatically during setup. ## Docker Compose Configuration for n8n: What Each Setting Does The Docker Compose file is the heart of your self-hosted n8n. Let's break down every important setting. ### Complete Production Docker Compose ```yaml version: '3.8' services: n8n: image: docker.n8n.io/n8nio/n8n container_name: n8n restart: always ports: - "5678:5678" environment: - N8N_HOST=your-domain.com - N8N_PORT=5678 - N8N_PROTOCOL=https - WEBHOOK_URL=https://your-domain.com/ - GENERIC_TIMEZONE=America/New_York - N8N_ENCRYPTION_KEY=your-random-encryption-key - N8N_USER_MANAGEMENT_DISABLED=false - N8N_DIAGNOSTICS_ENABLED=false - N8N_HIRING_BANNER_ENABLED=false - EXECUTIONS_DATA_PRUNE=true - EXECUTIONS_DATA_MAX_AGE=168 volumes: - n8n_data:/home/node/.n8n caddy: image: caddy:2 container_name: caddy restart: always ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config volumes: n8n_data: caddy_data: caddy_config: ``` ### Key Environment Variables Explained **`N8N_HOST`** — Your domain name without the protocol. This tells n8n what hostname to expect, which is critical for webhooks to function correctly. **`N8N_PROTOCOL`** — Set to `https` if you're using SSL (you should be). This ensures n8n generates correct webhook URLs. **`WEBHOOK_URL`** — The full base URL for webhook endpoints. If this is wrong, every webhook trigger in your workflows will have an incorrect URL. Must include the protocol and trailing slash. **`N8N_ENCRYPTION_KEY`** — This key encrypts credentials stored in n8n's database. Generate it once and **never change it**, or you'll lose access to all stored credentials. Generate one with: ```bash openssl rand -hex 32 ``` **`GENERIC_TIMEZONE`** — Sets the default timezone for scheduled workflows. Use [IANA timezone names](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (e.g., `America/New_York`, `Europe/London`). **`EXECUTIONS_DATA_PRUNE=true`** and **`EXECUTIONS_DATA_MAX_AGE=168`** — Automatically prune execution data older than 168 hours (7 days). Without this, your database grows indefinitely and eventually fills your disk. **`N8N_DIAGNOSTICS_ENABLED=false`** — Disables anonymous telemetry sent to n8n. Optional, but good for privacy. **`N8N_HIRING_BANNER_ENABLED=false`** — Removes the "n8n is hiring" banner from the UI. Cosmetic, but nice. ### The `restart: always` Policy This is critical. Docker's `restart: always` policy means: - If n8n crashes, Docker restarts it automatically - If the server reboots (e.g., Oracle Cloud maintenance), Docker restarts all containers - n8n effectively auto-heals from most failure scenarios Without this policy, a server reboot would leave n8n stopped until you manually SSH in and restart it. ### Volumes: Why They Matter The `n8n_data` volume persists your n8n data — workflows, credentials, execution history, settings — outside the Docker container. This means: - Updating n8n (pulling a new image) doesn't erase your data - You can back up the volume independently - Container rebuilds preserve all your work **Never skip the volume configuration.** Without it, every container restart wipes your data. ### Updating n8n When a new n8n version releases, updating is straightforward: ```bash cd ~/n8n-docker docker compose pull docker compose up -d ``` Two commands. Takes about 30 seconds. Your data persists through the update thanks to the volume mount. ## SSL and Domain Setup: Why HTTPS Matters Running n8n over plain HTTP is a security risk and a functional limitation. Here's why SSL isn't optional. ### Why You Need HTTPS 1. **Webhooks won't work.** Most services (Stripe, GitHub, Slack, etc.) require HTTPS webhook endpoints. Without SSL, your webhook-triggered workflows are dead on arrival. 2. **Credentials transmitted in cleartext.** When you log into n8n, your password crosses the network. Without SSL, anyone on the network path can read it. 3. **Browser warnings.** Modern browsers flag HTTP sites as "Not Secure." If you're sharing your n8n URL with team members or clients, this looks unprofessional. 4. **OAuth flows break.** Many OAuth2 providers (Google, Microsoft) require HTTPS redirect URLs. Without SSL, you can't connect Google Sheets, Gmail, or OneDrive. ### Let's Encrypt with Caddy: Zero-Configuration SSL If you use Caddy as your reverse proxy (recommended), SSL is automatic. When Caddy sees a domain name in its configuration, it: 1. Requests a Let's Encrypt certificate 2. Completes the ACME challenge 3. Installs the certificate 4. Sets up auto-renewal (certificates renew before expiration) There's nothing to configure. Your `Caddyfile` has one line with your domain, and Caddy handles everything. ### Let's Encrypt with NGINX + Certbot If you prefer NGINX, install Certbot: ```bash sudo apt install certbot python3-certbot-nginx -y ``` Request a certificate: ```bash sudo certbot --nginx -d your-domain.com ``` Follow the prompts. Certbot modifies your NGINX configuration automatically and sets up a cron job for renewal. Verify auto-renewal works: ```bash sudo certbot renew --dry-run ``` ### Certificate Renewal Let's Encrypt certificates expire every 90 days. Both Caddy and Certbot handle renewal automatically. Caddy checks daily and renews when needed. Certbot's cron job typically runs twice daily. You should still verify renewal works after initial setup. Set a calendar reminder to check in 80 days — or use monitoring (covered later) to alert you if the certificate expires. ## Security Hardening Essentials A self-hosted server is only as secure as you make it. These measures aren't optional — they're the minimum for running a public-facing service. ### 1. SSH Key-Only Authentication Password-based SSH is the number one attack vector for cloud servers. Automated bots constantly try common username/password combinations. Disabling password auth and using SSH keys eliminates this risk entirely. After uploading your public key during instance creation: ```bash # Verify you can log in with your key ssh -i ~/.ssh/your-key ubuntu@YOUR_SERVER_IP # Then disable password authentication sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd ``` Test by opening a new terminal and SSH-ing in again — confirm it still works before closing your existing session. ### 2. UFW Firewall UFW (Uncomplicated Firewall) blocks all incoming traffic except the ports you explicitly allow: ```bash sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable ``` Check the status: ```bash sudo ufw status verbose ``` You should see only three rules: SSH, HTTP, and HTTPS. Everything else is blocked. **Important:** Oracle Cloud has its own network-level security lists (configured in Step 3 of the setup). UFW adds a second layer of defense at the OS level. Both are needed. ### 3. fail2ban fail2ban monitors log files for repeated failed login attempts and automatically bans the offending IP addresses: ```bash sudo apt install fail2ban -y ``` The default configuration protects SSH. For additional protection, create a custom configuration: ```bash sudo tee /etc/fail2ban/jail.local << 'EOF' [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600 EOF ``` This bans any IP that fails 3 SSH login attempts within 10 minutes, for 1 hour. Restart fail2ban: ```bash sudo systemctl restart fail2ban ``` Check banned IPs: ```bash sudo fail2ban-client status sshd ``` ### 4. Automatic Security Updates Ubuntu can automatically install security patches: ```bash sudo apt install unattended-upgrades -y sudo dpkg-reconfigure -plow unattended-upgrades ``` Select "Yes" when prompted. This ensures critical security patches are applied without manual intervention. ### 5. Non-Root User Never run n8n or Docker commands as root. The Ubuntu user created during instance provisioning is sufficient. If you need elevated privileges, use `sudo` for individual commands. Running services as root means any vulnerability in that service has full system access. Running as a regular user limits the blast radius of potential exploits. ### What About a VPN? Some guides recommend putting n8n behind a VPN (WireGuard, Tailscale). This adds security but creates a problem: webhooks from external services can't reach your n8n instance through a VPN. If you use webhook triggers, your n8n must be publicly accessible on ports 80 and 443. The security measures above — SSH keys, firewall, fail2ban, and n8n's own authentication — provide adequate protection for a self-hosted automation platform. ## Monitoring Your Self-Hosted n8n Self-hosting means you're responsible for uptime. Here's how to keep an eye on things without making it a full-time job. ### Basic Health Checks Create a simple script that verifies n8n is responding: ```bash #!/bin/bash # save as ~/check-n8n.sh if curl -sf https://your-domain.com/healthz > /dev/null 2>&1; then echo "n8n is running" else echo "n8n is DOWN" | mail -s "n8n Alert" your@email.com fi ``` Schedule it with cron: ```bash crontab -e # Add this line to check every 5 minutes: */5 * * * * /home/ubuntu/check-n8n.sh ``` ### Disk Space Monitoring The most common failure mode for self-hosted n8n is running out of disk space. Execution logs, the database, and Docker images all consume storage over time. Check disk usage: ```bash df -h ``` Check what Docker is consuming: ```bash docker system df ``` Clean up unused Docker resources periodically: ```bash docker system prune -f ``` Set up a disk space alert: ```bash #!/bin/bash # save as ~/check-disk.sh USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//') if [ "$USAGE" -gt 85 ]; then echo "Disk usage is at ${USAGE}%" | mail -s "Disk Alert" your@email.com fi ``` ### Memory Monitoring n8n's memory usage depends on workflow complexity and concurrent executions. Monitor it: ```bash docker stats --no-stream ``` This shows CPU and memory usage for each container. If n8n consistently uses more than 80% of available memory, consider optimizing your workflows or allocating more resources. ### Execution Log Pruning The `EXECUTIONS_DATA_PRUNE=true` environment variable handles this, but verify it's working. Without pruning, the n8n database grows indefinitely. A database that fills the disk crashes n8n. Check database size: ```bash docker exec n8n du -sh /home/node/.n8n ``` If you're using SQLite (the default), the database file is inside the n8n data directory. For production workloads with many executions, consider switching to PostgreSQL, which handles large datasets more efficiently. ### Uptime Monitoring Services For free external monitoring, consider: - **UptimeRobot** (free tier: 50 monitors, 5-minute intervals) — Pings your n8n URL and emails you if it's down - **Healthchecks.io** (free tier: 20 checks) — Cron job monitoring with heartbeat checks - **Cronitor** (free tier: limited) — Similar to Healthchecks.io These external monitors catch issues your on-server scripts might miss (like the entire server being unreachable). The Pro+ tier of the [n8n Self-Host Autopilot](/n8n-self-host/) includes pre-configured monitoring with dashboards and alerting, so you don't have to set this up manually. ## Common Mistakes to Avoid After helping people self-host n8n through GenAI Unplugged, these are the mistakes I see most often. ### 1. Running Everything as Root Logging in as `root` and running Docker commands directly is the path of least resistance — and the path to security disasters. Always use a non-root user with `sudo` privileges. If your n8n container gets compromised and it's running as root, the attacker has full system access. ### 2. Skipping Backups "It's just automation workflows, I can rebuild them." Until you have 50 workflows with complex logic, custom code nodes, and credentials for 20 services. Then your disk fails and everything's gone. Back up your n8n data volume regularly: ```bash # Create a backup docker compose stop tar -czf n8n-backup-$(date +%Y%m%d).tar.gz -C /var/lib/docker/volumes/ n8n-docker_n8n_data docker compose up -d ``` Schedule this weekly at minimum. Store backups off-server (Oracle Object Storage is free for up to 10GB, or use any cloud storage service). ### 3. No SSL Certificate Running n8n over HTTP might "work" for basic UI access, but it breaks webhooks, exposes credentials, and triggers browser security warnings. There's no valid reason to skip SSL when Caddy makes it free and automatic. ### 4. Choosing the Wrong Instance Type On Oracle Cloud, the Always Free ARM instances are **VM.Standard.A1.Flex**. If you accidentally select an AMD or Intel instance shape, it may not be Always Free and could incur charges. Double-check the shape name before creating the instance. ### 5. Forgetting the Restart Policy Without `restart: always` in your Docker Compose file, a server reboot leaves n8n stopped. You might not notice for hours or days — during which time, all scheduled workflows and webhook listeners are dead. ### 6. Not Setting WEBHOOK_URL If the `WEBHOOK_URL` environment variable isn't set or is incorrect, n8n generates webhook URLs using `localhost` or the internal container IP. External services can't reach these URLs, so webhook-triggered workflows silently fail. ### 7. Ignoring Execution Data Pruning Without `EXECUTIONS_DATA_PRUNE=true`, n8n stores every execution forever. On a server with 200GB of storage, you might think this isn't a concern. But SQLite databases slow down dramatically as they grow, and a multi-gigabyte database makes n8n sluggish even if you have disk space left. ### 8. Not Securing the n8n UI n8n has built-in user management. Enable it. Set a strong password. If you leave n8n's UI open without authentication, anyone who finds your URL can access, modify, and run your workflows — including any that have access to your email, CRM, databases, or other services. ### 9. Skipping OS Updates Your server is on the internet. Vulnerabilities in the operating system are discovered regularly. Automatic security updates (`unattended-upgrades`) handle the critical ones. Skipping this is like leaving your front door unlocked because you live in a "safe neighborhood." ### 10. Not Testing After Setup You finish the setup, see n8n's login screen, and declare victory. But you haven't tested: - Can external webhooks reach your instance? - Does the SSL certificate auto-renew? - Does n8n restart after a server reboot? - Are backups actually being created? Test every critical function before relying on your self-hosted instance for production workflows. ## When n8n Cloud Actually Makes More Sense Self-hosting isn't for everyone, and this guide wouldn't be honest if it didn't acknowledge that. Here are scenarios where n8n Cloud is the better choice. ### Teams That Need Zero DevOps If you're a team of 3-10 people building automations and nobody wants to be the "server person," n8n Cloud removes the infrastructure burden entirely. Updates, backups, SSL, scaling — all handled. The $50/month Pro plan is a reasonable cost for a team's time savings. ### Compliance Requirements If your workflows process sensitive data in regulated industries (healthcare, finance), you may need SOC 2 compliance, specific data residency guarantees, or audit logging that n8n Cloud provides out of the box. Building this yourself on a self-hosted instance is possible but significantly more work. ### Rapid Prototyping If you need to test n8n for a quick project and don't want to spend 45 minutes on infrastructure, n8n Cloud's free trial lets you start building immediately. You can always migrate to self-hosted later. ### High-Availability Requirements If a workflow being down for 30 minutes would cost your business thousands of dollars, n8n Cloud's managed infrastructure with uptime SLAs provides stronger guarantees than a single Oracle Cloud free-tier instance. You *can* build high availability on self-hosted infrastructure (load balancers, multiple instances, database replication), but the complexity is substantial. ### Users Who Truly Don't Want to Touch a Terminal Some people have zero interest in SSH, Docker, or server management. That's completely valid. Not everyone needs to be a DevOps engineer. If the phrase "SSH into your server" makes you uncomfortable and you have no desire to learn, n8n Cloud is money well spent for the convenience it provides. ### The Hybrid Approach Some users run self-hosted n8n for their primary workflows (saving money) and keep an n8n Cloud account for specific team collaboration features or as a failover. This hybrid approach captures the cost savings of self-hosting while maintaining the safety net of a managed service. ## Migrating from n8n Cloud to Self-Hosted If you're currently on n8n Cloud and want to switch to self-hosted, the migration process is straightforward. ### Export Your Workflows 1. In n8n Cloud, go to **Workflows** 2. Select the workflows you want to export 3. Click **Export** — this downloads JSON files You can export all workflows at once or one by one. ### Import Into Self-Hosted 1. In your self-hosted n8n, go to **Workflows** 2. Click **Import from File** 3. Select the exported JSON files Your workflow logic — nodes, connections, configurations — transfers completely. ### Re-Enter Credentials Credentials (API keys, OAuth tokens, passwords) are encrypted and tied to the n8n instance's encryption key. They don't transfer between instances. You'll need to: 1. Go to **Credentials** in your self-hosted n8n 2. Create new credentials for each service 3. Re-authenticate OAuth connections (Google, Slack, etc.) 4. Update workflows to use the new credentials This is the most tedious part of migration. For 10-20 credentials, budget 30-60 minutes. ### Test Everything After migration, test every workflow: - Trigger each workflow manually and verify it completes - Check webhook URLs — they'll have your new domain - Verify scheduled workflows fire at the correct times - Confirm notification and error handling workflows work Don't disable your n8n Cloud workflows until you've verified everything works on self-hosted. Run both in parallel for a week if possible. ## What's Next After Setup Once your self-hosted n8n is running, you're ready to build. If you're new to n8n, start with our [free n8n course](/courses/n8n/) that covers everything from basic workflows to advanced AI automations. If you want to go deeper into self-hosting — with automated backups, monitoring dashboards, multi-cloud support, and production-grade security — the [n8n Self-Host Autopilot](/n8n-self-host/) handles the entire setup interactively through Claude Code. The Free tier covers everything in this guide. The Pro and Pro+ tiers add the features that turn a basic self-hosted setup into a production-ready platform. ### Quick Reference: Essential Commands | Task | Command | |------|---------| | Start n8n | `docker compose up -d` | | Stop n8n | `docker compose down` | | View logs | `docker compose logs -f n8n` | | Update n8n | `docker compose pull && docker compose up -d` | | Backup data | `tar -czf backup.tar.gz -C /var/lib/docker/volumes/ n8n-docker_n8n_data` | | Check disk | `df -h` | | Check containers | `docker compose ps` | | Restart n8n | `docker compose restart n8n` | | Check memory | `docker stats --no-stream` | | Clean Docker | `docker system prune -f` | ### The Bottom Line Self-hosting n8n on Oracle Cloud's free tier gives you unlimited workflows, unlimited executions, 24GB of RAM, full root access, and complete data control — for $0/month. The setup takes under an hour. The savings compound every month. $240/year might not sound like much. But over 5 years, that's $1,200 saved on the Starter plan or $3,000 saved on Pro. For a solopreneur or small business, that money is better spent on tools that actually require paid infrastructure — not on hosting an open-source platform that runs perfectly on free resources. Stop paying monthly for something you can run for free. ## Frequently Asked Questions ### Can you really self-host n8n for free? Yes. Oracle Cloud's Always Free tier provides ARM instances with up to 24GB RAM, 4 OCPUs, and 200GB storage — permanently free. n8n runs in Docker on these instances with no monthly cost. You need a domain name ($10-15/year) and a credit card for Oracle Cloud verification (you won't be charged). ### Is Oracle Cloud's free tier actually free forever? Oracle calls it 'Always Free' and has maintained it since 2019. Unlike AWS or GCP free tiers that expire after 12 months, Oracle's Always Free resources don't have an expiration date. You do need a credit card to sign up, but Always Free resources are not billed. ### How does self-hosted n8n compare to n8n Cloud? Self-hosted n8n has unlimited workflows, unlimited executions, full root access, and custom node support. n8n Cloud Starter limits you to 5 active workflows and 2,500 executions/month for $20/month. The trade-off is you manage your own server with self-hosting. ### What happens if my server goes down? Oracle Cloud instances occasionally restart for maintenance (rare). n8n auto-starts with Docker's restart policy. For critical workflows, the Pro+ tier of the n8n Autopilot includes monitoring and alerting so you know immediately if something goes wrong. ### Can I migrate from n8n Cloud to self-hosted? Yes. Export your workflows as JSON from n8n Cloud, then import them into your self-hosted instance. Credentials need to be re-entered, but all workflow logic transfers. Database data requires a separate migration if needed. ### Do I need Linux experience to self-host n8n? Basic terminal comfort helps, but the n8n Self-Host Autopilot guides you through every command with explanations. If you can copy-paste into a terminal, you can complete the setup. ### Which is better: Oracle Cloud, AWS, GCP, or Azure for free n8n hosting? Oracle Cloud wins for resources — 24GB RAM and 4 OCPUs, permanently free. GCP has always-free e2-micro instances (1 vCPU, 1GB RAM) — enough to get started. AWS Free Tier gives 1GB RAM for 12 months only. Azure gives $200 credits that expire. The n8n Self-Host Autopilot Free tier starts with GCP; Pro adds Oracle Cloud and all other providers. --- # How to Learn n8n Automation: The Complete Guide for Beginners (2026) URL: https://www.genaiunplugged.com/n8n-mastery-bundle/n8n-course-ebook-complete-guide.html > The structured path to learning n8n automation from zero to AI agents. Free 42-lesson YouTube course, companion eBook, workflow templates, and the mistakes to avoid. You open YouTube, search "n8n tutorial," and start watching. Twenty minutes later, you've built a workflow that sends a Slack message when a Google Form is submitted. It feels great. You're automating. The next day, you try to build something for your actual business. You need to pull data from an API, filter out duplicates, handle errors when the API is down, and write results to a Google Sheet. Nothing in that tutorial prepared you for this. So you search again. Watch another tutorial. Copy-paste the nodes. It kind of works, until it doesn't, and you have no idea why. This is the reality for most people learning n8n. Scattered tutorials teach isolated tricks. They don't build connected skills. You end up knowing how to do a dozen specific things but unable to reason about a problem you haven't seen a video for. This guide is about fixing that. Whether you use our free 42-lesson YouTube course at @genaiunplugged, the official n8n docs, or the [n8n Mastery Bundle](/n8n-mastery-bundle/), the principle is the same: structured learning beats random browsing every time. ## Why Learn n8n in 2026? The workflow automation market has grown substantially over the past three years, and n8n has emerged as the platform that serious builders choose when they outgrow the simpler tools. Here's why. ### The Automation Landscape Has Changed Five years ago, automation meant connecting two apps with a simple trigger-action pair. Send a form response to a spreadsheet. Copy an email attachment to cloud storage. Basic stuff. In 2026, automation means building multi-step systems that include AI decision-making, complex data transformations, error recovery, and API orchestration. The tools that only handle simple connections are hitting their ceiling. The tools that handle complexity are the ones worth learning. n8n sits in a unique position. It's open-source, so you can self-host it for free. It's visual, so you can build workflows by connecting nodes without writing code. And when you need code, you have a full JavaScript/Python Code node available. No other platform gives you this combination of accessibility and power. ### n8n vs. Zapier vs. Make: The Honest Comparison You've probably seen these three names in every automation discussion. Here's how they actually differ for someone deciding which to learn. | Factor | n8n | Zapier | Make (Integromat) | |--------|-----|--------|-------------------| | **Cost** | Free self-hosted; Cloud from $20/mo | Starts at $29.99/mo; scales fast | Starts at $10.71/mo; operation-based | | **Execution model** | Unlimited executions (self-hosted) | Task-based pricing (expensive at scale) | Operation-based pricing | | **Code access** | Full JS/Python Code node | Limited code steps | Basic JavaScript | | **AI integration** | 270+ AI nodes, native agent support | AI add-ons | AI modules | | **Self-hosting** | Yes (Docker, npm) | No | No | | **Data stays on your server** | Yes (self-hosted) | No | No | | **Learning curve** | Moderate (JSON awareness helps) | Low (but limited ceiling) | Moderate | | **Complexity ceiling** | Very high | Medium | High | The bottom line: Zapier is easier to start with but expensive and limited at scale. Make is cost-effective for moderate complexity. n8n is the most powerful and economical long-term option, especially if you self-host and need AI capabilities. ### The Career Opportunity n8n expertise is increasingly in demand. Freelancers building n8n automations for businesses charge $50-150/hour. Agencies package n8n workflows as productized services. In-house automation engineers who know n8n are handling work that used to require full development teams. Learning n8n isn't just about automating your own work. It's a skill with real market value. ## The YouTube Tutorial Trap (And How to Avoid It) Let's be clear: YouTube tutorials are a genuinely useful starting point for learning n8n. The problem isn't YouTube. The problem is how most people use it. ### The Pattern Here's what typically happens: 1. You search "n8n tutorial" and watch the first result 2. You follow along and build the workflow successfully 3. You feel accomplished and close the laptop 4. Two days later, you try to build something different and realize you don't remember the details 5. You search YouTube again for your new specific problem 6. Repeat indefinitely This creates what experienced developers call "tutorial hell." You're always watching, copying, and forgetting, but never building independent problem-solving skills. ### Why This Happens YouTube tutorials optimize for engagement, not for learning progression. A video titled "Build an AI Agent in n8n in 10 Minutes" gets more clicks than "Understanding JSON Data Structure in n8n." But you need the boring fundamentals before the exciting projects will actually work. When you skip around between tutorials, you inevitably miss foundational concepts. You might know how to set up a webhook trigger, but not understand that all incoming data lives under the `.body` property. You might know how to use the AI Agent node, but not how to handle the error when the LLM API returns a rate limit response. The result is fragmented knowledge: you know pieces of things but can't connect them into a complete mental model of how n8n works. ### The Fix: Structured Progression The fix isn't to stop watching YouTube. It's to watch tutorials in a structured sequence where each video builds on the previous one. And to pair video learning with reference materials you can go back to. This is why we built the free 42-lesson YouTube course at @genaiunplugged with a deliberate progression. Lesson 1 covers what automation is. Lesson 42 covers building AI agent systems. Everything in between follows a logical path. You don't see webhooks until you understand data flow. You don't see AI nodes until you can handle errors. Whether you follow our course or another structured resource, the principle matters more than the specific source: learn in order, don't skip around. ## The 7 Stages of n8n Mastery Every n8n expert went through the same stages, whether they realized it or not. Understanding these stages helps you know where you are, what to learn next, and when you're ready to move on. ### Stage 1: Foundation (What is This Thing?) **What you learn:** What automation actually means in practical terms. Why n8n exists and how it differs from other tools. How to install n8n (Docker, npm, or Cloud). Navigating the interface. Building and executing your very first workflow. **Why it matters:** This stage seems basic, but it establishes your mental model. People who rush through installation and jump to building often have environment issues that plague them for months. A clean setup and a solid understanding of what n8n is doing under the hood pays dividends at every later stage. **You know you've mastered this stage when:** You can explain what a workflow, node, trigger, and execution are to someone who's never seen n8n. You have n8n running reliably and know how to access it. ### Stage 2: Nodes and Data Flow (The Building Blocks) **What you learn:** The different types of nodes (trigger, action, logic, transformation). How data flows between nodes as JSON items. What expressions are and how to use them to reference data from previous nodes. The critical concept of "items" and how n8n processes them. **Why it matters:** This is where most beginners either build a solid foundation or develop bad habits that haunt them forever. The single most important concept in n8n is that **data flows between nodes as an array of JSON items**. Every node receives items, processes them, and passes items to the next node. If you truly understand this, advanced concepts will click naturally. If you don't, you'll be guessing forever. **You know you've mastered this stage when:** You can look at the output of any node and predict what the next node will receive. You can write basic expressions like `{{ $json.email }}` without looking them up. You understand what happens when a node outputs 10 items vs. 1 item. ### Stage 3: Transformations (Shaping Data) **What you learn:** The Set node for restructuring data. Aggregation for combining multiple items into one (or splitting one into many). Conditional logic with the If node. Branching workflows based on conditions. The Merge node for combining data from parallel paths. **Why it matters:** Real-world automations almost never have data in the exact format you need. You pull customer data from one API, order data from another, and need to combine them, filter out inactive customers, and restructure the result for a third API. Transformation skills are what separate "I can connect two apps" from "I can build real automations." **You know you've mastered this stage when:** Given a JSON input and a desired JSON output, you can figure out which combination of nodes will get you there. You can merge data from two different sources on a shared key. You can branch a workflow into different paths based on data values. ### Stage 4: Advanced Techniques (Real-World Power) **What you learn:** The Code node for custom JavaScript or Python when visual nodes aren't enough. The HTTP Request node for calling any API that doesn't have a dedicated n8n integration. Webhooks for receiving data from external systems. Sub-workflows for breaking large automations into reusable, modular pieces. **Why it matters:** This stage is where you stop being limited by n8n's built-in integrations. With the HTTP Request node, you can connect to any API on the internet. With webhooks, any external system can trigger your workflows. With the Code node, you can implement any logic that the visual nodes don't cover. And sub-workflows keep everything maintainable as your automations grow. **You know you've mastered this stage when:** You can read an API's documentation and build the HTTP request to call it. You can set up a webhook endpoint and know that incoming data lives under `$json.body`. You can use sub-workflows to avoid duplicating logic across multiple workflows. ### Stage 5: Production Readiness (Making It Reliable) **What you learn:** Error handling strategies (try/catch patterns, error workflows, retry logic). Debugging techniques for when workflows fail. Performance optimization for workflows that process hundreds or thousands of items. Scaling strategies for high-volume automations. **Why it matters:** There's a massive gap between "this workflow works when I test it" and "this workflow runs reliably in production without my attention." Production workflows encounter API rate limits, null values, network timeouts, malformed data, and every other edge case you didn't think of during development. Without error handling, failures are silent. You lose data and don't even know it. **You know you've mastered this stage when:** Every workflow you build has error handling. You can look at an execution log and diagnose why a workflow failed. You know how to implement retry logic for flaky APIs. You've thought about what happens at 3 AM when a workflow fails and you're asleep. ### Stage 6: AI Workflows (The New Frontier) **What you learn:** How AI nodes work in n8n (LLM chains, AI agents, tool use). Connecting to AI providers (OpenAI, Anthropic, local models). Building AI agents that can use tools (search, calculate, query databases). Prompt engineering within automation contexts. Managing context windows and token limits. **Why it matters:** AI integration is the biggest capability expansion in n8n's history. But AI workflows have unique challenges: non-deterministic outputs, token costs, rate limits, hallucination handling, and context management. Jumping into AI workflows without understanding the previous stages means you won't know how to handle these challenges when they inevitably appear. **You know you've mastered this stage when:** You can build an AI agent that uses multiple tools reliably. You understand token limits and know how to manage context windows. You can handle AI errors gracefully (rate limits, malformed responses, timeouts). ### Stage 7: Real-World Projects (Putting It All Together) **What you learn:** Building complete, production-grade systems: lead enrichment pipelines, automated file management, content generation systems, enterprise-grade workflows with logging and monitoring. Building a portfolio of automations that demonstrate real capability. **Why it matters:** This is where all the previous stages converge. A real-world project requires you to use triggers, data transformations, API calls, error handling, and possibly AI, all in a single workflow. Building complete projects proves (to yourself and to clients) that you can deliver end-to-end solutions. **You know you've mastered this stage when:** You can take a business requirement ("I need leads from this form enriched with company data and scored by an AI, then routed to the right salesperson in our CRM") and build the complete workflow without following a tutorial. ## The 10 Most Common Beginner Mistakes Every n8n learner makes some version of these mistakes. Knowing about them in advance saves you hours of debugging. ### 1. Skipping Data Flow Fundamentals **The mistake:** Jumping to building workflows without understanding that everything in n8n is JSON items flowing between nodes. You connect nodes and they "kind of work" but you don't understand why, which means you can't fix them when they break. **What to do instead:** Before building anything complex, spend time examining the output of each node. Click on a node's output and look at the JSON. Understand what `$json`, `$input`, and `$node` actually reference. This investment pays back a hundredfold. ### 2. The Webhook .body Gotcha **The mistake:** Setting up a webhook trigger and trying to access incoming data with `{{ $json.email }}` when the data is actually at `{{ $json.body.email }}`. Webhook data is always nested under the `.body` property. This trips up nearly every beginner. **What to do instead:** When using the Webhook node, always check the actual output structure. The incoming POST body is nested under `.body`, query parameters under `.query`, and headers under `.headers`. Use a Set node after your webhook to extract the fields you need into a clean structure. ### 3. Insert When You Should Upsert **The mistake:** Using "Insert" mode for database operations, which creates duplicate records when a workflow runs multiple times with the same data. Your Google Sheet ends up with 47 copies of the same row. **What to do instead:** Use "Upsert" (update or insert) when a unique identifier exists. Define the matching column (like email or ID). n8n will update the existing record if it finds a match, or create a new one if it doesn't. This makes your workflows idempotent, meaning they produce the same result no matter how many times they run. ### 4. The "Hope It Works" Error Strategy **The mistake:** Building workflows with zero error handling. They run fine in testing with clean data and predictable API responses. Then in production, an API goes down, a field is null, or a rate limit hits, and the workflow fails silently. You don't notice for days. **What to do instead:** Add error handling from the start. Use the Error Trigger node to catch workflow-level failures. Add retry logic for API calls. Use the If node to check for null values before processing. Set up notification workflows that alert you when something fails. ### 5. Processing Everything at Once **The mistake:** Your workflow processes 1,000 items through an API that allows 10 requests per second. n8n sends all 1,000 requests simultaneously. The API rate-limits you. Half the items fail. You don't know which half. **What to do instead:** Use the "Batch Size" setting on nodes that make external API calls. Process items in chunks that respect the API's rate limits. Use the Loop Over Items node when you need explicit control over batch processing. Add a Wait node between batches if needed. ### 6. Doing Everything in Code Nodes **The mistake:** Writing JavaScript in the Code node for operations that n8n has dedicated nodes for. Filtering items with code instead of the Filter node. Transforming data with code instead of the Set node. This makes workflows harder to read, harder to debug, and harder for others to maintain. **What to do instead:** Learn the visual nodes first. Use the Set node for data transformation, the If node for conditions, the Filter node for filtering, and the Merge node for combining data. Reserve the Code node for operations that truly can't be done visually (complex calculations, string manipulation, custom logic). A good rule: if a visual node can do it, use the visual node. ### 7. Monolithic 50-Node Workflows **The mistake:** Building one massive workflow that handles everything: triggers, data fetching, transformations, API calls, error handling, notifications, and logging. It's 50+ nodes on a single canvas. Nobody can understand it, including you after two weeks away from it. **What to do instead:** Use sub-workflows to break large automations into modular pieces. Have one workflow for data fetching, another for transformation, another for error notification. The Execute Workflow node lets you call sub-workflows and pass data between them. Each workflow stays readable and testable. ### 8. Jumping Straight to AI Workflows **The mistake:** You heard n8n can build AI agents and you want one immediately. You skip everything else and start connecting AI nodes. When the AI agent doesn't work (wrong tool configuration, context window overflow, no error handling), you don't have the debugging skills to fix it. **What to do instead:** AI workflows use the same foundation as every other n8n workflow: data flow, expressions, error handling, and API calls. Master the basics first. When you get to AI workflows, you'll build them faster and debug them more effectively because you understand the underlying platform. ### 9. Not Testing Edge Cases **The mistake:** You test your workflow with one sample record and it works perfectly. You activate it. The first real execution fails because the API returned a null field, an empty array, or an unexpected error code. You never tested these scenarios. **What to do instead:** Before activating any workflow, test with edge cases: What happens when a field is null? When an array is empty? When an API returns a 429 (rate limit) or 500 (server error)? When the input has special characters? Use n8n's "Pin Data" feature to create test datasets that include these edge cases. ### 10. Copy-Pasting Without Understanding **The mistake:** You find a workflow on the n8n community or in a tutorial and import it. It works. But you don't understand why each node is there or what each expression does. When you need to modify it, or when it breaks, you're back to square one. **What to do instead:** When you import a workflow, spend time reading through it node by node. Click on each node's settings. Read each expression. Understand what data comes in and what goes out. Modify one thing and see what happens. Treat imported workflows as learning tools, not black boxes. ## Free Resources to Get Started You don't need to spend money to learn n8n. Here are the legitimate free resources available in 2026 and what each one is best for. ### The Free 42-Lesson YouTube Course The free 42-lesson YouTube course at @genaiunplugged covers the complete n8n curriculum from installation through AI agent workflows. It's structured in the progression described in the 7 Stages above: foundation first, then nodes and data flow, transformations, advanced techniques, production readiness, AI workflows, and real-world projects. **Best for:** Visual learners who want a structured, progressive path through n8n. Each lesson builds on the previous one, so you develop connected skills rather than isolated tricks. **Limitation:** Videos are great for initial learning but terrible for reference. When you forget the syntax for an expression six weeks later, you can't Ctrl+F a video. You'd have to rewatch the entire lesson to find the 30-second segment you need. ### n8n Official Documentation The official n8n docs are comprehensive and well-maintained. They cover every node, every setting, every expression function. **Best for:** Looking up specific node configurations, expression syntax, or API details. Once you know what you're looking for, the docs will have the answer. **Limitation:** Documentation is organized as a reference, not as a learning path. It tells you what every setting does but doesn't tell you when to use it or why. Reading the docs front-to-back won't teach you how to build workflows any more than reading a dictionary will teach you how to write essays. ### n8n Community Forum The n8n community is active and helpful. If you have a specific question or are stuck on a particular problem, someone has probably asked it before. **Best for:** Troubleshooting specific issues. "Why does my webhook return empty data?" type questions. The community is responsive and technically knowledgeable. **Limitation:** Community answers solve individual problems but don't build systematic knowledge. You solve today's bug but don't learn the pattern that prevents tomorrow's bug. ### n8n Template Library The n8n template library contains hundreds of pre-built workflows you can import with one click. **Best for:** Inspiration. Seeing how experienced builders structure workflows for common use cases. Getting a starting point for your own projects. **Limitation:** Templates show you the finished product without explaining the reasoning. You see that someone used a Set node after a webhook, but not why. You see error handling nodes but not the thought process behind the error strategy. Templates are useful after you understand the fundamentals, not before. ### Combining Free Resources Effectively The most effective free learning path combines these resources: 1. **Watch the structured course** for initial learning (free 42-lesson YouTube course at @genaiunplugged) 2. **Use the official docs** as a reference when you need specific syntax or settings 3. **Ask the community** when you're stuck on a specific problem 4. **Browse templates** for inspiration once you understand the basics This combination covers learning, reference, troubleshooting, and inspiration. Where it falls short is in providing hands-on practice materials and a portable reference you can access offline. ## When YouTube Isn't Enough At some point in your n8n learning journey, you'll hit a wall that free videos alone can't solve. Here's what that wall looks like and why it happens. ### You Can't Ctrl+F a Video You learned expressions three weeks ago. Now you need the syntax for accessing nested JSON properties and you can't remember if it's `{{ $json.data.items[0].name }}` or `{{ $json["data"]["items"][0]["name"] }}`. You know the answer is somewhere in Lesson 12, but you'd have to rewatch the entire 18-minute video to find a 15-second explanation. Written reference material solves this instantly. You open the expressions chapter, search for "nested," and find the answer in seconds. This is why textbooks exist alongside lectures in every university. ### Videos Don't Give You Starting Points When you watch a tutorial, you see someone build a workflow from scratch. When you sit down to build your own, you're staring at an empty canvas. Templates give you a correct starting structure that you customize for your specific use case. Instead of building from zero, you start from a working pattern and modify it. This isn't about laziness. It's about learning from proven patterns rather than reinventing them. Professional developers use boilerplate code and starter templates constantly. It's how mature engineering works. ### You Need Checklists for Repeatable Processes Installing n8n has twelve steps. Setting up error handling has eight considerations. Debugging a failed workflow has a specific sequence of things to check. These are processes you'll do repeatedly, and missing a step causes problems that are hard to diagnose. Checklists turn expert knowledge into repeatable processes. They're the reason pilots use pre-flight checklists even after 10,000 hours of flight time. Some processes are too important to rely on memory. ### Structure Turns Months Into Weeks Self-directed learning works, but it's slow. You spend time figuring out what to learn next, wondering if you're on the right track, and backtracking when you realize you skipped something important. A structured learning path with defined weekly goals compresses the timeline because someone has already mapped out the optimal sequence. ## The n8n Mastery Bundle: Your Companion Resource The [n8n Mastery Bundle](/n8n-mastery-bundle/) exists to fill the gaps that free resources leave open. It's designed as the companion to the free 42-lesson YouTube course at @genaiunplugged, not a replacement for it. ### What's Inside **n8n Full Course eBook (100+ Pages):** 20 chapters covering 42 lessons in the same progression as the YouTube course, but written for reference. Searchable. Bookmark-able. The content you can Ctrl+F when you need to remember how expressions work. **15 Production-Ready Workflow Templates:** JSON files you import directly into n8n. Starter templates for common patterns (welcome emails, webhook handlers, scheduled reports). Production templates with error handling built in (data cleaners, lead enrichment, API integrations). AI templates for modern workflows (email summarizer, content generator, support classifier). Each template represents a proven pattern you customize for your use case. **6 Printable Quick-Reference Checklists:** Installation Checklist, Node Selection Cheat Sheet, Expression Quick Reference, Workflow Debugging Checklist, Error Handling Checklist, and API Integration Checklist. Print them. Pin them next to your monitor. Use them every time you set up a new workflow or debug a broken one. **3 Focused Mini-Guides:** *5 Workflows Every Beginner Should Build* walks you through your first five projects with explanations of why each one matters. *n8n for Content Creators* covers automation patterns specific to content production workflows. *AI + n8n: Your First 3 AI Workflows* bridges the gap between understanding AI concepts and implementing them in n8n. ### The 4-Week Learning Path The bundle includes a structured 4-week plan designed for 5-7 hours per week: - **Week 1 (Foundation):** eBook Chapters 1-5 + Installation Checklist + Welcome Email template - **Week 2 (Core Concepts):** Chapters 6-10 + Expression Quick Reference + Data Cleaner template - **Week 3 (Advanced Patterns):** Chapters 11-15 + Error Handling Checklist + Error Handler template - **Week 4 (AI Workflows):** Chapters 16-20 + AI + n8n Mini-Guide + AI Email Summarizer template Each week pairs reading with hands-on practice. Read the chapter, import the matching template, use the checklist to verify your work. By week 4, you've covered the complete curriculum with reference materials you'll use long after the initial learning phase. ### What It Costs The bundle is $27 one-time. Not a subscription. Not a monthly charge. Buy once, keep forever. That $27 covers: the n8n Full Course eBook ($47 standalone value), 15 workflow templates ($27 standalone value), 6 checklists ($17 standalone value), and 3 mini-guides ($27 standalone value). Total standalone value: $118. There's a 14-day money-back guarantee. If the bundle doesn't improve your n8n skills, email support@genaiunplugged.com and get a full refund. [See everything included in the Mastery Bundle](/n8n-mastery-bundle/) ## Building Your Personal Learning Plan Regardless of which resources you choose, here's a framework for learning n8n effectively. ### Week 1-2: Build the Foundation Don't touch anything complex. Focus entirely on understanding these concepts: - **What a workflow is** and how execution flows from trigger to output - **How data moves between nodes** as JSON items (this is the single most important concept) - **What expressions are** and how to reference data from previous nodes - **The basic node types:** triggers, actions, logic nodes, transformation nodes Build simple workflows: a trigger that sends a notification, a form submission that writes to a spreadsheet, a scheduled workflow that fetches data from an API. Nothing fancy. The goal is to internalize data flow. ### Week 3-4: Master Transformations This is where most people get stuck, so spend real time here: - **Set node** for restructuring data into the format you need - **If node** for conditional logic and branching - **Merge node** for combining data from multiple sources - **Aggregate node** for combining multiple items into one - **Filter node** for removing items that don't match criteria Practice by taking data from one API and transforming it into the format required by another API. This is the most common real-world pattern. ### Week 5-6: Go Advanced With solid transformation skills, advanced topics will make much more sense: - **HTTP Request node** for calling any API - **Webhook node** for receiving external data (remember: data is under `.body`) - **Code node** for operations that visual nodes can't handle - **Sub-workflows** for breaking large automations into reusable modules Build a workflow that receives data via webhook, calls an external API to enrich it, transforms the result, and stores it somewhere. This single project exercises every skill you've learned. ### Week 7-8: Production and AI Now you're ready for the advanced material: - **Error handling** patterns (try/catch, error workflows, retry logic) - **Debugging** techniques (execution logs, pin data, manual testing) - **AI nodes** (LLM chains, AI agents, tool use) - **Performance** optimization for high-volume workflows Build a production-grade workflow with full error handling. Then add an AI component. Deploy it and monitor it for a week. Fix whatever breaks. ### The Non-Negotiable Rule Whatever learning plan you follow, there's one rule that matters more than any other: **build something after every learning session**. Don't just watch or read. Open n8n. Build a workflow. Break it. Fix it. Modify it. The hands-on practice is where learning actually happens. Reading about data flow is useful. Building a workflow where you examine the JSON output of each node and predict what the next node will receive is where understanding crystallizes. ## Start Today The best way to learn n8n is to start today with a structured plan and stick with it. Not next week. Not after you finish that other project. Today. Here's your immediate next step, depending on where you are: **If you've never opened n8n:** Watch Lesson 1 of the free 42-lesson YouTube course at @genaiunplugged. Install n8n. Build your first workflow. Total time: about 30 minutes. **If you've built a few workflows but feel stuck:** Go back to fundamentals. Do you truly understand how data flows between nodes as JSON items? Can you write expressions without looking them up? If not, that's your gap. The 7 Stages framework above will help you identify exactly where to focus. **If you want the full structured path:** The free 42-lesson YouTube course at @genaiunplugged gives you the video curriculum. The [n8n Mastery Bundle](/n8n-mastery-bundle/) adds the reference eBook, hands-on templates, and checklists that turn videos into retained skills. Together, they cover every stage from installation through AI agents. The n8n skills you build this month will compound for years. Every manual process you automate saves time every day it runs. Every workflow pattern you master makes the next one faster to build. The sooner you start with a structured approach, the sooner you stop Googling and start building. ## Frequently Asked Questions ### What is the best way to learn n8n in 2026? Follow a structured path: start with the basics (what n8n is, how data flows), progress through core concepts (nodes, expressions, transformations), then tackle advanced topics (error handling, APIs, sub-workflows) and AI workflows. The GenAI Unplugged free YouTube course provides 42 lessons in this exact progression, and the n8n Mastery Bundle eBook covers the same material in reference form. ### Is there a free n8n course? Yes. GenAI Unplugged offers a free 42-lesson YouTube course covering n8n from installation to AI agent workflows. The n8n Mastery Bundle ($27) is designed as the companion — the eBook covers the same lessons in more depth, plus 15 workflow templates and 6 checklists. ### Do I need coding experience to learn n8n? No. n8n is a visual workflow builder — you connect nodes by dragging and dropping. Basic coding knowledge (variables, loops, conditionals) helps for advanced features like the Code node, but most workflows can be built without writing code. ### How long does it take to learn n8n? With structured learning, expect 2-4 weeks to build confidence with basic workflows and 2-3 months to handle advanced patterns and AI integrations. The Mastery Bundle's 4-week learning path is designed for 5-7 hours per week. ### What's the difference between n8n Cloud and self-hosted n8n? n8n Cloud is a managed service ($20+/month) where n8n handles hosting, updates, and infrastructure. Self-hosted n8n runs on your own server (free if using Oracle Cloud or GCP free tiers). Both run the same n8n software — the learning path is identical regardless of which you choose. ### Is the n8n Mastery Bundle worth $27? The bundle includes a 100+ page eBook, 15 importable workflow templates, 6 printable checklists, and 3 mini-guides. At $27 for $118 worth of standalone materials, it's the most affordable structured n8n resource available. Comes with a 14-day money-back guarantee. ### Can I learn n8n just from YouTube tutorials? You can learn the basics, but random tutorials create knowledge gaps. You might learn to build an AI agent before understanding error handling, or know how to use webhooks but not expressions. A structured course covers topics in the right order so each concept builds on the previous one. --- # n8n Mastery Bundle: Full Course eBook + 15 Workflow Templates + Checklists URL: https://www.genaiunplugged.com/n8n-mastery-bundle/ > Get the n8n eBook (100+ pages, 20 chapters) plus 15 ready-to-use workflow templates and 6 quick-reference checklists to build automations faster. ## Frequently Asked Questions ### What's included in the bundle? Four components: the n8n Full Course eBook (100+ pages, 20 chapters, 42 lessons from beginner to AI agents), 15 production-ready workflow template JSON files, 6 printable quick-reference checklists (PDFs), and 3 focused mini-guides (PDFs). Total standalone value is $118 — bundled for $27. ### Which version of n8n is this compatible with? Templates are tested with n8n v1.x (latest stable). The patterns and concepts apply to any n8n version, though specific node configurations may vary for older versions. Works with both n8n Cloud and self-hosted. ### Do I need n8n Cloud or can I use self-hosted? Both work. The templates are standard n8n workflow JSON files that import into any n8n instance — cloud or self-hosted. ### I'm a beginner. Is this too advanced? The eBook starts with Chapter 1: Installation and progresses through beginner (Chapters 1-5), intermediate (6-10), advanced (11-15), and AI workflows (16-20). If you can open n8n, you're ready to start. ### What are the 15 workflow templates? Welcome Email Automation, Gmail Attachment to Drive, Webhook Form Handler, Scheduled Report Generator, Multi-App Connector, Data Cleaner Pipeline, Error Handling Template, Lead Enrichment System, AI Email Summarizer, AI Content Generator, AI Support Classifier, Social Media Repurposer, Resume Screener, API Integration Template, and Sub-Workflow Library. ### Is there a free YouTube course? Yes. The bundle is designed as the companion to our free 42-lesson YouTube course at @genaiunplugged. The eBook covers the same material in depth, and the templates match the patterns taught in the videos. ### What's the refund policy? 14-day money-back guarantee. If the bundle doesn't improve your n8n skills, email support@genaiunplugged.com for a full refund. --- # Markdown to Branded PDF Automation: The Complete Guide (2026) URL: https://www.genaiunplugged.com/md-to-pdf/markdown-to-branded-pdf-automation.html > Turn Markdown files into professionally branded PDFs automatically. Compare tools (Pandoc, WeasyPrint, Gotenberg), learn the n8n automation workflow, and stop spending hours in Canva. You write everything in Markdown. Your clients want branded PDFs. The gap between those two realities costs you hours every week. You already know Markdown is the fastest way to create structured content. Headings, lists, code blocks, tables -- it all flows naturally from your fingertips. But when a client needs a deliverable, or you need a lead magnet, or you want to ship product documentation, you leave Markdown behind and enter the world of Canva, InDesign, or Google Docs. You paste content. You adjust fonts. You drag boxes. You align things that should already be aligned. And an hour later, you have a single PDF. This guide covers everything you need to build a **markdown to PDF automation** pipeline that eliminates the formatting bottleneck entirely. We will compare every major tool in the space, explain why the n8n + Gotenberg stack produces the best results, and walk through the architecture step by step. By the end, you will understand how to type Markdown and get a professionally **branded PDF from markdown** -- automatically, in seconds, with your exact colors, fonts, logo, and layout. ## The Problem with Manual PDF Creation Let's break down the real time cost of producing a single branded PDF document manually. **The manual workflow time breakdown:** | Step | Task | Time | |------|------|------| | 1 | Write the content (Markdown, Google Doc, text editor) | 10 min | | 2 | Open a design tool (Canva, InDesign, Figma) | 2 min | | 3 | Choose or create a template | 5 min | | 4 | Paste and format all content | 30 min | | 5 | Adjust typography, spacing, page breaks | 15 min | | 6 | Add headers, footers, page numbers, branding | 10 min | | 7 | Review, fix layout issues, re-export | 8 min | | 8 | Export as PDF | 1 min | | **Total** | | **~81 min** | The content takes 10 minutes. The formatting takes 70 minutes. That ratio is absurd. And it gets worse. Every time you produce a new document, you repeat this process. There is no compounding benefit. Document number 50 takes just as long as document number 1 because the formatting is manual, bespoke, and non-reusable in any meaningful way. ### The hidden costs nobody talks about **Inconsistency.** Every document looks slightly different. The heading size varies. The color is close-but-not-quite your brand teal. The margins shift between documents. Your client receives three deliverables that look like they came from three different companies. **Context switching.** You go from a writing tool to a design tool. Different mental model, different interface, different skills. The cognitive overhead is real and it slows you down even more than the clock suggests. **Scaling impossibility.** Need to produce 10 branded PDFs this week? That is 700+ minutes of formatting. Nearly 12 hours. For formatting. Not creating. Not thinking. Not delivering value. Formatting. **Dependency on design tools.** Canva changes its interface every quarter. InDesign requires a $23/month subscription. Google Docs has limited styling. You are dependent on tools that were not built for your use case: converting structured text into branded documents. ### The automated workflow time breakdown Now compare that to a pipeline where Markdown goes in and branded PDFs come out: | Step | Task | Time | |------|------|------| | 1 | Write the content in Markdown | 10 min | | 2 | Save file to input folder (or run a command) | 5 sec | | 3 | Pipeline converts Markdown to HTML, applies CSS, renders PDF | 3 sec | | **Total** | | **~10 min** | Same content. Same quality output. One-seventh of the time. That is the power of **automated PDF generation**. ## Why Markdown Is the Right Starting Point If you are reading an article about markdown to PDF automation, you probably already use Markdown. But it is worth articulating why Markdown is the ideal source format for a PDF pipeline -- not Word, not Google Docs, not HTML. ### Plain text portability Markdown files are plain text. They open in any editor on any platform. They are not locked into a proprietary format. Your content is never trapped. A `.md` file from 2015 opens exactly the same in 2026. Try that with a Canva template from 2015. ### Version control friendly Markdown plays perfectly with Git. Every change is tracked. You can diff two versions of a document and see exactly what changed. Try diffing two Canva files. You cannot. Binary formats are opaque to version control. For agencies and solopreneurs who maintain document libraries, this matters. You know what changed, when, and why. ### Structure is explicit Markdown forces structure. `#` is a heading. `-` is a list item. `>` is a blockquote. There is no ambiguity. No "is this heading bold text or an actual heading?" confusion that plagues Google Docs. This explicit structure is exactly what a PDF rendering engine needs. It can map `##` to a specific font size, color, and spacing rule consistently -- every time, every document. ### Speed of creation You type Markdown faster than you design in Canva. There is no mouse. No clicking. No dragging. You type content, and the structure emerges from the syntax. Writers and developers have known this for years. The entire technical writing industry runs on Markdown and its variants. ### Content-first workflow Markdown separates content from presentation. You write *what* you want to say without worrying about *how* it looks. The styling comes later, applied automatically by your template. This separation is the architectural foundation of every scalable document system. ## Markdown to PDF: The Tool Landscape The ecosystem for converting Markdown to PDF has matured significantly. In 2026, you have real options -- each with meaningful trade-offs. Here is an honest assessment of every major tool. ### Pandoc -- The academic standard [Pandoc](https://pandoc.org) is the Swiss Army knife of document conversion. It converts between dozens of formats, and Markdown-to-PDF is one of its most popular use cases. **How it works:** Markdown --> LaTeX --> PDF (via pdflatex, xelatex, or lualatex) **Installation:** ```bash # macOS brew install pandoc # Ubuntu/Debian sudo apt-get install pandoc # Basic conversion pandoc input.md -o output.pdf ``` **Strengths:** - Handles academic content brilliantly (citations, footnotes, math equations) - Enormous template ecosystem for academic papers - Cross-references and bibliography support via BibTeX - Extremely well-documented and actively maintained **Weaknesses:** - LaTeX intermediate step makes branding difficult - Custom CSS is not natively supported (LaTeX uses its own styling) - Branded headers/footers require deep LaTeX knowledge - Color customization requires LaTeX packages, not CSS - Non-academic templates are rare and hard to customize **Best for:** Academic papers, research documents, technical reports where formatting standards are established (IEEE, ACM, thesis templates). **Not ideal for:** Business documents, client deliverables, lead magnets, or anything that needs to match your brand visually. ### WeasyPrint -- The Python contender [WeasyPrint](https://weasyprint.org) is a Python library that converts HTML+CSS to PDF. Since Markdown easily converts to HTML, the pipeline becomes Markdown --> HTML --> PDF. **How it works:** HTML + CSS --> PDF (via its own rendering engine) **Installation:** ```bash pip install weasyprint # Convert HTML to PDF python -c "import weasyprint; weasyprint.HTML('input.html').write_pdf('output.pdf')" ``` **Strengths:** - CSS-based styling (you know CSS, so you can style PDFs) - Good support for `@media print` CSS - Open-source and free - Actively maintained Python package **Weaknesses:** - CSS support is incomplete -- CSS Grid and some Flexbox properties do not render - Custom fonts require careful configuration - Complex layouts can break unexpectedly - No built-in API server -- you must wrap it yourself - Page headers and footers are limited compared to browser-based renderers **Best for:** Simple, CSS-styled documents where you have Python in your stack and do not need complex layouts. ### Prince XML -- The commercial powerhouse [Prince](https://www.princexml.com) is the gold standard for CSS-to-PDF rendering. If you have seen a beautifully typeset PDF generated from HTML, there is a good chance Prince made it. **How it works:** HTML + CSS --> PDF (via proprietary rendering engine) **Strengths:** - Best CSS support in the industry (CSS Paged Media, CSS Grid, advanced selectors) - Exceptional typography (kerning, ligatures, hyphenation) - Used by major publishers and enterprises - JavaScript support for dynamic content **Weaknesses:** - **$3,800 for a server license.** That is not a typo. - $495 for a desktop license - Proprietary and closed-source - Overkill for most solopreneur and agency use cases **Best for:** Publishing houses, large enterprises, and organizations where PDF quality justifies a multi-thousand dollar license. ### wkhtmltopdf -- The deprecated workhorse [wkhtmltopdf](https://wkhtmltopdf.org) converts HTML to PDF using the WebKit rendering engine. It was the go-to open-source option for years. **How it works:** HTML + CSS --> PDF (via Qt WebKit) **Strengths:** - Free and open-source - Simple command-line interface - Header/footer support **Weaknesses:** - **Officially deprecated.** The project is no longer maintained. - Uses an outdated WebKit engine (no modern CSS support) - Rendering inconsistencies across platforms - No CSS Grid, limited Flexbox, no modern font features - Known security vulnerabilities in the underlying WebKit version **Best for:** Legacy systems that already depend on it. Not recommended for new projects. ### Gotenberg -- The modern standard [Gotenberg](https://gotenberg.dev) is an open-source, Docker-based API for PDF generation. It uses a real Chromium browser for rendering, which means full CSS support -- everything Chrome can render, Gotenberg can turn into a PDF. **How it works:** HTML/Markdown/URL + CSS --> Chromium rendering --> PDF **Installation:** ```bash # Pull and run the Docker image docker run --rm -p 3000:3000 gotenberg/gotenberg:8 # Convert HTML to PDF via API curl --request POST http://localhost:3000/forms/chromium/convert/html \ --form files=@index.html \ --form files=@style.css \ -o output.pdf ``` **Strengths:** - Full Chromium rendering engine -- every CSS feature works - Docker-based -- consistent across all environments - REST API -- automation-friendly by design - Supports HTML, Markdown, URLs, and Office documents - Custom headers, footers, page numbers built in - Open-source and free - Actively maintained with regular releases - Custom fonts via Docker volume mounting - Merge multiple PDFs in a single request **Weaknesses:** - Requires Docker (not an issue if you already use Docker) - Heavier resource usage than lightweight converters (Chromium runs inside) - Local-only by default (you host it yourself) **Best for:** Anyone who needs branded, professionally styled PDFs with full CSS control and wants automation-friendly API access. ### The comparison table | Feature | Pandoc | WeasyPrint | Prince XML | wkhtmltopdf | **Gotenberg** | |---------|--------|------------|------------|-------------|---------------| | **Cost** | Free | Free | $3,800 | Free | **Free** | | **CSS support** | None (LaTeX) | Partial | Excellent | Outdated | **Full (Chrome)** | | **Custom fonts** | LaTeX fonts | Yes (config) | Yes | Limited | **Yes (Docker vol)** | | **Headers/footers** | LaTeX | Limited | Excellent | Yes | **Yes (HTML/CSS)** | | **Page numbers** | LaTeX | CSS counters | CSS counters | Yes | **Yes** | | **API/automation** | CLI only | Python lib | CLI/Java | CLI only | **REST API** | | **Docker support** | Manual | Manual | No | Manual | **Native** | | **Rendering engine** | LaTeX | Custom | Custom | WebKit (old) | **Chromium** | | **Maintained** | Yes | Yes | Yes | **No** | **Yes** | | **Branding ease** | Hard | Medium | Easy | Medium | **Easy** | | **Best for** | Academic | Simple docs | Enterprise | Legacy | **Branded docs** | For **markdown to PDF automation** with branding, Gotenberg is the clear winner. Free, full CSS support, API-driven, Docker-native, and actively maintained. It is the foundation of the automated pipeline we will build. ## Why Gotenberg Wins for Branded PDFs Let's go deeper into why Gotenberg specifically solves the branded PDF problem better than any other tool. ### Chrome rendering equals pixel-perfect CSS Gotenberg uses Chromium -- the same rendering engine that powers Google Chrome and Microsoft Edge. This is not an approximation of browser rendering. It *is* browser rendering. That means every CSS property you use on the web works in your PDF. Flexbox layouts? Yes. CSS Grid? Yes. Custom fonts via `@font-face`? Yes. `box-shadow`, `border-radius`, gradients, pseudo-elements? All of it. If you can see it in Chrome DevTools, it will appear in your PDF. This eliminates the single biggest frustration with other PDF tools: "Why doesn't my CSS render correctly?" ### Docker means zero environment headaches Gotenberg ships as a Docker image. One command starts it: ```bash docker run --rm -p 3000:3000 gotenberg/gotenberg:8 ``` No Python version conflicts. No LaTeX distribution to install. No system dependencies to manage. If Docker runs, Gotenberg runs. The same image produces the same output on macOS, Linux, and Windows. For teams, this means every developer and every CI/CD pipeline produces identical PDFs. No more "it looks different on my machine." ### API-first design enables automation Gotenberg is a REST API. It does not have a GUI. It does not have a CLI that you run manually. It listens for HTTP requests and returns PDFs. This design makes it inherently automation-friendly. Any tool that can make an HTTP request can generate a PDF. That includes: - n8n (visual workflow automation) - Shell scripts (`curl`) - Python scripts (`requests` library) - Node.js applications (`fetch` or `axios`) - CI/CD pipelines (GitHub Actions, GitLab CI) You are not locked into any specific orchestration tool. Gotenberg is the rendering layer; your automation layer is your choice. ### Built-in header, footer, and page number support Gotenberg supports custom HTML headers and footers on every page. These are separate HTML files that you include in the API request. They can contain: - Your company logo - Document title - Page numbers (via Chromium's built-in `pageNumber` and `totalPages` classes) - Date stamps - Any HTML/CSS content you want ```html
GenAI Unplugged
Page of
``` This is dramatically easier than configuring headers in LaTeX or wrestling with the limited options in WeasyPrint. ## The n8n + Gotenberg Stack Explained Now we get to the core of this guide: the **n8n PDF workflow** architecture that turns the Gotenberg rendering engine into a fully automated pipeline. ### What is n8n? [n8n](https://n8n.io) (pronounced "n-eight-n") is an open-source workflow automation platform. Think Zapier or Make.com, but self-hosted and with far more power. You build workflows visually by connecting nodes -- each node is a step that reads data, transforms it, or sends it somewhere. n8n is relevant to PDF automation because it provides: - **File system triggers** -- watch a folder for new files - **HTTP request nodes** -- send data to Gotenberg's API - **Code nodes** -- transform Markdown to HTML with your brand CSS - **File write nodes** -- save the output PDF - **Loop handling** -- process batches of files automatically ### Architecture overview At its core, the **n8n PDF workflow** follows a straightforward data flow: receive Markdown input, parse and validate it, convert to styled HTML with your brand CSS, send to Gotenberg for PDF rendering, and return the result. The complexity is in the details. A production workflow needs input validation (what if someone sends malformed Markdown?), brand default merging (what if some brand fields aren't specified?), post-processing for special elements (callout boxes, long code blocks, nested tables), and proper binary encoding for the Gotenberg API. A basic 5-node workflow gets you a minimal version. A production workflow needs 9+ nodes with proper error handling at each step. ### Why n8n and not just a shell script? You could build a basic version as a bash script with `pandoc` and `curl`. It would work for simple documents. But n8n gives you: - **Visual debugging** -- see exactly where a conversion failed and why - **Error handling** -- retry failed conversions, send alerts - **Webhook API** -- trigger from any application, not just the command line - **Logging** -- execution history for every PDF generated - **No terminal required** -- anyone on your team can trigger a conversion from a browser - **Batch processing** -- handle multiple files with proper queuing For a solopreneur who generates one PDF occasionally, a shell script is fine. For anyone producing documents at scale, working with a team, or wanting API-triggered generation, an n8n workflow is the right choice. ## Building the Pipeline: What's Actually Involved Setting up a **Gotenberg markdown** to branded PDF pipeline requires assembling several components. Here is what the architecture looks like at a high level -- and why it takes 4-8 hours to build from scratch. ### The four layers you need to build **1. Docker Infrastructure** Gotenberg runs as a Docker service. You need Docker installed, a `docker-compose.yml` that configures both Gotenberg and n8n with proper networking (so they can communicate), and persistent storage so your data survives container restarts. **2. CSS Brand Templates** This is the most time-consuming part. A professional PDF template requires CSS `@page` rules for page sizing and margins, `@media print` styles for print-specific behavior, custom font loading via Google Fonts, header and footer layouts with page numbering, page break controls so headings don't orphan at page bottoms, and distinct styling for every element (headings, tables, code blocks, callout boxes, blockquotes, lists). A production-quality template is 200-400 lines of CSS per template type. For four templates (eBook, User Guide, Cheatsheet, README), that's 800-1,600 lines of carefully tested CSS. Each template has different layout rules -- an eBook needs chapter page breaks, a Cheatsheet needs multi-column landscape layout, a User Guide needs numbered step callouts. **3. n8n Workflow** The workflow needs to handle the full pipeline: receiving Markdown input, validating the request, parsing Markdown to semantic HTML (not just basic conversion -- proper handling of tables, code blocks, images, callout syntax like `[!NOTE]` and `[!WARNING]`), injecting your brand CSS, sending the styled HTML to Gotenberg's Chromium rendering API, and returning the PDF. A basic 5-node workflow gets you a minimal version. A production workflow needs input validation, brand default merging, post-processing for special elements, error handling, and proper binary encoding for the Gotenberg API. **4. Claude Code Integration (Optional)** A `/pdf` command that reads a Markdown file, auto-detects the appropriate template, extracts metadata from YAML frontmatter, and calls the webhook -- letting you generate PDFs without opening a browser or the n8n UI. ### Why this takes 4-8 hours from scratch The individual pieces are not complex. What takes time is: - **CSS trial-and-error**: Gotenberg's Chromium engine renders CSS slightly differently than a browser. Page breaks, font loading, and margin calculations require testing with real documents. - **Markdown edge cases**: Basic Markdown-to-HTML conversion is easy. Handling tables nested inside lists, code blocks with special characters, callout box syntax, and long code blocks that need special overflow handling is where the complexity lives. - **Template switching**: Supporting multiple templates from a single workflow means building template detection logic, per-template CSS loading, and template-specific layout rules (landscape for cheatsheets, portrait for everything else). - **Brand customization**: Making colors, fonts, and logos configurable via API parameters instead of hardcoded in CSS requires an additional abstraction layer. The [Markdown-to-Branded PDF Pro](/md-to-pdf/) product includes all of this pre-built: a 9-node production workflow, four professional CSS templates, a Docker stack, and a Claude Code skill. Import the workflow JSON, start Docker, and generate your first PDF in 15 minutes instead of 8 hours. ## CSS Templating for PDFs: Why It's Harder Than You Think CSS print styling is an underappreciated skill. Most web developers have never written a `@page` rule. Here is what separates a quick hack from a professional **branded PDF from markdown** template. ### The CSS Paged Media landscape PDF generation via Chromium uses CSS Paged Media -- a set of CSS specifications designed for print output. The key concepts you need to understand: - **`@page` rules** control physical page dimensions, margins, and content areas. You can target the first page, left-hand pages, and right-hand pages separately -- critical for book-style layouts. - **Page break controls** determine where content splits between pages. Without these, headings orphan at page bottoms, tables split mid-row, and code blocks break mid-line. - **CSS counters** enable page numbering, but support varies by renderer. Gotenberg's Chromium engine has its own approach for headers and footers that's more reliable than pure CSS counters. - **`@media print`** overrides let you style elements differently for print vs screen -- hiding navigation, adjusting font sizes, and controlling background colors. ### The complexity most people underestimate Building a single basic CSS template is straightforward. Building four professional templates that handle real-world documents is where the time disappears: - **Font loading**: Google Fonts need to load before rendering. If the PDF generates before fonts arrive, you get system font fallbacks. The rendering engine needs a configured wait delay. - **Table rendering**: Tables need proper cell padding, alternating row colors, header styling, and -- critically -- they cannot break mid-row across pages. - **Code blocks**: Long code blocks need overflow handling, syntax-appropriate styling, and special treatment when they exceed 40+ lines. - **Callout boxes**: Styled blockquote variants (`[!NOTE]`, `[!WARNING]`, `[!TIP]`) need distinct colors and layouts that survive page breaks. - **Cover pages**: Each template type needs a different cover design -- gradient covers for eBooks, badge-style metadata for READMEs, full-width headers for Cheatsheets. - **Cross-engine rendering**: Gotenberg's Chromium engine renders CSS slightly differently than Chrome or Safari. Margin calculations, font metrics, and page break triggers all require testing with real documents. A production-quality template is 200-400 lines of CSS. For four templates, that is 800-1,600 lines of carefully tested CSS handling every edge case. This is the most time-consuming part of building a markdown-to-PDF pipeline from scratch. ### Brand customization architecture The real challenge is not styling a single document. It is building a system where brand changes propagate to every template automatically. This requires centralized color variables, dynamic font configuration via Google Fonts, header/footer templates with logo placement and page numbers, and per-template overrides for layout-specific elements. The [PDF Pro product](/md-to-pdf/) solves this with four pre-built brand presets (Modern Tech, Warm Creative, Corporate Blue, Bold Startup) plus full customization via six color controls and 1,500+ Google Fonts -- all configurable through the API payload without editing CSS files. ## The 4 Template Types Not every document needs the same layout. A 50-page ebook has different requirements than a one-page cheatsheet. The [Markdown-to-Branded PDF Pro](/md-to-pdf/) system includes four templates, each designed for a specific use case. ### eBook template **Use when:** You are creating a long-form document -- a lead magnet, digital product, guide, or course material that spans 10+ pages. **Design characteristics:** - Cover page with title, subtitle, and author - Auto-generated table of contents - Chapter headings that start on new pages - Page numbers in footer - Branded header with logo on every page - Wide margins for comfortable reading - Pull quotes and callout boxes - Print-optimized typography (larger line height, serif body text optional) **Ideal for:** Lead magnets, digital products, training manuals, project proposals, annual reports. ### User Guide template **Use when:** You are creating technical documentation with step-by-step instructions, screenshots, and code examples. **Design characteristics:** - Numbered step callouts with colored backgrounds - Code blocks with syntax highlighting - Warning/info/tip callout boxes (styled `blockquote` variants) - Two-column layouts for side-by-side comparisons - Compact typography for information density - Cross-reference friendly structure **Ideal for:** Product documentation, onboarding guides, API references, standard operating procedures, tutorial handbooks. ### Cheatsheet template **Use when:** You need to pack maximum information into one or two pages. Quick-reference material that someone prints and pins next to their monitor. **Design characteristics:** - Multi-column layout (two or three columns) - Compact font size (8-9pt body) - Color-coded sections with distinct background shades - Minimal margins - Dense table formatting - No wasted space -- every pixel earns its place **Ideal for:** Command references, keyboard shortcut guides, syntax cheatsheets, comparison cards, quick-start cards. ### README template **Use when:** You are producing project documentation, technical specs, or open-source style documentation. **Design characteristics:** - Clean, GitHub-inspired styling - Prominent code blocks with line numbers - Badge-style metadata (version, status, license) - Monospace-heavy design - Table of contents with anchor links - Neutral color palette with accent highlights **Ideal for:** Project READMEs, technical specifications, architecture documents, integration guides. ### Choosing the right template | Document Type | Recommended Template | |---------------|---------------------| | Lead magnet / ebook | eBook | | Client deliverable (report) | eBook | | Product documentation | User Guide | | Onboarding guide | User Guide | | Quick reference card | Cheatsheet | | Keyboard shortcuts | Cheatsheet | | GitHub README (printable) | README | | Architecture doc | README | | Proposal / pitch deck (text-heavy) | eBook | | SOP / process document | User Guide | ## Batch Processing and Automation Single-file conversion is useful. Batch processing is where automated PDF generation becomes transformational. ### Folder-based batch processing The n8n workflow handles batches natively. The folder trigger fires for every new file in the input directory. Drop 50 Markdown files into the input folder, and 50 branded PDFs appear in the output folder. Processing happens sequentially -- one file at a time -- to avoid overloading Gotenberg. For a typical document (5-15 pages), conversion takes 2-5 seconds. A batch of 50 files completes in under 4 minutes. ### Scheduled generation n8n supports cron-based scheduling. Configure the workflow to run at specific times: - **Daily at 6 AM:** Process any Markdown files added to the input folder overnight - **Every Friday at 5 PM:** Generate weekly report PDFs - **First of the month:** Produce monthly analytics documents ### Integration with content pipelines The PDF automation pipeline does not exist in isolation. It connects to your broader content workflow: - **Blog-to-PDF:** Convert published blog posts to downloadable PDF guides - **Newsletter-to-PDF:** Turn Substack issues into branded PDFs for your archive - **Documentation-on-deploy:** Generate updated product docs every time your code deploys - **Client reporting:** Pull data from a spreadsheet, generate Markdown via template, convert to branded PDF The key insight is that Markdown is the interchange format. Anything that can produce Markdown can feed the PDF pipeline. An AI can write the Markdown. A database query can populate a Markdown template. A CMS can export Markdown. The pipeline does not care where the Markdown comes from -- it converts and brands it all the same. ### Naming conventions and output organization When batch processing, organize your output: ``` output/ ├── ebooks/ │ ├── automation-guide-2026.pdf │ └── client-onboarding-manual.pdf ├── cheatsheets/ │ ├── n8n-node-reference.pdf │ └── docker-commands.pdf ├── reports/ │ ├── q1-2026-report.pdf │ └── weekly-metrics-2026-02-14.pdf └── guides/ ├── api-documentation-v2.pdf └── setup-instructions.pdf ``` The n8n workflow can route output to different folders based on the template type or a frontmatter field in the Markdown file. Add a `template: cheatsheet` line to your Markdown frontmatter, and the workflow saves the PDF to the cheatsheets folder. ## Real-World Use Cases Here is how solopreneurs, agencies, and small teams use **markdown to PDF automation** in practice. ### Client deliverables **The scenario:** You run a consulting practice. Every engagement ends with a deliverable -- a strategy document, audit report, or implementation guide. Each one needs your branding. **Without automation:** Write in Google Docs, paste into Canva, spend 45 minutes formatting, export PDF. Repeat for every client. **With automation:** Write the deliverable in Markdown in your preferred editor (VS Code, Obsidian, Typora). Save to the input folder. Branded PDF appears in seconds. Attach to client email. Move on. **Time saved per deliverable:** 40-60 minutes. ### Lead magnets **The scenario:** You create a 15-page guide as a lead magnet for your email list. You need it to look professional -- it represents your brand. **Without automation:** Design every page in Canva. Adjust layouts when content changes. Re-export for every revision. **With automation:** Write the guide in Markdown. Convert to PDF with the eBook template. When you need to update a section, edit the Markdown and regenerate. Total time for updates: 30 seconds instead of 30 minutes. ### Product documentation **The scenario:** You sell a digital product (a workflow, template, or tool). It needs documentation -- setup instructions, usage guides, troubleshooting. **Without automation:** Maintain a Google Doc. Copy-paste it into a PDF when the product updates. Formatting breaks every time. **With automation:** Documentation lives in Markdown files alongside your product code. When you release a new version, the pipeline regenerates all PDFs. Documentation is always current, always branded, and always consistent. ### Internal reports **The scenario:** Your team produces weekly metrics reports, project updates, or meeting summaries. **Without automation:** Someone manually formats a Google Doc or Notion page into a PDF every week. **With automation:** A template Markdown file gets populated with data (manually or via a script), saved to the input folder, and a branded PDF report is generated. Consistent format, consistent branding, zero formatting time. ### Course materials **The scenario:** You teach an online course. Each module needs a companion PDF -- a lesson summary, exercise sheet, or reference guide. **Without automation:** Design each PDF individually. When you update lesson content, redesign the PDF. **With automation:** Course content is written in Markdown. Every lesson has a `.md` file. Run the batch processor and every lesson gets a branded PDF companion. Update a lesson? Edit the Markdown, regenerate, done. At [GenAI Unplugged](https://www.genaiunplugged.com), this is exactly how we handle documentation and guides -- Markdown in, branded PDFs out, with zero time spent in design tools. ## The ROI of PDF Automation Let's make this concrete with numbers. ### Time saved per document | Task | Manual | Automated | Savings | |------|--------|-----------|---------| | Write content | 10 min | 10 min | 0 min | | Format and design | 50 min | 0 min | 50 min | | Add branding elements | 10 min | 0 min | 10 min | | Export | 1 min | 5 sec | ~1 min | | **Total per document** | **71 min** | **10 min** | **61 min** | ### Monthly and annual impact | Documents/Month | Manual Hours | Automated Hours | Monthly Savings | Annual Savings | |-----------------|-------------|-----------------|-----------------|----------------| | 2 | 2.4 hrs | 0.3 hrs | 2.1 hrs | 25 hrs | | 4 | 4.7 hrs | 0.7 hrs | 4.0 hrs | 48 hrs | | 8 | 9.5 hrs | 1.3 hrs | 8.2 hrs | 98 hrs | | 12 | 14.2 hrs | 2.0 hrs | 12.2 hrs | 146 hrs | | 20 | 23.7 hrs | 3.3 hrs | 20.4 hrs | 245 hrs | At 4 documents per month -- a modest number for any active solopreneur or agency -- you reclaim **48 hours per year**. That is more than a full work week. At 12 documents per month -- realistic for an agency producing client reports, proposals, and documentation -- the savings reach **146 hours per year**. That is nearly a full month of work time. ### Dollar value If your time is worth $100/hour (a conservative rate for consultants and agency owners), the annual savings look like this: | Documents/Month | Annual Hours Saved | Dollar Value | |-----------------|-------------------|--------------| | 4 | 48 hrs | $4,800 | | 8 | 98 hrs | $9,800 | | 12 | 146 hrs | $14,600 | | 20 | 245 hrs | $24,500 | A $79 tool that saves $4,800/year at minimum volume is a 60x return. That is not marketing math. That is the actual time you stop spending on formatting. ### The compound benefit The ROI calculation above only accounts for direct time savings. It ignores: - **Consistency value** -- Every document matches your brand, which builds trust - **Revision speed** -- Updating a document takes seconds, not 30 minutes of reformatting - **Scaling capacity** -- You can produce 10x more documents without 10x more time - **Team enablement** -- Anyone who writes Markdown can produce branded PDFs (no design skills required) - **Content repurposing** -- Blog post to lead magnet? Change the template, regenerate, done ## Common Concerns Addressed ### "I don't know Docker" Docker Desktop has a GUI. Install it, open it, run one command. Gotenberg starts. You do not need to understand containers, volumes, or networking for this use case. The `docker compose up -d` command is all you need. If you are already running n8n self-hosted (common among GenAI Unplugged readers), Docker is already on your machine. Adding Gotenberg to your `docker-compose.yml` is two lines. ### "CSS is hard" For PDF templates, you need basic CSS: colors, fonts, margins, padding, borders. You are not building a responsive web application. A PDF template is a fixed-width, single-column layout with consistent styling. It is the simplest CSS you will ever write. And if you want to skip CSS entirely, the [PDF Pro product](/md-to-pdf/) includes four pre-built templates you can use immediately and customize later. ### "What about images?" Gotenberg supports images in HTML. Reference images as base64-encoded data URIs or as file paths relative to the HTML file. The n8n workflow can handle image embedding as part of the Markdown-to-HTML conversion. ### "What about tables?" Markdown tables convert to HTML tables, which Gotenberg renders with full CSS styling. The example CSS earlier in this article includes styled tables with alternating row colors and branded headers. Complex tables with merged cells may require HTML directly in your Markdown (which Markdown supports natively). ### "What about math equations?" If you need LaTeX-style math, you can include MathJax or KaTeX in your HTML template. Chromium renders them correctly, and Gotenberg captures the result. This gives you the math support of Pandoc with the branding control of Gotenberg. ## Getting Started You have two paths from here. ### Path 1: Build it yourself The underlying tools are open-source: Gotenberg, n8n, Docker. You can assemble your own pipeline from these components. Expect 8-15 hours of work: configuring the Docker stack, writing and testing CSS templates for each document type, building the n8n workflow with proper Markdown parsing and edge case handling, and iterating on the rendering until it handles real documents reliably. ### Path 2: Use the pre-built system The [Markdown-to-Branded PDF Pro](/md-to-pdf/) product from GenAI Unplugged includes everything pre-built: - **4 professional CSS templates** (eBook, User Guide, Cheatsheet, README) - **n8n workflow JSON** (import and run -- no building from scratch) - **Gotenberg Docker setup** (docker-compose.yml configured and ready) - **Claude Code skill** (generate PDFs from your terminal) - **Brand customization guide** (change colors, fonts, logo in minutes) - **Batch processing** built in One-time purchase. No subscription. No recurring fees. The stack runs on your machine. Either path ends at the same place: you write Markdown, and branded PDFs appear. The only question is whether you want to spend 4-8 hours building the pipeline or 10 minutes importing it. ## Conclusion The gap between "I write in Markdown" and "my client needs a branded PDF" does not require a design tool. It requires a pipeline. **Markdown to PDF automation** is not a convenience -- it is a structural improvement to how you produce documents. It eliminates the formatting bottleneck, enforces brand consistency, enables batch processing, and compounds in value with every document you produce. The stack is straightforward: Markdown for content. Gotenberg for rendering. CSS for branding. n8n for automation. Write content. Get branded PDFs. Stop formatting manually. --- *Ready to eliminate the formatting bottleneck? [Get Markdown-to-Branded PDF Pro](/md-to-pdf/) -- 4 templates, n8n workflow, Gotenberg stack, and Claude Code skill included. One-time purchase, $79.* ## Frequently Asked Questions ### What's the best tool for converting Markdown to PDF? It depends on your needs. For simple conversion, Pandoc works well. For branded, styled PDFs with full CSS control, Gotenberg (via Docker) produces the best results. For automation at scale, an n8n workflow with Gotenberg handles the entire pipeline via webhook — send Markdown in, get a branded PDF back. ### Can I add my brand colors and logo to Markdown-generated PDFs? Yes, with the right tool. Gotenberg converts Markdown to HTML first, then applies CSS styling before generating the PDF. This means you have full control over colors, fonts, logos, headers, footers, and page layouts — just like styling a web page. ### What is Gotenberg? Gotenberg is an open-source, Docker-based API for PDF generation. It converts HTML, Markdown, Office documents, and URLs to PDF. It supports custom CSS, headers/footers, page numbering, and runs as a local service — no cloud dependencies or API limits. ### Do I need coding skills to automate PDF generation? Not with the n8n workflow approach. n8n is a visual automation tool — you connect nodes by dragging lines. The Markdown-to-Branded PDF Pro product includes a pre-built workflow you import into n8n. No coding required. ### How does the n8n PDF workflow work? The 9-node n8n workflow receives Markdown via a webhook POST request. It validates input, merges brand defaults, parses Markdown to semantic HTML5, post-processes callouts and tables, builds styled HTML with your brand CSS, converts to binary, sends to Gotenberg for Chromium PDF rendering, and returns the PDF. The whole process takes seconds. ### Can I batch-process multiple Markdown files at once? Yes. The n8n workflow handles batches natively. Drop 50 Markdown files in the input folder, and 50 branded PDFs appear in the output folder. Processing happens sequentially to avoid overloading Gotenberg. ### What's the difference between Pandoc and Gotenberg for PDF generation? Pandoc converts Markdown to PDF via LaTeX — great for academic papers, poor for branded business documents. Gotenberg converts via HTML+CSS — giving you full web-style design control including custom fonts, colors, layouts, and responsive elements. For branded documents, Gotenberg wins. --- # Markdown-to-Branded PDF Pro — Professional PDFs from Markdown in Seconds URL: https://www.genaiunplugged.com/md-to-pdf/ > Turn Markdown files into branded PDFs with 4 templates, a 9-node n8n workflow, and the Claude Code /pdf skill, no design skills needed. ## Frequently Asked Questions ### What templates are included? Four templates: Ebook (long-form with chapters, table of contents, gradient cover, and page breaks at H2 headings), User Guide (numbered sections with auto-incrementing badges and callout boxes), Cheatsheet (two-column landscape layout with color-coded sections), and Readme (clean single-column with badge-style metadata row). ### How does the 9-node workflow work? Webhook receives your request → validates input and merges brand defaults → parses Markdown to semantic HTML5 → post-processes callouts ([!NOTE], [!WARNING]) and tables → builds complete styled HTML with your brand CSS → converts to binary → sends to Gotenberg for Chromium PDF rendering → returns the PDF file. ### Do I need Docker? Yes, for the Gotenberg PDF rendering engine and n8n. The included docker-compose.yml starts both services with one command: docker compose up -d. Docker Desktop (free for personal use) or any Docker-compatible environment works. ### Can I customize the design? Yes. Six primary color and font controls, full Google Fonts integration (1,500+ fonts), per-template styling, and 4 pre-built brand presets. All customization is done through the JSON payload — change your brand once, every PDF follows. ### Does it work with any Markdown? Yes. Standard Markdown syntax, GitHub Flavored Markdown, and common extensions (tables, code blocks, blockquotes, images, links) are all supported. The parser also handles callout syntax ([!NOTE], [!WARNING], [!TIP], [!IMPORTANT]). ### Can I use this without n8n? Yes. The Claude Code /pdf skill generates PDFs independently by calling the webhook endpoint directly. You can also call the Gotenberg API directly via curl or any HTTP client. ### How long does setup take? 15-20 minutes. Install Docker, run docker compose up -d, import the workflow JSON into n8n, and you're ready to generate PDFs. ### What's the refund policy? 14-day money-back guarantee. If the system doesn't meet your needs, email support@genaiunplugged.com for a full refund. --- # AI Courses: From First Prompt to Production Systems URL: https://www.genaiunplugged.com/courses/ > 9 free and premium courses covering no-code AI automation, prompt engineering, Claude Code, and n8n, from first prompt to production systems. ## Frequently Asked Questions ### Are these courses really free? Yes! Seven courses are completely free: Prompt Engineering, n8n AI Automation (42 video lessons on YouTube), Claude Cowork + Projects, Claude Code Masterclass, MCP Masterclass, OpenClaw for Solopreneurs, and PubFlow OS Agents. Two premium courses cover advanced topics: From Demo to Dependable and Build Your Content OS. ### Which course should I start with? New to AI? Start with Prompt Engineering - it's the foundation everything else builds on. Want visual automation? Try n8n Full Course. Want AI assistants? Claude Cowork + Projects. Want to build apps without coding? Claude Code Masterclass. See our AI Learning Roadmap for the recommended path. ### Do I need coding experience? No! n8n, Claude Projects, and Claude Code are designed for non-developers. Even the MCP course starts with zero-code concepts. Advanced lessons are optional. ### How do I get support? Join my Substack community where I answer questions and share tips. Premium subscribers get priority support. --- # Content OS Agents Toolkit — 5 AI Research Agents for Claude Code URL: https://www.genaiunplugged.com/content-os-agents/ > Replace 45 minutes of manual research across browser tabs with a 90 second Claude Code command using 5 AI research agents. ## Frequently Asked Questions ### What is Claude Code? Claude Code is Anthropic's official CLI tool for working with Claude AI directly in your terminal. It supports slash commands, custom agents, and project-level AI assistance. You need a Claude Pro, Max, Teams, or Enterprise subscription (or Console account with API credits) to use it. ### Do I need coding skills? No. The agents are pre-configured slash commands. You type a command like /research 'AI automation' and the agent runs. If you can use a terminal, you can use these agents. ### What agents are included? Five agents: Content Researcher, SEO/AEO Researcher, Competitive Analyzer, Technical Verifier, and Content Gap Analyzer. Each is specialized for a specific research task with its own slash command. ### What API keys do I need? Claude Code (included with your subscription), Perplexity API (free tier available, $5/month for subscribers), and Firecrawl API (free tier with 500 pages). Total additional cost: $0-5/month. ### Can I customize the agents? Yes. The toolkit includes 5 detailed customization guides — one per agent. Each agent is a readable prompt file you can modify. Plus 3 customizable templates for business context, content strategy, and competitor watchlist. ### How much does each research run cost? Typically $0.10-0.50 per run. All agents include built-in cost optimization — max 2-3 batched API calls per run, concise response limits, and free tools used before paid APIs. ### What's the refund policy? 14-day money-back guarantee. If the agents don't save you time, email support@genaiunplugged.com for a full refund. --- # AI Research Agents for Claude Code: The Complete Guide (2026) URL: https://www.genaiunplugged.com/content-os-agents/ai-research-agents-for-claude-code.html > Learn how AI research agents in Claude Code replace 45 minutes of manual research with 90-second slash commands. Complete guide with 5 agent types explained. You know the routine. You sit down to write an article. Before a single word hits the page, you open Google. Then a second tab. Then a third. You're checking competitor articles, pulling statistics, scanning Reddit threads, verifying claims, and hunting for angles no one else has covered. Ten tabs later, 45 minutes have passed, and you haven't written a sentence. Now picture this: you open your terminal, type `/research AI content automation`, wait 90 seconds, and get a structured brief with key facts, statistics, expert viewpoints, content angles, and source links. No tabs. No context switching. No wasted creative energy. That's what AI research agents do inside Claude Code. And this guide covers everything you need to know about them — what they are, how they work, when to use them, and where they fall short. ## What Are AI Research Agents? An AI research agent is a specialized program that handles one specific research task and does it well. It's not a chatbot. It's not a general-purpose assistant. It's a focused tool that takes an input (a topic, a keyword, a draft) and produces a structured research output. Think of it like hiring five different research specialists instead of one generalist intern: - One specialist finds comprehensive topic information - One analyzes search intent, keywords, and AI answer engine optimization - One verifies technical accuracy against official documentation - One analyzes content coverage to find opportunity gaps - One tracks competitor content, pricing, and positioning Each specialist does exactly one thing. They don't overlap. They don't get confused about their role. And because they're pre-configured with optimized prompts and clear output formats, they produce consistent results every time you use them. ### Why "Agent" and Not Just "Prompt" A prompt is a one-off instruction you type into an AI. You write it from scratch, you get a response, and the quality depends entirely on how well you phrased the instruction that day. An agent is different in three ways: 1. **Persistent configuration** — The system prompt, output format, and behavioral rules are pre-defined. You don't have to think about prompt structure. 2. **Tool access** — In Claude Code, agents can read files from your project, access your content calendar, and reference previous research. A bare prompt has no context beyond what you type. 3. **Composability** — You can chain agents. Run the Content Researcher, feed its output to the SEO/AEO Researcher, then pass both to the Technical Verifier. A prompt chain requires you to manually copy-paste between conversations. The practical difference: a prompt gives you a response. An agent gives you a workflow. ### How Agents Run in Claude Code Claude Code is Anthropic's CLI tool. It runs in your terminal, has access to your local file system, and supports custom slash commands. When you install a research agent, it becomes a slash command like `/research` or `/seo-research` that you invoke just like any built-in command. Here's what happens when you type `/research content marketing for solopreneurs`: 1. Claude Code loads the agent's system prompt (its specialized instructions) 2. It reads your project context (CLAUDE.md, existing content, brand voice guidelines) 3. It executes the research task using the optimized prompt 4. It returns a structured markdown brief with sections, sources, and actionable data 5. The output lands in your terminal or writes directly to a file in your project No browser. No copy-paste. No switching between tools. ## Why Claude Code (Not ChatGPT)? This is the question everyone asks. If AI can do research, why does the tool matter? Why not just use ChatGPT, Gemini, or Perplexity? The answer is not about which AI model is "smarter." It's about the environment the model operates in. ### The ChatGPT Research Workflow Here's what research looks like in ChatGPT: 1. Open browser tab for ChatGPT 2. Think about what to ask (prompt engineering from scratch) 3. Type your prompt 4. Read the response 5. Realize you need more detail — ask a follow-up 6. Copy the response 7. Open your writing tool 8. Paste the research 9. Realize you forgot to ask about competitor analysis 10. Switch back to ChatGPT 11. Ask another question 12. Copy-paste again Every session starts cold. ChatGPT doesn't know your brand voice, your existing content, your target audience, or your content calendar. You provide all that context manually, every time. ### The Claude Code Research Workflow Now compare: 1. Open terminal (already open if you're a developer or content creator using Claude Code) 2. Type `/research AI content automation` 3. Get structured brief in 90 seconds 4. Start writing That's it. Claude Code already knows your project. It reads your CLAUDE.md file, your existing articles, your brand guidelines. The research agent inherits all of that context automatically. ### Five Specific Advantages **1. File System Access** Claude Code can read and write files. When a research agent generates a brief, it can save it as `research/ai-content-automation.md` in your project. Next time you need that research, it's there — no hunting through chat history. **2. Project Context** Your CLAUDE.md file tells Claude Code your brand voice, your audience, your content strategy, and your product information. Every agent response is filtered through that context. ChatGPT doesn't know any of this unless you paste it every session. **3. Slash Commands** Slash commands are repeatable. `/research`, `/seo-research`, `/verify` — the same command with the same quality every time. No re-engineering prompts. No "Let me try phrasing this differently." **4. Structured Outputs** Research agents produce consistent output formats. Headers, bullet points, source links, action items — every brief follows the same structure. ChatGPT's output format varies with every response unless you painstakingly specify the format in your prompt. **5. Composability** Run `/research` then `/seo-research` then `/competitive-check` in sequence. Each agent can reference the output of the previous one because they share the same conversation context. In ChatGPT, you'd need to copy output from one chat and paste it into another — or cram everything into one bloated conversation. ### Feature Comparison Table | Feature | ChatGPT | Claude Code + Agents | |---------|---------|---------------------| | Project context | Manual (paste each time) | Automatic (reads project files) | | Consistent output format | Varies per response | Structured templates | | File system access | None | Full read/write | | Repeatable commands | No (retype prompts) | Yes (slash commands) | | Agent chaining | Manual copy-paste | Native within session | | Brand voice awareness | Manual context | Reads CLAUDE.md | | Output persistence | Chat history only | Saved to project files | | Offline work | No | Local file access | This isn't about one AI being "better" than another. It's about the right tool for the job. For one-off questions, ChatGPT is fine. For repeatable, structured, context-aware content research, Claude Code with specialized agents is a fundamentally different experience. ## The 5 Agent Types Explained The [Content OS Agents Toolkit](/content-os-agents/) includes five research agents. Each is purpose-built for a specific research task. Here's what each one does, when to use it, and what the output looks like. ### 1. Content Researcher Agent **Command:** `/research [topic]` **What it does:** Comprehensive topic research. The Content Researcher gathers facts, statistics, expert viewpoints, common misconceptions, related subtopics, and content angles for any given topic. It outputs a structured brief you can write from immediately. **When to use it:** At the start of every new article, newsletter, or content piece. Before you write a single word. **How it works:** The agent's system prompt instructs it to approach the topic from multiple angles — historical context, current state, future trends, common objections, and practical applications. It prioritizes specificity over generality. Instead of "email marketing is growing," it returns "email marketing ROI averages $36 for every $1 spent (DMA, 2025)." **Example output structure:** ``` ## Research Brief: [Topic] ### Key Facts & Statistics - [Fact 1 with source] - [Fact 2 with source] - [5-8 facts total] ### Expert Viewpoints - [Expert 1]: [Position] - [Expert 2]: [Contrasting view] ### Common Misconceptions - [Misconception 1]: [Reality] - [Misconception 2]: [Reality] ### Content Angles (Unique Takes) 1. [Angle 1 — why it's interesting] 2. [Angle 2 — what makes it different] 3. [Angle 3 — the contrarian view] ### Related Subtopics - [Subtopic 1] - [Subtopic 2] ### Suggested Sources - [Source URL 1] - [Source URL 2] ``` **Why it matters:** The Content Researcher doesn't just give you information. It gives you angles. The "Content Angles" section alone saves 15-20 minutes of staring at a blank page trying to find your unique take. ### 2. SEO/AEO Researcher Agent **Command:** `/seo-research "keyword"` **What it does:** Real keyword research via Perplexity, SERP analysis, and Answer Engine Optimization (for ChatGPT, Perplexity, Claude). Uses Firecrawl for scraping live search results. It tells you exactly what to write and how to structure it to rank — in both traditional search and AI answer engines. **When to use it:** After you've chosen a topic (from the Content Researcher) and need to optimize for search. Or when evaluating whether a topic is worth writing about in the first place. **How it works:** The SEO/AEO Researcher assesses the keyword from four dimensions: 1. **Search intent** — Is the searcher looking for information, a comparison, a tutorial, or a product? The agent classifies intent and recommends the matching content format. 2. **Keyword clusters** — Related terms, long-tail variations, and question-based keywords via Perplexity research. These become your H2s and H3s. 3. **SERP analysis** — Scrapes current top results with Firecrawl to analyze what actually ranks, including heading structure, word count, and content patterns. 4. **AEO optimization** — Analyzes how AI answer engines (ChatGPT, Perplexity, Claude) source and surface content, with recommendations for structured data, concise answers, and citation-friendly formatting. **Example output structure:** ``` ## SEO/AEO Research: [Keyword] ### Search Intent - Primary: [Informational/Commercial/Navigational/Transactional] - Recommended format: [How-to guide/Listicle/Comparison/Review] ### Keyword Research (via Perplexity) | Keyword | Estimated Difficulty | Intent | |---------|---------------------|--------| | [primary keyword] | [Low/Med/High] | [Info] | | [long-tail 1] | [Low] | [Info] | | [long-tail 2] | [Low] | [Commercial] | | [question keyword 1] | [Low] | [Info] | ### SERP Analysis (via Firecrawl) - Top results analyzed: [count] - Average word count: [X,XXX] - Common heading patterns: [patterns] - Content gaps in current top results: [gaps] ### AEO Recommendations - Answer engine visibility score: [Low/Med/High] - Recommended structured data: [types] - Key questions to answer directly: [questions] - Citation-friendly formatting tips: [tips] ``` **Why it matters:** Most content creators either skip SEO entirely or spend 30+ minutes in keyword tools. The SEO/AEO Researcher gives you 80% of the value in 20 seconds — and covers AI answer engines that traditional SEO tools ignore entirely. It won't replace a full Ahrefs deep-dive for competitive niches, but for most content decisions, it's more than enough. ### 3. Technical Verifier Agent **Command:** `/verify [path or claims]` **What it does:** Verifies technical accuracy of articles against official documentation. Extracts claims from your content, verifies them against current docs, checks code snippets, validates version numbers, and detects deprecations. Has three depth levels: Quick Check, Standard Check, and Deep Check. **When to use it:** After you've written a draft. Before you publish. Any time your content includes technical claims, code snippets, API references, version numbers, or instructions that could become outdated. **How it works:** The Technical Verifier extracts every technical claim from your content and validates it against authoritative sources. For each claim, it: 1. **Extracts the claim** — Code syntax, version numbers, API endpoints, feature descriptions 2. **Identifies the source of truth** — Official documentation, release notes, changelogs 3. **Verifies against current docs** — Checks if the claim matches current reality 4. **Detects deprecations** — Flags features, APIs, or syntax that have been deprecated 5. **Validates code snippets** — Checks syntax, correct usage patterns, and current best practices **Depth levels:** - **Quick Check** — Scans for obvious errors: wrong version numbers, deprecated features, broken syntax - **Standard Check** — Full claim extraction and verification against official docs - **Deep Check** — Everything in Standard plus cross-referencing changelogs, checking edge cases, and validating all code examples **Example output structure:** ``` ## Technical Verification Report ### Depth: [Quick/Standard/Deep] ### Claims Extracted: [count] ### Verified ✓ - [Claim 1]: Confirmed against [official doc link] - [Claim 2]: Confirmed. Current as of [version] ### Needs Update ⚠ - [Claim 3]: Deprecated in [version]. Replacement: [new approach] - [Claim 4]: Version number outdated. Current: [version] ### Code Issues - Line [X]: Syntax error in [language] snippet — [correction] - Line [Y]: Uses deprecated API. Current equivalent: [new API] ### Unverifiable - [Claim 5]: Cannot verify against public documentation. Manual check recommended. ``` **Why it matters:** Publishing technically inaccurate content damages credibility permanently. One wrong version number, one deprecated API call, one broken code snippet — and readers lose trust. The Technical Verifier catches these errors before your audience does. **Important caveat:** The Technical Verifier works best with well-documented technologies. For proprietary tools or very new releases, verification depth may be limited. The agent acknowledges this by flagging claims it cannot verify. ### 4. Content Gap Analyzer Agent **Command:** `/gap-analysis --mode` **What it does:** Analyzes content coverage across a niche to find opportunity gaps — topics you should cover but don't. Runs monthly for landscape reports or on-demand for specific pillar analysis. Identifies underserved topics, missing content types, and coverage holes in your content strategy. **When to use it:** During content planning. When you're choosing your next 5-10 article topics. When you need to understand where your content coverage has holes compared to what your audience needs. **How it works:** The Content Gap Analyzer operates in three modes: 1. **Monthly Landscape** — Broad scan of your niche to identify overall content gaps, emerging topics, and underserved audience needs 2. **Pillar-Specific** — Deep analysis of a specific content pillar (e.g., "email automation") to find missing subtopics, angles, and supporting content 3. **Trend Analysis** — Identifies shifts in what audiences are searching for and where new content opportunities are emerging **For each gap identified, the agent provides:** - Topic description and why it matters - Current coverage level (none, thin, outdated) - Estimated audience demand - Recommended content format - Priority score **Example output structure:** ``` ## Content Gap Analysis ### Mode: [Monthly Landscape / Pillar-Specific / Trend Analysis] ### Niche: [niche] ### Date: [date] ### High-Priority Gaps 1. [Topic] — Coverage: None | Demand: High - Why: [explanation of the opportunity] - Recommended format: [Guide/Tutorial/Comparison] - Priority: [1-10] 2. [Topic] — Coverage: Thin | Demand: Medium-High - Why: [explanation] - Recommended format: [format] - Priority: [1-10] ### Coverage Map | Topic Area | Your Coverage | Market Coverage | Gap Size | |-----------|--------------|-----------------|----------| | [Area 1] | [None/Thin/Strong] | [Saturated/Moderate/Low] | [Large/Medium/Small] | | [Area 2] | [None/Thin/Strong] | [Saturated/Moderate/Low] | [Large/Medium/Small] | ### Recommended Content Calendar | Priority | Topic | Format | Gap Type | |----------|-------|--------|----------| | 1 | [Topic] | [Guide] | [Missing entirely] | | 2 | [Topic] | [Comparison] | [Outdated coverage] | | 3 | [Topic] | [Tutorial] | [Thin coverage] | ``` **Why it matters:** Most content creators are reactive. They write about what comes to mind or what competitors just published. The Content Gap Analyzer helps you be strategic — identifying the specific topics your audience needs that nobody (including you) has covered well. ### 5. Competitive Analyzer Agent **Command:** `/competitive-check [query]` **What it does:** Tracks competitor content, pricing, and positioning. Delivers weekly reports or topic-specific intelligence. Monitors content gaps and positioning shifts across your competitive landscape. **When to use it:** Before writing any piece targeting a competitive keyword. When you need to understand what competitors are doing, how they're pricing, and where positioning shifts are happening. **How it works:** The Competitive Analyzer examines competitor activity and breaks it down into actionable intelligence: 1. **Content tracking** — What competitors have published recently, their topics, formats, and frequency 2. **Pricing monitoring** — Competitor pricing changes, new product launches, offer structures 3. **Positioning analysis** — How competitors frame their value proposition and messaging 4. **Content gap detection** — Topics competitors cover that you don't, and vice versa 5. **Weekly reporting** — Automated weekly summaries of competitive landscape changes **Example output structure:** ``` ## Competitive Intelligence: [Query] ### Competitor Activity (Last 7 Days) | Competitor | New Content | Topic | Format | |-----------|------------|-------|--------| | [Competitor 1] | [Title] | [Topic] | [Guide/Video] | | [Competitor 2] | [Title] | [Topic] | [Tutorial] | ### Pricing & Positioning | Competitor | Product | Price | Positioning | |-----------|---------|-------|-------------| | [Competitor 1] | [Product] | [Price] | [Positioning summary] | | [Competitor 2] | [Product] | [Price] | [Positioning summary] | ### Content Gaps (Your Opportunities) 1. [Gap 1] — Competitors cover this; you don't 2. [Gap 2] — All competitors have outdated coverage 3. [Gap 3] — Emerging topic no competitor has addressed ### Positioning Shifts - [Competitor 1]: Shifted from [old positioning] to [new positioning] - [Competitor 2]: Launched [new product/offer] targeting [audience] ### Recommended Actions 1. [Action 1] — Why: [rationale] 2. [Action 2] — Why: [rationale] ``` **Why it matters:** You can't outperform competitors you haven't analyzed. The Competitive Analyzer gives you ongoing intelligence. You know exactly what competitors are doing, how they're positioning, and — most importantly — where the gaps are that give you a competitive edge. ## The 90-Second Research Workflow Here's what a real research session looks like from start to finish. No theory. Just the actual commands and what happens. **Scenario:** You're writing an article about "email automation for solopreneurs." ### Second 0-30: Content Research ``` > /research email automation for solopreneurs ``` The Content Researcher returns a structured brief: 8 key statistics with sources, 3 expert viewpoints, 4 common misconceptions solopreneurs have about email automation, 5 unique content angles, and a list of related subtopics. You now know what to write. You have facts. You have angles. You have a starting point. ### Second 30-50: SEO Analysis ``` > /seo-research "email automation solopreneurs" ``` The SEO/AEO Researcher returns: primary intent is informational, recommended format is a how-to guide, 12 related long-tail keywords including "best email automation for one person business" and "simple email sequences for solo founders," recommended word count of 3,500, and a heading structure with 8 suggested H2 sections. You now know how to structure the article for search. ### Second 50-70: Competitor Analysis ``` > /competitive-check email automation solopreneurs ``` The Competitive Analyzer returns: top 5 results average 2,800 words, all focus on tool recommendations, none provide step-by-step implementation, gap identified — no one covers the "minimum viable automation" approach, and position #1 is a listicle with no practical walkthroughs. You now know how to differentiate. Write the implementation guide that nobody else wrote. ### Second 70-90: Review and Start Writing You have three structured briefs. You know the facts, the SEO targets, and the competitive landscape. You open your article file and start writing. Total time: 90 seconds. Zero browser tabs. Full context for a 3,500-word article. ### After the Draft: Technical Verification Once you've written the piece: ``` > /verify [path to draft] ``` The Technical Verifier flags two statistics that need updated sources, confirms seven other claims, and identifies one assertion that can't be verified. You fix those, add citations, and your article is ready to publish. ## Manual Research vs. Agent Research Let's break down the time honestly. Not marketing numbers. Actual time comparisons based on a typical 3,000-word article. ### Time Breakdown: Manual Research | Task | Time | Notes | |------|------|-------| | Formulating search queries | 5 min | Trying different keyword combos | | Reading top 5 competitor articles | 20 min | Skimming, taking notes | | Finding statistics and data | 10 min | Hunting across multiple sources | | Checking stat accuracy | 5 min | Re-Googling to verify | | SEO keyword analysis (free tools) | 10 min | Google autocomplete, People Also Ask, related searches | | Organizing notes into outline | 10 min | Structuring scattered notes | | **Total** | **60 min** | Assuming no rabbit holes | That 60 minutes is optimistic. If you're thorough — reading full articles, cross-referencing multiple sources, analyzing competitor heading structures — you're looking at 90 minutes or more. ### Time Breakdown: Agent Research | Task | Time | Notes | |------|------|-------| | Content Researcher | 30 sec | One command, structured output | | SEO/AEO Researcher | 20 sec | Keyword cluster + structure | | Competitive Analyzer | 20 sec | Competitive intelligence | | Review agent outputs | 5 min | Read and validate briefs | | Technical Verification (post-draft) | 2 min | Verify claims in written draft | | **Total** | **8 min** | Including human review time | The raw AI time is about 90 seconds. Adding human review brings it to roughly 8 minutes. That's a 7-10x time reduction. ### Quality Comparison Here's where people push back: "But manual research is higher quality." Sometimes, yes. If you're writing about your direct personal experience, no agent replaces that. If you need to interview an expert, no AI conducts that interview. But for the standard research that precedes most content — competitive analysis, keyword research, technical verification, content gap identification — agents match or exceed manual quality for three reasons: 1. **Consistency** — Agents don't have bad research days. They don't rush because it's Friday afternoon. The output quality is the same whether it's 9 AM Monday or 11 PM Sunday. 2. **Comprehensiveness** — An agent considers multiple angles simultaneously. Human researchers tend to anchor on the first promising angle they find and stop looking. 3. **Structure** — Agent output is organized before it reaches you. Manual research produces scattered notes across tabs and documents that you then have to organize. Where manual research wins: primary sources, interviews, proprietary data, personal experience, nuance that requires deep domain expertise. Agents handle the other 80% of research work. ## Setting Up Research Agents in Claude Code If you're new to Claude Code, here's what you need to know about how slash commands work and how research agents fit into the system. ### Prerequisites 1. **Claude Code installed** — Anthropic's CLI tool. Requires a Claude Pro or Team subscription. Install via `npm install -g @anthropic-ai/claude-code` or follow Anthropic's official setup guide. 2. **A project directory** — Claude Code works within project folders. It reads your project context (CLAUDE.md, existing files) to inform its responses. 3. **The Agents Toolkit** — The research agents are pre-built slash command files that install into your Claude Code project. ### How Slash Commands Work Claude Code supports custom slash commands stored in your project. When you type `/command-name` in the Claude Code interface, it loads the corresponding prompt file and executes it with your input. The file structure looks like this: ``` your-project/ ├── .claude/ │ └── commands/ │ ├── research.md # Content Researcher agent │ ├── seo-research.md # SEO/AEO Researcher agent │ ├── verify.md # Technical Verifier agent │ ├── gap-analysis.md # Content Gap Analyzer agent │ └── competitive-check.md # Competitive Analyzer agent ├── CLAUDE.md # Project context └── [your content files] ``` Each `.md` file in the `commands/` directory contains the agent's system prompt — its instructions, output format, behavioral rules, and constraints. When you type `/research AI content automation`, Claude Code reads `research.md`, combines it with your project context, and executes the research task. ### Installation The Content OS Agents Toolkit includes all five agent files pre-configured and ready to use. Installation is straightforward: 1. Copy the agent files into your `.claude/commands/` directory 2. Verify they load by typing `/research test` in Claude Code 3. Start using them No API keys to configure. No environment variables. No build steps. The agents work immediately because they're just prompt files that Claude Code knows how to read. ### Customization Every agent file is plain markdown that you can read and edit. Common customizations include: - **Niche specialization** — Add instructions like "Focus on SaaS B2B content" or "Prioritize sources from the healthcare industry" - **Output format** — Modify the output template to match your workflow. Want a specific heading structure? Edit the agent prompt. - **Depth control** — Adjust how many statistics, competitors, or trends the agent returns - **Brand voice filtering** — Add your voice guidelines so research briefs use language that matches your brand The base agents work for any content niche out of the box. Customization makes them sharper for your specific situation. ## Common Use Cases Research agents aren't just for blog writers. Here's who benefits most and how they typically use the toolkit. ### Newsletter Writers Newsletter creators face a specific challenge: consistent publishing schedules with limited research time. A weekly newsletter means researching, writing, editing, and publishing every single week, without fail. **Typical agent workflow for newsletters:** 1. `/gap-analysis --mode monthly` on Monday — identify this week's topic based on content gaps 2. `/research [topic]` on Tuesday — gather facts and angles 3. Write the newsletter on Wednesday 4. `/verify [draft]` on Thursday — verify before sending 5. Publish Friday The Content Gap Analyzer is particularly valuable for newsletters because it prevents the "I don't know what to write about this week" problem. Having a content pipeline based on identified gaps means you're always covering topics your audience needs instead of scrambling. ### SEO Content Creators If your content strategy depends on organic search traffic, the SEO/AEO Researcher and Competitive Analyzer become your primary tools. **Typical agent workflow for SEO content:** 1. `/seo-research "keyword"` — Validate the keyword is worth targeting 2. `/competitive-check [keyword]` — Understand what you're up against 3. `/research [topic]` — Gather comprehensive information 4. Write the article following the SEO/AEO Researcher's structure recommendations 5. `/verify [draft]` — Verify all claims before publishing The combined output from these three agents gives you everything you need to write content that ranks: the right structure, the right depth, the right keywords, and the content gaps that give you a competitive edge. ### Agencies and Content Teams Agencies that produce content for multiple clients face a scaling problem: each client has different niches, audiences, and requirements. Research agents solve this because: - **Custom agents per client** — Duplicate and modify agent files for each client's niche - **Consistent quality** — Junior writers produce senior-level research briefs - **Faster onboarding** — New team members use agents instead of learning each client's niche from scratch - **Auditable process** — Research briefs become documentation. Clients can see exactly what research informed each piece. ### Solopreneurs and Small Business Owners This is the core audience at GenAI Unplugged: solopreneurs who wear every hat. You're the CEO, the marketer, the content creator, and the support team. You don't have 45 minutes per article for research. Research agents give solopreneurs the research capacity of a content team without the headcount. A solopreneur running three commands in 90 seconds gets the same quality research brief that used to require a dedicated research assistant. **The solopreneur workflow:** 1. Sunday: `/gap-analysis --mode monthly` — plan the week's content 2. Each writing day: `/research` + `/seo-research` — 90 seconds of prep 3. Before publishing: `/verify` — catch errors 4. Monthly: `/competitive-check [key topic]` — make sure you're still competitive Total research investment: under 30 minutes per week for a full content calendar. Compare that to the 3-5 hours most solopreneurs spend on research. ## Limitations and Honest Assessment Research agents are powerful. They are not magic. Here's what they can't do and where you still need human judgment. ### What Agents Can't Do **1. Primary Research** Agents don't conduct interviews, run surveys, or collect original data. If your article needs quotes from industry experts, you have to get those yourself. The Content Researcher can identify who the relevant experts are and what they've publicly said, but it can't call them up for a fresh quote. **2. Real-Time Data** AI models have training data cutoffs. While Claude's knowledge is regularly updated, agents don't perform live internet searches. For time-sensitive data — stock prices, today's news, this week's product announcements — you'll need to verify manually. **3. Truly Original Insights** Agents synthesize existing knowledge. They don't generate original thought leadership. Your unique perspective, your contrarian take, your "here's what I learned from doing this 100 times" — that comes from you. Agents provide the foundation. You build the original structure on top. **4. Niche Expertise at Extreme Depth** For mainstream topics, agents are comprehensive. For extremely niche topics — say, a specific regulatory framework in a specific country for a specific industry — the agent's output will be shallower. It still saves time as a starting point, but you'll supplement with domain-specific sources. **5. Emotional Nuance** If your content needs to navigate sensitive topics — health crises, political issues, community trauma — agents provide facts but not empathy. The tone, sensitivity, and emotional awareness must come from you. ### Where Agents Excel vs. Where Humans Excel | Task | Agent | Human | |------|-------|-------| | Gathering facts and statistics | Strong | Slow but thorough | | Identifying content structure | Strong | Good with experience | | SEO/AEO keyword analysis | Strong | Requires paid tools | | Competitive intelligence | Strong | Time-intensive but nuanced | | Content gap identification | Good | Better with domain expertise | | Technical verification | Good (known facts) | Essential for new claims | | Original insights | Cannot do | Core human value | | Interview and primary research | Cannot do | Human-only | | Emotional and cultural nuance | Weak | Human strength | | Speed and consistency | Dominant advantage | Variable | The honest assessment: agents handle roughly 70-80% of the research work for a typical content piece. The remaining 20-30% — your original perspective, primary sources, emotional nuance — is irreplaceable human contribution. That's not a limitation. That's the ideal split. Automate the commoditized work. Invest your irreplaceable time in what only you can provide. ## The ROI Math Let's talk numbers. Not hypothetical numbers. Conservative, reasonable calculations based on a typical content creator's workflow. ### Assumptions - You publish 2 articles per week (8 per month) - Manual research takes 45 minutes per article (conservative) - Agent-assisted research takes 8 minutes per article (including review) - Your effective hourly rate is $50/hour (what you'd earn doing revenue-generating work) ### Monthly Time Savings | Metric | Manual | With Agents | Difference | |--------|--------|-------------|------------| | Research time per article | 45 min | 8 min | 37 min saved | | Articles per month | 8 | 8 | — | | Total research time | 360 min (6 hrs) | 64 min (1.1 hrs) | 4.9 hrs saved | | Monthly time value (at $50/hr) | $300 | $53 | **$247 saved** | ### Annual ROI - **Annual time saved:** 58.8 hours (4.9 hrs/month x 12) - **Annual value of time saved:** $2,940 (at $50/hr) - **Toolkit cost:** $97 (one-time) - **Net ROI:** $2,843 in the first year - **ROI percentage:** 2,930% Even if you cut these numbers in half — publish once a week, value your time at $25/hour — the toolkit pays for itself in the first month. ### The Hidden ROI: Better Content Time savings are the obvious metric. The hidden benefit is quality. When you're not exhausted from 45 minutes of tab-switching research, you write better. Your creative energy goes into the writing itself instead of being drained by the research process. Content creators who use research agents report: - Writing faster because they start with better outlines - More confidence in their facts (the Technical Verifier catches errors they would have missed) - More unique angles (the Content Researcher surfaces perspectives they wouldn't have found manually) - More consistent publishing (reduced friction means fewer missed deadlines) The ROI isn't just time. It's the compounding effect of better content published more consistently over months and years. ### Break-Even Analysis The toolkit costs $97 one-time. At $50/hour effective rate: - **Break-even point:** 1.94 hours of saved research time - **That's roughly:** 3 articles using the agents instead of manual research - **Timeline:** Most creators break even in their first week For a solopreneur publishing regularly, this is one of the highest-ROI investments in a content workflow. Not because $97 is cheap, but because the time savings compound with every article you produce. ## Getting Started If you're ready to replace manual research with 90-second agent workflows, here's the path forward. ### Step 1: Have Claude Code Running If you don't have Claude Code yet, install it from Anthropic. You need a Claude Pro or Team subscription. This is the platform the agents run on — without it, the slash commands have nowhere to execute. ### Step 2: Get the Agents Toolkit The [Content OS Agents Toolkit](/content-os-agents/) includes all five research agents, structured output templates, setup documentation, and lifetime updates. **[Get the Agents Toolkit — $97](https://store.genaiunplugged.com/checkout/buy/5b0b7469-85d8-4d1b-85ec-dd9efab60bbe)** One-time purchase. 14-day money-back guarantee. If the agents don't save you time, email support@genaiunplugged.com for a full refund. ### Step 3: Install in Under 2 Minutes Copy the agent files into your `.claude/commands/` directory. Run a test command. You're operational. ### Step 4: Run Your First Research Session Pick a topic you're planning to write about. Run: ``` /research [your topic] /seo-research "your target keyword" /competitive-check [your target keyword] ``` Review the three briefs. Notice how much context you have — without opening a single browser tab. ### Step 5: Write, Fact-Check, Publish Write your article using the research briefs as your foundation. Before publishing, run `/verify` on your draft. Fix any flagged issues. Publish with confidence. ## Conclusion The content research workflow hasn't fundamentally changed in 15 years. Open browser. Search. Read. Take notes. Repeat. AI research agents for Claude Code are the first meaningful shift in how that process works. Not because AI is smarter than you. Not because automation is always better. But because research is largely a retrieval and synthesis task — and AI agents handle retrieval and synthesis faster and more consistently than humans juggling 10 browser tabs. The five agents in the Content OS Agents Toolkit — Content Researcher, SEO/AEO Researcher, Technical Verifier, Content Gap Analyzer, and Competitive Analyzer — each do one thing well. Together, they compress 45-60 minutes of manual research into 90 seconds of structured output. Your time is better spent on what only you can do: forming original opinions, sharing personal experience, writing in your voice, and building relationships with your audience. Let the agents handle the groundwork. That's the GenAI Unplugged philosophy in practice: simple AI systems that end manual chaos. Not complex enterprise platforms. Not 47-step prompt chains. Five slash commands that do the job. **[Get the Content OS Agents Toolkit — $97](https://store.genaiunplugged.com/checkout/buy/5b0b7469-85d8-4d1b-85ec-dd9efab60bbe)** | One-time purchase. 14-day money-back guarantee. ## Frequently Asked Questions ### What are AI research agents for Claude Code? AI research agents are specialized slash commands that run inside Claude Code to automate specific research tasks. Each agent is pre-configured with expert-level prompts for a single job: content research, SEO/AEO analysis, competitive intelligence, technical verification, and content gap analysis. ### Do I need coding experience to use research agents? No. Research agents are pre-built slash commands. You type a command like /research followed by your topic, and the agent handles the rest. If you can type in a terminal, you can use these agents. ### How do AI research agents compare to ChatGPT for research? AI research agents are specialized — each one excels at a single research task with optimized prompts and structured outputs. ChatGPT is general-purpose, requiring you to craft prompts from scratch every time. Agents deliver consistent, structured results; ChatGPT delivers variable responses. ### Can I customize the research agents? Yes. Each agent is a readable prompt file you can modify to match your niche, preferred sources, output format, or research depth. The base agents work out of the box, but customization makes them more powerful for your specific use case. ### What's the difference between Claude Code and Claude.ai? Claude.ai is the web chat interface. Claude Code is Anthropic's CLI tool that runs in your terminal with additional capabilities: file system access, project context, slash commands, custom agents, and tool use. Research agents require Claude Code. ### How many research agents are included in the toolkit? Five agents: Content Researcher, SEO/AEO Researcher, Technical Verifier, Content Gap Analyzer, and Competitive Analyzer. Each specializes in a different aspect of content research. ### Is there a free trial? No free trial, but there's a 14-day money-back guarantee. If the agents don't save you time, email support@genaiunplugged.com for a full refund. --- # Affiliate Program - Earn 20% on Every Sale URL: https://www.genaiunplugged.com/affiliates/ > Join the GenAI Unplugged affiliate program. Earn 20% commission on every sale with your personal discount code. No sign-ups. No platforms. Just a code and a PayPal payout. --- # The Unplugged Method — A Framework for Ending Manual Chaos with AI URL: https://www.genaiunplugged.com/about/ > The Unplugged Method is a 3-phase framework created by Dheeraj Sharma for solopreneurs to end manual chaos using simple AI automation systems. ## What Is the Unplugged Method? The Unplugged Method is a 3-phase framework created by Dheeraj Sharma at GenAI Unplugged. It gives solopreneurs and small service businesses a repeatable system for replacing manual chaos with simple AI automation — without needing a technical background or enterprise budgets. The name "Unplugged" comes from the core philosophy: unplug from manual busywork so you can focus on the work that actually grows your business. ## Why Dheeraj Sharma Built the Unplugged Method After building AI automation systems for clients and teaching over 42 lessons in the n8n Zero to Hero course, Dheeraj Sharma noticed the same pattern. Solopreneurs weren't struggling with AI technology — they were struggling with knowing *where to start* and *what to automate first*. Most automation advice falls into two traps: 1. **Over-engineered solutions** that require developer skills and constant maintenance 2. **Surface-level tips** that sound good but don't survive contact with real workflows The Unplugged Method solves this by providing a structured, phase-by-phase approach that anyone can follow. ## The 3 Phases of the Unplugged Method ### Phase 1: Identify the Chaos Before building anything, map where manual work is actually costing you revenue. Not every task needs automation — the Unplugged Method teaches you to find the 20% of manual work causing 80% of the pain. **What you do in Phase 1:** - Audit your weekly workflow for repetitive tasks - Score each task by time cost, error rate, and revenue impact - Identify the "chaos clusters" — groups of related manual tasks that compound each other - Pick your first automation target based on ROI, not complexity ### Phase 2: Build Simple Systems Build automation workflows that are simple enough to maintain yourself. The Unplugged Method prioritizes reliability over sophistication. As Dheeraj Sharma teaches in the GenAI Unplugged courses, a 3-node workflow that runs every day is worth more than a 30-node workflow that breaks every week. **What you do in Phase 2:** - Design workflows using proven patterns (trigger → process → deliver) - Use tools like n8n, Claude, and simple APIs — no custom code required for most workflows - Build error handling and monitoring from day one - Test with real data before going live ### Phase 3: Measure Revenue Impact The final phase of the Unplugged Method closes the loop. Every automation should connect back to a revenue metric — time saved, leads captured, content published, or errors prevented. If you can't measure it, you can't improve it. **What you do in Phase 3:** - Track time saved per week (in hours and dollars) - Monitor automation reliability (uptime, error rate) - Calculate ROI: cost of automation vs. cost of manual work - Identify the next chaos cluster to automate ## Where to Learn the Unplugged Method Dheeraj Sharma teaches the Unplugged Method through several channels at GenAI Unplugged: - **[n8n Zero to Hero Course](/courses/n8n/)** — 42 lessons covering workflow fundamentals through production-grade automation - **[GenAI Unplugged Newsletter](https://genaiunplugged.substack.com)** — Weekly articles applying the Unplugged Method to real business problems - **[YouTube Channel](https://www.youtube.com/@genaiunplugged)** — Video tutorials and walkthroughs - **[About Dheeraj Sharma](/author/dheeraj-sharma/)** — Background and full course catalog ## The Unplugged Method in Practice The framework isn't theoretical. Every article, course, and tool at GenAI Unplugged follows these three phases. Examples include: - **Content pipeline automation** — Phase 1 identified 6 hours/week of manual publishing work. Phase 2 built an n8n workflow for automated content distribution. Phase 3 showed 5.5 hours/week recovered. - **Lead response automation** — Phase 1 found leads were waiting 4+ hours for responses. Phase 2 built an AI-powered response system. Phase 3 measured a 3x improvement in response time. - **Research agent systems** — Phase 1 mapped 8 manual research steps per article. Phase 2 built AI agents to handle the first 5 steps. Phase 3 tracked research time dropping from 4 hours to 45 minutes per article. ## Who the Unplugged Method Is For The Unplugged Method is designed for: - **Solopreneurs** drowning in manual tasks who need a clear starting point - **Freelancers and consultants** who want to scale without hiring - **Small service businesses** looking to automate operations without enterprise tools - **Content creators** who want to publish more consistently with less effort If you're spending more time on busywork than on the work that grows your business, the Unplugged Method gives you a structured path out. ## Frequently Asked Questions ### What Is the Unplugged Method? The Unplugged Method is a 3-phase framework created by Dheeraj Sharma at GenAI Unplugged. It gives solopreneurs and small service businesses a repeatable system for replacing manual chaos with simple AI automation — without needing a technical background or enterprise budgets. --- # How to Connect Substack to Claude (SubflowAI Substack MCP Setup, 2026) URL: https://www.genaiunplugged.com/guides/substack-mcp/ > Substack has no official API. Connect it to Claude with the SubflowAI MCP server to write, schedule, and repurpose Notes from one chat. Posting Substack Notes every day is the new growth tax. Stay consistent and your subscribers climb. Go quiet for four days and the feed forgets you exist. The problem is that consistency by hand is a grind, and there is no official Substack API to take the grind off your plate. This guide is about closing that gap: connecting Substack to Claude (or ChatGPT) with the SubflowAI Substack MCP server, so writing, scheduling, repurposing, and even whole multi-step workflows happen inside one conversation. We run our own GenAI Unplugged publication on exactly this setup. What used to be a 45-minute Sunday scheduling session is now a two-minute chat. Below is the full picture: the problem in detail, the two ways to connect (one of which needs no cookie at all), every tool you get grouped by the job it does, the end-to-end workflows that chain those tools for you, and the copy-paste prompts that make it useful on day one. > **Note:** The SubflowAI Substack MCP server is an unofficial, independent tool built by GenAI Unplugged. It is not affiliated with, endorsed by, or approved by Substack, Inc. Substack has no official public API, so this server talks to Substack's internal endpoints on your behalf. Use it at your own risk. "Substack" is a trademark of Substack, Inc., used here only to describe compatibility. ## The real problem: the daily Notes tax Here is what the growth advice leaves out. "Just post Notes every day" sounds free. It is not. Doing it properly is a real, recurring cost, and it compounds in four places. **Writing.** A good Note is not a status update. It has a hook, a shape, and a reason to be reshared. Coming up with five or seven of those a week, in your voice, without repeating yourself, is genuine creative work. Most people run dry by Wednesday and start posting filler, which trains the algorithm to show them less. **Scheduling.** Say you do write seven Notes. Now you open the composer seven times, paste each one, pick a time, and confirm. Then you do it again next week. Twenty-one Notes a week is roughly three and a half hours of copy, paste, pick a time, repeat. It is the least creative part of the job and it eats the most clock. **Timing.** When should each Note go out? You are guessing. You do not have your open slots in front of you, so you cluster three on Monday and leave Thursday empty, or you double-book the same 9am twice and one silently loses. A calendar you cannot see is a calendar you fill badly. **Everything after.** The replies pile up and you answer the loudest ones instead of the most valuable. The analytics that would tell you which angle actually worked sit behind a stats page you never open. Your best article from last month never gets turned into the ten Notes it could have become. The work you already did stops paying you back. And there is no official Substack API to automate any of this. So the tools that exist are a compromise. Browser extensions click around the page for you but only really solve scheduling. Open-source developer scripts can do more, but you have to clone a repo, run a server, and keep it alive. Neither one lets you say what you want in plain English and have it happen. That is the gap the SubflowAI Substack MCP server fills. ## The short answer The SubflowAI Substack MCP server is a hosted server that connects Claude (Desktop, Cowork, or Code) and ChatGPT to your Substack. Once linked, an AI assistant can write and schedule Notes, plan them into your open calendar slots, repurpose an article into a batch of Notes, draft full articles, read your real stats, and run whole multi-step workflows, all from a normal conversation. It never touches your password. You connect either by pairing the SubflowAI browser extension (no cookie paste) or by adding your own session cookie to your config. The core tools are free for GenAI Unplugged subscribers, and setup takes about five minutes with no code. ## Why this exists: Substack has no official API Here is the load-bearing fact. Substack does not publish an official API. There is no documented, supported way for an outside app to post a Note or pull your stats. That is why most "Substack automation" lives in browser extensions that click around the page for you, or in developer scripts you have to clone and run yourself. An MCP server is a cleaner answer. MCP, the Model Context Protocol, is the standard way to give an AI assistant new tools. A SubflowAI Substack MCP server exposes a set of Substack actions as tools the assistant can call. You ask in plain English, the assistant calls the tool, and the action happens in your Substack. No clicking, no scripts, no terminal. The version covered here is hosted, so you do not run anything. You point your AI client at it, authenticate once, and the tools show up inside your conversation. ## Two ways to connect: relay or cookie This is the part most write-ups skip, and it is the most important choice you make. There are two connection modes. They unlock different tools and suit different people. ### The SubflowAI relay: "Connect to Claude" (no cookie paste) This is the path we recommend, and the one that unlocks the most. You install the [SubflowAI](https://www.genaiunplugged.com/subflowai/) Chrome extension, open its Connect to Claude panel, and it shows you a short pair code. You give that code to your AI client once. From then on, when Claude or ChatGPT wants to do something on your Substack, the command is relayed into your own browser and runs there, using the Substack session you are already logged into. Two things make this special. First, your Substack login never leaves Chrome. There is no cookie to copy, nothing sensitive sits in a config file, and you can cut every agent off with one button in the extension. Second, because it runs inside SubflowAI, it unlocks the tools that only SubflowAI has: your real posting calendar, free-slot planning, and AI repurposing in your brand voice. The trade-off is that your browser has to be open with the extension connected, since that is where the work actually happens. ### Bring your own cookie: the standalone path The alternative is to paste your own `substack.sid` session cookie into your MCP config. Now the server can talk to Substack directly, using your cookie, even with your browser closed. This is the right choice if you want a headless setup for a 24/7 cloud agent, or you just prefer configuring things by hand. You get the full set of standard Substack actions: writing, scheduling, drafts, and analytics. You do not get the SubflowAI-only calendar and AI tools, because those live inside the extension. Most creators want the relay. Builders running headless agents want the cookie. Here is the quick comparison. | | SubflowAI relay ("Connect to Claude") | Bring your own cookie | |---|---|---| | Setup | Pair a short code, no paste | Paste your `substack.sid` cookie | | Your login | Never leaves your browser | Lives in your local config | | Browser | Must be open and connected | Can be closed (runs headless) | | Calendar + AI tools | Yes | No | | Standard Notes, drafts, analytics | Yes | Yes | | Best for | Most creators | Headless and cloud agents | You can read the fully guided version, with screenshots, in [Connect SubflowAI to Claude and ChatGPT, step by step](https://www.genaiunplugged.com/guides/connect-subflowai-to-claude/). ## What you can do: every tool, grouped by job The server gives your assistant a focused set of tools. Here is what they do, organized by the job you are trying to get done, with an example prompt for each group. ### Write and schedule Notes These are the workhorse tools. Claude can create a Note as a draft, schedule it for a future time, publish it now, edit the text of an existing Note, or delete one. There is also a bulk scheduler built for queueing a whole week of Notes in a single pass, throttled so it never looks like a bot. > "Write five Substack Notes from my last article, space them across the next five weekdays at 9am, and schedule them all." Claude drafts the Notes, shows you the schedule, and on your go-ahead calls the scheduler so they land in your Substack queue. No copy and paste. ### Plan your calendar (SubflowAI relay) This is where the relay earns its keep. Because SubflowAI knows your real posting slots and your existing queue, Claude can see your calendar the way you do. It can tell you how full next week is, list your exact open times, and plan a batch of Notes into those open slots without you eyeballing anything. It never schedules on its own, it hands you a plan to approve. > "Is my calendar full next week? Show me the open slots, then plan these five Notes into them, one per day." ### Repurpose and refine with AI (SubflowAI relay) Paste in an article, or point Claude at your latest post, and the AI repurposing tool turns it into several standalone Notes in your configured brand voice, using your own SubflowAI credits. A second tool punches up any single Note, shorter, sharper, more likely to get reshared. This is the loop that turns one piece of work into a week of Notes. > "Repurpose my latest newsletter into five Notes in my voice, make the second one punchier, then schedule the batch across next week." ### Read and analyze your Notes Claude can list your recent Notes with their engagement and pull the detail of any single Note, including reactions, restacks, and replies. That turns "which of my Notes actually worked" into a question you can just ask. > "List my Notes from the last two weeks and tell me which angle got the most restacks." ### Check your dashboard and subscriber stats Claude can read your publication dashboard, your subscriber totals (free and paid), and, on the paid tier, your growth over time and per-post traffic, without you opening the Substack stats page. > "What are my current subscriber numbers, how many are paid, and which post this week got the most opens?" ### Draft and update full articles from Claude Cowork This is the part no Notes scheduler does. Claude can create a full article draft in your Substack and update an existing one: title, subtitle, body, and section. Pair it with Claude Cowork and you can go from an outline to a finished draft sitting in your Substack, ready for your review. It never hits publish for you, so you always get the last look. > "Turn this outline into a full Substack draft in my publication, set the subtitle, and leave it unpublished for me to review." ### Write in our proven Note formats The server also ships our content playbook as a tool, so Claude does not start from a blank page. The `viral_notes_creator` tool hands Claude 13 named Note formats, think Contrarian Take, Permission Slip, and the Screenshot-Worthy Truth Bomb, plus 10 more, each with the rules behind why it performs and a paste-ready prompt. Those formats and their rules were built from an analysis of thousands of high-performing Substack Notes, and they live inside the tool rather than on this page. Ask Claude for a format, write the Note, then schedule it. That is the loop nothing else closes: generate in a proven format, then schedule, in one conversation. Two more content tools come along free: `substack_toc` builds a numbered table of contents with working anchor links for a long article, and `substack_live_recap` turns a Substack Live transcript into a publish-ready recap. `viral_title_variants` (PluggedIn) generates a ranked set of high-CTR titles grounded in our own best performers. ## Run whole workflows, not just single tools Single tools are useful. The thing that actually saves your Sunday is the `substack_workflow` tool, which ties the rest together. Instead of you remembering which tools to chain and in what order, Claude asks the server for a playbook and runs the whole flow, pausing for your approval before anything goes live. You say the goal in plain language, and the assistant handles the sequence. Three workflows are live today. ### Fill my calendar with Notes You say how many Notes you want and roughly what about. Claude pulls a proven format, drafts the batch in your voice, checks how full your calendar is, finds your genuinely open slots, and lays out a schedule with every Note and its time. Nothing is booked until you say yes. Then it bulk-schedules the lot and reads the queue back so you can confirm. > "Fill my calendar with five Notes for next week about AI writing, then show me the plan before scheduling." This is the flagship. It collapses the entire write-plus-schedule chore, the one that used to eat 45 minutes, into a single approved conversation. ### Insert a table of contents into an article Long Substack posts read better with jump links, but building anchored navigation by hand is fiddly. Claude reads your article, builds a numbered table of contents using Substack's own anchor pattern, shows you a preview first, and only then writes it into the draft. If the post is already published, it pushes the change live silently, with no email to your subscribers. The rest of the body, including your subscribe boxes and buttons, is never touched. > "Add a table of contents to my latest published article, and update it without emailing my list." ### Repurpose an article into scheduled Notes The win-back for work you already did. Point Claude at a post, and it turns it into several Notes in your voice, lets you sharpen the ones you like, finds your open slots, and schedules the batch. One article becomes a week of Notes, start to finish, in one thread. > "Repurpose my top post from last month into four Notes and schedule them two days apart." A fourth workflow, triaging the people who reply to you and drafting responses, is on the way. Every workflow stops for your approval before it schedules or publishes, so the assistant plans and you decide. ## Real use cases: who this is for Different creators lean on different parts of this. Here is where it pays off, with the prompts that earn their keep. **The daily poster who is burning out.** You know Notes drive growth, but the daily grind is wearing you down. The fill-my-calendar workflow is your relief valve: one approved chat on Sunday queues the whole week. > "Read my latest article, write seven Notes across different angles, and schedule one per weekday at 9am." **The newsletter writer sitting on a back catalog.** You have dozens of good posts that stopped working the day after they went out. Repurposing turns each one back into a week of Notes. > "Pull my three best posts from this quarter and turn each into a batch of Notes, scheduled across the next three weeks." **The busy operator who wants the numbers.** You do not want to live in the stats page, you want the one-line read on Monday morning. > "Give me my subscriber totals, my best post this week by opens, and which Note got the most replies." **The builder wiring up an agent.** You want a headless setup that runs on a schedule with the browser closed. The bring-your-own-cookie path is yours: standalone, no extension required. > "Every Monday at 8am, draft five Notes from last week's post and schedule them across the week." **The long-form publisher.** You write real articles and want them to look the part, with navigation and strong titles. > "Add a table of contents to this draft, then give me eight title options ranked by likely click-through."

Ready to connect Substack to Claude?

Free for GenAI Unplugged subscribers. No terminal, no code, about five minutes to set up.

Connect Substack to Claude
## Free vs PluggedIn: what each tier unlocks The server is tiered to your GenAI Unplugged subscription, and a paid SubflowAI license unlocks the paid tier too. Free covers everything most writers need day to day. The paid tier adds deeper analytics, AI repurposing, and full article drafting. | Capability | Free | Paid (PluggedIn or paid SubflowAI) | |---|---|---| | Create, schedule, edit, publish, delete Notes | Yes | Yes | | Bulk-schedule Notes | Up to 7 per batch | Up to 30 per batch | | Calendar planning: capacity, free slots, distribute (relay) | Yes | Yes | | List and read your Notes with engagement | Yes | Yes | | Dashboard and subscriber totals | Yes | Yes | | Viral notes creator (13 formats) | Yes | Yes | | Substack TOC and Live recap tools | Yes | Yes | | Workflow playbooks (fill calendar, insert TOC, repurpose) | Yes | Yes | | AI repurpose an article into Notes (relay) | No | Yes | | Viral title variants | No | Yes | | Post analytics: one post, or all posts in one report | No | Yes | | Subscriber growth, sources, and full list export | No | Yes | | Create and update full article drafts | No | Yes | ## SubflowAI Substack MCP vs the other ways to automate Substack There is no official Substack API, so every tool works around that. Here is how the SubflowAI Substack MCP server compares to the other options, including our own SubflowAI, which is both a standalone app and the no-cookie relay for the MCP. | Approach | Setup | Write in proven formats | Bulk schedule | Repurpose + workflows | Draft full articles | Cost | |---|---|---|---|---|---|---| | **SubflowAI Substack MCP (this guide)** | About 5 minutes, no code | Yes, 13 formats | Yes (7 free, 30 paid) | Yes, guided | Yes, from Claude Cowork | Free for subscribers | | Open-source dev scripts | Clone a repo, run a server | No | Some | No | Read-heavy, limited | Free, you self-host | | Notes scheduler extensions | Install a browser extension | No | Yes, notes only | No | No | Freemium | | SubflowAI (our product) | Install, zero config | Yes, managed | Yes, visual calendar | In-app | No | Freemium | | Doing it by hand | None | No | About 45 minutes a batch | No | No | Your time | The short version: the dev scripts need a terminal, the Notes extensions only schedule, and doing it by hand does not scale. The SubflowAI Substack MCP is the one that writes in proven formats, plans your calendar, repurposes, and runs whole workflows, all from inside Claude or ChatGPT. If you would rather work in a visual calendar instead of a chat, [SubflowAI](https://www.genaiunplugged.com/subflowai/) is the done-for-you app, and it doubles as the relay that connects this MCP without a cookie. ## How to connect Substack to Claude Setup takes about five minutes. The relay is the easiest path and needs no cookie; the cookie path is for headless setups. The walkthrough below covers the cookie config on screen.
### Option A: the SubflowAI relay (no cookie) 1. Install the SubflowAI Chrome extension and log into Substack as normal. 2. Open the extension, go to Settings, and open the Connect to Claude panel. It shows a short pair code. 3. In your AI client (Claude Desktop, Cowork, Code, or ChatGPT), add the SubflowAI Substack MCP server and give it the pair code when asked. 4. Done. Commands now run inside your browser, and your login never leaves Chrome. The full step-by-step with screenshots lives in the [SubflowAI connection guide](https://www.genaiunplugged.com/guides/connect-subflowai-to-claude/). ### Option B: bring your own cookie You need two values, both pasted into your config once. For the session cookie: 1. Open Chrome and go to any Substack page while logged in. 2. Press F12, then open the Application tab, then Cookies, then `.substack.com`. 3. Find `substack.sid` and copy its value (it starts with `s%3A`). For your subdomain, look at your Substack URL. In `https://yourname.substack.com`, the part before `.substack.com` is your subdomain. **Claude Desktop or Claude Cowork.** Paste this into `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, or `%APPDATA%\Claude\claude_desktop_config.json` on Windows. It uses `mcp-remote`, so you need Node.js installed. ```json { "mcpServers": { "substack": { "command": "npx", "args": [ "-y", "mcp-remote", "https://substackmcp.genaiunplugged.com/mcp", "--header", "X-BYOK-Substack-Cookie:PASTE_YOUR_SID_HERE", "--header", "X-BYOK-Substack-Subdomain:PASTE_YOUR_SUBDOMAIN_HERE" ] } } } ``` **Claude Code.** Paste this into `~/.claude/settings.json`. ```json { "mcpServers": { "substack": { "type": "http", "url": "https://substackmcp.genaiunplugged.com/mcp", "headers": { "X-BYOK-Substack-Cookie": "PASTE_YOUR_SID_HERE", "X-BYOK-Substack-Subdomain": "PASTE_YOUR_SUBDOMAIN_HERE" } } } } ``` Replace `PASTE_YOUR_SID_HERE` with your session cookie and `PASTE_YOUR_SUBDOMAIN_HERE` with your subdomain (for example, `genaiunplugged`). ### Authenticate with a magic link Save the config and fully restart your client. The app opens a browser window for you. Enter the email that identifies you, and we send a magic link. Click it, and you bounce back into Claude with the tools loaded. In Claude Code, run `/mcp` or just ask Claude to use a Substack tool, and it opens the browser for you. One thing to get right: the email is your identity, and it decides your tier. Use **either** the email you subscribe to GenAI Unplugged with on Substack, **or** the email you bought SubflowAI with. Paid SubflowAI customers get the full paid Substack toolset this way, even without a paid GenAI Unplugged Substack subscription. Do not use the email on your Claude account. The email must match your subscription or purchase exactly. ## Is it safe? Short version: you stay in control, and your password never enters the picture. - **No password, ever.** You authenticate with a magic link to your email. The server never asks for or stores your Substack password. - **On the relay, your login never leaves Chrome.** Commands run inside your own browser using the session you are already in. Nothing sensitive sits in a file, and one button in the extension cuts off every connected agent. - **On the cookie path, your cookie stays on your machine.** Your `substack.sid` lives in your local config and is sent with each request. It is never stored or logged on the server. Log out of Substack and it stops working. - **Drafts, not surprise publishes.** Claude creates and updates article drafts but does not publish full articles for you. Workflows pause for your approval before anything goes live. - **Conservative limits.** Because there is no official Substack API, the server keeps request limits deliberately low to protect your account from looking automated. ## Troubleshooting A few things trip people up. Most fixes take a minute. - **It will not connect, or the login page hangs.** Clear the client auth cache. Fully quit Claude (not just the window), then remove the `~/.mcp-auth` folder on macOS or Linux, or `%USERPROFILE%\.mcp-auth` on Windows. Reopen and re-authenticate. - **The relay says my session expired.** Open substack.com, log back in, and the extension reconnects on its own. The relay only works while you are logged in. - **The same email stopped working after a few tries.** The magic-link endpoint is rate limited per hour. Wait an hour, or test with a different subscriber email. - **The magic link says invalid or expired.** Some corporate and .edu mail scanners pre-open links. Click the link yourself from the original email, and use the Confirm button on the page rather than relying on a preview. - **Tools do not appear.** Check your config JSON is valid (no trailing commas), confirm your cookie has not expired, and make sure you fully quit and reopened the app. ## Go deeper - [Connect SubflowAI to Claude and ChatGPT, step by step](https://www.genaiunplugged.com/guides/connect-subflowai-to-claude/), the guided version that pairs the SubflowAI extension so your Substack login never leaves Chrome. - [SubflowAI: the fastest way to schedule Substack Notes](https://www.genaiunplugged.com/subflowai/) if you want a done-for-you product with a visual calendar. - [The full Substack Notes workflow with Claude Cowork](https://genaiunplugged.substack.com/p/schedule-substack-notes-with-claude-cowork-ai), the deep walkthrough this guide is built on. - [Claude Code extensions explained](https://www.genaiunplugged.com/compare/claude-code/), the wider map of skills, MCP servers, and more. - [Browse all our products](https://www.genaiunplugged.com/products/). ## Frequently asked questions ### Is there a Substack API? There is no official, public Substack API. Substack has internal endpoints its own apps use, but nothing documented or supported for developers. The SubflowAI Substack MCP server is a community tool that talks to those endpoints on your behalf, so Claude or ChatGPT can read and write your Substack without an official API. ### Do I have to paste my Substack cookie? No. There are two ways to connect. The SubflowAI relay (Connect to Claude) pairs with a short code and runs every command inside your own browser, so your Substack login never leaves Chrome and you paste nothing. The alternative is bring-your-own-cookie, where you paste your session cookie into your MCP config so the server can run headless with your browser closed. Most people use the relay. ### Can I use this with ChatGPT, or only Claude? Both. Through the SubflowAI relay, the SubflowAI Substack MCP server works with Claude Desktop, Claude Cowork, Claude Code, and ChatGPT. Any MCP client that supports remote servers can drive it. ### Can Claude post to Substack? Yes. With the SubflowAI Substack MCP server connected, Claude can create, schedule, edit, publish, and delete Substack Notes directly. It can also create and update full article drafts. Claude never publishes a full article on its own, it leaves drafts for you to review and send. ### What is a SubflowAI Substack MCP workflow? A workflow is a ready-made playbook the server hands Claude so it runs a whole multi-step job, not just one tool. Ask Claude to "fill my calendar with notes" or "add a table of contents to my article" and the `substack_workflow` tool tells it exactly which tools to chain, in what order, pausing for your approval before anything goes live. Three are live today: fill your calendar, insert a table of contents, and repurpose an article into Notes. It is free. ### Can Claude write a full Substack article? Yes. Using Claude Cowork or Claude Desktop with the SubflowAI Substack MCP server, Claude can draft a complete article from your notes or outline and push it to your Substack as a draft. You review and publish it yourself. Full article drafting is a PluggedIn (paid) feature. ### Is the SubflowAI Substack MCP server safe? Does it store my password? It never sees or stores your Substack password. You authenticate with a magic link to your email. On the SubflowAI relay, commands run inside your own browser and your login never leaves Chrome. On the cookie path, your session cookie is sent with each request and is never stored or logged on the server. You can revoke access any time by logging out of Substack. ### Is the SubflowAI Substack MCP server free? The notes tools, the calendar planning tools, and the core read tools are free for any GenAI Unplugged subscriber. Advanced tools like subscriber growth over time, per-post analytics, AI repurposing, and full article drafting are unlocked for PluggedIn members on the paid Substack tier, or for anyone with a paid SubflowAI license. ### Do I need to code to use it? No. Either pair the SubflowAI extension with a short code, or paste one config block into Claude Desktop, Claude Cowork, or Claude Code. There is no terminal, no git clone, and no server to run. Setup takes about five minutes. ### Is the SubflowAI Substack MCP against Substack's terms of service? Substack has no official API, so any automation tool, including this one, uses internal endpoints that are not officially supported. Use it at a reasonable cadence and at your own risk. The server enforces conservative rate limits to keep activity looking human, but you are responsible for how you use it. You stay in control, and you can revoke access any time by logging out of Substack. ### How many Substack Notes can I schedule at once? On the free tier you can bulk-schedule up to 7 Notes per batch, which covers a full week one a day. PluggedIn members can bulk-schedule up to 30 in a single call. Either way the server spaces the calls out to avoid tripping Substack's bot detection. ### Can I use the SubflowAI Substack MCP on the free Substack plan? Yes. The MCP works with any Substack publication. Tiering here is about your GenAI Unplugged subscription or your SubflowAI license, not your Substack plan: the notes, calendar, and core read tools are free for any GenAI Unplugged subscriber, and advanced analytics, title variants, AI repurposing, and full article drafting unlock for paid members. ### What is the viral notes creator? It is a free tool that hands Claude 13 named Substack Note formats, each with a clear use-when and a paste-ready prompt built from an analysis of thousands of high-performing Notes. Ask Claude for a format, write the Note, then schedule it, all in one conversation. The formats and their rules live inside the tool, not on this page.

Get the SubflowAI Substack MCP server

## Frequently Asked Questions ### Is there a Substack API? There is no official, public Substack API. Substack has internal endpoints its own apps use, but nothing documented or supported for developers. The SubflowAI Substack MCP server is a community tool that talks to those endpoints on your behalf, so Claude or ChatGPT can read and write your Substack without an official API. ### Do I have to paste my Substack cookie? No. There are two ways to connect. The SubflowAI relay (Connect to Claude) pairs with a short code and runs every command inside your own browser, so your Substack login never leaves Chrome and you paste nothing. The alternative is bring-your-own-cookie, where you paste your session cookie into your MCP config so the server can run headless with your browser closed. Most people use the relay. ### Can I use this with ChatGPT, or only Claude? Both. Through the SubflowAI relay, the SubflowAI Substack MCP server works with Claude Desktop, Claude Cowork, Claude Code, and ChatGPT. Any MCP client that supports remote servers can drive it. ### Can Claude post to Substack? Yes. With the SubflowAI Substack MCP server connected, Claude can create, schedule, edit, publish, and delete Substack Notes directly. It can also create and update full article drafts. Claude never publishes a full article on its own, it leaves drafts for you to review and send. ### What is a SubflowAI Substack MCP workflow? A workflow is a ready-made playbook the server hands Claude so it runs a whole multi-step job, not just one tool. Say 'fill my calendar with notes' or 'add a table of contents to my article' and the substack_workflow tool tells Claude exactly which tools to chain, in what order, pausing for your approval before anything is scheduled or published. Three workflows are live: fill your calendar, insert a table of contents, and repurpose an article into Notes. It is free. ### Can Claude write a full Substack article? Yes. Using Claude Cowork or Claude Desktop with the SubflowAI Substack MCP server, Claude can draft a complete article from your notes or outline and push it to your Substack as a draft. You review and publish it yourself. Full article drafting is a PluggedIn (paid) feature. ### Is the SubflowAI Substack MCP server safe? Does it store my password? It never sees or stores your Substack password. You authenticate with a magic link to your email. On the SubflowAI relay, commands run inside your own browser and your login never leaves Chrome. On the cookie path, your session cookie is sent with each request and is never stored or logged on the server. You can revoke access any time by logging out of Substack. ### Is the SubflowAI Substack MCP server free? The notes tools, the calendar planning tools, and the core read tools are free for any GenAI Unplugged subscriber. Advanced tools like subscriber growth over time, per-post analytics, AI repurposing, and full article drafting are unlocked for PluggedIn members on the paid Substack tier, or for anyone with a paid SubflowAI license. ### Do I need to code to use it? No. Either pair the SubflowAI extension with a short code, or paste one config block into Claude Desktop, Claude Cowork, or Claude Code. There is no terminal, no git clone, and no server to run. Setup takes about five minutes. ### Is the SubflowAI Substack MCP against Substack's terms of service? First, to be clear: this is an unofficial, independent tool and is not affiliated with, endorsed by, or approved by Substack, Inc. Substack has no official API, so any automation tool, including this one, uses internal endpoints that are not officially supported. Use it at a reasonable cadence and at your own risk. The server enforces conservative rate limits to keep activity looking human, but you are responsible for how you use it. You stay in control, and you can revoke access any time by logging out of Substack. ### How many Substack Notes can I schedule at once? On the free tier you can bulk-schedule up to 7 Notes per batch, which covers a full week one a day. PluggedIn members can bulk-schedule up to 30 in a single call. Either way the server spaces the calls out to avoid tripping Substack's bot detection. ### Can I use the SubflowAI Substack MCP on the free Substack plan? Yes. The MCP works with any Substack publication. Tiering here is about your GenAI Unplugged subscription or your SubflowAI license, not your Substack plan: the notes, calendar, and core read tools are free for any GenAI Unplugged subscriber, and advanced analytics, title variants, AI repurposing, and full article drafting unlock for paid members. ### What is the viral notes creator? It is a free tool that hands Claude 13 named Substack Note formats, each with a clear use-when and a paste-ready prompt built from an analysis of thousands of high-performing Notes. Ask Claude for a format, write the Note, then schedule it, all in one conversation. The formats and their rules live inside the tool, not on this page. --- # How to Connect SubflowAI to Claude & ChatGPT (Step by Step, 2026) URL: https://www.genaiunplugged.com/guides/connect-subflowai-to-claude/ > Connect SubflowAI to Claude or ChatGPT with a zero-setup relay that keeps your Substack login in Chrome, or run scheduled posts with Chrome closed. You already run your Substack Notes through SubflowAI. This guide shows you how to let an AI assistant, Claude Desktop, Claude Code, Claude Cowork, or ChatGPT, drive SubflowAI for you: "check how full my week is and fill the empty slots," "turn this article into five Notes and schedule them," "clean up my drafts." The assistant does the thinking, SubflowAI does the work on your Substack. There are two ways to connect. Most people want the first one. > **Note:** SubflowAI and the SubflowAI Substack MCP server are unofficial, independent tools built by GenAI Unplugged. They are not affiliated with, endorsed by, or approved by Substack, Inc. Substack has no official public API, so these tools work through Substack's internal endpoints on your behalf. Use them at your own risk. "Substack" is a trademark of Substack, Inc., used here only to describe compatibility. ## Before you start - SubflowAI installed and set up (you can already schedule Notes with it). - An **active paid SubflowAI license** (a trial will not unlock the AI connection). - An AI client that supports MCP connectors: Claude Desktop, Claude Code, Claude Cowork, or ChatGPT. When you connect, you agree to the [SubflowAI](https://genaiunplugged.com/subflowai/terms.html), [SubstackMCP](https://substackmcp.genaiunplugged.com/terms), and [GenAI Unplugged](https://genaiunplugged.com/terms) Terms and Privacy Policies. You will confirm this with a checkbox on the sign-in page before pairing. ## Mode 1: Relay (recommended, nothing to paste) This is the zero-setup path. Your Substack login **never leaves Chrome**. The assistant sends a request, SubflowAI runs it right there in your browser, and sends back the result. The one trade-off: your browser has to be open for a live request to run. (Notes you have already scheduled still publish on time even if Chrome is closed, because Substack schedules them natively.) **Step 1. Add the connector in your AI client.** In Claude or ChatGPT, add a connector and point it at: ``` https://substackmcp.genaiunplugged.com/mcp ``` **Step 2. Click "Connect with SubflowAI".** On the sign-in page that opens, tick the box to agree to the terms, then click the **Connect with SubflowAI** button. It shows you a short 8-character code (like `ABCD-EFGH`). **Step 3. Paste the code into SubflowAI.** Open SubflowAI, go to **Settings → Connect**, paste the code into the box, and click **Connect**. That is it. Return to your AI client and try a command: > "Is my Substack Notes calendar full next week? If not, draft Notes from my last article and fill the open slots." **To disconnect:** Settings → Connect → **Disconnect all agents**. Access is revoked instantly. ## Running with Chrome closed (standalone SubflowAI Substack MCP) The relay above is the **only** way to use SubflowAI's own tools (calendar planning, AI repurpose and refine), and it runs only while Chrome is open. If you want something different, either an agent that runs 24/7 with your **browser closed** (say a Claude Code or Cowork job every morning), or you only need the **standard Substack actions** (create, schedule, edit, publish, delete Notes, manage drafts, read analytics), use **SubflowAI Substack MCP** directly. It is the same server, set up as a standalone connection with your own Substack session, so it keeps working when Chrome is closed. Two things to know before you take this route: - **It does not include the SubflowAI-specific tools.** Calendar planning and AI repurpose/refine are relay-only. Standalone SubflowAI Substack MCP gives you the standard Substack toolset only. - **Paid SubflowAI customers are recognized by email.** Sign in to SubflowAI Substack MCP with the email you bought SubflowAI with and you get the full **paid** Substack toolset, even without a paid GenAI Unplugged Substack subscription. (Any GenAI Unplugged Substack subscriber can use it too, free or paid.) **Set it up here:** follow the [SubflowAI Substack MCP setup guide](https://www.genaiunplugged.com/guides/substack-mcp/). It walks through the whole thing step by step, including why AI "custom connectors" cannot pass header keys (so 24/7 setups paste a config block into a desktop config file instead), how to get your session, and how to sign in. ## Which should I pick? | | Relay (via the extension) | Standalone SubflowAI Substack MCP | |---|---|---| | SubflowAI tools (calendar, AI repurpose/refine) | Yes | No | | Standard Substack tools (notes, drafts, analytics) | Yes | Yes | | Works with Chrome closed | No | Yes | | Setup | Paste one code | Follow the SubflowAI Substack MCP guide | | Sign-in | Your paid SubflowAI license | Your email (paid SubflowAI customers included) | Use the **relay** for SubflowAI's own tools. Use **standalone SubflowAI Substack MCP** when you want the standard Substack actions running with Chrome closed. ## What you can ask your assistant to do Once connected, your AI assistant can plan, write, schedule, edit, and clean up your Substack Notes through SubflowAI, plus use SubflowAI's own tools: > "Check my week's capacity, find the open slots, and distribute these five Notes across them." > "Repurpose this article into a set of Notes in my voice, then schedule them one a day." > "List my scheduled Notes and delete the duplicate." You stay in control. You can watch what it does in SubflowAI, and disconnect any time. ## Frequently Asked Questions ### Do I need to paste my Substack cookie to connect SubflowAI to Claude? No. The relay needs no cookie at all. You add the connector in Claude or ChatGPT, click Connect with SubflowAI, and paste an 8-character code back into the extension. Your Substack login stays inside Chrome and is never sent to our server. A cookie is only involved if you separately set up the standalone SubflowAI Substack MCP to run with Chrome closed, which is a different setup and does not include SubflowAI's own tools. ### Can I run this with Chrome closed, 24/7? The SubflowAI relay runs only while Chrome is open, and it is the only way to use SubflowAI's own tools like calendar planning and AI repurpose and refine. If you want the standard Substack actions to run 24/7 with Chrome closed, set up SubflowAI Substack MCP directly. It is the same server, signed in by email, and it gives you the standard Substack tools but not the SubflowAI-specific ones. ### Do paid SubflowAI customers get anything on the standalone SubflowAI Substack MCP? Yes. If you sign into SubflowAI Substack MCP with the email you bought SubflowAI with, you get the full paid Substack toolset even without a paid GenAI Unplugged Substack subscription. The SubflowAI-specific tools stay relay-only, so use the relay for those. ### Do I need a paid SubflowAI license to connect? The relay requires an active paid SubflowAI license (not a trial). That paid license is what unlocks the full set of tools, including the calendar-planning and AI tools, through your AI assistant. ### Is connecting SubflowAI to Claude against Substack's terms? First, to be clear: SubflowAI and the SubflowAI Substack MCP server are unofficial, independent tools and are not affiliated with, endorsed by, or approved by Substack, Inc. Substack has no official public API, so any automation, including SubflowAI, works through internal endpoints. Use it at a reasonable cadence and at your own risk. SubflowAI only performs the actions you already do inside the extension, keeps conservative rate limits, and you can revoke agent access instantly with Disconnect all agents. ### How do I disconnect an AI agent from SubflowAI? Open SubflowAI, go to Settings, Connect, and click Disconnect all agents. That revokes the relay immediately. If you set up the standalone SubflowAI Substack MCP, remove its config from your client and log out of Substack to cut that access. --- # PubFlow OS Agents: Build Your AI Research Team URL: https://www.genaiunplugged.com/courses/pubflow-agents/ > Build 5 AI research agents for content research, SEO analysis, competitive intelligence, and technical verification, step by step. ## About This Course Build-in-public series: Create 5 AI research agents for content automation using Claude Code. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### What's included free vs paid? The Content Research Agent and SEO/AEO Agent templates are free. The Competitive Analyzer, Technical Verifier, and Gap Analyzer are part of the premium PubFlow OS Agents toolkit. ### Do I need Claude Code? Yes, these agents are built using Claude Code's agent architecture. You'll need Claude Pro and familiarity with slash commands. ### Can I customize these agents? Absolutely. The templates are starting points - you'll see exactly how they're built so you can modify them for your specific needs. ### What's PubFlow OS? PubFlow OS is my complete content automation system. These agents are components of the larger system, but work standalone too. ### Can I download and access all agents? Yes! Get the complete PubFlow OS Agents toolkit with all 5 agents, configuration files, and documentation ready to use. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # Prompt Engineering for AI Automation URL: https://www.genaiunplugged.com/courses/prompt-engineering/ > A complete prompt engineering course: LLM basics, zero/few-shot prompting, structured outputs, chain-of-thought, and RAG for AI automation. ## About This Course 9 lessons covering every prompt engineering technique that matters - from LLM fundamentals to building production AI automations. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Which AI models does this cover? The patterns work with any modern LLM - OpenAI, Claude, Gemini, open-source models. I demonstrate primarily with OpenAI in n8n workflows. ### Is this specific to n8n? While examples use n8n, the prompt engineering patterns apply anywhere you're using AI - Claude Projects, direct API calls, other automation tools. ### Do I get copy-paste prompts? Yes! Every lesson includes ready-to-use prompt templates you can adapt for your workflows. ### How is this different from generic prompt guides? This is a complete end-to-end course that builds your understanding systematically - from LLM fundamentals through advanced techniques like RAG and chain-of-thought, all the way to a practical capstone project. You'll learn every technique that actually matters for building reliable AI systems, not just tips and tricks. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # From Demo to Dependable: Production n8n Workflows URL: https://www.genaiunplugged.com/courses/production-n8n/ > Transform your proof-of-concept automations into production-ready systems. Learn the hidden costs, error handling, maintenance strategies, and client delivery that separate demos from dependable workflows. ## About This Course The 10-lesson guide to building n8n workflows that don't break in production. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Is this for beginners? This series assumes you already know n8n basics. If you're new to n8n, start with my free YouTube course first. ### Does this cover AI workflows specifically? The principles apply to all n8n workflows, including AI-powered ones. I cover topics like token budgets and model drift that are specific to AI. ### Is there a checklist I can use? Yes! The final lesson includes a 50-point production readiness checklist you can download and use for every project. ### Can I use this for client work? Absolutely. The series includes discovery questions, scoping templates, and handoff checklists specifically for client delivery. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # Build Your Content OS URL: https://www.genaiunplugged.com/courses/content-os/ > Learn the 10-stage content pipeline that powers a consistent publishing operation. From keyword research to distribution, build a system that creates quality content at scale. ## About This Course The complete 6-lesson guide to building an AI-powered content pipeline for consistent publishing. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### What tools do I need? The pipeline can be implemented with various tools. I cover both DIY approaches and my PubFlow OS system. ### Is this about AI writing? It's about AI-assisted writing. The system helps you write better and faster while maintaining your voice - it's not about fully automated content. ### Do I get templates? Yes! Each lesson includes downloadable templates - keyword worksheets, article briefs, audit checklists, and more. ### How long does setup take? You can implement the basic pipeline in a weekend. Full optimization takes 2-4 weeks of refinement. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # OpenClaw for Solopreneurs: AI Agents That Work While You Sleep URL: https://www.genaiunplugged.com/courses/openclaw/ > Set up and run OpenClaw AI agents safely and affordably, covering architecture, security, workflows, and cost optimization for non-developers. ## About This Course The 5-lesson guide to running OpenClaw AI agents safely - security, cost control, and practical workflows for solopreneurs. Includes a standalone live overview session. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Do I need coding experience for OpenClaw? Basic command-line comfort is needed - SSH, editing config files, running commands. If you've never used a terminal, start with our Claude Systems Masterclass first. ### How much does OpenClaw cost to run? Expect $25-30/month using DeepSeek for most monitoring loops, plus $5-20/month for VPS hosting. Claude Opus costs $300-750/month for the same usage - we cover cost optimization strategies in detail. ### Is OpenClaw safe to use? It can be, with proper security setup. We cover the real risks (prompt injection, credential exposure, the email deletion incident) and show you exactly how to mitigate them. This series doesn't sugarcoat the risks. ### How is OpenClaw different from Claude Code? Claude Code is a tool you use (terminal-based, you initiate every action). OpenClaw is an agent that works for you (runs autonomously on a schedule, monitors systems while you sleep). They complement each other. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # n8n AI Automation - Zero to Hero URL: https://www.genaiunplugged.com/courses/n8n/ > Learn n8n step by step: build AI-powered workflows, connect APIs, handle errors, and ship production automations, no coding experience required. ## About This Course Complete n8n automation course with 42 lessons covering everything from basics to AI-powered production workflows. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Is this course really free? Yes! The entire 42-lesson course is available free on YouTube. I believe automation skills should be accessible to everyone. ### Do I need coding experience? No coding required! n8n is a visual workflow builder. I cover some JavaScript for advanced use cases, but it's not required to get value from the course. ### Which version of n8n does this course cover? The course covers n8n Cloud and self-hosted versions with the latest 2025/2026 interface updates. ### How is this different from other n8n tutorials? This is a structured curriculum, not random tutorials. The course builds from fundamentals to production-ready AI workflows with real-world projects at each stage. ### Can I get help if I'm stuck? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # MCP Masterclass: Connect AI to Everything URL: https://www.genaiunplugged.com/courses/mcp/ > Take an MCP crash course covering the Model Context Protocol: build MCP servers, configure clients, and connect Claude or ChatGPT to your tools. ## About This Course The complete 8-lesson guide to building AI integrations with Model Context Protocol (MCP). ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### What is MCP? Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude connect to external tools and data sources. It's how you give AI access to your files, databases, APIs, and more. ### Do I need coding experience? Basic familiarity with JSON and command line is helpful. I walk through everything step-by-step, so you can follow along even if you're not a developer. ### Which AI assistants support MCP? Claude Desktop (via Anthropic), Cursor, Windsurf, and other MCP-compatible clients. The protocol is open, so support is growing. ### Is this course free? Yes! All 8 lessons are available free on Substack. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # Claude Systems Masterclass URL: https://www.genaiunplugged.com/courses/claude-systems/ > Build custom AI assistants and content workflows using Claude Projects, made for real business automation systems that work. ## About This Course Master Claude Projects to build AI assistants, content systems, and business automation that actually works. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Is this course free? Yes! All 14 lessons are available free on Substack. Premium templates and resources are included for subscribers. ### Do I need Claude Pro? Yes, you'll need Claude Pro ($20/month) to access Claude Projects and follow along with the hands-on exercises. ### What's the difference between this and the n8n course? The Claude Systems Masterclass focuses on building AI assistants using Claude Projects, while the n8n course teaches workflow automation. They complement each other - many students take both. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # Claude Code Masterclass: Build AI Systems Without Writing Code URL: https://www.genaiunplugged.com/courses/claude-code/ > Master Claude Code to build AI systems, automate workflows, and create tools in plain English, from extension stacks to multi-agent research teams. ## About This Course The complete guide to building AI systems with Claude Code - no coding experience required. From setup to multi-agent teams. ### What You'll Learn This comprehensive course takes you from complete beginner to building production-ready automations. ## Frequently Asked Questions ### Do I need coding experience? No. Claude Code accepts plain English instructions and writes the code for you. This course is designed for non-developers who want to build real systems. ### What do I need to get started? A Claude Pro, Max, Teams, or Enterprise subscription ($20+/month) and a terminal (Mac Terminal, Windows PowerShell, or Linux terminal). That's it. ### How is this different from the Claude Systems Masterclass? The Claude Systems Masterclass teaches Claude Projects (browser-based AI assistants). This course teaches Claude Code (terminal-based AI coding agent). Claude Code can build software, automate tasks, and create tools that run independently. ### Is this course free? Yes! All lessons are available free on Substack. Premium templates and downloadable assets are included for subscribers. ### Can I get support? Join my community on Substack where I answer questions and share additional tips. Premium members get priority support. --- # n8n vs Claude: Code, Cowork, Skills, Opal and Make Compared (2026) URL: https://www.genaiunplugged.com/compare/n8n-vs-claude/ > n8n vs Claude Code, Cowork, Skills, Opal and Make, compared by someone who taught n8n for a year before switching. Costs and picks for each. n8n or Claude? It's the question wasting people months in AI automation right now. This hub compares n8n head-to-head against every Claude option people actually search for (Code, Cowork, Skills) plus the adjacent tools (Google Opal, Make, Codex). It's written by someone who taught n8n for a year, built a 47-lesson course on it, then switched almost entirely to Claude Code. Each comparison links to the full breakdown. ## The short answer Across 8 categories building the same AI research agent, Claude Code scored 33 to n8n's 23. But the score isn't the whole story: n8n still wins when you need a visual workflow a non-coder can hand off and maintain, scheduled triggers, and 400+ prebuilt integrations. Claude Code wins on flexibility, natural-language building, and ceiling. The same verdict roughly holds for Make and Zapier (same category as n8n). ## n8n vs the alternatives at a glance | Tool | Setup | Cost | Best for | |---|---|---|---| | **n8n** | Visual nodes (self-host or cloud) | Free self-hosted / paid cloud | Handoff-friendly, scheduled, integration-heavy workflows | | Claude Code | Terminal, natural language | From $20/mo (Claude) | Open-ended agents, max flexibility | | Claude Cowork | No terminal, chat-style | Claude subscription | Ad-hoc agent tasks, research | | Claude Skills | Markdown skill files | Claude subscription | Reusable logic across tasks | | Google Opal | No-code, visual | Free (Google) | Simplest, fastest to finish | | Make | No-code, visual | Per-operation pricing | Polished managed automation | | OpenAI Codex | Terminal / IDE | From $20/mo (OpenAI) | Coding-agent flexibility | ## n8n vs Claude Code We built the same AI research agent in both and scored 8 categories: Claude Code won 33 to 23. Claude Code wins on flexibility, natural-language building, and ceiling; n8n wins on visual workflows a non-coder can maintain, scheduled triggers, and 400+ prebuilt integrations. Pick n8n for handoff-friendly automations, Claude Code for open-ended agents. **Read the full breakdown:** [n8n vs Claude Code: 8-Category Comparison With Real Scores](https://genaiunplugged.substack.com/p/n8n-vs-claude-code-comparison) ## n8n vs Claude Cowork Claude Cowork is Claude's agentic workspace with no terminal — the easiest way to run Claude as an agent. Versus n8n, Cowork wins on zero-setup natural-language tasks and research; n8n wins when you need a repeatable, scheduled, visually-mapped workflow others can maintain. Use Cowork for ad-hoc agent work, n8n for productionized pipelines. **Read the full breakdown:** [Claude Cowork tutorials and workflows](https://genaiunplugged.substack.com/p/claude-skills-reusable-workflows-code-cowork) ## n8n vs Claude Skills Claude Skills are reusable, auto-invoked capabilities you give Claude Code/Cowork — closer to writing a reusable function than wiring nodes. Versus n8n, Skills win on flexibility and reuse across tasks; n8n wins on visual debugging and prebuilt service connectors. Reach for Skills when the logic is the hard part, n8n when the integrations are. **Read the full breakdown:** [Claude Skills, Commands, Hooks and Agents Guide](https://genaiunplugged.substack.com/p/claude-code-skills-commands-hooks-agents) ## n8n vs Google Opal Google Opal is the simplest of the three — you'll finish building a workflow fastest, but you hit a ceiling sooner. n8n is the most powerful and most complex, built for production pipelines. The right pick isn't the most powerful tool; it's the one you'll actually finish and use, matched to your technical comfort. Beginners start with Opal, builders graduate to n8n. **Read the full breakdown:** [Google Opal vs n8n vs Make: Newsletter Repurposing Head-to-Head](https://genaiunplugged.substack.com/p/google-opal-n8n-make-comparison) ## n8n vs Make n8n and Make are the same category — visual, node-based automation — so the comparison comes down to fit, not a winner. Make is more polished and hosted; n8n is open-source, self-hostable, and cheaper at scale with no per-operation pricing. Choose Make for the smoothest managed experience, n8n for control, self-hosting, and cost predictability. **Read the full breakdown:** [Google Opal vs n8n vs Make: Head-to-Head](https://genaiunplugged.substack.com/p/google-opal-n8n-make-comparison) ## n8n vs OpenAI Codex OpenAI Codex is in the same family as Claude Code — a natural-language coding agent — so versus n8n the tradeoff mirrors the Claude Code comparison: Codex wins on flexibility and open-ended building, n8n wins on visual workflows, scheduling, and prebuilt integrations. If you're choosing between the two agents themselves, that's a separate comparison. **Read the full breakdown:** [OpenAI Codex Step-by-Step Guide: Setup, Claude Code, and Cost](https://genaiunplugged.substack.com/p/openai-codex-setup-guide-beginner) ## Go deeper - [Free n8n Full Course: Zero to Hero (47 lessons)](https://genaiunplugged.substack.com/p/free-n8n-full-course-zero-to-hero-ai-automation) - [Claude Code Channels Guide (Telegram + Discord)](https://genaiunplugged.substack.com/p/claude-code-channels-guide-telegram-discord) - [Claude Code MCP Servers, Hooks and Automation](https://genaiunplugged.substack.com/p/claude-code-mcp-servers-hooks-automation) - [Build an AI Research Team with Claude Code Agents](https://genaiunplugged.substack.com/p/claude-code-agents-ai-research-team) ## Frequently asked questions ### Is n8n dead in 2026? No. n8n lost a head-to-head against Claude Code (23 to 33 across 8 categories), but it still wins for visual workflows a non-coder can maintain, scheduled triggers, and 400+ prebuilt integrations. It's the better pick when an automation needs to be handed off and run unattended. ### Should I learn n8n or Claude Code first? If you want open-ended AI agents and maximum flexibility, learn Claude Code. If you want drag-and-drop automations with prebuilt integrations that a non-coder can maintain, learn n8n. Someone who taught n8n for a year switched mostly to Claude Code, but still recommends n8n for handoff-friendly, integration-heavy work. ### Does the n8n vs Claude Code verdict apply to Make and Zapier? Roughly, yes. Make.com and Zapier are in the same visual-automation category as n8n, so the comparison against Claude Code holds across the board, with small differences in pricing and integrations. ### What's the difference between Claude Code, Cowork, and Skills versus n8n? Claude Code is the terminal agent (max flexibility), Cowork is the no-terminal agentic workspace (easiest), and Skills are reusable capabilities you give either. All three trade n8n's visual nodes and prebuilt connectors for natural-language flexibility and reuse. --- [Start the free n8n course](https://genaiunplugged.substack.com/p/free-n8n-full-course-zero-to-hero-ai-automation) · [Build AI agents with the Agents Toolkit](https://genaiunplugged.com/products/) ## Frequently Asked Questions ### Is n8n dead in 2026? No. n8n lost a head-to-head against Claude Code (23 to 33 across 8 categories), but it still wins for visual workflows a non-coder can maintain, scheduled triggers, and 400+ prebuilt integrations. It's the better pick when an automation needs to be handed off and run unattended. ### Should I learn n8n or Claude Code first? If you want open-ended AI agents and maximum flexibility, learn Claude Code. If you want drag-and-drop automations with prebuilt integrations that a non-coder can maintain, learn n8n. Someone who taught n8n for a year switched mostly to Claude Code, but still recommends n8n for handoff-friendly, integration-heavy work. ### Does the n8n vs Claude Code verdict apply to Make and Zapier? Roughly, yes. Make.com and Zapier are in the same visual-automation category as n8n, so the comparison against Claude Code holds across the board, with small differences in pricing and integrations. ### What's the difference between Claude Code, Cowork, and Skills versus n8n? Claude Code is the terminal agent (max flexibility), Cowork is the no-terminal agentic workspace (easiest), and Skills are reusable capabilities you give either. All three trade n8n's visual nodes and prebuilt connectors for natural-language flexibility and reuse. --- # Claude Code Extensions: Skills, Commands, Hooks, Subagents, MCP & Channels (2026) URL: https://www.genaiunplugged.com/compare/claude-code/ > See what skills, commands, hooks, subagents, CLAUDE.md, MCP servers and channels do in Claude Code, and when to use each layer. Claude Code is more than a terminal chat. It's an extensible agent platform, and people keep searching for the same set of primitives: skills, slash commands, hooks, subagents, CLAUDE.md, MCP servers, channels, and plugins. This hub explains what each one does, when to reach for it, and links to the full build guide for every layer. ## The short answer Think of Claude Code as a 4-layer extension stack: CLAUDE.md (project memory), skills (reusable, auto-invoked capabilities), hooks (rules that fire on events), and subagents (separate agents with their own context windows). On top of that, MCP servers connect Claude Code to external tools, channels push notifications into your terminal, and plugins package and share the whole setup. Start with CLAUDE.md and one skill; add the rest as you need them. ## Skills, slash commands, hooks and CLAUDE.md These are Claude Code's core extension layers. CLAUDE.md holds your project memory and rules. Skills are reusable capabilities Claude auto-invokes when relevant. Hooks fire rules on events (before/after a tool runs). Slash commands are saved prompts you trigger by name. Together they form a 4-layer stack you can build in about 20 minutes, with a decision framework for picking the right layer. **Read the full breakdown:** [Claude Code Skills, Commands, Hooks & Agents Guide (and What Goes in CLAUDE.md)](https://genaiunplugged.substack.com/p/claude-code-skills-commands-hooks-agents) ## Subagents Subagents are separate Claude Code agents, each with its own context window, that run in parallel. A common pattern is a 3-agent research team (researcher, writer, reviewer) working at the same time while you do something else. Use subagents when one context window isn't enough or when tasks can run independently, rather than cramming everything into a single agent. **Read the full breakdown:** [I Built a 3-Agent Research Team in Claude Code (They Run in Parallel)](https://genaiunplugged.substack.com/p/claude-code-agents-ai-research-team) ## MCP servers MCP (Model Context Protocol) servers connect Claude Code to outside tools and data, like Perplexity for web search, Firecrawl for scraping, or Notion for your docs. Pair them with automation hooks (formatting, safety, quality checks) so Claude Code can both reach external systems and enforce your rules. MCP is how you extend Claude Code beyond your local files. **Read the full breakdown:** [How to Set Up MCP Servers and Hooks in Claude Code](https://genaiunplugged.substack.com/p/claude-code-mcp-servers-hooks-automation) ## Channels (Telegram and Discord) Claude Code Channels push webhooks, alerts, and chat messages between Claude Code and apps like Telegram and Discord, so you can drive your terminal from your phone or get notified when a long task finishes. The full guide walks through Telegram, Discord, and custom webhook setup in about 30 minutes, including the channel code. **Read the full breakdown:** [Claude Code Channels Setup Guide: Telegram, Discord, and Custom Webhooks](https://genaiunplugged.substack.com/p/claude-code-channels-guide-telegram-discord) ## Plugins Plugins package your Claude Code setup (skills, commands, hooks) so you can reuse and share it. The structure most tutorials get wrong: a correct .claude-plugin/plugin.json, the Claude Agent SDK, GitHub Actions v1, and a marketplace install path. Build a plugin once your config is worth reusing across projects or distributing to others. **Read the full breakdown:** [How to Create a Claude Code Plugin (and Why Most Tutorials Get the Structure Wrong)](https://genaiunplugged.substack.com/p/create-claude-code-plugin) ## Go deeper - [Connect Substack to Claude with the SubflowAI Substack MCP server](https://www.genaiunplugged.com/guides/substack-mcp/) - [Train Claude Code to write in your brand voice](https://genaiunplugged.substack.com/p/train-claude-brand-voice) - [Build a technical content verification subagent (Build Log #5)](https://genaiunplugged.substack.com/p/claude-code-subagent-technical-content-verification) - [Build a research AI agents automation in Claude Code](https://genaiunplugged.substack.com/p/build-research-ai-agents-automation-claude-code) - [Turn Claude Code into a full content system](https://genaiunplugged.substack.com/p/claude-code-content-system-full-ai-pipeline) - [Browse all Claude Code tutorials](https://genaiunplugged.substack.com/t/claude-code-tutorials) ## Frequently asked questions ### What is CLAUDE.md in Claude Code? CLAUDE.md is Claude Code's project memory file. It holds your instructions, conventions, and context so Claude follows your rules automatically on every task. It's the base layer of the 4-layer extension stack, beneath skills, hooks, and subagents. ### What's the difference between a Claude Code skill and a subagent? A skill is a reusable capability Claude auto-invokes inside the current session when it's relevant. A subagent is a separate agent with its own context window that can run in parallel. Use a skill for reusable logic, a subagent when you need isolation or concurrency. ### How do I connect Claude Code to Telegram or Discord? Use Claude Code Channels, which push webhooks, alerts, and chat messages between Claude Code and apps like Telegram and Discord. The setup (Telegram, Discord, or custom webhooks) takes about 30 minutes and lets you drive your terminal from your phone or get notified when tasks finish. ### What are MCP servers in Claude Code? MCP (Model Context Protocol) servers connect Claude Code to external tools and data, such as Perplexity for search, Firecrawl for scraping, or Notion for documents. They are how you extend Claude Code beyond your local files. --- [Browse all Claude Code tutorials](https://genaiunplugged.substack.com/t/claude-code-tutorials) · [Build AI agents with the Agents Toolkit](https://genaiunplugged.com/products/) ## Frequently Asked Questions ### What is CLAUDE.md in Claude Code? CLAUDE.md is Claude Code's project memory file. It holds your instructions, conventions, and context so Claude follows your rules automatically on every task. It's the base layer of the 4-layer extension stack, beneath skills, hooks, and subagents. ### What's the difference between a Claude Code skill and a subagent? A skill is a reusable capability Claude auto-invokes inside the current session when it's relevant. A subagent is a separate agent with its own context window that can run in parallel. Use a skill for reusable logic, a subagent when you need isolation or concurrency. ### How do I connect Claude Code to Telegram or Discord? Use Claude Code Channels, which push webhooks, alerts, and chat messages between Claude Code and apps like Telegram and Discord. The setup (Telegram, Discord, or custom webhooks) takes about 30 minutes and lets you drive your terminal from your phone or get notified when tasks finish. ### What are MCP servers in Claude Code? MCP (Model Context Protocol) servers connect Claude Code to external tools and data, such as Perplexity for search, Firecrawl for scraping, or Notion for documents. They are how you extend Claude Code beyond your local files. --- # Dheeraj Sharma - AI Systems Builder & Creator of the Unplugged Method URL: https://www.genaiunplugged.com/author/dheeraj-sharma/ > Creator of the Unplugged Method and the n8n Zero to Hero course (42 lessons, 31+ hours). Builds AI automation systems and teaches solopreneurs to end manual chaos. ## About Dheeraj Sharma I build AI automation systems and teach solopreneurs how to do the same. I'm the creator of **[the Unplugged Method](/about/)** — a 3-phase framework for ending manual chaos through simple AI systems. I'm the creator of **GenAI Unplugged**, where I write about practical AI automation for people who build businesses, not just prototypes. My focus is on systems that work in production -- the kind you can trust with real workflows, real data, and real deadlines. ## What I Teach I create courses, tutorials, and written guides focused on turning AI tools into reliable business systems. You can read the full course overview and syllabus in my [free n8n Full Course: Zero to Hero AI Automation](https://genaiunplugged.substack.com/p/free-n8n-full-course-zero-to-hero-ai-automation) article on Substack. ### n8n Zero to Hero (42 Lessons, 31+ Hours) My flagship course covers everything from your first workflow to production-grade automation. 42 video lessons with full written tutorials, code examples, and troubleshooting guides. **Topics covered:** - Workflow fundamentals and node configuration - Data transformation with the Code node (JavaScript and Python) - API integrations and webhook handling - Error handling and retry strategies - AI-powered workflows with OpenAI, Claude, and local models - Database operations and data persistence - Scheduling, triggers, and event-driven automation - Production deployment and monitoring [Start the n8n Zero to Hero course](/courses/n8n/) ### More Courses - [Claude Systems Masterclass](/courses/claude-systems/) -- 15 lessons on building production AI systems with Claude - [From Demo to Dependable](/courses/production-n8n/) -- 10 lessons on hardening n8n workflows for production - [Build Your Content OS](/courses/content-os/) -- 6 lessons on automated content pipelines - [Prompt Engineering](/courses/prompt-engineering/) -- 9 lessons on writing prompts that work ## What I Build Beyond teaching, I build and ship tools for content creators and automation builders: - **SubflowAI** -- Substack Notes scheduling tool for consistent publishing - **Agents Toolkit** -- Research, SEO, and quality agents for content creators - **n8n Mastery Bundle** -- All workflows, cheat sheets, and resources from the n8n course ## Where to Find Me - **Newsletter**: [GenAI Unplugged on Substack](https://genaiunplugged.substack.com) -- Weekly articles on AI automation - **YouTube**: [@genaiunplugged](https://www.youtube.com/@genaiunplugged) -- Video tutorials and walkthroughs - **LinkedIn**: [Dheeraj Sharma](https://www.linkedin.com/in/dheerajsharma14/) ## My Approach I don't write about AI hype. Every article and lesson starts with a real problem I've solved or a system I've built. If I haven't tested it myself, I don't teach it. My content follows three principles: 1. **Show the real numbers** -- Actual costs, real timelines, tested results 2. **Build for production** -- Error handling, monitoring, and recovery baked in from day one 3. **Keep it practical** -- Copy-paste code blocks, step-by-step setup guides, and troubleshooting sections in every tutorial --- # Application Received! URL: https://www.genaiunplugged.com/affiliates/thank-you/ > Your affiliate application has been received. We'll get back to you within 24 hours. --- # Join the Next AI Foundations Cohort URL: https://www.genaiunplugged.com/academy/apply/ > Founding Cohort is sold out. Join the next cohort interest list and tell me whether you prefer in-person, virtual, or 1:1 support. --- # Stop Falling Behind on AI URL: https://www.genaiunplugged.com/academy/ai-foundations-in-person/ > You've opened ChatGPT. You've watched those AI tutorials. You even started a course - made it to lesson 3. But nothing stuck. Nothing changed how you actually use AI for work. And every week, the gap between you and everyone else using AI gets a little wider. ## Frequently Asked Questions ### Do I need any technical background? None. If you can use email and a web browser, you have everything you need. I start from zero and build up from there. ### I'm busy. Is this actually worth the time? 6 sessions × 90 minutes = 9 hours across 6 weeks. Most people spend more than that in a single month wondering what AI can do for them and never acting on it. The program is designed for professionals with full schedules — I include practice exercises you can do in under 10 minutes between sessions. By week 2, most students are saving more time than they're putting in. ### What do I need to bring? Your laptop and your work problems. We set up all the tools together in class. You'll create a free Claude account in Session 1 - I walk you through it step by step. ### Why only 8 students? When the goal is applying AI to 8 different businesses in a single session, everyone needs real hands-on time. At 9 or 10, the quality drops. I'd rather run more cohorts than compromise the experience. ### I've tried online courses and never finished. Why is this different? Three things no online course can give you: accountability (you can't ghost a room of 7 people counting on you), real-time help (stuck for 30 seconds, not 30 minutes), and YOUR problems (every exercise uses your real work, not textbook examples). ### Can I really learn AI in 6 weeks? You won't become an AI engineer - that's not the goal. In 6 weeks, you'll go from anxious and overwhelmed to confidently using AI in your daily work. Most people start seeing real results by Session 2. ### What day and time are sessions? Saturday mornings. The exact time is confirmed with enrolled students to fit the group. Location is in the greater Philadelphia area (Montgomery County, PA). ### What if I miss a session? Every session is recorded. You'll have access within 24 hours. I recommend attending live for the hands-on component, but life happens. ### What's the refund policy? Complete Session 1. If you don't see the value, full refund - no questions asked. 50% refund through Session 2. No refunds after Session 3. I'm confident you'll know it's worth it by the end of the first session. ### Will AI tools cost me money? We set up Claude Pro ($20/month) in Session 1 - that's the primary tool throughout the program. Some sessions may use additional free or low-cost tools. I'll share exact costs before you need to pay for anything. ### Is this just about ChatGPT? No. I teach AI as a skill, not a single product. We use the full Claude ecosystem - Chat, Projects, Co-work, and Code - because together they offer a learning progression that ChatGPT simply doesn't have. But the frameworks you learn - prompting, system thinking, workflow design - transfer to any AI tool. ### What happens after the 6 weeks? You stay in the WhatsApp alumni community with all graduates. An Advanced Batch is in development - deeper automation, advanced agents, and AI-powered products. 1:1 coaching is also available. ### Can I still join the founding cohort? No. The founding cohort is sold out. You can apply for the next cohort interest list, and I will follow up to confirm whether in-person, virtual, or 1:1 support is the best fit. ### Where exactly are the sessions held? Greater Philadelphia area (Montgomery County, PA). The exact address is shared with enrolled students. Free parking, comfortable learning environment, and coffee. --- # Application Received URL: https://www.genaiunplugged.com/academy/apply/thank-you/ > Thank you for applying. --- # The Agent That Replaced My $200/Month Competitor Analysis Tool URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/the-agent-that-replaced-my-200month-competitor-analysis-tool/ > Build an AI agent that monitors competitors, spots positioning gaps, and tracks moves, replacing a $200 a month analysis tool. The Competitive Analyzer is a Claude Code subagent that pairs Perplexity search with Firecrawl scraping to track competitor content, pricing, and positioning. It runs a weekly report or an on-demand topic check, then surfaces content gaps the reader can actually fill instead of just listing what changed on competitor sites. ## What you will be able to do - Run a weekly /competitive-check report that lists new competitor content, pricing changes, and content gaps in about 90 seconds. - Run a topic-specific /competitive-check --topic "X" scan before writing an article to see who has covered the topic and what angles they used. - Build a competitor watchlist file covering direct competitors, adjacent players, and tool-specific sources. - Spot whitespace topics with zero competitor coverage and turn them into content angles with a recommended positioning. - Replace a paid competitor monitoring subscription with an agent that costs about $1.20 a month in API usage. ## Before you start - Claude Code CLI installed (verify with claude --version) - Free Perplexity API key and free Firecrawl API key - Perplexity and Firecrawl configured as MCP servers in Claude Code - Business context and content strategy profile files plus a completed competitor watchlist, set up per Article 1 of the series ## Reference | Setting | Value | |---|---| | Weekly command | /competitive-check (no topic flag), about 90 seconds | | Topic command | /competitive-check --topic "AI automation costs", about 45 seconds | | Agent name | competitive-analyzer | | Model | sonnet | | Tools | Read, Glob, Grep, Write, mcp__perplexity__search, mcp__perplexity__reason, mcp__firecrawl__firecrawl_scrape, mcp__firecrawl__firecrawl_map | | Watchlist file | .claude/research-profiles/competitor-watchlist.md | | Watchlist categories | Direct competitors, adjacent players, tool-specific sources, 3 to 5 names each | | Weekly cost | About $1.20/month, 4 reports at roughly $0.30 each | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Agent can't run any commands | Claude Code CLI isn't installed. Install it with curl -fsSL https://claude.ai/install.sh \| bash and verify with claude --version | | Search or scrape steps fail silently | Perplexity or Firecrawl API key is missing. Get free keys at perplexity.ai/api and firecrawl.dev | | Agent has no search or scrape tools available | MCP servers for Perplexity and Firecrawl aren't configured in Claude Code settings | | Report comes back generic with no real competitor names | The competitor watchlist file hasn't been created yet at .claude/research-profiles/competitor-watchlist.md | | Report reads like a data dump instead of a recommendation | Business context and content strategy profile files aren't loaded, so the agent has no lens to interpret gaps through | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 4 on Substack →

## More in this section - [Lesson 5: Never Publish Outdated Technical Content Again (Verification Agent Build)](/courses/pubflow-agents/lessons/never-publish-outdated-technical-content-again/) - [Lesson 6: My Agent Found 47 Content Opportunities (Gap Analyzer Build)](/courses/pubflow-agents/lessons/my-agent-found-47-content-opportunities/) ## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # Never Publish Outdated Technical Content Again (Verification Agent Build) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/never-publish-outdated-technical-content-again/ > Build a verification agent that checks technical accuracy before publishing, so outdated information never makes it live. The Technical Verifier is a Claude Code subagent that checks an article's technical claims (commands, code, pricing, UI paths) against current official documentation before publication. It uses Perplexity for research and Firecrawl to scrape official sources, then produces a verification report with issues and suggested fixes, without auto-editing the article. ## What you will be able to do - Build a Claude Code subagent (technical-verifier) that extracts technical claims from a draft article. - Run /verify against a draft to get a report of claims checked, issues found, and verified-accurate sections. - Catch outdated pricing, deprecated model names, and wrong plan limits before publishing them. - Choose a verification depth level (Quick, Standard, Deep) matched to how critical the article is. - Fit verification into a pre-publish workflow: draft, review, verify, fix, re-verify, finalize. ## Before you start - Claude Code CLI installed (curl -fsSL https://claude.ai/install.sh | bash) - Free Perplexity API key and free Firecrawl API key - MCP servers for Perplexity and Firecrawl configured in Claude Code - Agent folder structure (.claude/agents/) and research profile files set up from Article 1 of the series ## Reference | Setting / Command | Value | Notes | |---|---|---| | Command | /verify | Runs the verification agent against a draft | | Depth: Quick | 30s, major claims only | Quick sanity check | | Depth: Standard (default) | 90s, all explicit claims | Normal publication | | Depth: Deep | 3 min, claims plus implied assumptions | Use for flagship or critical tutorials | | Agent tools | Read, Glob, Grep, Write, mcp__perplexity__search, mcp__perplexity__reason, mcp__firecrawl__firecrawl_scrape | Declared in the subagent's frontmatter | | Agent model | sonnet | Set in subagent frontmatter | | Report fields | Claims Checked, Issues Found (critical/minor), Verified Accurate, Publish Status | Output structure of the verification report | | Cost per verification | About $0.20 | From the author's ROI breakdown | ## Common errors and fixes | What Goes Wrong | The Fix | |---|---| | Article references a retired model name (e.g. "GPT-4") that no longer appears in current pricing | Replace with the current model name and current price, sourced from the official pricing page | | Article states a cost multiplier that's now wrong (e.g. "Opus costs 3x more than Sonnet") | Update to the current multiplier calculated from current official pricing, with the source cited | | Article lists a tool's plan or execution limits (e.g. n8n tier limits) that have since changed | Correct the numbers to match current plan pages before publishing | | Content relies on the LLM's own training data instead of live research, so it confidently states outdated info | Verify claims against Perplexity search results and Firecrawl-scraped official docs, not model memory | | A critical pricing error gets treated the same as a minor nitpick | Apply human judgment to the report since the agent never auto-fixes, it only flags critical versus minor issues | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 5 on Substack →

## More in this section - [Lesson 4: The Agent That Replaced My $200/Month Competitor Analysis Tool](/courses/pubflow-agents/lessons/the-agent-that-replaced-my-200month-competitor-analysis-tool/) - [Lesson 6: My Agent Found 47 Content Opportunities (Gap Analyzer Build)](/courses/pubflow-agents/lessons/my-agent-found-47-content-opportunities/) ## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # My AI Agent Analyzes SERPs and Optimizes for ChatGPT (Build Log #3) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/my-ai-agent-analyzes-serps-and-optimizes-for-chatgpt/ > Build an AI agent that analyzes SERPs and optimizes content for ChatGPT answers, using a free downloadable agent template. The SEO/AEO Research Agent is a Claude Code subagent that pulls real keyword and SERP data through Perplexity and Firecrawl MCP servers, then adds Answer Engine Optimization analysis showing how to get cited by ChatGPT, Claude, and Perplexity, not just ranked on Google. It runs as the command /seo-research and finishes in under a minute. ## What you will be able to do - Build the seo-aeo-researcher.md agent file with the exact YAML frontmatter and tool list the article specifies. - Run /seo-research (or --topic "your topic") to generate keyword, SERP, and AEO data in 30-60 seconds. - Identify competitor content gaps and AEO citation opportunities the agent surfaces automatically. - Control Perplexity API cost by batching queries to a maximum of two calls per research run. - Read the structured JSON and markdown research output saved under research-outputs/by-post/{post_id}/. ## Before you start - Claude Code CLI installed (npm install -g @anthropic-ai/claude-code) with Node.js present (check: node --version). - MCP servers for Perplexity and Firecrawl configured in Claude Code, with free API keys from perplexity.ai/api and firecrawl.dev. - The .claude/agents/ folder structure and research profile files (business-context.md, content-strategy.md) set up per Articles 1 and 2 of this series. ## Reference | Setting | Value | |---|---| | Command | `/seo-research ` or `/seo-research --topic "your topic"` | | Agent file | `.claude/agents/seo-aeo-researcher.md` | | Model | sonnet | | Tools granted | Read, Glob, Grep, Write, mcp__perplexity__search, mcp__perplexity__reason, mcp__firecrawl__firecrawl_scrape, mcp__firecrawl__firecrawl_search | | JSON output | `.claude/research-outputs/by-post/{post_id}/seo-research.json` | | Markdown output | `.claude/research-outputs/by-post/{post_id}/seo-research.md` | | Cost rule | Maximum 2 Perplexity calls per run: 1 search call, 1 reason call | | Cost result | Batching cut cost per research from about $0.85 to about $0.25 | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Using an LLM to imagine keyword data hallucinates search volumes and guesses at competition levels | Use Perplexity MCP for real search data and Firecrawl MCP to scrape actual SERP results instead of LLM guesses | | Initial agent version made 6+ separate Perplexity calls per research run, costing about $0.85 each | Batch all keyword queries into one comprehensive Perplexity search call, cutting cost 70% to about $0.25 | | Using mcp__perplexity__reason for routine queries is expensive, one reason call costs as much as 3-5 search calls | Reserve reason calls for the final AEO synthesis only, use search for keyword data | | Optimizing only for Google while ChatGPT, Perplexity, and Claude now answer questions directly | Add an AEO analysis step so content is structured for AI citation, with tables, specific data, and clear definitions | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 3 on Substack →

## More in this section - [Lesson 2: I Build an AI Research Agent in 27 Minutes (No Code Required)](/courses/pubflow-agents/lessons/i-build-an-ai-research-agent-in-27-minutes/) ## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # My Agent Found 47 Content Opportunities (Gap Analyzer Build) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/my-agent-found-47-content-opportunities/ > Build log for a Content Gap Analyzer agent that surfaced 47 content opportunities competitors missed, with the template included. The Content Gap Analyzer is a Claude Code subagent that pairs Perplexity trend research with Firecrawl competitor scraping. It audits your published content, compares it to competitors, and scores topic opportunities by demand, fit, and differentiation, running in monthly, pillar, and trend modes so you plan content from data instead of gut feeling. ## What you will be able to do - Run monthly landscape analysis to get a coverage summary, identified gaps, trending and declining topics, and series opportunities in under two minutes. - Run a pillar-specific deep dive to find subtopics missing from a series and get a recommended article sequence. - Run a trend check on an emerging topic to decide whether to cover it now, monitor it, or ignore it. - Build a content strategy file that feeds the agent your pillars, voice, and positioning so gaps come back specific instead of generic. - Fold gap analysis output into a monthly planning routine: review top gaps, pick topics, schedule them. ## Before you start - Claude Code CLI installed, with the foundation setup from Article 1 (folder structure, MCP servers) already in place. - Perplexity API key and Firecrawl API key configured as MCP servers in Claude Code. - A content strategy file (.claude/research-profiles/content-strategy.md) defining your pillars, brand voice, and positioning. - A competitor watchlist file (created in Article 4 of the series). ## Reference | Mode | Command | Runtime | Output | |---|---|---|---| | Monthly landscape | /gap-analysis monthly | About 94 seconds | Coverage summary, gaps identified, trending topics, declining topics, series opportunities | | Pillar/series deep dive | /gap-analysis pillar "[pillar name]" | About 137 seconds | Current coverage, subtopics missing, series opportunity, priority actions | | Trend analysis | /gap-analysis trend "[topic]" | About 179 seconds | cover_immediately, monitor, or ignore recommendation | | Agent definition | .claude/agents/content-gap-analyzer.md | n/a | Tools: Read, Glob, Grep, Write, mcp__perplexity__search, mcp__perplexity__reason, mcp__firecrawl__firecrawl_scrape, mcp__firecrawl__firecrawl_map. Model: sonnet | | Strategy input | .claude/research-profiles/content-strategy.md | n/a | Content pillars, brand voice summary, language patterns, positioning that the agent reads before analyzing gaps | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Content pillars are vague, like "AI stuff" | The agent returns vague gaps. Write specific pillars with a focus, content types, and 3 to 5 example topics each. | | No content strategy file is set up | The agent falls back to generic "trending AI topics" instead of gaps specific to your audience and competitors. Create .claude/research-profiles/content-strategy.md. | | Brand voice principles are aspirational, like "we're innovative" | The agent can't filter recommendations through your actual voice. Write practical principles instead, like "we use specific numbers instead of vague claims." | | Foundation from Article 1 isn't complete (CLI, MCP servers, API keys) | The agent can't run properly. Check claude --version, confirm Perplexity and Firecrawl keys, and verify MCP servers are configured in Claude Code settings. | | Competitor watchlist file is missing | Gap analysis has nothing to compare your coverage against. Create the watchlist file from Article 4 before running gap analysis. | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 6 on Substack →

## More in this section - [Lesson 4: The Agent That Replaced My $200/Month Competitor Analysis Tool](/courses/pubflow-agents/lessons/the-agent-that-replaced-my-200month-competitor-analysis-tool/) - [Lesson 5: Never Publish Outdated Technical Content Again (Verification Agent Build)](/courses/pubflow-agents/lessons/never-publish-outdated-technical-content-again/) ## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # I'm Building 5 Research Agents for My Content System (Here's the Setup) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/im-building-5-research-agents-for-my-content-system/ > Build log covering MCP infrastructure, context profiles, and directory structure for setting up 5 research agents in a content system. This lesson covers the foundation setup for a 5-agent Claude Code research system (Content Researcher, SEO/AEO Researcher, Competitive Analyzer, Technical Verifier, Content Gap Analyzer) built on MCP servers, a .claude directory structure, and business context profiles. It lets a content creator automate topic, keyword, and competitor research, cutting a 5-6 hour manual process to about 30 minutes. ## What you will be able to do - Set up the .claude directory structure (agents, research-profiles, research-outputs, build-logs) that every agent will use - Configure Perplexity and Firecrawl MCP servers in .mcp.json so Claude Code can search and scrape for research - Test that MCP connections work with a live Perplexity search and a Firecrawl scrape before building any agent - Write business-context.md, content-strategy.md, and competitor-watchlist.md so agents research through your specific positioning and audience - Plan the roles of 5 specialized research agents so each has its own MCP tools and output format instead of one generic assistant ## Before you start - Claude Code installed with a project workspace where you can create a .mcp.json file - A Perplexity API key (no free tier, $5 per 1000 requests) - A Firecrawl API key (free tier gives 500 pages per month) - Comfort running terminal commands like mkdir and editing a JSON config file ## Reference | Step | What you do | Key detail | Time | |---|---|---|---| | 1. Directory structure | Create folders for the agent system | `mkdir -p .claude/agents`, `.claude/research-profiles`, `.claude/research-outputs/{research-briefs,serp-analyses,competitive-reports}`, `.claude/build-logs` | 1 min | | 2. API keys | Get keys for the two MCP tools | Perplexity: perplexity.ai/api, no free tier, $5/1000 requests. Firecrawl: firecrawl.dev, free tier 500 pages/month | 5 min | | 3. MCP config | Register both servers in `.mcp.json` at the project root | Perplexity package `@perplexity-ai/mcp-server`, Firecrawl package `firecrawl-mcp`, each with its API key under `env` | 5 min | | 4. Test connections | Restart Claude Code, then test each server | Ask it to run a Perplexity search and a Firecrawl scrape of a page; no startup errors is the good sign | 5 min | | 5. Context profiles | Write the files agents read before researching | `business-context.md` (identity, mission, avatars, pain points, positioning), `content-strategy.md` (pillars, voice, topics to cover/avoid, formats, SEO/AEO approach), `competitor-watchlist.md` (competitors, monitoring focus, cadence) | 10 min | | Total | Full foundation setup | Directory + keys + MCP config + testing + profiles | ~35 min | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Claude Code shows errors on startup after editing `.mcp.json` | Treat a clean startup with no errors as the sign the config loaded correctly; if you see errors, recheck the server entries and API key placeholders | | API key placeholders left in `.mcp.json` | Replace `your-key-here` for both Perplexity and Firecrawl with your actual keys before restarting Claude Code | | Perplexity costs climb fast | There is no free tier ($5/1000 requests), so optimize which calls you actually make rather than querying freely | | Context profiles get skipped to save time | Skipping this step is called out directly as something not to do. Without it, agents fall back to generic research, the same textbook-style answers you'd get from a plain ChatGPT or Claude chat | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 1 on Substack →

## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # Build a YouTube Research Agent with Claude Code (Replaces TubeBuddy Without Writing a Line of Code) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/build-a-youtube-research-agent-with-claude-code/ > Build a Claude Code agent that replaces TubeBuddy for YouTube keyword, title, and competitor research, no coding needed. A YouTube Research Agent is a Claude Code setup built from three plain text files in a .claude folder. It pulls data from the free YouTube Data API and a web research tool, then runs five modes, content gaps, keyword research, channel audits, Shorts research, and thumbnail analysis, tuned to your niche and named competitors instead of generic data. ## What you will be able to do - Set up a YouTube Research Agent in Claude Code using three files: an agent YAML file plus context profile markdown files. - Run five research modes, --discover, --topic, --audit, --shorts, --thumbnails, to cover content gaps, keyword research, competitor audits, Shorts research, and thumbnail patterns. - Connect the free YouTube Data API (10,000 units/day) and a web research MCP, Perplexity or Tavily, as your data layer. - Write a custom signal score formula that ranks video opportunities by views relative to channel subscriber count, comments, and likes, instead of raw view count. - Control API costs by writing explicit cost limits into the agent file so Claude does not burn through your daily quota. ## Before you start - VS Code installed (free), ideally with the Claude Code extension. - A YouTube Data API key from Google Cloud Console (free tier, 10,000 units/day). - Either a Perplexity API key (paid) or a Tavily account (1,000 free credits/month) for web research. - Basic familiarity with Claude Code agents, the article points to a separate primer on building your first Claude Code agent for this. ## Reference | Item | Detail | |---|---| | --discover | Content gap analysis on a topic: what exists, what's missing, what angle isn't covered yet | | --topic [keyword] | Deep research on a specific keyword: search volume signals, competitor video performance, trending angles | | --audit | Channel audit for a named competitor: top performers, content patterns, gaps | | --shorts | Shorts-specific research: which formats and topics convert well | | --thumbnails | Thumbnail and title pattern analysis: which title structures get the most clicks in your niche | | YouTube Data API quota | 10,000 free units/day; each search costs roughly 100 units, about 100 searches/day | | Tavily free tier | 1,000 free credits/month (Perplexity requires a paid key from day one) | | Signal score formula | signal_score = (views / channel_subscribers) * (comments + likes) * recency_weight | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Claude makes hundreds of YouTube API calls in a single session | Write explicit cost limits in plain English into the agent file (Layer 3) before running research | | You hit your daily YouTube API quota within minutes | Set the cost limit once in the agent file; it holds permanently after that | | Research output is generic, the same gaps every other creator would see | Fill out the three context profiles, business-context.md, content-strategy.md, competitor-watch-list.md, so the agent loads your niche and named competitors before it queries the API | | You never revisit or act on the research because raw markdown is hard to read | Pick an output format that fits how you think, Notion, Obsidian, Google Docs, or a custom hub, instead of leaving output as loose markdown files | | Hesitation to start because the tool is called "Claude Code" and sounds like it requires coding | You describe what you want in plain English; Claude Code handles the implementation, no code required | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 7 on Substack →

## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # I Build an AI Research Agent in 27 Minutes (No Code Required) URL: https://www.genaiunplugged.com/courses/pubflow-agents/lessons/i-build-an-ai-research-agent-in-27-minutes/ > Build a free AI research agent that loads business context, searches via Perplexity, and analyzes competitors automatically. A Claude Code research subagent is a markdown file with YAML frontmatter that gives Claude Code a name, description, tool list, and model, then reads business context files before every search. It uses Perplexity for web search and Firecrawl for competitor scraping, and outputs a structured JSON brief with findings, gaps, and a recommended angle. ## What you will be able to do - Create a Claude Code agent definition file with YAML frontmatter that sets its name, description, tools, and model - Build three research profile files (business context, content strategy, competitor watchlist) the agent reads before every run - Run research on a Notion post ID or a raw topic with one command and get a JSON brief back in under a minute - Get competitor coverage analysis with gaps identified and a recommended angle tailored to your audience - Decide whether a research task belongs in Claude Code, Claude Projects, or n8n using the decision signals framework ## Before you start - Claude Code CLI installed (npm install -g @anthropic-ai/claude-code), check with claude --version - Node.js installed, check with node --version - Free Perplexity API key (perplexity.ai/api) and free Firecrawl API key (firecrawl.dev) - MCP servers for Perplexity and Firecrawl configured in Claude Code settings ## Reference | File / Command | Purpose | Detail | |---|---|---| | .claude/agents/content-researcher.md | Agent definition: YAML frontmatter plus system prompt | tools: Read, Glob, Grep, mcp__perplexity__search, mcp__perplexity__reason, mcp__firecrawl__firecrawl_scrape; model: sonnet | | .claude/research-profiles/business-context.md | Company identity, mission statement, target audiences | Read by the agent before every research run | | .claude/research-profiles/content-strategy.md | Content pillars, brand voice, format requirements | Read by the agent before every research run | | .claude/research-profiles/competitor-watchlist.md | Table of direct competitors and adjacent players | Read by the agent before every research run | | /research | Runs research from a Notion post ID | Looks up the title in Notion, saves to .claude/research-outputs/by-post//content-research.json | | /research --topic "..." | Runs research on a topic directly | No Notion calendar lookup needed | | python src/main.py run-agent --agent content_researcher --topic "..." | CLI equivalent of the topic-based slash command | Use if you have not wired up the slash command | | Output JSON fields | executive_summary, key_findings, competitor_coverage, recommended_angle, suggested_outline, sources | Structured brief the agent always returns | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Agent output reads generic, like plain ChatGPT, not tailored to your business | Confirm the agent's system prompt loads business-context.md, content-strategy.md, and competitor-watchlist.md as Step 1 before any research | | Agent can't search or scrape anything | Complete the Article 1 foundation first: Claude Code CLI, Node.js, Perplexity and Firecrawl API keys, both MCP servers configured in Claude Code settings | | Trying to do this kind of research inside Claude Projects | Claude Projects can't reach MCP tools, so Perplexity search and Firecrawl scraping have to be done by hand, copy-pasting for every session | | Reaching for n8n for a one-off, right-now research task | n8n needs 2+ hours of setup (hosting, API nodes, workflow building) plus monthly hosting costs; it fits scheduled or triggered research, not ad-hoc | | No Notion content calendar to look up a post ID | Skip the ID lookup and run with the --topic flag instead: python src/main.py run-agent --agent content_researcher --topic "your topic" | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **PubFlow OS Agents: Build Your AI Research Team**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 3: My AI Agent Analyzes SERPs and Optimizes for ChatGPT (Build Log #3)](/courses/pubflow-agents/lessons/my-ai-agent-analyzes-serps-and-optimizes-for-chatgpt/) ## Continue the course Browse all lessons in the [PubFlow OS Agents: Build Your AI Research Team](/courses/pubflow-agents/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.gumroad.com/l/content-os-ai-agents) to get new lessons in your inbox. --- # Zero-Shot, One-Shot, and Few-Shot Prompting Explained URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/zero-shot-one-shot-and-few-shot-prompting-explained/ > Three fundamental prompting patterns with practical examples Zero-shot, one-shot, and few-shot prompting are three ways to structure an LLM prompt: give instructions only, add one example, or add two to five examples of the input-output pattern you want. This lesson covers when to use each method, how many examples to include, and how to combine instructions with examples for reliable, consistent output. ## What you will be able to do - Choose between zero-shot, one-shot, and few-shot prompting based on how common or unusual the task is - Write few-shot prompts using 2 to 5 examples that are varied but consistent, so the model learns the pattern instead of overfitting - Structure a combined prompt in order: role, goal, task, instructions, examples, context/input, rules, format - Decide how many examples to use, starting with 2 and adding more only when results come back inconsistent - Adapt the newsletter subject line, social post, and customer support reply templates to your own recurring writing tasks ## Before you start - Access to an LLM such as ChatGPT, Claude, or Gemini - A specific recurring task in mind (subject lines, captions, support replies, meeting notes) to apply the patterns to - One or two real examples of your own best output, to use as few-shot examples ## Reference | Pattern | Examples used | When to use | Note | |---|---|---|---| | Zero-shot | 0 | Common, well-understood tasks (summarize, translate, explain out-of-office replies) | Fastest to write, but output can vary between runs and miss subtle requirements | | One-shot | 1 | You have a specific format or style in mind, or need brand-voice consistency | Clear format guidance, but a single example can cause overfitting | | Few-shot | 2 to 3 | The sweet spot for most tasks: enough pattern recognition without wasting context | Start here before adding more examples | | Few-shot | 4 to 5 | Complex patterns, unusual formats, tasks where consistency is critical | Takes longer to prepare and uses more context window | | Few-shot | 5+ | Rarely needed | Rarely improves results and wastes context window | | Combined prompt order | n/a | Any task needing both instructions and demonstrated pattern | Role, Goal, Task, Instructions, Examples, Context/Input, Rules, Format | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Zero-shot output is inconsistent between runs or misses subtle requirements | Move to one-shot or few-shot so the model copies a demonstrated pattern instead of guessing | | Few-shot examples are all too similar (e.g. every subject line starts with a number) | Use varied examples that follow the same underlying pattern, not the same surface structure | | Examples use vague placeholders like "[topic]" instead of real content | Use real, high-quality content in every example so the model has something concrete to copy | | Output length does not match what you wanted | Match the length of your examples to the length you want in the output | | Adding more and more examples hoping for better results | Stop at 2 to 5; beyond that it rarely improves results and just wastes context window | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 3 on Substack →

## More in this section - [Lesson 1: LLMs and Prompts in Generative AI](/courses/prompt-engineering/lessons/llms-and-prompts-in-generative-ai/) - [Lesson 2: How to control the large language models output?](/courses/prompt-engineering/lessons/how-to-control-the-large-language-models-output/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # Structured Output Prompts That Never Break URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/structured-output-prompts-that-never-break/ > Write structured output prompts that return reliable JSON from OpenAI models every time, without broken or malformed responses. Structured output prompting is a technique for getting AI models to return valid JSON consistently, using four layers: a schema definition, one example output, strict formatting rules, and a validation instruction. It turns AI extraction into data that flows directly into databases, spreadsheets, or automations without manual cleanup. ## What you will be able to do - Write a four-part structured output prompt (schema, example, strict rules, validation instruction) that produces valid JSON consistently - Define schema lines that specify field names and data types instead of vague format requests - Apply field-level formatting rules for strings, numbers, booleans, and arrays to prevent null values, wrong types, and extra fields - Diagnose and fix common JSON output errors, such as preamble text, inconsistent capitalization, quoted numbers, and code fences - Set model temperature and build basic validation checks (JSON parsing, required field checks) into a workflow to catch remaining errors ## Before you start - An AI chat interface or API access (ChatGPT, Claude, or similar) to test prompts against - Basic familiarity with JSON syntax: objects, fields, and data types like string, number, boolean, array - A sample data extraction task (e.g. a product description or contact text) to practice the prompt pattern on - Optional: API access if using OpenAI's JSON Mode (response_format parameter) or Anthropic's tool use schemas ## Reference | Element | Example instruction | Purpose | |---|---|---| | Schema definition | "Return a JSON object with these exact fields: name (string), age (integer), email (string), active (boolean)." | Names each field and its data type so the model cannot guess the format | | Perfect example | One complete example JSON output shown before the rules | Shows the exact target so the model has something concrete to match | | Strict rules | "Use empty string for missing text, never null"; "currency values as numbers only, no $ symbol" | Defines formatting and default values per field type | | Validation instruction | "Before returning, verify that all required fields are present and all data types match the schema." | Has the model check its own output before returning it | | Anti-preamble instruction | "Output ONLY the JSON object, nothing before or after"; "Start your response with the opening brace {" | Stops the model from adding commentary or intro text | | Anti-markdown instruction | "Do not wrap the output in code fences or backticks" | Stops the model from returning \`\`\`json wrapped output | | Type enforcement | "All numbers must be numeric types, never strings"; "booleans must be true or false, never quoted" | Prevents type mismatches that break parsers | | Temperature setting | Set to 0.0 to 0.1 for JSON extraction | Lower temperature reduces the randomness that causes format drift | ## Common errors and fixes | Problem | Fix | |---|---| | Model adds text before or after the JSON | Add: "Start your response with { and end it with }. No text outside the JSON object." | | Field names have inconsistent capitalization | Add: "(case-sensitive, match exactly as written)" after the schema definition | | Numbers come back as strings like "79.99" instead of 79.99 | Add: "All numeric values must be unquoted numbers, not strings in quotes." | | Null values appear instead of the intended defaults | Add: "Never use null. Use empty string for missing text, 0 for missing numbers, false for missing booleans." | | Model wraps the JSON in code fences (\`\`\`json) | Add: "Return raw JSON without any markdown formatting or code blocks." | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 4 on Substack →

## More in this section - [Lesson 5: Chain of Thought Prompting](/courses/prompt-engineering/lessons/chain-of-thought-prompting/) - [Lesson 6: Break Big AI Tasks Into Small Steps](/courses/prompt-engineering/lessons/break-big-ai-tasks-into-small-steps/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # Stop Wasting 3 Hours Per Competitive Analysis URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/stop-wasting-3-hours-per-competitive-analysis/ > Paste competitor data once, get polished executive summaries in 90 seconds. 3-stage AI pipeline demonstrating all 8 prompt engineering patterns. AI Competitive Analysis is a 3-stage n8n pipeline, Extract, Analyze, Write, built on OpenAI GPT-4.1, that turns raw competitor data pasted once into a board-ready executive summary delivered to Notion. It replaces a 2-3 hour manual copy-paste research routine with a 90-second automated run costing about $0.10-0.20 in OpenAI usage. ## What you will be able to do - Build a 3-stage n8n pipeline that extracts competitor data into structured JSON, analyzes it with chain-of-thought reasoning, and writes an executive summary. - Configure OpenAI and Notion credentials in n8n so analysis reports land automatically on a Notion page you share with the integration. - Switch the workflow between quick mode for a single competitor and deep mode for multi-competitor analysis. - Diagnose common failures such as invalid JSON output, a missing Notion page, or low quality analysis. - Swap OpenAI nodes for Anthropic nodes or change models (GPT-4.1-mini, GPT-3.5-turbo) to trade cost against quality. ## Before you start - An n8n instance, self-hosted for free or n8n cloud at $20 a month - An OpenAI API key from platform.openai.com with billing enabled for GPT-4.1 usage - A Notion account with an integration token, and the target Notion page shared with that integration - Comfort importing and running a workflow in n8n; no coding required ## Reference | Pattern | Stage 1 (Extract) | Stage 2 (Analyze) | Stage 3 (Write) | |---|---|---|---| | Role Setting | Data extraction specialist | Competitive analyst | Content strategist | | Temperature | 0.2 (deterministic) | 0.6 (balanced) | 0.7 (creative) | | Zero/Few-shot | Zero-shot | Few-shot (with example) | - | | Structured Output | JSON schema | - | Markdown template | | Chain-of-Thought | - | Step-by-step reasoning | - | | Self-Critique | - | - | Review checklist | | RAG/Grounding | Live web data | Stage 1 data | Stage 2 analysis | | Multi-Stage | Part of 3-stage architecture | Part of 3-stage architecture | Part of 3-stage architecture | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Stage 1 produces invalid JSON | Check that input data is clearly structured with labels like Company:, Pricing:, Features:. The quality gate catches this and routes to a warning path | | Notion page not created | Verify the integration is shared with the target page, check the page ID in the environment variable, and ensure the integration has Insert content permission | | Analysis quality is low | Provide more detailed competitor data: specific pricing numbers and actual feature names instead of general descriptions | | OpenAI rate limit errors | Add a Wait node (1-2 seconds) between stages, or upgrade your OpenAI account tier | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 9 on Substack →

## More in this section - [Lesson 7: Lesson 7: RAG Ground the Model with Your Own Sources](/courses/prompt-engineering/lessons/lesson-7-rag-ground-the-model-with-your-own-sources/) - [Lesson 8: From Prompting Patterns to Production Workflows: The Complete Integration Tutorial for ChatGPT and Claude](/courses/prompt-engineering/lessons/from-prompting-patterns-to-production-workflows-the-complete-integration-tutoria/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # LLMs and Prompts in Generative AI URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/llms-and-prompts-in-generative-ai/ > Introduction to LLMs and prompt engineering fundamentals Large Language Models (LLMs) such as ChatGPT, Claude, and Gemini generate text by predicting the next token from patterns learned in massive amounts of training text, not by looking up facts. This lesson covers tokens, context windows, and the six-part prompt structure (role, task, context, rules, examples, format) for writing prompts that get useful, specific answers. ## What you will be able to do - Write prompts using the six-part structure: role, task, context, rules, examples, format - Estimate roughly how many tokens a prompt uses (about 750 tokens per 1,000 words) and keep it within the context window - Explain why LLMs hallucinate and apply the safety tips (treat the model as an assistant, set boundaries, ask for sources) to reduce risk - Apply the three-step formula, name the role, state the task with a verb, set rules and format, to turn a vague prompt into a clear one - Run a prompt against the good-prompt checklist before sending it ## Before you start - Access to an LLM chat tool such as ChatGPT, Claude, or Gemini - Basic familiarity with typing a message into an AI chat interface - No coding or technical background needed ## Reference | Prompt part | What it does | Example from the lesson | |---|---|---| | Role | Sets who the model should pretend to be | "Act as a science teacher for grade five" | | Task | States what should be done, using a verb | Summarize, rewrite, compare, or plan | | Context | Gives facts the model needs | Notes, data, or short passages | | Rules | Sets boundaries on the answer | "Keep it under 150 words," "use simple words" | | Examples | Shows the kind of output wanted (few-shot) | One or two sample inputs with expected answers | | Format | Tells the model how to shape the answer | Paragraphs, bullet list, JSON, or table | | Token rule of thumb | Estimates prompt/response size for cost and context limits | About 1,000 words equals 750 tokens | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Prompt is vague and long | Cut fluff, state the task with a verb, add one or two rules, then stop | | No audience is set | Say who the reader is: age, role, or skill level | | No format is given | Ask for a structure like bullets, table, JSON, or clear sections | | Too many goals in one ask | Split into small steps: plan, then draft, then polish | | Model gives a wrong answer with confidence (hallucination) | Ask for sources when they matter, and stop to rethink the task if the answer seems wrong or unsafe | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 1 on Substack →

## More in this section - [Lesson 2: How to control the large language models output?](/courses/prompt-engineering/lessons/how-to-control-the-large-language-models-output/) - [Lesson 3: Zero-Shot, One-Shot, and Few-Shot Prompting Explained](/courses/prompt-engineering/lessons/zero-shot-one-shot-and-few-shot-prompting-explained/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # Lesson 7: RAG Ground the Model with Your Own Sources URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/lesson-7-rag-ground-the-model-with-your-own-sources/ > Prompt Engineering - Lesson 7: RAG Ground the Model with Your Own Sources Retrieval-Augmented Generation (RAG) is a prompting technique that grounds AI answers in documents you supply, instead of the model's training data. The lesson covers how RAG works, how to chunk documents without losing context, and how to write prompts that force citations and refusals when information is missing, cutting hallucinations. ## What you will be able to do - Write RAG prompts that answer only from provided context and cite sources - Chunk documents into 200-500 word pieces with overlap so key facts don't get split across chunks - Set confidence rules, strict, moderate, or lenient, that control when the model refuses to answer instead of guessing - Decide when to use RAG versus fine-tuning for a given business use case - Rank and select which documents to include in a prompt when working with multiple sources under a token budget ## Before you start - Access to a chat interface such as ChatGPT or Claude - Documents you want the AI to reference, such as reports, handbooks, or product docs, in text form - Basic understanding of prompts and token limits, covered in the lesson on LLM settings ## Reference | Element | Guidance | |---|---| | Simple RAG (small docs) | Paste the full document into the chat plus your prompt; works for documents under 2,000 words | | Chunk size | 200-500 words per chunk | | Chunk overlap | Include 1-2 sentences from the previous chunk at the start of the next one | | Chunk boundaries | Split at section headers, paragraph breaks, complete sentences, or natural topic shifts | | Never split | Mid-sentence, lists or tables, code blocks, or related facts such as dates paired with numbers | | Confidence rule: Strict | Only answer if the exact information is explicitly stated; refuse when in doubt | | Confidence rule: Moderate | Answer if clearly stated or directly inferable from multiple facts; cite all facts used | | Token budget (4K example) | Instructions about 500 tokens, answer about 500 tokens, context about 3,000 tokens (roughly 2,000 words) | ## Common errors and fixes | What goes wrong | The fix | |---|---| | A key fact, like a sales figure, gets split across two chunks and only one is retrieved | Split at section headers or paragraph breaks, and add 1-2 sentences of overlap between chunks | | The model gives an answer with no way to verify it | Add a rule requiring the model to cite the specific document and section for each claim | | The model has no permission to say it doesn't know, so it guesses at missing data (e.g. inventing a Q4 revenue figure from Q3 trends) | Add a refusal rule: if the answer isn't in the context, say so explicitly | | Using a lenient confidence rule lets the model fill gaps with assumptions | Use a strict or moderate confidence rule instead; lenient is not recommended | | Irrelevant documents (e.g. HR Policies for a marketing spend question) get included and waste context budget | Rank documents by relevance to the question and include only the most relevant ones first | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 7 on Substack →

## More in this section - [Lesson 8: From Prompting Patterns to Production Workflows: The Complete Integration Tutorial for ChatGPT and Claude](/courses/prompt-engineering/lessons/from-prompting-patterns-to-production-workflows-the-complete-integration-tutoria/) - [Lesson 9: Stop Wasting 3 Hours Per Competitive Analysis](/courses/prompt-engineering/lessons/stop-wasting-3-hours-per-competitive-analysis/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # From Prompting Patterns to Production Workflows: The Complete Integration Tutorial for ChatGPT and Claude URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/from-prompting-patterns-to-production-workflows-the-complete-integration-tutoria/ > Turn one-off prompts into reusable, production-ready AI workflows for ChatGPT and Claude, with an integration tutorial and templates. A production AI workflow is a repeatable three-stage process (Research and Gather, Reason and Analyze, Structure and Write) that combines ChatGPT and Claude so tasks like competitor analysis or customer feedback synthesis produce consistent output every time, without picking a new prompting pattern for each run. ## What you will be able to do - Build a three-stage workflow (Research and Gather, Reason and Analyze, Structure and Write) that runs the same way every time instead of starting from scratch - Assign each stage to the model it suits best using the Handoff Pattern: ChatGPT for browsing and current research, Claude for analysis, writing, and structured output - Set temperature per stage: 0.1 to 0.3 for fact extraction, 0.5 to 0.7 for analysis, 0.6 to 0.8 for final writing - Apply quality gates between stages so missing citations, unresolved 'Not found' entries, or weak reasoning get caught before they reach the final draft - Adapt the worked competitor-analysis example (with its JSON schema and prompt structure) as a template for your own research and writing workflows ## Before you start - Access to both ChatGPT and Claude, a browser tab for each is enough, no API required - Working knowledge of Lessons 1 through 7 in this series: roles, temperature and top-p settings, few-shot examples, structured JSON output, chain-of-thought reasoning, plan-draft-critique, and RAG/source grounding - Source material to run through the workflow, such as scraped competitor pages, support tickets, or article text ## Reference | Stage | Purpose | Patterns Used | Temperature | Output | |---|---|---|---|---| | Stage 1: Research and Gather | Gathers facts from sources and extracts structured data | RAG/source grounding, zero-shot extraction rules, structured output | 0.1 to 0.3 | Structured research notes with citations, as JSON or organized sections | | Stage 2: Reason and Analyze | Reasons through the research and connects insights | Chain-of-thought reasoning, few-shot examples, role setting | 0.5 to 0.7 | Synthesized findings with a visible reasoning chain | | Stage 3: Structure and Write | Transforms analysis into the polished final deliverable | Structured output, multi-stage self-critique, citation enforcement | 0.6 to 0.8 | Final document in the required format | | Model pick: writing and editing | Newsletters, articles, tone-sensitive content | n/a | n/a | Claude, for more natural prose | | Model pick: current-data research | Competitor pricing, recent news | n/a | n/a | ChatGPT, for web browsing | | Model pick: code generation | Automation scripts, technical output | n/a | n/a | ChatGPT, for Code Interpreter | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Stage 1 output makes a claim with no citation to a source document | Reject it at the quality gate and rerun Stage 1 rather than passing it to Stage 2 | | Stage 1 has 'Not found in documents' entries that matter to the task | Resolve the gap before moving on, since Stage 2 and 3 will build on whatever Stage 1 hands them | | Stage 2 analysis has no visible reasoning steps | Retry Stage 2 with adjusted instructions that explicitly ask it to show its reasoning | | Stage 2 insights aren't tied back to Stage 1 data, or the logic has gaps | Send it back to Stage 2 instead of letting Stage 3 write from shaky analysis | | Stage 3 output drops citations or doesn't match the required structure | Rerun Stage 3, the built-in self-critique step should catch this before you accept it as final | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 8 on Substack →

## More in this section - [Lesson 7: Lesson 7: RAG Ground the Model with Your Own Sources](/courses/prompt-engineering/lessons/lesson-7-rag-ground-the-model-with-your-own-sources/) - [Lesson 9: Stop Wasting 3 Hours Per Competitive Analysis](/courses/prompt-engineering/lessons/stop-wasting-3-hours-per-competitive-analysis/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # How to control the large language models output? URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/how-to-control-the-large-language-models-output/ > Techniques for controlling LLM outputs and behavior LLM settings (temperature, top-p, top-k, max tokens, frequency and presence penalties) are parameters available through APIs and playgrounds like OpenAI Playground or Google AI Studio that control how a large language model picks its next words. This lesson explains what each setting does and gives starter recipes for extraction, summaries, planning, brainstorming, and writing. ## What you will be able to do - Set temperature, top-p, and max tokens to match a task instead of guessing - Pick starter recipe values (temperature and top-p) for extraction, summaries, planning, brainstorming, and writing tasks - Diagnose and fix common output problems: topic drift, cut-off answers, repeated words, and broken JSON - Use a seed parameter to get repeatable results for tests or demos - Reduce repetition in output with frequency and presence penalties ## Before you start - Access to an LLM API or playground such as OpenAI Playground or Google AI Studio, since these settings are not available in standard ChatGPT or Claude chat interfaces - An account with the AI provider (free trials are available) - Basic familiarity with prompts and how large language models generate text, covered in the earlier lesson on how LLMs work ## Reference | Setting | Range | What it does | When to use | |---|---|---|---| | Temperature | 0.0 to 2.0 (above 1.0 rarely useful) | Controls randomness in token selection; low is predictable, high is creative | 0.0-0.3 for extraction, code, math; 0.4-0.7 for summaries and writing; 0.8-1.0 for brainstorming | | Top-p (nucleus sampling) | 0.0 to 1.0, commonly around 0.9 | Picks from the smallest group of tokens whose probability adds up to p | Leave at 0.9 for most tasks; lower to 0.8 for careful work, raise to 0.95 for brainstorming | | Top-k | integer, e.g. 40 | Picks only from the top k most likely tokens by rank | Rarely touched; some providers use this instead of top-p | | Max tokens (output length) | numeric limit | Sets the maximum response length; the answer cuts off at the limit | Set high enough for the expected output, or add a length target in the prompt | | Stop markers | custom strings such as , STOP, END | Tells the model when to stop generating | Use for strict formats like JSON to cut off extra text | | Seed | any number you choose | Makes output repeatable with the same prompt and settings | Use when exact repeatability matters, such as tests or demos | | Frequency penalty | positive value, try 0.3 to 0.5 | Discourages words that already appeared multiple times, more each time | Raise if the output repeats the same word many times | | Presence penalty | positive value, try 0.3 to 0.5 | Discourages any word that appeared even once, encouraging new topics | Raise if the model keeps circling the same topics | ## Common errors and fixes | Problem | Fix | |---|---| | Answer drifts off topic | Lower temperature a little, add a clear rule restating the goal, and add a refusal rule for low confidence | | Answer is too short or cuts off | Add a word or token target in the prompt, increase max output length, and remove extra context to leave room | | Answer is boring or stiff | Raise temperature a little, raise top-p a little, and add a style note or example | | Answer repeats words or lines | Add a small frequency penalty and ask the model to avoid repeating phrases | | JSON breaks your parser | Lower temperature, add a strict schema and example, tell the model to produce only JSON with no narrative text, and add a stop marker if supported | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 1: LLMs and Prompts in Generative AI](/courses/prompt-engineering/lessons/llms-and-prompts-in-generative-ai/) - [Lesson 3: Zero-Shot, One-Shot, and Few-Shot Prompting Explained](/courses/prompt-engineering/lessons/zero-shot-one-shot-and-few-shot-prompting-explained/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # Chain of Thought Prompting URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/chain-of-thought-prompting/ > Using chain of thought prompting for complex reasoning tasks Chain of thought prompting asks an AI model to reason through a problem step by step, out loud, before giving a final answer, instead of jumping straight to a conclusion. Adding a phrase like "let's think step by step" reduces errors on math, logic, multi-step instructions, and business decisions because the reasoning becomes visible and checkable. ## What you will be able to do - Add zero-shot chain of thought trigger phrases, such as "let's think step by step" or "work through this carefully before answering," to any prompt - Run self-consistency checks: solve a problem 3-5 times at temperature above 0 and keep the answer that shows up most often - Use step back prompting to make the model restate a problem in its own words before solving it, so it catches misread questions - Structure ReAct prompts with Thought, Action, Observation, Thought, Answer so the model uses tools and cites sources instead of guessing - Judge when chain of thought is worth using and when it's overkill for simple lookups, translations, or one-step formatting ## Before you start - Access to a chat-based LLM such as Claude, ChatGPT, or Gemini - Comfort writing plain-language prompts, no coding required for basic chain of thought - API or playground access for self-consistency, since it works best with temperature set above 0 and requires running the same prompt several times - Familiarity with zero-shot and few-shot prompting from earlier lessons in this course is helpful but not required ## Reference | Technique | What it does | How to trigger it | Best for | |---|---|---|---| | Chain of thought | Model reasons in explicit steps before giving a final answer | Add "Think step by step," "Show your reasoning," "Explain your thought process," or "Break this down into steps" | Math problems, logic puzzles, multi-step instructions, complex decisions | | Zero-shot CoT phrases | Single-phrase triggers tested across Claude, ChatGPT, and Gemini | Use phrases like "Let's think step by step" or "Reason through this systematically, then state your answer" | Any task where you want reasoning without providing examples | | Self-consistency | Runs the same prompt multiple times and keeps the most common answer | Ask the model to solve the problem 3 different ways, then state which answer appears most often; use temperature above 0 | High-stakes decisions, calculations, problems with multiple solution paths | | Step back (task restatement) | Model restates the problem before solving it | Add "First, restate the problem in your own words. Then solve it step by step." | Word problems, multi-part questions, problems that could be misunderstood | | ReAct | Model alternates reasoning with tool use such as search or calculator | Structure the prompt as Thought, Action, Observation, Thought, Answer | Research tasks, current facts, tasks needing citations or verification | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Model jumps to an answer and adds or skips a step incorrectly | Add "think step by step" or "show your reasoning" so it works through the problem before answering | | Model misreads a word problem and calculates the wrong relationship | Use step back prompting: have it restate the problem in its own words before solving | | A single attempt contains a hidden calculation error you can't catch | Run self-consistency: repeat the same prompt 3-5 times at temperature above 0 and pick the most frequent answer | | Chain of thought gets applied to simple factual lookups, translations, or one-step formatting | Skip it. These tasks have only one obvious step, so CoT adds cost and time without improving accuracy | | Self-consistency gets used on every task | Reserve it for high-stakes or high-cost-of-error tasks since it needs multiple API calls and costs more | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 5 on Substack →

## More in this section - [Lesson 4: Structured Output Prompts That Never Break](/courses/prompt-engineering/lessons/structured-output-prompts-that-never-break/) - [Lesson 6: Break Big AI Tasks Into Small Steps](/courses/prompt-engineering/lessons/break-big-ai-tasks-into-small-steps/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # Break Big AI Tasks Into Small Steps URL: https://www.genaiunplugged.com/courses/prompt-engineering/lessons/break-big-ai-tasks-into-small-steps/ > Plan, Draft, Critique method for breaking down complex AI tasks The Plan-Draft-Critique Method breaks a complex AI task into three separate prompts: Plan (outline the structure), Draft (write one section at a time), and Critique (review against specific criteria). Instead of one giant request, you stage the work in phases, review at each step, and catch errors before they compound into the final output. ## What you will be able to do - Write a Plan prompt that outlines structure only, using the instruction "Do NOT write the content yet, only the plan" to stop the model from jumping ahead - Draft one section at a time from an approved plan, feeding in context from previous sections so quality and continuity hold up - Write a Critique prompt that checks content against specific criteria (clarity, completeness, accuracy, consistency, audience fit) and prioritizes issues by impact - Choose a list plan for straightforward sequential tasks or a tree plan for complex projects with dependent parts - Use a debate prompt to argue two sides of a decision, with a recommendation, before committing to an approach ## Before you start - Access to an AI chat tool such as ChatGPT or Claude - A task substantial enough to justify multiple prompts: the article's guide points to tasks over 500 words or with multiple distinct sections - Willingness to review and approve output at each stage before moving to the next one ## Reference | Stage | Purpose | Key instruction or template element | |---|---|---| | Plan | Outline the structure before any content is written | "Do NOT write the content yet, only the plan." | | Draft | Write one section at a time from the approved plan | "Write only this section. Do not continue to other sections." | | Critique | Evaluate finished content against fixed criteria | Checks clarity, completeness, accuracy, consistency, audience fit; issues prioritized High/Medium/Low | | List plan | Straightforward tasks with clear sequential steps | Numbered or bulleted list of items | | Tree plan | Complex projects where parts connect to each other | Nested structure, e.g. 1.1, 1.1.1, showing dependencies | | Debate | Decisions with no obvious right answer | Side A benefits/risks, Side B benefits/risks, comparison, recommendation | | Refinement loop | Improve critical content over multiple passes | Plan, Draft, Critique, Revise, Re-critique, repeat until quality threshold is met | ## Common errors and fixes | What goes wrong | The fix | |---|---| | One prompt asks the AI to do the whole task at once (e.g. "Write a marketing plan for my new fitness app") | Split it into Plan, Draft, and Critique prompts instead of one giant request | | Draft prompt has no scope limit | Model keeps writing past the current section, causing context drift; add "Write only this section. Do not continue to other sections." | | Plan prompt is missing the no-content instruction | Model starts drafting content instead of just outlining structure; add "Do NOT write the content yet, only the plan." | | Critique prompt just says "make it better" | Feedback comes back vague instead of actionable; give specific criteria and require quoted problems with concrete fixes | | Single prompt used for a long or multi-section task | Output misses the target audience, ignores constraints, and wastes tokens on unusable content; use Plan-Draft-Critique when the task is over 500 words, has multiple sections, or is expensive to get wrong | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Prompt Engineering for AI Automation**.

Read Lesson 6 on Substack →

## More in this section - [Lesson 4: Structured Output Prompts That Never Break](/courses/prompt-engineering/lessons/structured-output-prompts-that-never-break/) - [Lesson 5: Chain of Thought Prompting](/courses/prompt-engineering/lessons/chain-of-thought-prompting/) ## Continue the course Browse all lessons in the [Prompt Engineering for AI Automation](/courses/prompt-engineering/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/llms-and-prompts-in-generative-ai) to get new lessons in your inbox. --- # What Nobody Tells You About AI Automation Costs - Start Tracking Them Now! URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/what-nobody-tells-you-about-ai-automation-costs-start-tracking-them-now/ > Token budgets, execution counts, and maintenance hours quietly add up. See the real automation costs and how to start tracking them. A zero-touch n8n cost scanner reads token usage straight from n8n's execution metadata to track AI API spending (Claude, Perplexity, Firecrawl) across every workflow, without touching existing workflows. It logs costs to Google Sheets, sends a weekly cost digest, and fires budget alerts before a surprise bill lands, part of a production n8n workflows series. ## What you will be able to do - Build a single n8n scanner workflow that reads token usage from execution metadata for every AI workflow, without modifying any of them - Set up a Google Sheets dashboard that shows monthly totals, daily trends, and top-spending workflows - Configure budget alerts that fire once a day when spending crosses a threshold, instead of per execution - Generate a weekly email digest that breaks down cost by workflow and by model - Estimate hidden costs beyond API tokens, including n8n execution limits, data scraping, storage, and maintenance hours, so you can plan a realistic monthly budget ## Before you start - An n8n instance (self-hosted or Cloud) with existing AI workflows using nodes like OpenAI, Anthropic, or Google Gemini - Access to n8n's REST API to list and fetch execution data - A Google Sheets account to receive the cost log and dashboard - Basic familiarity with n8n workflow building (nodes, triggers, HTTP requests) ## Reference | Cost item | Rate | Real-world translation | |---|---|---| | Claude Sonnet 4.6 | $3 per million input tokens, $15 per million output tokens | 1,000 content generation calls is about $30; 10,000 calls is about $300 | | Perplexity API | $5 per 1,000 searches | 100 queries/week is about $2/month; 500 queries/week is about $10/month | | n8n Cloud Starter | 2,500 executions/month, $24 | A workflow running every 15 minutes (96/day) is about 2,880 executions/month, over the limit | | n8n Cloud Pro | 10,000 executions/month, $60 | Covers higher-frequency workflows that outgrow Starter | | Firecrawl | $19 per 3,000 pages, varies by plan | 500 competitor sites scraped daily is about 150,000 pages/month, needs $99-$399 plans | | Apify | $29/month Starter (includes $29 in credits), $0.30 per compute unit | Scales with scraping volume and compute-heavy jobs | | Airtable Free | 1,000 records per base | 100 executions/day logged is about 3,000 records/month, exceeds free tier in about 10 days | | Airtable Team | 50,000 records per base, $24/user/month | 500 executions/day is about 15,000 records/month | ## Common errors and fixes | What goes wrong | The fix | |---|---| | You add tracking nodes manually to each workflow and forget to update new ones | Build one scanner workflow that reads token usage from n8n execution metadata for every workflow automatically | | A workflow you forgot about, like an hourly competitor scan, quietly costs $75/month | Run the scanner's per-workflow cost report to spot and pause low-value automations | | A low-frequency workflow that runs every 5 minutes burns through n8n's execution limit even though it delivers little value | Track execution count against value delivered, not just API cost, and adjust trigger frequency | | The scanner only captures LLM calls, missing Perplexity, Firecrawl, and other external API costs, about 20 percent of total spend | Add the optional manual tracking pattern from Step 7 of the article for non-AI API costs | | Google Sheets or Airtable logging hits free-tier record limits faster than expected as execution volume grows | Plan for a paid tier, such as Airtable Team at 50,000 records, before volume outgrows the free plan | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 1 on Substack →

## More in this section - [Lesson 2: When NOT to Automate: The Break-Even Framework [FD2D #2]](/courses/production-n8n/lessons/when-not-to-automate-the-break-even-framework-fd2d-2/) ## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # Workflow Contracts That Save You [FD2D #3] URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/workflow-contracts-that-save-you-fd2d-3/ > Define contracts, stop fragility. Input contracts, output contracts, error contracts - validation before and after AI. Workflow contracts are a three-layer validation system for n8n automations: input contracts check data as it enters, output contracts verify AI-generated results before they publish, and error contracts route failures to Slack or email instead of letting them fail silently. Dheeraj reports this approach cut his workflow failures by about 90%. ## What you will be able to do - Add an IF node validation gate right after a trigger to reject bad data before it reaches AI calls or API requests. - Write regex and expression conditions for email format, URL format, required fields, date ranges, and numeric ranges in n8n's IF node. - Write an AI prompt with a structure-enforcement block, then parse and validate the JSON output with a Set node and IF node for required fields, length limits, and item counts. - Set up a separate Error Handler workflow using n8n's built-in Error Trigger node to catch failures automatically. - Route validation and error failures to Slack or email notifications, including workflow name, node, and error message, instead of letting them fail silently. ## Before you start - An existing n8n workflow (trigger plus processing steps) to add validation to. - A Slack or email node configured in n8n for failure notifications. - Basic familiarity with n8n's IF node, Set node, and expression syntax ({{ }}). - An AI node (such as Claude) in the workflow if building output contracts for AI-generated content. ## Reference | Validation type | n8n expression or step | What it catches | |---|---|---| | Email format | `{{ $json.email.match(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/) }}` | Invalid email before it reaches the CRM | | URL format | `{{ $json.url.match(/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/) }}` | Malformed link fields | | Required field (not empty) | `{{ $json.field_name && $json.field_name.trim().length > 0 }}` | Missing or blank required data | | Date is in the future | `{{ new Date($json.date_field) > new Date() }}` | Accidentally scheduling posts in the past | | Number in range (10-10000) | `{{ $json.number_field >= 10 && $json.number_field <= 10000 }}` | Pricing typos like $10,000 instead of $100 | | String length minimum (10 chars) | `{{ $json.text_field && $json.text_field.length >= 10 }}` | Text fields that are too short to be valid | | Error Trigger node | First node in a separate "Error Handler" workflow | Catches any workflow error automatically and reports it | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Workflow shows "success" but bad data (e.g. emoji in an email field) reaches the CRM, which then rejects it | Add an Input Validation Gate (IF node) right after the trigger to check field format before processing continues | | Claude wraps JSON in markdown code blocks or renames a field (e.g. "email_address" instead of "email"), breaking the workflow | Add explicit structure rules to the AI prompt (no markdown wrapping, exact field names) and validate the parsed output with an IF node | | A source row (e.g. in a spreadsheet) is deleted and the workflow runs successfully with missing data, unnoticed until someone complains | Add required-field checks before processing so missing data is caught and reported instead of passed through silently | | AI output technically succeeds but breaks a quality limit, like a Twitter post over 280 characters | Add a second IF node after field-existence checks to validate length and item count against your limits | | Failures happen with no visibility into which workflow or node broke | Build a separate Error Handler workflow with an Error Trigger node that sends Slack or email notifications with workflow name, node, error message, and execution link | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 3 on Substack →

## More in this section - [Lesson 4: Failure Is a Feature: Designing Error Handling [FD2D #4]](/courses/production-n8n/lessons/failure-is-a-feature-designing-error-handling-fd2d-4/) - [Lesson 5: The Postmortem Framework: Learning from Failures [FD2D #5]](/courses/production-n8n/lessons/the-postmortem-framework-learning-from-failures-fd2d-5/) ## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # When NOT to Automate: The Break-Even Framework [FD2D #2] URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/when-not-to-automate-the-break-even-framework-fd2d-2/ > The smartest automation is sometimes no automation. Learn the break-even calculation for when manual beats automated. The Break-Even Framework is a formula for deciding whether an AI automation is worth building: Break-Even Point (months) = Setup Time divided by (Time Saved per instance times Monthly Frequency). If that number is over six months, the lesson says stay manual. It comes from the article When NOT to Automate, part of the From Demo to Dependable course. ## What you will be able to do - Calculate a break-even point for any automation idea using setup time, time saved per instance, and frequency. - Apply the six-month threshold to decide whether an automation is worth building or not. - Spot the three traps that derail automation decisions: complexity cascade, frequency fallacy, and perfection prison. - Correct your frequency estimate by counting the last three months of actual usage and cutting that number in half. - Account for maintenance tax so a good-looking break-even number does not hide a task that needs constant upkeep. ## Before you start - A specific recurring task you are considering automating, with a rough sense of how long it takes manually. - Some ability to estimate build/setup time for the tool involved (the article uses n8n and Claude Code as examples). - Access to your own last three months of task frequency, or a willingness to estimate honestly and halve it. ## Reference | Variable | Definition | How to estimate it | |---|---|---| | Setup Time | Hours to build and test the automation, including learning a new tool and troubleshooting | If you think it will take 2 hours, plan for 4 | | Time Saved Per Instance | Manual time minus automated time, per single use of the task | Not the manual task length itself, the difference between manual and automated | | Frequency | How many times per month you actually do the task | Use your last 3 months of real data, then cut that number in half | | Break-Even Formula | Break-Even (months) = Setup Time divided by (Time Saved x Monthly Frequency) | Example: 2 hours divided by (43 min x 4/month) = 0.7 months | | Decision Threshold | If break-even is more than 6 months, stay manual | Reasoning: tools change, the business evolves, maintenance compounds | | Maintenance Tax | Ongoing upkeep time not counted in the setup-time estimate | Can turn a good break-even number into a bad automation, as in the newsletter formatting example | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Complexity Cascade: a simple automation grows extra integrations, authentication, error handling, and logging until a 1-hour build becomes a 6-hour project | Set a hard time limit before starting. If it is not done by then, the task is too complex for its time savings, go back to manual or find a simpler approach | | Frequency Fallacy: you estimate task frequency from your goals (post daily) instead of your actual behavior (post 3 times a week) | Count actual occurrences over the last 3 months, then cut that number in half for your estimate | | Perfection Prison: you keep tweaking a working automation for marginal gains, like spending 5 hours to save an extra 30 seconds | Stop once the automation hits its time-savings target, done is better than perfect | | Rounding setup time down or frequency up when doing the math, which was the source of most miscalculations in the article | Be honest: double a shaky setup-time estimate, and use the halved 3-month frequency average, not your publishing goal | | Ignoring maintenance tax: the break-even math looks favorable but the underlying task (formatting, layout) changes constantly | Ask whether the process is stable. If it changes often, budget ongoing upkeep time or stay manual and use a template instead | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 1: What Nobody Tells You About AI Automation Costs - Start Tracking Them Now!](/courses/production-n8n/lessons/what-nobody-tells-you-about-ai-automation-costs-start-tracking-them-now/) ## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # The Postmortem Framework: Learning from Failures [FD2D #5] URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/the-postmortem-framework-learning-from-failures-fd2d-5/ > Failures are data. Capture them systematically with the 5-section postmortem template. A postmortem framework is a 5-section template (What Happened, Why It Happened, What We Learned, What We'll Do Differently, Success Metrics) for documenting automation failures in n8n, Claude Code, or any AI system. Storing entries in a Claude Projects Failure Database lets you run pattern analysis after five postmortems and cut repeated mistakes by 60%. ## What you will be able to do - Build a Claude Projects "Failure Database" with custom instructions that guide you through the 5-section postmortem template - Document a single automation failure in about 15 minutes using conversational prompts - Run a pattern analysis prompt after five or more postmortems to surface your top three failure types and their root causes - Turn identified patterns into a prioritized prevention action plan with testing requirements and success metrics - Connect a Level 4 n8n error escalation alert to a postmortem entry so technical details are pre-populated ## Before you start - A claude.ai account with access to Claude Projects - At least one recent automation failure to document, such as a broken n8n workflow or failed Claude Code agent - Familiarity with the 4-level n8n error handling system from the previous article in the series, needed to wire automatic triggering - Optional: screenshots, workflow JSON exports, or API logs from the failure to upload as supporting evidence ## Reference | Step | Action | |---|---| | 1. Create project | In claude.ai, click Projects, then Create Project, and name it "Failure Database" | | 2. Add description | Enter: "Systematic documentation of automation failures, root cause analysis, and pattern recognition to prevent repeated mistakes." | | 3. Install template | Click Edit project details, paste the postmortem system instructions into Custom instructions, click Save changes | | 4. Document first failure | Type "Run postmortem: [brief description of what failed]" in the project chat and answer Claude's follow-up questions | | 5. Upload evidence (optional) | Click the paperclip icon and attach screenshots, workflow JSON exports, or API logs | | 6. Repeat and analyze | Log every new failure going forward; after 5 or more postmortems, run the pattern analysis prompt | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Postmortems feel like dwelling on shame after you already fixed the problem | Treat it like an aviation black box: the point is system data, not blame | | Blank-page syndrome eats 45 minutes because there is no template | Use the 5-section template so Claude prompts you section by section | | Memory fades within 48 hours, so the exact error message and workaround get lost | Document within 15 minutes of fixing the issue, while details are fresh | | Notes end up in a Google Doc or Notion page you never find again | Store every entry in one Claude Projects "Failure Database" so it stays searchable in project memory | | Postmortems stay one-off entries instead of building into pattern data | Set a calendar reminder to log every failure, then run pattern analysis once you have 5 or more postmortems | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 5 on Substack →

## More in this section - [Lesson 3: Workflow Contracts That Save You [FD2D #3]](/courses/production-n8n/lessons/workflow-contracts-that-save-you-fd2d-3/) - [Lesson 4: Failure Is a Feature: Designing Error Handling [FD2D #4]](/courses/production-n8n/lessons/failure-is-a-feature-designing-error-handling-fd2d-4/) ## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # The Maintenance Tax: What Nobody Tells You [FD2D #6] URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/the-maintenance-tax-what-nobody-tells-you-fd2d-6/ > Launching is 20% of the work. Maintaining is 80%. API changes, model drift, data quality decay. The Maintenance Tax is the ongoing work of keeping an AI automation alive after launch: API changes, model drift, and data decay that account for roughly 80% of total automation effort. This lesson explains what causes automations to break, how to estimate monthly maintenance hours, and seven strategies to cut that time by 40-60%. ## What you will be able to do - Identify the three failure sources (API changes, model drift, data quality decay) that break a running automation - Estimate your own monthly maintenance load using the formula: automations times complexity times API change frequency, plus documentation debt - Compare n8n, Claude Code, and Claude Projects by maintenance profile to pick the right tool for a given workflow - Add redundancy and fallback checks at points where a workflow currently has a single point of failure - Separate critical failures from recoverable errors so notifications only fire when something actually needs a 2am fix ## Before you start - At least one automation (n8n workflow, Claude Code script, or similar) already running in production - Basic familiarity with API integrations, webhooks, and OAuth reconnection flows - Access to the tool you're maintaining, to add Sticky Notes, comments, or error triggers ## Reference | Strategy | What it does | |---|---| | Choose stable APIs | Before integrating, check for version numbers, advance notice of breaking changes, migration docs, and release frequency. Stripe-style versioned APIs beat unversioned beta tools | | Build redundancy at critical points | Add fallback checks (for example, parse company name from subject line or sender domain if the email body format changes) so one parsing failure does not halt the workflow | | Document while you build | Add comments or Sticky Notes explaining why a filter, regex, or delay exists, including the specific API version or field it depends on | | Use error notifications strategically | Alert immediately on critical failures (payment processing, lost leads); batch recoverable errors (successful retries, backup methods) into a daily digest | | Version your prompts | Save the working prompt version before updating it, with model version and change notes, so you can roll back if the new version breaks output format | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Stripe changes its API version and nests invoice fields differently (e.g. line_items.data[0].description moves under price.product), breaking the JSON parser | Choose APIs with versioning and migration guides, and check migration notes before the platform deprecates the old version | | Google updates its OAuth implementation and the n8n Google Sheets node can't authenticate | Reconnect, reauthorize, and update scopes; expect this roughly every 12-18 months across major platforms | | A model update changes output formatting (for example Claude returns markdown tables instead of bullet lists), breaking the downstream parser | Version prompts before updating production ones, and keep a working baseline (e.g. revert to v1.3) to restore if the new version breaks something | | A teammate adds a new status or tag (e.g. "Ready - Needs Image") that isn't covered by the workflow's filter logic, so nothing posts | Add fallback handling for new values and document why the original filter was written the way it was | | A client submits data in an unexpected format (e.g. phone number as 555.123.4567 instead of 555-123-4567) and the validation regex rejects it, halting onboarding | Build redundancy that checks multiple field variants and normalizes formats, including international numbers, before validation | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 6 on Substack →

## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # Failure Is a Feature: Designing Error Handling [FD2D #4] URL: https://www.genaiunplugged.com/courses/production-n8n/lessons/failure-is-a-feature-designing-error-handling-fd2d-4/ > Every workflow fails. Design for it from day one. Retry policies, fallback paths, escalation, and the error handling ladder. This lesson builds error handling into n8n workflows using a 4-level framework, ignore, retry, fallback, escalate, so failures never go silent. It covers wiring Continue on Fail, Error Trigger, Wait, and Merge nodes, plus four AI-specific failure modes like schema validation errors and semantic failures that pass validation but return wrong answers. ## What you will be able to do - Map your three most critical workflows by failure point, impact, and likelihood before building anything - Configure Continue on Fail on n8n nodes for failures that don't need action (Level 1) - Build a retry loop with a retry counter, an IF check, and a Wait node using exponential backoff (Level 2) - Wire a fallback path with a Merge node so the workflow switches to a backup system when the primary keeps failing (Level 3) - Set up a Slack or email escalation node that alerts a human only when automation can't recover (Level 4) ## Before you start - An n8n instance (self-hosted or cloud) and a workflow you want to protect - Access to the external APIs or services the workflow calls, so you can test failure paths - Basic familiarity with n8n nodes: HTTP Request, IF, Set, Merge, Error Trigger - A Slack or email destination to receive Level 4 escalation alerts ## Reference | Level | Purpose | n8n implementation | Use it for | |---|---|---|---| | 1. Ignore | Accept failures that don't affect the outcome | Enable "Continue on Fail" on the node | Optional data enrichment, logging calls, duplicate checks | | 2. Retry | Auto-retry transient errors before giving up | Error Trigger, plus a Set node (retry_count), an IF node (retry_count < 3), a Wait node (Math.pow(2, retry_count) seconds), looped back to the original node | External API calls, AI model calls, database queries under load, file uploads | | 3. Fallback | Switch to a backup system once retries are exhausted | Alternate HTTP Request node on the IF node's False output, combined with a Merge node in Append mode | Payment processing (Stripe to PayPal), CRM sync (HubSpot to Google Sheets), email delivery, AI calls (Claude to a simpler model or prompt) | | 4. Escalate | Alert a human with actionable context when automation can't recover | Error Trigger, a Set node formatting error_summary, workflow_name, and failed_node, then a Slack or Email node plus Stop and Error | Any failure that survives fallback and needs manual intervention | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Workflow fails silently, for example an API times out and a lead just disappears with no notification | Add an Error Trigger node and a Level 4 escalation (Slack or email) so failures always produce a visible alert | | AI API call times out or hits a rate limit (for example an Anthropic 429 or a temporarily unavailable model) | Treat it as transient: apply Level 2 retry with exponential backoff using a Wait node | | AI response comes back as HTTP 200 but fails schema validation, missing fields or hallucinated field names | Don't just retry the same prompt. Apply Level 2 with a corrected prompt naming the missing field, or fall back to a simpler prompt (Level 3) | | AI response validates against the schema but the content is confidently wrong, for example total_cost: -500 | Add a separate output validation node that checks business rules before passing data downstream, and escalate (Level 4) if it fails | | A multi-step agent skips a step (for example step 3 of 6 fails) but no top-level error fires because continue_on_error was set for another reason | Track completion state explicitly, log which tools ran, succeeded, or were skipped, and escalate if the final output is missing data from a required step | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **From Demo to Dependable: Production n8n Workflows**.

Read Lesson 4 on Substack →

## More in this section - [Lesson 3: Workflow Contracts That Save You [FD2D #3]](/courses/production-n8n/lessons/workflow-contracts-that-save-you-fd2d-3/) - [Lesson 5: The Postmortem Framework: Learning from Failures [FD2D #5]](/courses/production-n8n/lessons/the-postmortem-framework-learning-from-failures-fd2d-5/) ## Continue the course Browse all lessons in the [From Demo to Dependable: Production n8n Workflows](/courses/production-n8n/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-automation-cost-tracking) to get new lessons in your inbox. --- # OpenClaw AI Agent: Security, Cost, Architecture, and Setup Deep Dive URL: https://www.genaiunplugged.com/courses/openclaw/lessons/openclaw-ai-agent-security-cost-architecture-and-setup-deep-dive/ > A live session with Wyndo covering OpenClaw AI agent security, real costs, architecture decisions, and the full setup walkthrough. OpenClaw is an autonomous AI agent (225,000+ GitHub stars) that reads Slack, updates Notion, sends emails, and monitors your calendar without you copy-pasting between tabs. This lesson covers its four core components (soul.md, user.md, memory, heartbeat.md), the prompt injection and credential risks, and the cost controls needed to avoid runaway API bills. ## What you will be able to do - Configure the four core OpenClaw files (soul.md, user.md, memory, heartbeat.md) to set up a personalized, autonomous agent - Set hard spending limits (max_daily_tokens, max_monthly_spend, alert_threshold) to prevent surprise API bills - Recognize and defend against prompt injection attacks that can leak credentials to an attacker - Choose the right AI model (Claude Sonnet 4.6, Opus 4.6, or Kimi) for each task to control token costs - Decide whether OpenClaw fits your workflow using the security and data-sensitivity criteria in the decision framework ## Before you start - A VPS (AWS, Hetzner, DigitalOcean) or a dedicated old computer, since OpenClaw should never run on your personal machine - An Anthropic account with access to Claude models (Sonnet 4.6, Opus 4.6) or another supported AI model - Comfort with basic technical setup: installing software and editing configuration files like soul.md and heartbeat.md - Willingness to actively monitor costs and security, especially in the first few weeks ## Reference | Component/Setting | What it does | Example / Value | |---|---|---| | soul.md | Defines the agent's personality, tone, role, and boundaries | Pepper Potts (chief of staff), David Goggins (workout coach), Morty (entertainment) | | user.md | Holds your personal/business context so responses are personalized | Business, schedule, preferences, goals | | Memory (Rack system) | Persistent memory across sessions | Remembers past decisions, recurring tasks, corrected mistakes | | heartbeat.md | Automated monitoring and triggered actions | Defines what to monitor, when to check, what actions to trigger | | max_daily_tokens | Hard cap on daily token usage | 100000 | | max_monthly_spend | Hard cap on monthly spend | 150 | | alert_threshold | Warning threshold before hitting the hard cap | 80% | | Pro Plan vs Max Plan | Anthropic subscription tiers for running OpenClaw | Pro $20/month; Max $100/month (5x more tokens) | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Agent given broad Gmail access gets its context overloaded, compacts conversations, loses its original instructions, and bulk-deletes emails (real incident) | Never grant broad access to sensitive systems; restrict OpenClaw to internal workflows only | | Prompt injection hidden in an email or document overrides the agent's instructions and can send credentials to an attacker | Never let OpenClaw process emails or documents from untrusted sources | | No hard spending limits configured, so an overnight run racks up $200+ in API charges before you notice (some users report $200/day) | Set max_daily_tokens, max_monthly_spend, and alert_threshold in config, capped at 50-70% of your comfort zone | | Running OpenClaw on your personal computer risks it reading your personal files, passwords, and financial data if compromised | Run it on a separate VPS or dedicated old computer, and use Tailscale or similar for network isolation | | Credentials pasted directly into soul.md or user.md as plain text, or full-access API keys handed to the agent | Use environment variables or secure vaults, and use read-only, scoped API tokens wherever possible | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **OpenClaw for Solopreneurs: AI Agents That Work While You Sleep**.

Read Lesson 0 on Substack →

## Continue the course Browse all lessons in the [OpenClaw for Solopreneurs: AI Agents That Work While You Sleep](/courses/openclaw/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-openclaw-beginner-non-developer-assessment) to get new lessons in your inbox. --- # What OpenClaw Actually Is (And Isn't) — A Non-Developer's Honest Assessment URL: https://www.genaiunplugged.com/courses/openclaw/lessons/what-openclaw-actually-is-and-isnt-a-non-developers-honest-assessment/ > A non-developer breaks down OpenClaw architecture, realistic use cases, honest limitations, and real cost numbers from a live session. OpenClaw is an open-source autonomous AI agent system that runs monitoring loops every 30 minutes on your own machine or a server, without you prompting it. You configure its behavior through markdown files like SOUL.md, USER.md, IDENTITY.md, MEMORY.md, and HEARTBEAT.md, and it reports back through WhatsApp, Discord, or iMessage. ## What you will be able to do - Set up a Morning Briefing Agent that checks Gmail, calendar, and Todoist and posts a summary to Slack before you're at your desk. - Distinguish OpenClaw's scheduled, proactive monitoring from ChatGPT/Claude's prompt-and-wait model and from n8n's event-triggered automation. - Configure the core markdown files (SOUL.md, USER.md, IDENTITY.md, MEMORY.md, HEARTBEAT.md) that control what the agent does and won't do. - Estimate realistic monthly API costs depending on whether you run Claude Opus, a budget model, or a local Ollama setup. - Score your own readiness against the 10-point checklist to decide whether to set up OpenClaw now or wait 3-6 months. ## Before you start - Comfort with SSH into a VPS and running command-line tools, or willingness to run OpenClaw locally. - Ability to edit and debug plain-text markdown configuration files. - A dedicated test email account separate from your primary or client communication account. - 4+ hours for initial setup and about 60 minutes a week for ongoing maintenance. ## Reference | File | Role | What it defines | |---|---|---| | SOUL.md | Employee handbook | Core values, communication style, governance rules: what the agent can do, what needs your approval, what's off limits | | USER.md | Profile card | Your name, role, work patterns, time zone, working style preferences | | IDENTITY.md | Business card | The agent's name, avatar, emoji, and vibe; lets you run multiple agents with different identities | | MEMORY.md | Notebook of verified facts | Durable context about your environment, decisions, and recurring patterns; auto-updated by the agent, so it needs regular review | | HEARTBEAT.md | Daily checklist | The monitoring loops and their schedule, for example every 30 minutes or daily at 7 AM | | Daily logs | Activity record | Timestamped record of what the agent did, used for debugging and auditing actions | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Agent deletes emails or ignores STOP commands (the META AI safety director incident on February 23rd) | Use a dedicated test email account for OpenClaw, not your primary or client communication account | | MEMORY.md grows unchecked and pushes SOUL.md safety instructions out of the context window | Review what the agent writes to MEMORY.md regularly and keep it small and structured, not a dumping ground | | Malicious skills installed from ClawdHub (341+ found, 36% with code flaws) | Audit any skill before installing it rather than pulling from ClawdHub without review | | Exposed instance leaks API keys and credentials (reported on 30,000 to 42,000 instances) | Harden your own deployment; OpenClaw's defaults ship insecure and nobody does this for you | | Running Claude Opus on every HEARTBEAT.md check produces $300 to $750 a month in bills | Switch to a budget model such as DeepSeek, Kimi K2.5, or Gemini Flash, or run locally through Ollama for standard monitoring loops | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **OpenClaw for Solopreneurs: AI Agents That Work While You Sleep**.

Read Lesson 1 on Substack →

## Continue the course Browse all lessons in the [OpenClaw for Solopreneurs: AI Agents That Work While You Sleep](/courses/openclaw/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-openclaw-beginner-non-developer-assessment) to get new lessons in your inbox. --- # What is Automation | Why It Matters | Your First n8n Automation Demo URL: https://www.genaiunplugged.com/courses/n8n/lessons/what-is-automation/ > See what automation actually means, why it matters for your work, and watch a first n8n automation demo built from scratch. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 1. Introduction. Watch the video above for the full tutorial, or read the written guide below. ## What is automation and why does it matter? Automation executes a predictable set of actions based on specific conditions, removing the manual steps that create human error, slow throughput, higher resource costs, and low employee satisfaction. By replacing intuition-driven decisions with data-driven logic, automation lets businesses scale without hiring more people, boosts productivity by freeing employees for creative work, and cuts operational costs because a computer program is cheaper and faster than a person repeating the same task daily. ## How do you structure an n8n automation workflow? Every n8n workflow contains three components. A trigger is the event that wakes the workflow up: a form submission, an incoming email, a WhatsApp or SMS message, a new lead, or a scheduled time such as every day at 8:00 a.m. Processing is the middle step where data gets filtered, segmented, modified, or transformed. Actions are the final output that completes the workflow, such as saving a record to a CRM, sending a welcome email, or posting a Slack alert to the sales team. The lead qualification demo in the lesson shows one workflow handling four outcomes from a single form submission: ignoring incomplete leads, routing low-value leads to an email sequence, saving high-value leads to a Google Sheet, and firing a Slack notification when an ideal-customer-profile match appears. Before building any workflow in n8n, map the entire process as a flowchart using a tool like Miro or draw.io. Mapping upfront reveals every trigger, data path, and action so you can place all three key components before touching a single node. Then start small: test one section at a time and expand only after each piece works correctly. Testing in automation matters more than in manual work because errors scale. A workflow running at volume will repeat a mistake thousands of times before anyone notices. Test every path and edge case thoroughly before going to production, then keep monitoring the live workflow so small problems get caught and fixed before they compound into larger ones. ## Key Takeaways - Automation solves four manual-work problems: subjective decisions that cause inconsistent results, slow repetitive tasks, high resource costs from needing more staff, and low employee satisfaction from doing mundane work every day. - Every n8n workflow has exactly three components: a trigger (the event that starts it), processing (filtering, segmenting, or transforming data), and an action (the final output such as a CRM update, an email, or a Slack message). - The lead qualification demo shows one n8n workflow handling four outcomes from a single form submission: ignoring incomplete leads, adding low-value leads to an email sequence, saving high-value leads to a Google Sheet, and alerting the sales team in Slack. - Map the full workflow as a flowchart before building in n8n; tools like Miro and draw.io help you identify every trigger, data path, and action upfront. - A poorly designed workflow scales errors just as fast as it scales results, so always start small, test every edge case, and keep monitoring after launch. ## Related Lessons - [Lesson 1: n8n AI Automation Course Introduction | Build AI Workflows (Zero to Hero)](/courses/n8n/lessons/n8n-ai-automation-course-introduction/) - [Lesson 3: What is n8n & Why It's the Best Automation Tool | Auto-save Gmail Attachments](/courses/n8n/lessons/what-is-n8n-why-its-the-best-automation-tool/) - [Lesson 17: n8n vs Zapier vs Make.com Comparison](/courses/n8n/lessons/n8n-vs-zapier-vs-makecom-comparison/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What types of events can trigger an n8n workflow? Triggers in n8n can be any detectable event: a web form submission, an incoming email, a WhatsApp or SMS message, a Discord message, a new lead entering a system, or a scheduled time such as every Monday or every day at 5:00 p.m. Every workflow must begin with a trigger because it is the event that tells the automation to wake up and start processing data. ### What happens during the processing step in an n8n automation workflow? The processing step filters, segments, modifies, or transforms incoming data before any action runs. In the lead qualification example from the lesson, processing checks whether company information is present, classifies the lead as low-value or high-value, and routes each category to a different downstream path. The lesson compares this step to a train station where data arrives, gets directed to the right platform, and continues toward its destination. ### Why does automation lower costs compared to doing the same work manually? Automation replaces repetitive manual tasks with a computer program that runs the same logic consistently, so you need fewer employees for those tasks and can handle more volume without increasing headcount or work hours. The lesson uses a customer onboarding example where one automated workflow replaces an employee who would otherwise call customers, enter data into a CRM, and send a welcome email manually. ### What are the four best practices for building n8n automation workflows? n8n workflow builders should follow four practices from the lesson: map the full process as a flowchart using tools like Miro or draw.io before building anything; start small and test one section at a time before expanding; thoroughly test every path and edge case before going to production because errors scale just like successful runs do; and monitor the live workflow continuously so problems get caught and fixed before they compound into larger issues. --- # What is n8n & Why It's the Best Automation Tool | Auto-save Gmail Attachments URL: https://www.genaiunplugged.com/courses/n8n/lessons/what-is-n8n-why-its-the-best-automation-tool/ > Discover what n8n is and why it beats other automation tools, then build your first workflow that auto-saves Gmail attachments. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 1. Introduction. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n and how does it compare to Zapier and Make.com? n8n connects hundreds of apps, builds multi-step workflows, and runs AI agents without writing a single line of code, all on a source-available platform you self-host or deploy to the cloud. Three features separate it from Zapier and Make.com: workflow-based pricing (one charge per complete execution, not per step or operation), full self-hosting with no vendor lock-in, and native support for complex AI automations using conditional logic nodes, a code node, and an HTTP node. ## How do you build a Gmail-to-Google Drive attachment-saver in n8n? The Gmail attachment workflow chains four nodes in sequence: a Gmail trigger, a Filter node, a Google Drive node, and a Discord node. The Gmail trigger wakes the workflow when a new email arrives and outputs all email properties including binary attachments. The Filter node checks whether an attachment exists and passes only matching emails forward. Google Drive uploads the file, and Discord posts a confirmation message using the email subject. n8n nodes fall into three categories, all visible in this four-node demo. Trigger nodes start execution: the Gmail trigger fires on new email, but a new Google Sheet row, a CRM entry, or a scheduled time like every Monday at 7:00 a.m. all work as triggers too. Data-transformation nodes handle the middle: the Filter node evaluates a binary condition (attachment present or not) and routes only matching emails into the "kept" branch. Action nodes close the chain: the Discord node constructs a message from an expression that pulls the email subject directly from the Gmail trigger's output. The Gmail trigger node exposes its settings panel when you double-click it on the canvas. The left side shows incoming data, the right side shows output; clicking "Fetch test event" pulls a real email and displays its full payload, including ID, subject, labels, and binary attachments. The Google Drive node accepts saved Google account credentials, sets the operation to "upload," references the binary attachment from the Gmail trigger, and targets a named folder such as "hands-on labs." Clicking "Test workflow" at the bottom of the canvas runs all four nodes in sequence and marks each with a green check mark on success. ## Key Takeaways - n8n charges one fee per complete workflow execution, not per step, so a workflow with hundreds of nodes costs the same as a two-node one, making monthly costs predictable. - n8n runs on a local machine, a private cloud server, or an enterprise instance, eliminating the vendor lock-in that applies to cloud-only tools like Zapier and Make.com. - Every n8n workflow uses three node categories: trigger nodes that start execution, data-transformation nodes that filter and route data, and action nodes that complete tasks like uploading files or sending messages. - The Gmail attachment workflow demonstrates the core pattern: Gmail trigger fires on new email, Filter node checks for a binary attachment, Google Drive node uploads the file, Discord node sends a subject-based confirmation. - Mapping a business process in plain English before building in n8n makes the logic transferable: swap Gmail for Apple Mail, Google Drive for OneDrive, or Discord for Slack without changing the underlying workflow structure. ## Related Lessons - [Lesson 1: n8n AI Automation Course Introduction | Build AI Workflows (Zero to Hero)](/courses/n8n/lessons/n8n-ai-automation-course-introduction/) - [Lesson 2: What is Automation | Why It Matters | Your First n8n Automation Demo](/courses/n8n/lessons/what-is-automation/) - [Lesson 17: n8n vs Zapier vs Make.com Comparison](/courses/n8n/lessons/n8n-vs-zapier-vs-makecom-comparison/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### How does n8n's workflow-based pricing differ from Zapier's and Make.com's per-step pricing? n8n charges one fee per complete workflow execution regardless of how many nodes or data points run inside it. Zapier and Make.com charge per task, operation, or step, which becomes unpredictable when a single workflow contains hundreds of data-processing nodes. n8n's model keeps monthly automation costs predictable and easier to budget, especially for complex workflows. ### What does the Filter node do in an n8n workflow? The Filter node checks a condition against incoming data and routes only matching items forward. In the Gmail attachment workflow, the Filter node checks whether a binary attachment exists on the incoming email. Emails that meet the condition move into the "kept" branch and continue to the Google Drive node; emails without attachments are dropped and the workflow stops for that item. ### What self-hosting options does n8n support? n8n supports self-hosting on a local machine, a private cloud server, or an enterprise deployment, as well as an n8n-managed cloud subscription. Self-hosting keeps your business logic and data on your own infrastructure. Zapier and Make.com offer only cloud-hosted versions, which means your workflow data lives on their servers with no alternative. ### What is a trigger node in n8n, and what examples appear in the Gmail attachment lesson? Trigger nodes wake an n8n workflow and start its execution; without one, no workflow ever runs. The Gmail trigger in this lesson fires when a new email arrives in the connected inbox. Other trigger examples from the lesson include a new row added to a Google Sheet, a new CRM entry, and a scheduled time such as every Monday at 7:00 a.m. --- # 60-Minute Secure OpenClaw Setup on Hetzner (The Budget-Safe Way) URL: https://www.genaiunplugged.com/courses/openclaw/lessons/60-minute-secure-openclaw-setup-on-hetzner/ > Set up OpenClaw securely on a Hetzner VPS in 60 minutes using Docker, Tailscale, and burner accounts, with a model cost comparison table. The Security-First Setup pattern deploys OpenClaw on a Hetzner CX23 VPS, locked down with UFW firewall rules, SSH key-only access, and a Tailscale VPN before OpenClaw is installed, so the agent has zero public ports. Setup takes 90 minutes and runs under $20 a month, including a Telegram-connected default agent. ## What you will be able to do - Provision a Hetzner CX23 VPS and lock it down with SSH key-only access and a deny-by-default UFW firewall - Put the VPS and your laptop on the same private Tailscale network so no OpenClaw port is ever exposed to the public internet - Set up burner Gmail and Telegram accounts so the agent never touches your real inbox or messages - Install Docker and run the OpenClaw setup wizard to get a default agent responding to Telegram messages - Open the OpenClaw dashboard through an SSH tunnel over Tailscale instead of a public URL ## Before you start - Laptop with terminal access (macOS, Linux, or WSL on Windows) - Credit card for Hetzner (about $4 a month for the VPS) - Comfort typing terminal commands (no need to understand them) - About 90 minutes of focused time, plan for up to 2 hours on a first server setup ## Reference | Step | Command / Setting | Purpose | |---|---|---| | Generate SSH key | `ssh-keygen -t ed25519 -C "openclaw-hetzner"` | Creates the key used for VPS login | | Cache SSH key | `ssh-add ~/.ssh/id_ed25519` | Avoids retyping the passphrase every SSH command | | Deny-by-default firewall | `ufw default deny incoming`, `ufw default allow outgoing`, `ufw allow ssh`, `ufw enable` | Closes every port except SSH before OpenClaw touches the system | | Disable password login | Edit `/etc/ssh/sshd_config`, set `PasswordAuthentication no`, then `systemctl restart ssh` | Requires key-based login, stops brute-force SSH attempts | | Install and start Tailscale | `curl -fsSL https://tailscale.com/install.sh \| sh` then `tailscale up` | Puts the VPS on a private 100.x.x.x network only your devices can reach | | Allow Tailscale subnet in UFW | `ufw allow from 100.64.0.0/10` | Lets your Tailscale devices reach the VPS while public traffic stays blocked | | VPS spec | Hetzner CX23: 4GB RAM, 2 vCPU, 40GB SSD, Ubuntu 24.04 LTS | Enough headroom for OpenClaw plus Docker overhead, about $5 a month with IPv4 | | Gmail app password | Go directly to `myaccount.google.com/apppasswords` | Lets OpenClaw connect to the burner Gmail via IMAP without the real account password | ## Common errors and fixes | What goes wrong | The fix | |---|---| | `*** System restart required ***` appears after `apt update && apt upgrade -y` | Run `reboot`, wait 30 seconds, then reconnect with `ssh root@[YOUR-VPS-IP]` | | SSH connection returns "Permission denied" | Check you used the correct VPS IP and that your public key was actually added in Hetzner's SSH Keys field | | First SSH connection shows "The authenticity of host can't be established" | This is normal on a first connection, type `yes` to continue | | Connecting a real Gmail account directly to the agent risks data loss (a reported case had 200+ emails deleted when an agent lost context mid-thread) | Use burner Gmail and Telegram accounts instead of primary accounts, so a mistake only costs burner data | | Following the common "get it working first, secure it later" setup order leaves the instance exposed, as with the 42,665 scanned OpenClaw instances (93.4% had authentication bypasses) | Do Tailscale, the firewall, and burner accounts before installing OpenClaw, not after | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **OpenClaw for Solopreneurs: AI Agents That Work While You Sleep**.

Read Lesson 2 on Substack →

## Continue the course Browse all lessons in the [OpenClaw for Solopreneurs: AI Agents That Work While You Sleep](/courses/openclaw/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-openclaw-beginner-non-developer-assessment) to get new lessons in your inbox. --- # Understanding Data in n8n | JSON, Lists & Items in n8n Explained URL: https://www.genaiunplugged.com/courses/n8n/lessons/understanding-data-in-n8n/ > Learn how n8n structures data as JSON, understand items and lists, and read the data panel to debug workflows confidently. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What is JSON and why does n8n use it? JSON (JavaScript Object Notation) is the universal data exchange format that connects every app n8n integrates with. It stores data as key-value pairs, for example `"order_number": "ORD001"`, and unlike a rigid spreadsheet table it lets each record carry a completely different set of properties. CRMs, Google Sheets, Slack, Discord, and every API n8n touches all speak JSON, making it the foundational language of automation. JSON solves the rigidity problem that tabular data cannot. A smartphone order and a t-shirt order share header fields (order number, customer name, address) but need completely different product attributes. JSON nests objects inside objects, so product details live inside the order object, and each record describes exactly what it needs without forcing every field into the same columns. Think of it like a bento box where compartment sizes flex to fit the meal, not a fixed-grid cafeteria tray where protein and carbs must share equal space whether they fit or not. JSON is also a plain text format, which means it compresses easily, transfers across networks cheaply, and parses reliably in every programming language. Those properties are why it became the dominant exchange format between applications and why n8n uses it internally for every node input and output. ## How does a JSON list store multiple items in one structure? A JSON list, also called an array, stores multiple items inside square brackets `[ ]`. Any time square brackets appear in JSON, everything inside is a collection of individual items that can each have different properties. A single order can contain a list of products: an iPhone with seven attributes and an Avengers t-shirt with five, with no requirement that both items share the same fields. The distinction between a list and a single object matters in automation. Two separate orders with one product each are like two delivery boxes with one item apiece. One order with two products is one big box with two items inside. JSON describes both cleanly. The outer object holds the shared header data (order number, customer, address) and a key like `products` holds the array, with each product sitting inside its own `{ }` block, separated by commas. Commas separate items within the array, and the closing square bracket ends the list. Items inside the list do not need to be identical in structure. The smartphone can carry seven attributes while the t-shirt carries five, and JSON handles both without complaint. ## How do you read a JSON value using dot notation? Dot notation chains key names to walk into nested JSON objects, and square-bracket indexes pick a specific item out of a list. To reach the product name in the first order of a list variable called `orders`, write `orders[0].order.product.name`. The `[0]` grabs the first order (lists are zero-indexed, so position zero is first), each `.` steps into the next nested object, and the final key returns the value. For a single-order variable called `order_data` there is no outer list, so you skip the index: `order_data.order.products[0].name` returns the first product name directly, and `order_data.order.products[1].price` returns the second product's price, which in the lesson example is $119. The rule is: use square brackets with a number whenever you are selecting one item from a list, and use dot notation whenever you are stepping into a named object. Chaining both together lets you reach any value no matter how deeply nested. This exact syntax appears in n8n expressions whenever a node references data from a previous node, so mastering the pattern transfers directly to building workflows. ## How does n8n represent and process JSON data as items? In n8n, a list of JSON objects becomes a list of items, and every node processes each item individually. If a trigger node fetches ten customer orders, every downstream node applies its configured logic to all ten orders one at a time and passes ten output items forward. The item count stays consistent across nodes unless a node is specifically designed to merge or split data. This per-item processing model means logic you configure once scales automatically to any volume of records. A workflow built to process one order handles a hundred orders without any changes. When debugging unexpected output, checking whether the item count entering a node matches what you expect, and whether the JSON keys you are referencing actually exist on every item, resolves the majority of data-flow mysteries. ## Key Takeaways - **JSON is the lingua franca of n8n integrations.** Every app n8n connects to exchanges data as JSON key-value pairs, so understanding JSON structure is non-negotiable before building reliable automations. - **Square brackets signal a list; curly braces signal an object.** Whenever `[ ]` appears in JSON you are dealing with multiple items that each need a zero-based index (`[0]`, `[1]`) to access individually. - **Dot notation plus index chaining unlocks any value.** Walk nested objects with dots and pick list items with indexes: `orders[0].order.product.name` retrieves the product name from the first order in the list. - **Every n8n node processes items one at a time.** A node receiving ten items applies its logic ten times and outputs ten items, so one well-configured node handles any volume of records automatically. - **JSON beats tabular formats for heterogeneous data.** A smartphone order and a t-shirt order coexist in the same list with completely different product attributes, something fixed spreadsheet columns cannot accommodate without creating separate tables. ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is JSON and why is it important for n8n automation? JSON (JavaScript Object Notation) is a structured key-value pair format used by virtually every application to exchange data. In n8n, every node input and output uses JSON, because every external service n8n connects to, including CRMs, Google Sheets, Slack, and REST APIs, communicates in JSON. Understanding JSON structure is the foundation for reading, transforming, and troubleshooting data in any n8n workflow. ### What is the difference between a JSON object and a JSON list in n8n? A JSON object stores named key-value pairs inside curly braces `{ }`, for example a single order with fields like order number and customer name. A JSON list, also called an array, stores multiple items inside square brackets `[ ]`, for example a list of products inside one order or a list of orders from a trigger. In n8n, lists become collections of items that each node processes individually. ### How do you access a nested JSON value using dot notation in n8n? Dot notation chains key names to step through nested objects, and square-bracket indexes select a specific item from a list. For a list variable called `orders`, `orders[0].order.product.name` returns the product name from the first order. Lists are zero-indexed, so `[0]` is the first item and `[1]` is the second. This same dot-and-bracket syntax is used directly inside n8n expressions to reference data from previous nodes. ### What are n8n items and how does a node handle a list of them? n8n items are individual JSON objects inside the list of data passing through a workflow. When a trigger node fetches ten orders, it produces ten items. Every downstream node automatically applies its configured logic to each item separately and passes the same ten items forward. This per-item processing means a workflow built for one record scales to any number of records without additional configuration. --- # n8n vs Zapier vs Make.com Comparison URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-vs-zapier-vs-makecom-comparison/ > Compare n8n, Zapier, and Make.com on pricing, flexibility, and self hosting to pick the right automation tool for your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 1. Introduction. Watch the video above for the full tutorial, or read the written guide below. ## What is the difference between n8n, Zapier, and Make.com? n8n, Zapier, and Make.com are the three leading workflow automation platforms, each built around a different pricing and control model. Zapier charges per task (each step in a workflow counts separately), Make.com charges per operation (even a condition check costs one operation), and n8n charges per workflow execution regardless of how many nodes or steps it contains. n8n also uniquely supports self-hosting, while Zapier and Make.com are cloud-only. For complex automations on a predictable budget, n8n is the strongest fit. ## How to choose between n8n, Zapier, and Make.com for your use case? **n8n's per-execution pricing and self-hosting option anchor the two most important decisions.** n8n's model means a 100-node workflow costs the same single execution unit as a 5-node one, making costs predictable as you scale. Zapier's per-task model inflates quickly on branching workflows, and Make.com's per-operation counting charges every condition check. For sensitive data like medical records or PII, n8n is the only tool you can deploy on your own server, which is what HIPAA, SOC 2, and GDPR compliance often requires. Zapier and Make.com are cloud-only and can't meet on-premise data residency needs. **n8n's workflow canvas, coding support, and AI agent node give technical builders the most flexibility.** n8n supports if-else nodes, switch statements, loops, merge nodes, and full JavaScript and Python scripting directly in the canvas. Zapier covers basic if-this-then-that branching with no loops, and Make.com adds visual routers and branching but locks custom scripting to enterprise plans. For AI, n8n integrates the full OpenAI API, LangChain, and a dedicated AI agent node for building multi-agent workflows. Zapier has AI steps with limited customization, and Make.com supports OpenAI and Hugging Face models but lacks deep API control. **Zapier's integration count leads, but n8n's HTTP node and error handling close the gap.** Zapier offers 6,000-plus out-of-the-box connectors, n8n offers around 4,000, and Make.com has 1,500. n8n's HTTP node connects to any API or webhook even when no official integration exists, covering apps too niche for the main registry. On error handling, n8n lets you build custom error workflows that log failures to Slack, retry failed steps, or pause execution entirely. Zapier provides basic error paths, and Make.com supports retry and partial execution settings. At enterprise scale, choose Zapier for quick simple setups, Make.com for visual no-code work on the cloud, and n8n when you need self-hosting, custom logic, and Docker-based infrastructure to grow. ## Key Takeaways - n8n charges per workflow execution, not per step or operation, so a 100-node workflow and a 5-node workflow cost the same single execution unit. - n8n is the only tool of the three that supports self-hosting and on-premise deployment, making it the only compliant path for HIPAA, SOC 2, or GDPR-regulated data. - Zapier leads with 6,000-plus integrations, but n8n's HTTP node connects to any API or webhook even when no official connector exists. - n8n's AI agent node, full OpenAI API integration, and LangChain support make it the most extensible platform for custom AI and multi-agent workflows. - n8n supports full JavaScript and Python scripting on all plans, while Zapier limits package support and Make.com restricts scripting to enterprise customers. ## Related Lessons - [Lesson 1: n8n AI Automation Course Introduction | Build AI Workflows (Zero to Hero)](/courses/n8n/lessons/n8n-ai-automation-course-introduction/) - [Lesson 2: What is Automation | Why It Matters | Your First n8n Automation Demo](/courses/n8n/lessons/what-is-automation/) - [Lesson 3: What is n8n & Why It's the Best Automation Tool | Auto-save Gmail Attachments](/courses/n8n/lessons/what-is-n8n-why-its-the-best-automation-tool/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### How does n8n's per-execution pricing work compared to Zapier's per-task model? n8n counts one workflow run as one execution regardless of how many nodes or steps it contains. Zapier counts each step individually as one task, so a five-step workflow running 100 times consumes 500 tasks. Make.com counts every operation, including each condition check, separately. n8n's model delivers predictable costs for complex, branching automations and wins on value as workflow complexity grows. ### Can n8n be self-hosted for HIPAA or GDPR-sensitive workflows? n8n is open-source and can be deployed on your own server or local network, keeping all workflow data and business logic inside your own infrastructure. Zapier and Make.com are cloud-only and can't meet on-premise data residency requirements. Self-hosted n8n is the only viable path for healthcare, finance, or any use case handling PII subject to HIPAA, SOC 2, or GDPR. ### How does n8n's AI agent node differ from Zapier's and Make.com's AI features? n8n's AI agent node supports the full OpenAI API and LangChain libraries, letting you build multi-agent pipelines and custom GPT-style chatbots directly inside a workflow. Zapier offers AI steps and an AI-powered builder but limits customization. Make.com supports OpenAI and Hugging Face models but lacks deep API control. n8n is the only option that exposes the full model API surface for custom AI automation. ### When does Zapier or Make.com make more sense than n8n? Zapier makes sense when you need the broadest out-of-the-box app library (6,000-plus integrations) and prioritize setup speed over long-term cost control. Make.com suits users who want a visual no-code builder with advanced routing while staying on the cloud. Neither fits when self-hosting, full JavaScript and Python scripting, or per-execution pricing is a hard requirement for your workflow. --- # n8n Quick Start Workflow | Connect Airtable, Notion, Slack & Amazon SES URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-quick-start-workflow/ > Build an n8n quick start workflow connecting Airtable, Notion, Slack, and Amazon SES in one working automation you can reuse. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n's role when connecting multiple business apps? n8n acts as a universal translator for disconnected business apps. Most software tools , Google Sheets, Airtable, HubSpot, Slack, Notion , do not talk to each other natively. n8n sits in the middle: a trigger fires when something happens in one app, and n8n performs sequential actions across the others, moving data without code or a programmer. The HTTP node covers any app that lacks a dedicated built-in node. ## How to build a lead management workflow connecting Google Forms, Google Sheets, Slack, Notion, and Airtable The Webhook node is the entry point for this workflow. Configure it with HTTP method POST (not GET, because you are receiving and processing data, not fetching it), then copy its test URL into each Google Form's Apps Script. A single Webhook node can receive submissions from multiple forms at once, replacing the daily manual task of browsing survey responses. The Google Sheets node handles lead storage, and the IF node replaces manual qualification. Use the "Append Row" operation in Google Sheets, not "Append or Update Row," which errors without a match-column ID. After the row is saved, the IF node evaluates two conditions: company name "is not empty" and email "does not end with gmail.com" or "hotmail.com." Leads meeting all conditions route to the True branch; others go to False and stop. On the True branch, three sequential nodes handle the qualified lead. A Slack node (resource: Message, operation: Send) posts a "New Lead Alert" with the contact's first and last name dragged from the Webhook output into the message text. A Notion node (resource: Database Page, operation: Create) adds a follow-up task to the sales team's task tracker. To wire up Notion, create an internal integration at notion.so/my-integrations, copy the API secret into n8n credentials, then invite that integration to the specific page via the page's three-dot menu and Connections. Finally, an Airtable node logs the lead in the CRM. ## Key Takeaways - The Webhook node serves as a single listener for multiple Google Forms: configure each form's Apps Script to POST to the same webhook URL, eliminating manual data collection. - Use "Append Row" in the Google Sheets node, not "Append or Update Row"; the latter requires a match-column ID and throws a configuration error when adding new records. - The IF node replaces a human reviewer: combining a company-name "is not empty" check with email-domain conditions routes only business leads to the sales pipeline. - Notion's internal integration requires three distinct steps: create the integration at notion.so/my-integrations, paste the API secret into n8n, then invite the integration to the target page via that page's Connections menu. - The HTTP node extends n8n to any REST API not covered by a built-in node, making the Slack, Notion, Airtable, and Google pattern reachable for nearly any business software. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the Google Sheets node throw an error when set to 'Append or Update Row'? The Google Sheets node's 'Append or Update Row' operation requires a 'Column to Match On' parameter so n8n knows which existing row to update. When the goal is only adding new lead records, switch the operation to 'Append Row,' which skips the match-column requirement entirely and inserts a new row without error. ### How does the IF node qualify leads without using AI in this workflow? The IF node evaluates two conditions against each incoming submission: company name 'is not empty,' confirming the field was filled, and email address 'does not end with gmail.com' or 'hotmail.com,' confirming a business address. Leads satisfying all conditions exit the True branch and trigger Slack, Notion, and Airtable actions; others exit False and stop. ### What are the exact steps to connect a Notion workspace to n8n? Notion's internal integration setup has three steps. First, go to notion.so/my-integrations, create a new integration, select Internal type (no Notion team approval needed for a single workspace), and copy the API secret. Second, paste that secret into n8n's Notion credential field. Third, open the target Notion page, click the three-dot menu, choose Connections, and search for the integration name to grant it read, update, and insert access. ### Can one Webhook node in n8n receive data from more than one Google Form? Yes. A single Webhook node configured with HTTP method POST generates one URL that multiple Google Forms can all target. Each form's Apps Script is configured to POST to that same URL. The Webhook node processes every incoming submission regardless of which form sent it, which is how this workflow replaces a manual daily review of many separate survey sheets. --- # Sub-Workflows URL: https://www.genaiunplugged.com/courses/n8n/lessons/sub-workflows/ > Build reusable n8n sub-workflows with the Execute Workflow node, pass data between flows, and reuse logic across projects. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What Are Sub-Workflows in n8n? A sub-workflow is a separate workflow you call from another workflow, like a reusable function. The calling workflow uses the Execute Sub-workflow node, and the sub-workflow runs from its own Execute Sub-workflow Trigger, accepts input data, and returns a result. ## How to Use Sub-Workflows in n8n Build the reusable logic as its own workflow that starts with an Execute Sub-workflow Trigger. In the main workflow, add an Execute Sub-workflow node, select that workflow, and pass in the data it needs. The sub-workflow runs and hands its output back to the main flow. Use sub-workflows to reuse one tested process across many automations, keep large workflows readable, and isolate logic you change often. ## Key Takeaways - Understanding the core concepts covered in this lesson - Practical, hands-on experience you can apply immediately - Tips from real-world n8n workflow implementations ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What will I learn in this lesson? A sub-workflow is a reusable workflow you call from another using the Execute Sub-workflow node. You will learn to pass data in and out, and why sub-workflows keep large automations readable and let you reuse one tested process everywhere. ### Do I need to watch the previous lessons first? This lesson builds on earlier concepts. If you are new to n8n, start with Lesson 1 for the best learning experience. ### Can I get help if I get stuck? Join the GenAI Unplugged community on Substack where Dheeraj answers questions and shares additional tips. --- # n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-node-types-explained/ > See how trigger, app, and core nodes fit together in an n8n workflow, with a video walkthrough of building one from scratch. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What are the four node types in n8n? n8n classifies every workflow component into one of four node types. Trigger nodes start the automation when a specific event fires, such as a form submission or a new Slack message. App nodes (also called action nodes) add, remove, or send data to external systems. Core nodes handle logic, scheduling, and generic API calls without connecting to an external service. Cluster nodes group multiple nodes into one unit, like an AI agent, and are covered in the AI-integration section of the course. ## How to build a workflow using trigger, app, and core nodes in n8n Trigger nodes set the starting condition for every production workflow. The simplest option is the Manual Trigger, which fires when you click "Test Workflow." Real automations use event-based triggers instead: a new row added to Google Sheets, a new email in your inbox, or a scheduled time such as every morning at 8 a.m. Every workflow you deploy in n8n must include exactly one trigger node, because that node decides when the automation runs. App and core nodes sit in the middle of the workflow, processing data between the trigger and the final output. To add one, click the "+" icon on the canvas and search for the service or function you need. Selecting Google Sheets opens the node configuration panel, where you pick the operation (such as "Get Rows"), connect OAuth credentials, and choose the target document and sheet. The panel shows incoming data on the left, configuration settings in the center, and output on the right. Action nodes complete the workflow by sending results to an external destination, such as updating a spreadsheet, posting a Slack notification, or writing to a database. Once a node runs successfully, you can click "Pin Data" to freeze its output for the rest of your build session, so you do not have to re-execute that node on every test run. n8n charges per workflow execution rather than per node, so pinning data saves build time without adding cost. ## Key Takeaways - **Trigger nodes** listen for a specific event (form submission, scheduled time, new data row) and every deployed n8n workflow must have exactly one. - **App nodes** connect to named external services like Google Sheets or Slack to read, write, or trigger actions in those systems. - **Core nodes** (Filter, Set, Code) transform and route data using logic or custom JavaScript/Python without authenticating to a specific third-party service. - **Cluster nodes**, such as the AI Agent node, bundle multiple nodes into a single unit and are covered separately in the AI-integration portion of the course. - **Pin Data** locks a node's output during development, letting you test downstream steps repeatedly without re-fetching live data on every run. ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 9: Build Your First n8n Workflow - Send Welcome Emails Automatically](/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What makes a trigger node different from app and core nodes in n8n? Trigger nodes are the only nodes that decide when a workflow runs, not what it does. While app and core nodes process data that is already flowing, a trigger node waits for a specific event, such as a new email, a form submission, or a scheduled time, then starts the entire execution chain. Every deployed n8n workflow must begin with exactly one trigger node. ### How do core nodes differ from app nodes in n8n? Core nodes perform logic, scheduling, or generic API calls entirely within the workflow without authenticating to a specific named external service. App nodes, by contrast, call a named third-party service such as Google Sheets or Slack. Examples of core nodes include the Filter node (conditional checks), the Set node (adding or modifying fields), and the Code node, which accepts both JavaScript and Python. ### What does the Pin Data feature do in the n8n node editor? The Pin Data feature freezes a node's output so n8n reuses those cached results for every downstream test run instead of re-executing the node. In the course demo, pinning the Google Sheets 'Get Rows' node locked 100 sample rows in place across the entire build session. A blue icon appears on the node to confirm its output is pinned. ### What is a cluster node in n8n and when is it used? Cluster nodes group multiple individual nodes into a single combined unit to accomplish a complex task, with the AI Agent node being the primary example given in the course. The instructor classifies cluster nodes as the fourth node type but explicitly defers them to the AI-integration section, so they are not configured in the introductory node-types lesson. --- # n8n Item Linking Explained | How Data Flows Between Nodes in n8n URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-item-linking-explained/ > See how n8n item linking connects output data back to its source input, so you can trace exactly how data flows between nodes. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n item linking and why does it matter? Item linking (also called data linking) is n8n's mechanism for tracking which output items originated from which input items as data flows through a workflow. n8n maintains this chain automatically in most scenarios: a single input always links to its output, and multiple outputs all link back to a single input. When that chain breaks, downstream nodes lose access to ancestor data and throw "paired item data unavailable" errors that stall the workflow. ## How to fix broken item linking in n8n Code nodes and Merge nodes Item linking breaks inside a Code node when the number of output items differs from the number of input items, or when the node constructs entirely new item objects. For example, filtering 10 snack items down to 3 and producing a new `product_review` field for each means n8n can no longer automatically trace which output came from which input. The fix is to add a `pairedItem` property to each output object and set its value to the index of the corresponding input item, for instance `pairedItem: i` where `i` is the loop counter. n8n reads that field to re-establish the chain, converting red expression previews to green in all downstream nodes. The Merge node introduces a different failure mode. Its "combine by position" mode pairs items strictly by their order in each branch. If two branches produce items in different sequences, positional merging silently joins the wrong records. A snacks branch ordered by ID and a reviews branch in a different order will cross-link cheese-ball reviews to nacho-chips data. The correct fix is to switch the Merge node to "on matching fields" mode and name the field that uniquely identifies records on both sides. When the matching field carries different names in each input branch, for example `product` on one side and `product_name` on the other, enable the "fields to match have different names" setting and map each side explicitly. After this change, the Merge node joins cheese balls to cheese balls and nacho chips to nacho chips regardless of the order items arrive in either branch. ## Key Takeaways - Item linking is n8n's provenance chain: each output item references the input item it came from, which is what lets a node read fields from nodes several steps earlier in the workflow. - n8n breaks automatic linking in a Code node when output count differs from input count or when the code constructs brand-new item objects without `pairedItem` hints. - Fix broken Code node linking by adding `pairedItem: ` to every output object; n8n uses that field to reconnect the chain and resolve downstream expressions. - Merge node "combine by position" corrupts data silently when the two input branches deliver items in different orders; use "on matching fields" and specify a shared identifier instead. - The "paired item data unavailable" error and red expression previews in downstream nodes are the diagnostic signals that item linking broke upstream, most often inside a Code node, Merge node, or Split node. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does 'paired item data unavailable' mean in n8n? The 'paired item data unavailable' error means a downstream node cannot trace an output item back to the input item that produced it. n8n throws this when a Code node, Merge node, or Split node breaks the item-linking chain, typically by outputting a different number of items than it received or by constructing entirely new item objects without a `pairedItem` reference. ### How do you fix item linking in an n8n Code node? Add a `pairedItem` property to each object in the Code node's output array and set its value to the index of the corresponding input item. For example, write `pairedItem: i` where `i` is the loop counter. n8n reads that field to reconnect the output item to the correct input, restoring access to fields from all ancestor nodes and clearing 'paired item data unavailable' errors in downstream nodes. ### When does n8n maintain item linking automatically? n8n maintains item linking automatically when a node has a single input and a single output, when one input produces multiple outputs (all outputs link to that one input), or when the number of inputs equals the number of outputs and their order is preserved. Linking breaks when the counts differ, when a Code node creates entirely new item objects, or when items are reordered without `pairedItem` hints. ### Why does the n8n Merge node produce wrong results with 'combine by position'? The Merge node's 'combine by position' mode pairs the first item from input one with the first item from input two regardless of content. If two branches produce items in different orders, positional merging silently joins the wrong records. Switching to 'on matching fields' mode and specifying a shared identifier, such as matching `product` on one branch to `product_name` on the other, ensures each item joins its correct counterpart. --- # n8n AI Automation Course Introduction | Build AI Workflows (Zero to Hero) URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-ai-automation-course-introduction/ > See what the n8n Zero to Hero course covers and set up your workspace so you can start building real AI automation workflows in n8n. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 1. Introduction. Watch the video above for the full tutorial, or read the written guide below. ## What is the n8n AI Automation Zero to Hero Course? The n8n AI Automation Zero to Hero Course teaches complete beginners to build AI-powered automation workflows without writing a single line of code. Structured across nine sections, it moves from n8n fundamentals and installation through advanced logic, error handling, and OpenAI/ChatGPT integration, culminating in a capstone project that builds a fully automated, AI-driven faceless YouTube channel running on autopilot. ## How does the course build automation skills across its nine sections? Sections 1 and 2 establish absolute basics: what automation is, why it matters, how to install n8n (self-hosted or cloud), and the core vocabulary of nodes, workflows, and triggers. Learners build their first automation, a form-submission email responder, and learn how data flows through n8n using JSON and list items before exploring essential nodes hands-on. Sections 3 and 4 level up the skillset. Section 3 covers connecting external apps like Google Sheets, Slack, and Notion, then dives into advanced logic including IF-else conditions, loops, branching, expressions, the HTTP node, the code node, subworkflows for reusability, and file handling. Section 4 focuses entirely on error handling and debugging, including how to build error-handling workflows that fire a notification the moment a run fails. Sections 5 through 7 shift to applied projects. Section 5 is a hands-on end-to-end workflow build using all prior concepts. Section 6 introduces OpenAI/ChatGPT APIs to power content generation, AI-driven decision-making (approvals, fraud detection), and automated customer response summarization. Section 7 brings everything together in the course's flagship output: a faceless YouTube channel that researches, writes, posts, and schedules content entirely on autopilot. ## Key Takeaways - **No-code premise is absolute.** The course explicitly promises that learners build production-ready workflows without writing a single line of code, including the AI-integrated sections. - **Nine-section structure mirrors a real learning arc.** Each section gates the next: basics before integrations, integrations before error handling, error handling before AI-layer projects. - **Subworkflows unlock reusability.** Section 3 introduces subworkflows specifically to let learners build small, portable workflow components that plug into larger automations, a pattern the course frames as an industry best practice. - **The capstone is a faceless YouTube channel.** Section 7 ties every prior concept into one real-world output: an AI-automated channel that generates and publishes content without manual intervention. - **n8n's open-source nature is positioned as a differentiator.** The course explicitly compares n8n against Zapier and Make.com and highlights open-source as the key distinction, covered in Section 1. ## Related Lessons - [Lesson 2: What is Automation | Why It Matters | Your First n8n Automation Demo](/courses/n8n/lessons/what-is-automation/) - [Lesson 3: What is n8n & Why It's the Best Automation Tool | Auto-save Gmail Attachments](/courses/n8n/lessons/what-is-n8n-why-its-the-best-automation-tool/) - [Lesson 17: n8n vs Zapier vs Make.com Comparison](/courses/n8n/lessons/n8n-vs-zapier-vs-makecom-comparison/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What repetitive tasks does this n8n automation course teach you to eliminate? The course grounds its examples in three common pain points the transcript names directly: manually sorting hundreds of emails each morning, copying data between spreadsheets in data-entry roles, and logging into multiple platforms to repurpose and post content as a creator. The automation workflows built in the course handle all three, including AI-generated summaries delivered via text or Telegram, auto-updated dashboards, and scheduled social media drafts. ### Does the n8n Zero to Hero course require any coding or programming background? The n8n Zero to Hero course requires zero coding knowledge. The transcript explicitly states learners will build powerful automation systems without writing a single line of code and without needing Python, a computer science degree, or programming experience. Every concept is taught through hands-on labs and practical workflow builds rather than code-first instruction. ### What is the capstone project built in the n8n AI Automation course? The capstone project, covered in Section 7, is a fully automated faceless YouTube channel powered by n8n and AI. The channel researches topics, generates content, formats posts, and publishes or schedules everything autonomously, with no manual intervention required. The course positions this as the practical proof that all nine sections of skills combine into one working real-world system. ### How does n8n compare to Zapier and Make.com according to this course? The course covers the n8n-versus-Zapier and n8n-versus-Make.com comparison in Section 1 and identifies n8n's open-source nature as the primary differentiator. Beyond that, the transcript does not detail specific feature comparisons, so the full breakdown is a topic addressed inside the lesson itself rather than the introduction. --- # Master Error Handling in n8n | Build Reliable n8n Workflows That Don't Break URL: https://www.genaiunplugged.com/courses/n8n/lessons/master-error-handling-in-n8n/ > Handle errors in n8n workflows the right way: catch failures, retry safely, and build automations that don't break in production. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 4. Error Handling & Debugging. Watch the video above for the full tutorial, or read the written guide below. ## What is error handling in n8n? Error handling in n8n keeps workflows running when something goes wrong by setting fallback actions instead of stopping execution. Every n8n node exposes an "On Error" setting with three choices: stop the workflow (default), continue and pass the error as an item in the regular output, or continue and route failed items to a dedicated error output branch. Picking the right option lets you log failures, notify your team, and process remaining items without interrupting the run. ## How do you configure error handling on any n8n node? **Open the node's Settings tab** The Settings tab on every n8n node holds two error-related controls: "Retry on Fail" and "On Error." Retry on Fail triggers automatic re-attempts before the node gives up, which suits temporary API outages where a second or third attempt may succeed on its own. Avoid relying on retry for permanent errors like uploading a PDF to a Notion field that only accepts images; the node fails every attempt regardless of how many retries you configure. **Choose the right On Error action** The "On Error" dropdown offers three actions. "Stop Workflow" is the default and halts execution the moment any node fails, including inside a loop. "Continue - pass error message as item in regular output" keeps execution going and injects an error property into the item, which an IF node can detect by checking whether `$json.error` exists. "Continue using error output" adds a second output connector directly to the node, routing failed items through a dedicated error branch so you can handle successes and failures in parallel without needing a separate IF node. **Add context to your error notifications** The error output branch carries richer context than a plain error string, including the data URL and success status from the failed iteration. Pipe those fields into your notification node so the message reads something like "error occurred in your workflow due to data in one iteration which had a URL of [PDF link]" rather than a generic "error occurred." A developer receiving that message can immediately diagnose a PDF-versus-image mismatch without re-running the workflow, and the rest of the nine-item loop completes cleanly. ## Key Takeaways - The "On Error" setting on every n8n node defaults to "Stop Workflow"; switching it to either Continue option lets a loop finish all remaining items even when one record fails. - "Retry on Fail" is the right tool for temporary outages where a second or third attempt may resolve the issue on its own, not for permanent type mismatches. - "Continue using error output" splits the node into two physical output connectors, eliminating the need for a separate IF node to route successes and failures. - The error output branch surfaces contextual data beyond a raw error string, such as the URL of the failing record, giving your team actionable details instead of an abstract alert. - Brainstorm failure scenarios before building each workflow so error paths are wired in from the start rather than retrofitted after a production crash. ## Related Lessons - [Lesson 32: Master AI Automation Workflows Debugging & Error Handling with Execution Logs](/courses/n8n/lessons/master-ai-automation-workflows-debugging-error-handling-with-execution-logs/) - [Lesson 33: How to fix AI Automation Workflows Fast in n8n | Error Handling & Debugging](/courses/n8n/lessons/how-to-fix-ai-automation-workflows-fast-in-n8n/) - [Lesson 34: Error Workflows in n8n AI Automation | Stop & Error Node | Error Trigger Node](/courses/n8n/lessons/error-workflows-in-n8n-ai-automation/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between 'Continue - pass error message as item in regular output' and 'Continue using error output' in n8n? 'Continue - pass error message as item in regular output' injects an error property into the regular data stream, requiring a downstream IF node to split successful and failed items by checking whether `$json.error` exists. 'Continue using error output' adds a second physical connector to the node itself, routing failures to a dedicated branch automatically and including richer context like the data URL and status of the failed item, with no extra IF node needed. ### When should the Retry on Fail setting be used in n8n? 'Retry on Fail' is appropriate for temporary errors such as an API being momentarily unavailable, where a second or third attempt may succeed on its own. It is not useful for permanent errors like sending a PDF to a Notion field configured to accept only images; in those cases, every retry fails identically and only adds delay before the node finally throws the error. ### How does the n8n IF node detect whether an error occurred in a previous node? The IF node reads a `$json.error` property that n8n injects into the item when 'On Error' is set to 'Continue - pass error message as item in regular output.' Set the IF condition to check whether that field exists; items carrying the property route to the true branch for error handling such as sending a notification, while clean items route to the false branch to continue processing normally. ### Why does one record's failure stop an entire n8n loop, and how do you prevent it? n8n's default 'On Error' action is 'Stop Workflow,' which halts execution the moment any node fails, including mid-loop. Changing the failing node's 'On Error' setting to either Continue option lets the Loop Over Items node keep processing remaining records, so eight out of nine uploads can complete successfully even when the fifth item throws a bad-request error. --- # n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-interface-walkthrough-2025/ > Tour the full n8n interface for 2025: navigate the UI, admin panel, and settings to get comfortable before building workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What is the n8n workspace interface and how is it organized? The n8n workspace interface opens on an Overview tab that shows every workflow, credential, and execution in one place. Projects bucket that content by team or purpose, while folders inside each project add a second organizational layer. The Starter plan includes one shared project; Pro unlocks three. A sidebar also links to the Admin panel, Templates library, Variables, and personal settings. ## How to navigate projects, admin settings, and workflow tools in n8n The Admin panel's dashboard reports monthly execution counts, workspace online or offline status, and the running n8n version. The gear icon inside the panel opens Workspace Settings, where the time zone field controls when schedule triggers fire. Every workflow inherits this time zone unless you override it inside a specific workflow's own Settings panel. A Restart button reboots the cloud instance if a runaway workflow makes the workspace unresponsive. Pricing tiers in the Admin panel determine what features and limits apply. The Starter plan costs $24 per month ($20 billed annually) and includes 2,500 executions, five active workflows, and one shared project. The Pro plan starts at $60 per month for 10,000 executions, 15 active workflows, global variables, and admin roles. n8n counts one execution per complete workflow run regardless of how many nodes it contains, so a 50-step automation costs the same single execution as a 2-step one. The canvas is where you build automations by connecting nodes. Clicking "Create workflow" opens it and immediately prompts you to pick a trigger node: manual, schedule, webhook, app event, or form submission. Clicking "Test workflow" runs the canvas immediately and writes the result to the Executions tab. To run a workflow in production, toggle it from Inactive to Active; only workflows with non-manual triggers can be activated. Workflow-level settings, reached from the three-dot menu, let you set a per-workflow time zone override, designate an error workflow, choose which executions to save, and set a timeout to stop stuck runs. ## Key Takeaways - The Overview tab and Projects organize every workflow and credential in your workspace; folders inside projects add a second grouping layer, and the Starter plan limits you to one shared project. - n8n charges one execution per workflow run regardless of step count, so a 100-node automation still costs one execution against your monthly quota. - The workspace time zone in Admin > Workspace Settings is inherited by all workflows; override it per workflow inside that workflow's own Settings panel when regional scheduling differs. - Activating a workflow switches it to production mode so schedule, webhook, and app-event triggers fire automatically; manual-trigger workflows can't be activated and must be run by clicking "Test workflow." - The Templates library lists 1,588+ pre-built workflows; import directly to a cloud workspace or download as JSON to load into a local n8n instance via "Import from file." ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) - [Lesson 9: Build Your First n8n Workflow - Send Welcome Emails Automatically](/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does activating a workflow in n8n actually do? Workflow activation switches a workflow from manual test mode into production mode, letting schedule, webhook, and app-event triggers fire automatically on their own cadence. Manual-trigger workflows can't be activated because they have no autonomous trigger. The Starter plan caps active workflows at five simultaneously; Pro plans raise that limit to 15 or higher depending on tier. ### How does n8n count executions against a monthly plan limit? n8n bills one execution per complete workflow run, regardless of how many nodes or steps the workflow contains. A 100-node automation costs the same single execution as a 2-node one. The Starter plan includes 2,500 executions per month; the entry-level Pro plan provides 10,000, and larger Pro tiers go up to 50,000. ### What does the workspace time zone setting in n8n control? The workspace time zone in Admin > Workspace Settings determines when schedule triggers and time-sensitive nodes fire across all workflows in the instance. Every workflow inherits this setting by default. If one workflow needs to run on a different regional schedule, you override the time zone inside that specific workflow's Settings panel without touching the workspace-wide default. ### How do you import a workflow template or JSON file into n8n? The Templates library in the sidebar lists 1,588+ pre-built workflows; clicking "Use for free" imports one directly to a cloud workspace or copies it as JSON for a local instance. From any open workflow's three-dot menu, "Import from file" loads a local JSON file and "Import from URL" fetches a workflow from a public URL, letting you pull in nodes from external repositories. --- # n8n API Calling, Collaboration, Workflow Sharing & Credential Management URL: https://www.genaiunplugged.com/courses/n8n/lessons/n8n-api-calling-collaboration-workflow-sharing-credential-management/ > Call the n8n API, share workflows with your team, and manage credentials so collaborators build without exposing secrets. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 8. Enterprise Features & Conclusion. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n's role-based access and workflow sharing system? n8n's role-based access system assigns three roles to control who can do what in a shared workspace. The owner holds full access and is limited to one per instance. Admins can manage users, workflows, and credentials but cannot modify the owner role. Members manage only their own workflows. Workflows are private by default and must be explicitly shared, granting collaborators an editor role on that specific workflow. ## How to share workflows, credentials, and control n8n via API **Adding users and sharing workflows** User management lives under Settings > Users. Click Invite, enter the recipient's email address, and they receive an invitation link. Once they accept, their account appears in the Users panel. To share a workflow, open it and click the Share button at the top of the canvas. Select users who have joined your instance, confirm they appear with an editor role, and click Save. To remove access, return to Share, click the delete icon next to the user, and save again. Admin roles require the Pro plan; on the Starter plan, additional invited users default to the member role. **Sharing credentials without exposing secrets** Credential sharing lets team members use API keys and OAuth tokens in workflows without ever seeing the underlying values. Navigate to your personal space, click the Credentials tab, open a credential such as an ElevenLabs API key, and click Sharing. Select a project to grant everyone in that project access, or pick individual users, then click Save. To revoke access, click the delete icon next to the user and save. Only the owner and admins can revoke credential access from other users. **Controlling n8n programmatically via the API** The n8n API is accessible under Settings > n8n API. Click Create an API key, provide a name, and set an expiration (7, 30, 60, or 90 days; no expiration is not recommended). Review the available scopes: users, workflows (create, read, update, delete, activate, deactivate), executions, credentials, tags, and variables. To call the API from an HTTP Request node, set the method to GET and form the URL as `/api/v1/users`. Add a Header Auth credential named `x-n8n-api-key` with the API key as its value, plus an Accept: application/json header. For in-workflow control, use the dedicated n8n node under the same credential; it wraps the same endpoints in a UI-driven interface and eliminates manual URL construction. ## Key Takeaways - The owner role is capped at one per instance with full access. Admins can manage users, workflows, and credentials but cannot modify the owner. Members control only their own workflows with no global instance access. - Workflows are private by default. Sharing requires opening the workflow, clicking Share, selecting invited users who receive an editor role, and clicking Save. Access is revoked the same way using the delete icon. - Credential sharing lets collaborators use API keys such as ElevenLabs or Google Sheets tokens inside workflows without being able to view or extract the actual key values. Only the owner and admin accounts can revoke this access. - The n8n API enables programmatic workflow activation and deactivation, making it practical to build a meta-workflow that turns other workflows on at 8 a.m. and off at 6 p.m., preventing wasted execution credits outside business hours. - The `x-n8n-api-key` header authenticates external code calling the n8n REST API. For in-workflow orchestration, the dedicated n8n node exposes the same actions without requiring manual URL construction. ## Related Lessons - [Lesson 42: How to Scale n8n Workflows with Enterprise Security & Version Control | Course Conclusion](/courses/n8n/lessons/how-to-scale-n8n-workflows-with-enterprise-security-version-control/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Does sharing a workflow in n8n automatically share its credentials? Workflow sharing and credential sharing in n8n are completely separate actions. Sharing a workflow grants collaborators an editor role on that workflow but gives them no access to the credentials it uses. To let them execute the workflow successfully, you must also open each credential under Settings > Credentials, click Sharing, select the user, and save. Without this step, the workflow will fail for anyone who tries to run it. ### How does the n8n API key scope system control permissions? The n8n API key scope system restricts which actions a generated key is permitted to perform. Available scopes cover user management, workflow operations (create, read, update, delete, activate, deactivate), execution log retrieval, credential management, tags, variables, and source control. On the Starter plan, scope selection is disabled and the key receives full access by default. The Pro plan and above let you restrict a key to specific scopes before saving it. ### What is the difference between the HTTP Request node and the n8n node for controlling an n8n instance? The HTTP Request node makes raw REST calls to the n8n instance URL formatted as `/api/v1/`, authenticated via an `x-n8n-api-key` header. This approach works identically to any external application or programming language targeting the same API. The dedicated n8n node wraps those same endpoints in a UI-driven interface with a credential selector, making it faster to configure from inside a workflow. Use HTTP Request for external integrations; use the n8n node for in-workflow orchestration. ### Why should n8n API keys always have an expiration date? n8n API keys with no expiration remain valid indefinitely, which widens the damage window if a key is ever leaked or compromised. The API key creation screen under Settings > n8n API offers 7, 30, 60, and 90-day presets plus a custom option. The instructor explicitly flags no-expiration keys as not recommended and advises rotating credentials regularly as a standard security practice to limit the period any single key stays valid. --- # Master Conditional Logic in n8n - If-Else Node, Execution Order & Branching URL: https://www.genaiunplugged.com/courses/n8n/lessons/master-conditional-logic-in-n8n-if-else-node-execution-order-branching/ > Learn how the n8n IF node evaluates conditions, controls execution order, and branches your workflow into different paths. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is conditional logic in n8n, and when do you use the IF node versus the Filter node? The IF node routes every incoming item into one of two branches, a true path or a false path, based on one or more conditions you define. The Filter node evaluates the same kind of conditions but silently discards items that fail and outputs only one branch. Use the IF node when you need to act on both outcomes. Use the Filter node when the false case requires no action and you want a cleaner canvas. ## How to build branching workflows, control execution order, and merge results in n8n n8n supports three branching types. Conditional branching uses the IF node to split a workflow into a true path and a false path, for example flagging a qualified lead versus an unqualified one. Multipath branching uses the Switch node to create any number of output branches, one per matching condition, such as routing orders by status into pending, processing, cancelled, and refunded paths. Parallel branching fires multiple downstream nodes from a single source node at the same time, like sending both an email and a Slack message for every cancelled order from the same branch output. Execution order in n8n follows two deterministic rules: top-to-bottom first, then left-to-right when nodes sit at the same height on the canvas. One branch runs to completion before the next starts. This sequence matters because if a node in Branch C depends on data produced by Branch A, but Branch C sits higher or further left, n8n executes it first and the workflow breaks or returns empty results. Arranging branches deliberately on the canvas to match the dependency order you need is not optional; it is structural correctness. The Merge node resolves multi-branch workflows by waiting for all connected branches to finish, then combining their outputs into a single dataset. In the lesson demo, two parallel Google Sheets queries fetch order headers (104 rows) and order details separately. The Merge node joins them on the shared Order ID field and produces 291 unified rows. Every downstream node from that point works on one clean dataset instead of two disconnected streams. ## Key Takeaways - The IF node creates two executable branches (true and false); the Filter node outputs only matched items with no false branch, making it the right choice when failed conditions need no handling. - n8n's three branching types are conditional (IF node, 2 paths), multipath (Switch node, n paths matched by field value), and parallel (multiple nodes connected to one output firing at the same time). - Execution order is top-to-bottom then left-to-right, and each branch completes fully before the next starts, so placing a dependent node in the wrong position breaks data availability for that node. - The Merge node waits for all incoming branches, combines results on a matching field such as Order ID, and returns one unified dataset so downstream processing stays coherent. - Optimizing a multi-branch workflow sometimes means merging branches before a shared action rather than duplicating that action per branch, as shown when cancelled and refunded orders both feed one Merge node before a shared email and Slack step. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What conditions does the IF node support in n8n, and how are multiple conditions combined? The IF node supports AND and OR logic across multiple conditions. In the lesson demo, three AND conditions run together: company name is not empty, email does not end with gmail.com, and email does not end with hotmail.com. All three must be true for an item to reach the true branch. If any one fails, the item routes to the false branch instead. ### How does the Switch node differ from the IF node when building multipath branches in n8n? The Switch node matches an incoming field value against multiple conditions and creates one output branch per match, supporting any number of paths. In the lesson demo it matches order_status against four values and produces four separate branches. The IF node always creates exactly two branches, true and false, regardless of how many conditions you configure inside it. ### Why does execution order matter in a multi-branch n8n workflow, and what breaks if it's wrong? n8n runs one branch at a time, finishing it completely before starting the next, following a top-to-bottom then left-to-right sequence on the canvas. If a node relies on data from a branch that runs later in that sequence, n8n executes that node before its source data exists, producing empty or incorrect output. Correct branch placement on the canvas is what enforces the right dependency order. ### When should you use the Merge node in n8n instead of keeping branches separate? Use the Merge node when two or more branches produce data that must be combined before any further step can work correctly. In the lesson demo, order headers and order details are fetched in parallel and are useless apart because neither contains the full picture. The Merge node joins them on Order ID and produces 291 unified rows, letting the rest of the workflow operate on one complete dataset. --- # How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-set-node-in-n8n/ > See why n8n renamed the Set node to Edit Fields, then add, edit, and clean data plus manage keep-only-set and include-other-fields options. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What Is the Set Node (Edit Fields) in n8n? The Set node, renamed Edit Fields in newer n8n versions, creates, edits, renames, or removes fields on the data items flowing through your workflow. It is how you shape, clean, and standardize data between two nodes without writing code, using either a visual field mapper or raw JSON. Think of it as the node that decides exactly what data moves forward. ## How to Use the Set Node in n8n Add an Edit Fields (Set) node, then pick a mode. Manual Mapping lets you add each field name and value, dragging in values from earlier nodes as expressions. JSON mode lets you define the whole output object at once. Turn on "Keep Only Set" to drop every other field and pass a clean payload to the next node or API. Common uses: rename keys to match an API, set default values, type-cast strings to numbers, or trim a large object down to only the fields the next step needs. ## Key Takeaways - Understanding the core concepts covered in this lesson - Practical, hands-on experience you can apply immediately - Tips from real-world n8n workflow implementations ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) - [Lesson 16: How to connect Google Forms & Webhook Node in n8n | Google Forms Integration](/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What will I learn in this lesson? The Set node, now called Edit Fields, lets you add, edit, rename, or remove fields on items moving through an n8n workflow. You will learn both Manual Mapping and JSON modes, and how 'Keep Only Set' produces a clean payload for the next node. ### Do I need to watch the previous lessons first? This lesson builds on earlier concepts. If you are new to n8n, start with Lesson 1 for the best learning experience. ### Can I get help if I get stuck? Join the GenAI Unplugged community on Substack where Dheeraj answers questions and shares additional tips. --- # Master AI Automation Workflows Debugging & Error Handling with Execution Logs URL: https://www.genaiunplugged.com/courses/n8n/lessons/master-ai-automation-workflows-debugging-error-handling-with-execution-logs/ > Read n8n execution logs to trace failures, add error handling, and debug AI automation workflows step by step in this video tutorial. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 4. Error Handling & Debugging. Watch the video above for the full tutorial, or read the written guide below. ## What is the n8n Execution Log and how does it track workflow failures? The n8n execution log records every workflow run in your project, both manual test executions and live production executions triggered automatically. Each entry captures the execution status (success, error, cancelled, running), the trigger type, start time, runtime duration, and execution ID. Clicking into any entry reveals the full input and output data at every node that ran, and double-clicking a failed node surfaces the exact error message and failure reason. ## How to read n8n execution logs and fix failed workflow nodes The execution log lives in the **Executions** tab of your n8n project. Two icons distinguish run types: a test icon marks manual executions where you clicked "Execute workflow" in the editor, and a live icon marks production executions fired automatically by an active trigger. You can filter by workflow name, status (error, success, cancelled, running, waiting), and date range. Searching by a specific data value inside execution records requires an n8n Pro plan and is not available on the Basic plan. Each failed execution highlights the exact node where the error occurred. Clicking the errored node shows its input and output data; double-clicking opens the full error detail. Two concrete examples from the lesson: a Gmail node returned "sender invalid parameter value" because a webhook form submitted a malformed address (just `@genaiunplugged` with no domain), and a Notion node returned "bad request" because a PDF URL was passed to a field expecting an image URL. All upstream node outputs remain intact in the log, so you never need to re-run the workflow to reproduce the data context. Per-workflow execution storage settings let you control what gets logged. Inside any workflow, open the three-dot menu and go to **Settings** to configure "Save failed production executions," "Save successful production executions," and "Save manual executions" individually, each switchable between Save and Do not save. On an errored node, two settings under **Settings > On error** change how failures propagate: "Continue past error on item in regular output" lets remaining items process but marks the overall execution as successful, silently hiding failures. "Continue using error output" routes failed items into a dedicated error branch with the error message appended, keeping failures visible for downstream handling such as triggering a separate error workflow. ## Key Takeaways - The n8n execution log distinguishes manual runs (test icon) from production runs (live icon), so you always know whether a failure occurred during development or in live automation. - Each execution entry preserves the input and output data at every node that ran, letting you identify corrupt, missing, or misformatted data without recreating the execution from scratch. - The five most common n8n workflow failure causes are: misconfigured node settings, external service downtime (signaled by 4xx or 5xx HTTP errors), missing or incorrectly formatted data, expired credentials or API keys, and conditional logic that misses edge cases such as negative numbers or a boundary requiring "greater than or equal to" instead of "greater than." - The **Retry on fail** node setting retries a node up to three times with a configurable wait (default 1,000ms), which recovers from temporary service glitches but cannot fix permanent errors like an invalid email address. - The **Continue using error output** setting creates a success branch and an error branch on the node canvas, preventing silent suppression of failures and enabling handoff to a dedicated error workflow. ## Related Lessons - [Lesson 21: Master Error Handling in n8n | Build Reliable n8n Workflows That Don't Break](/courses/n8n/lessons/master-error-handling-in-n8n/) - [Lesson 33: How to fix AI Automation Workflows Fast in n8n | Error Handling & Debugging](/courses/n8n/lessons/how-to-fix-ai-automation-workflows-fast-in-n8n/) - [Lesson 34: Error Workflows in n8n AI Automation | Stop & Error Node | Error Trigger Node](/courses/n8n/lessons/error-workflows-in-n8n-ai-automation/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between a manual execution and a production execution in n8n? Manual executions in n8n run when you click the "Execute workflow" button in the editor and appear in the log with a test icon. Production executions fire automatically from an active trigger node, such as a schedule or webhook, and appear with a live icon. A workflow must contain an automatic trigger node before the active/inactive toggle is enabled and production executions can occur. ### How does 'Continue using error output' differ from 'Continue past error on item in regular output' in n8n? The 'Continue past error on item in regular output' setting passes failed items silently through the success path, so the execution log marks the entire run as successful even when individual records errored. 'Continue using error output' splits the node into two explicit branches on the canvas: a success branch for processed items and an error branch carrying the failed items with error messages appended, so failures remain visible and actionable. ### How can you prevent one bad record from stopping an entire n8n workflow that processes multiple items? The 'On error' option inside each node's Settings panel controls this behavior. By default it is set to 'Stop workflow,' which halts the entire execution on the first failure. Switching it to 'Continue using error output' lets the workflow process all remaining items, routes the failures, such as records with invalid or empty email addresses, into a dedicated error branch, and allows successful items to continue to the next node. ### What are the most common causes of failed executions in n8n automation workflows? Workflow failures in n8n fall into five common categories: misconfigured node settings that do not handle unexpected inputs, external service downtime returning temporary or permanent HTTP 4xx or 5xx errors, missing or incorrectly formatted data such as empty or malformed email addresses, expired credentials or API keys causing authentication failures, and conditional logic that fails to account for edge cases like negative numbers or an off-by-one boundary condition. --- # Lead Enrichment Capstone URL: https://www.genaiunplugged.com/courses/n8n/lessons/lead-enrichment-capstone/ > Build a complete n8n lead enrichment workflow from scratch, combining everything from the course into one working capstone automation project. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 5. Hands-On Projects. Watch the video above for the full tutorial, or read the written guide below. ## What is the n8n Lead Enrichment Capstone and what does it automate? The Lead Enrichment Capstone is a three-part n8n workflow that automates the entire inbound lead lifecycle: form capture, dual-stage email validation, company enrichment, lead scoring, CRM deduplication, team routing, PDF summary generation, and follow-up scheduling. It replaces a multi-person manual process involving interns, business analysts, sales teams, and managers with a single n8n workflow that processes each lead without human intervention at every routine step. ## How to set up the n8n Form Trigger and two-stage email validation pipeline The n8n Form Trigger node generates a hosted web form inside your n8n workspace, producing a test URL for development and a production URL that activates only after the workflow is set to active. Configure the form with six fields: name (text, required), email (required), company name (required), website (optional), job title (optional), and interest area (dropdown with multi-select, required). Pin the test submission data immediately after the first successful submit so you avoid re-filling the form on every subsequent build step. The IF node named "basic email validation" runs two n8n built-in functions as AND-joined conditions: `.isEmail()` confirms the field contains a structurally valid email format, and `.extractDomain()` extracts the domain so it can be checked against an array of blacklisted disposable-email services such as fake-mail and temp-mail. Any lead failing this gate is logged to a Google Sheets node configured to append a row to the "All Leads Log" sheet with the timestamp (using the `now` expression), full name, email, company name, status set to "discarded," and reason set to "basic email validation failed." The Hunter.io node, available natively in n8n, runs the "email verifier" operation against the lead's email address and returns a `status` field and a numeric confidence `score`. A second IF node named "third party email validation" then checks that `status` equals "valid" (with case-insensitive comparison and type conversion enabled) AND that `score` is greater than 20. Leads failing either condition are appended to the same "All Leads Log" sheet with reason "third party email validation failed, invalid status of the email and/or low email deliverability score," keeping a complete audit trail before the workflow continues to company enrichment in parts two and three. ## Key Takeaways - The n8n Form Trigger node replaces a Google Forms plus webhook setup during development; switch to the production URL and activate the workflow when connecting to a live website form. - The IF node's built-in `.isEmail()` and `.extractDomain()` functions perform format checking and domain blacklisting without any custom code or external HTTP calls. - Hunter.io's native n8n node returns both a `status` field (the primary signal, replacing the deprecated `result` field) and a numeric `score`; the capstone uses `status = "valid"` AND `score > 20` as the minimum combined threshold. - Every discarded lead at any validation stage gets appended to the Google Sheets "All Leads Log" with a timestamped reason string, creating a durable rejection record that prevents the same bad lead from consuming pipeline resources again. - Part one of the capstone completes automation of steps one and two from the original manual process (form intake and email validation), eliminating the intern and sales-ops roles responsible for those tasks. ## Related Lessons - [Lesson 27: How to Auto-Save Gmail Attachments to Google Drive | n8n AI Automation Tutorial](/courses/n8n/lessons/how-to-auto-save-gmail-attachments-to-google-drive/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does the n8n Form Trigger node produce and when should you switch to its production URL? The n8n Form Trigger node generates a hosted web form with two URLs: a test URL usable immediately in development mode and a production URL that only becomes active after the workflow is switched to active. Use the test URL while building and validating each downstream node. Switch to the production URL when wiring the form into a live website, replacing tools like Google Forms connected via webhook. ### How does the IF node perform basic email validation without calling an external API? The IF node uses two n8n built-in expression functions joined with AND logic. The `.isEmail()` function returns a boolean confirming the field holds a structurally valid email address. The `.extractDomain()` function pulls the domain portion of the email so it can be compared against an array of known disposable-email domains such as fake-mail and temp-mail. Every condition must return true before the lead proceeds to Hunter.io verification. ### Which Hunter.io response fields does the third-party email validation IF node evaluate? The third-party email validation IF node checks two fields from the Hunter.io verifier response: `status`, which must equal "valid" (compared case-insensitively with type conversion enabled), and `score`, a numeric confidence value that must be greater than 20. Hunter.io has deprecated the `result` field in favor of `status`, so `status` serves as the primary pass/fail signal and `score` acts as a secondary quality threshold. ### Why does the workflow log discarded leads to Google Sheets instead of simply stopping the execution? The Google Sheets logging step mirrors the manual business process requirement: the intern or assistant was expected to record every rejected lead with a reason so the sales team would never waste time re-processing the same bad contact. The Google Sheets node appends a row to the "All Leads Log" sheet with a timestamp, lead details, status "discarded," and a specific reason string identifying which validation stage failed, giving sales ops a searchable rejection history. --- # How to Use Remove Duplicates Node in n8n | Clean Your Data Fast URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/ > See how the n8n Remove Duplicates node works, with docs on setup and examples for deduplicating data fast in your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What does the Remove Duplicates node do in n8n? The Remove Duplicates node filters out repeated items in your workflow data, offering three operations: remove items repeated within the current input, remove items processed in a previous execution, or clear the duplication history entirely. Without it, downstream nodes receive repeated records, which can trigger multiple emails to the same customer, duplicate orders in your database, or skewed dashboard reports. It is a core data-integrity node in any business automation pipeline. ## How to configure the Remove Duplicates node to deduplicate by a specific field The Remove Duplicates node's most critical setting is the **Comparison** field, which controls what counts as a duplicate. Three options are available: **All Fields** (every field must match for a row to be flagged), **All Fields Except** (useful when you want to exclude one field and compare everything else), and **Selected Fields** (compare only the fields you explicitly choose). In the lesson workflow, 41 order records contained repeated order IDs across three entries for the same order. Selecting **Selected Fields** and dragging in the `order_id` field reduced the 41 records to 13 unique orders. Once deduplication is set, open the **Options** panel, click **Add Field**, and enable **Remove Other Fields**. This strips every field except the ones used in comparison, so only the 13 unique order IDs pass forward. That keeps the payload lean before it hits the Aggregate node, which then bundles all IDs into one item for a single email or Slack message. The correct workflow architecture is one Remove Duplicates node per branch, not a shared node after merging branches. In the lesson, merging all four switch branches (pending, processing, cancelled, refunded) into one Remove Duplicates node caused the downstream Aggregate and email nodes to execute four times, sending four separate messages. The fix was to place individual Remove Duplicates nodes on the pending and processing branches, and to use a Merge node before a single Remove Duplicates node on the combined cancelled-and-refunded branch, since both shared the same final actions. ## Key Takeaways - The Remove Duplicates node offers three operations: deduplicate within the current input, deduplicate against previous executions, or clear duplication history. - The **Comparison** setting determines what a duplicate is. **Selected Fields** is the right choice when you only need to compare one or two fields (such as `order_id`) rather than entire rows. - Enabling **Remove Other Fields** in Options discards non-compared fields immediately, keeping the data payload minimal before it reaches downstream nodes. - Each branch in a Switch node should have its own Remove Duplicates node. Merging branches before deduplication causes every downstream node to execute once per branch, generating multiple emails or messages. - Skipping deduplication in a real workflow produces visible business errors: the lesson email showed the same order IDs repeated multiple times before the node was added, then collapsed to 13 unique IDs after. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 16: How to connect Google Forms & Webhook Node in n8n | Google Forms Integration](/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the Remove Duplicates node in n8n used for? The Remove Duplicates node removes repeated records from your workflow data to maintain data integrity. It prevents business errors such as sending multiple emails to the same customer, writing duplicate orders to a database, or skewing report numbers. It operates on either the current input batch or across previous workflow executions. ### What is the difference between the 'All Fields', 'All Fields Except', and 'Selected Fields' comparison options in the Remove Duplicates node? The Remove Duplicates node compares records using one of three modes. 'All Fields' flags a record as duplicate only if every field matches another row, so records that differ on any field pass through. 'All Fields Except' lets you exclude one field and compare everything else, which is useful when one column like a timestamp is always unique. 'Selected Fields' compares only the fields you explicitly choose, such as order_id, and is the right pick when you want to deduplicate on a single identifier regardless of what other fields contain. ### Why did the lesson workflow send four Slack messages instead of one after adding the Remove Duplicates node? The Remove Duplicates node was placed after a point where all four Switch branches (pending, processing, cancelled, refunded) were merged into one path. Because n8n executes top to bottom and each branch fed the shared node separately, every downstream node ran four times, producing four messages. The fix was to give each branch its own Remove Duplicates node so each branch stays isolated all the way to its final action. ### What does the 'Remove Other Fields' option do in the Remove Duplicates node? The 'Remove Other Fields' option, found under the node's Options panel, strips every field from each item except the ones selected for comparison. In the lesson, enabling it after selecting 'order_id' meant only the 13 unique order IDs passed to the Aggregate node, removing all other columns from the payload and keeping the downstream data lean. --- # How to Use HTTP Node in n8n | Connect Any API or Service in n8n URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-http-node-in-n8n/ > Use the HTTP node in n8n to call any API or service, pass headers and parameters, and pull external data straight into your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is the HTTP Request node in n8n? The HTTP Request node is n8n's built-in API client, comparable to Postman, that lets you make GET, POST, PUT, and DELETE requests to any external service with a REST API. It's the correct tool when no dedicated n8n integration exists for the app you want to connect. You configure a method, URL, authentication, query parameters, headers, and an optional request body, then the node returns the response data for downstream use in your workflow. ## How do you configure the HTTP Request node in n8n? The HTTP Request node offers two configuration paths. The first is parameter-by-parameter: set the **Method** (GET to fetch data, POST to create, PUT to update, DELETE to remove), paste the API's endpoint URL, choose an authentication type, and add any query parameters or headers the API requires. For the AccuWeather one-day forecast API, that means selecting GET, pasting the location-specific endpoint URL, leaving authentication as None, turning on query parameters, and adding the `apikey` field with your key. The node executes and returns the forecast response (minimum and maximum temperature, conditions) for the requested location. Authentication splits into two buckets. **Predefined credential types** cover popular services n8n already supports, including Airtable and Slack, so you pick the service name and supply your credentials. **Generic credential types** handle everything else: Basic (username and password), Bearer Token, and OAuth2. When an API authenticates via an API key sent as a query parameter, like AccuWeather, you select None in the authentication field and pass the key in the query parameters section instead, bypassing the credential system entirely. The second path is **Import cURL**. Most API documentation pages include a sample cURL command you can copy directly. Paste it into the Import cURL dialog and the node auto-fills the method, URL, query parameters, and headers in one step. The AccuWeather cURL sample produces the same New York forecast result as the manual setup, confirming both paths are equivalent. For complex requests with many parameters or headers, cURL import eliminates the bulk of manual entry. Query parameters and URL segments can also be set dynamically using n8n expressions, letting earlier nodes in your workflow drive the API call. ## Key Takeaways - The HTTP Request node acts as a Postman-style REST API client inside n8n, covering any service that lacks a dedicated built-in node. - GET fetches data, POST sends new data, PUT updates a record, and DELETE removes one. For soft deletes (flagging a record rather than permanently removing it), PUT is the correct method because you're updating, not deleting. - Predefined credential types handle popular services n8n already knows (Airtable, Slack, and others). Generic types cover Basic, Bearer Token, and OAuth2 for everything else. API-key-in-query-parameter services like AccuWeather need no credential record at all. - The cURL Import option auto-configures the node from a copied cURL command, saving significant setup time for requests with many headers and parameters. - Query parameters can be set dynamically with n8n expressions, so values from earlier nodes can populate API call fields at runtime. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What HTTP methods does the HTTP Request node support, and when should I use each one? The HTTP Request node supports GET, POST, PUT, and DELETE. GET fetches data from an external service, POST sends new data to it, PUT updates an existing record, and DELETE removes one. GET and POST are the most common. For soft deletes, where you flag a record as deleted rather than permanently removing it, PUT is the right choice because you're updating a field, not destroying the record. ### How do I handle authentication in the HTTP Request node? The HTTP Request node provides two authentication buckets. Predefined credential types cover popular services n8n has already integrated, such as Airtable and Slack, so you select the service and enter your credentials. Generic credential types cover everything else: Basic (username and password), Bearer Token, and OAuth2. If an API uses an API key passed as a query parameter, like AccuWeather, select None for authentication and add the key in the query parameters section. ### What is the difference between query parameters and a request body in the HTTP Request node? Query parameters in the HTTP Request node are name/value pairs appended to the request URL, such as the `apikey` field the AccuWeather forecast API requires. A request body carries data inside the HTTP request itself and is used when the external service requires a structured payload or doesn't support query parameters. The node supports JSON, form URL encoded, form data, and n8n binary file as body content types, with JSON being the most common for REST APIs. ### How does the cURL Import option work in the HTTP Request node? The cURL Import option in the HTTP Request node accepts a cURL command copied from an API documentation page and automatically fills in the method, URL, query parameters, and headers. Pasting the AccuWeather sample cURL command configures the node identically to a manual parameter-by-parameter setup and returns the same forecast response. This is especially useful for complex requests that carry many headers or query parameters, where manual entry is error-prone. --- # How to Use Merge Node in n8n | Combine Data Like a Pro URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-merge-node-in-n8n/ > Learn n8n's Merge node modes, combine by position and append, to join multiple data streams into one clean output for your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What Is the Merge Node in n8n? The Merge node combines data from two or more separate branches of a workflow into one stream. It is how you bring back together results that were split earlier or fetched in parallel, so a single later node can work on the combined data. ## How to Use the Merge Node in n8n Connect two branches into the Merge node, then choose a mode. Append stacks all items from both inputs one after another. Combine joins them by matching field, by position, or by all possible combinations, which works like a SQL join on a shared key. Choose Branch passes through just one input. Use Combine "by matching fields" when you need to enrich one dataset with values from another using a common ID. ## Key Takeaways - Understanding the core concepts covered in this lesson - Practical, hands-on experience you can apply immediately - Tips from real-world n8n workflow implementations ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) - [Lesson 16: How to connect Google Forms & Webhook Node in n8n | Google Forms Integration](/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What will I learn in this lesson? The Merge node combines data from two or more workflow branches into one stream. You will learn its Append, Combine, and Choose Branch modes, including how to join two datasets on a matching field like a SQL join. ### Do I need to watch the previous lessons first? This lesson builds on earlier concepts. If you are new to n8n, start with Lesson 1 for the best learning experience. ### Can I get help if I get stuck? Join the GenAI Unplugged community on Substack where Dheeraj answers questions and shares additional tips. --- # How to Use Loop Over Items Node in n8n | Batching, Conditional Logic URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-loop-over-items-node-in-n8n/ > Use n8n's Loop Over Items node to split large datasets into manageable batches and apply conditional logic inside each loop iteration. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is the Loop Over Items node in n8n, and when do you need it? The Loop Over Items node splits a dataset into batches and iterates over each batch, repeating a sequence of steps until all items are processed. Use it when you need controlled batch processing of large datasets, when an API enforces rate limits (such as 100 emails per second), or when a step-by-step process requires a Wait node between iterations. Without it, n8n fires every request simultaneously and gives you no throttle control. ## How to use the Loop Over Items node in a real workflow The Loop Over Items node exposes two output branches: a loop branch and a done branch. Every node you want to repeat connects into the loop branch, starting with a placeholder called Replace Me. After the last step in the loop, you wire that node's output back into the Loop Over Items node itself, closing the cycle. When all items are exhausted, execution exits through the done branch, where you can trigger downstream steps or attach a Do Nothing node to signal a clean end. In the transcript workflow, a Gmail Trigger downloads email attachments with the Download Attachments option enabled and Simplify turned off. A Filter node checks that `$json.binary` exists, dropping emails with no attachments. A Split Out node on `$binary` then explodes the single email item into five separate binary items, one per attachment. These five items feed into Loop Over Items, which processes them one at a time. Inside the loop branch, an HTTP node posts each binary file to a temporary hosting service (tempfiles.org) and returns a public URL. A Notion node then creates a database page in the sales task board, setting the email subject as the page title, a status property of To Do, and an image block populated with that temporary URL. A Wait node set to two seconds follows, preventing rate-limit errors on the Notion API before the output loops back into Loop Over Items. A critical fix covered in the transcript: instead of hardcoding the binary field name as `attachment_0` (which breaks on iteration two), use the expression `Object.keys($binary).first()` to dynamically resolve whichever key is present on each iteration. ## Key Takeaways - The Loop Over Items node has two output branches: the loop branch (where repeated steps live) and the done branch (what runs after all items are processed). - Even a batch size of 1 warrants Loop Over Items when you need a Wait node between requests; n8n's default per-item execution gives you no throttle control and will hit rate limits. - The Split Out node on `$binary` is what converts a single multi-attachment email item into individual binary items that the loop can iterate over. - Dynamic binary field names require the expression `Object.keys($binary).first()` rather than hardcoded keys like `attachment_0`, which break on the second iteration. - Notion's API accepts images only by public URL, making a temporary upload step (via HTTP node to a hosting service) a required prerequisite before the Notion create-page call. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why use the Loop Over Items node when n8n already processes each item automatically? The Loop Over Items node is needed whenever you want to insert a Wait node between individual item executions to respect API rate limits. n8n's default per-item execution fires all requests simultaneously with no delay, which breaks workflows that hit limits like 100 emails per second. Loop Over Items gives you explicit control over pacing, even when your batch size is 1. ### How does the done branch of the Loop Over Items node differ from the loop branch? The loop branch contains every node you want to repeat for each batch. After the last loop-branch node, you wire its output back into Loop Over Items to continue iteration. The done branch only executes once, after all items are exhausted. You can attach downstream steps there or use a Do Nothing node to mark a clean workflow end. ### How do you fix the 'item has no binary attachment_0' error when looping over email attachments? Hardcoding the field name as `attachment_0` fails on the second iteration because n8n names subsequent binary files `attachment_1`, `attachment_2`, and so on. Fix it by switching the input data field name to an expression and using `Object.keys($binary).first()`, which dynamically resolves the correct key name on every iteration regardless of its index. ### Why does the Gmail-to-Notion loop workflow upload attachments to a temporary URL first? The Notion API's image block only accepts a publicly accessible URL, not a raw binary file. n8n does not expose a public URL for attachments it downloads locally. The workflow solves this by posting each binary file to tempfiles.org via an HTTP node first, receiving a public URL in the response, and then passing that URL to the Notion create-database-page call. --- # How to use Expressions in n8n | Built-In Functions in n8n URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-expressions-in-n8n/ > Write n8n expressions with built-in functions to pull, transform, and reference data dynamically across nodes in any workflow. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What are Expressions in n8n, and when do you use them? Expressions in n8n let you transform data inside any node field using single-line JavaScript, without building a separate code block. You activate them by switching a field from **Fixed** to **Expression** mode and wrapping your code in double curly braces `{{ }}`. Expressions support raw JavaScript, JMESPath for querying JSON, and the Luxon datetime library, plus n8n's own built-in data-transformation functions. ## How do you access and transform data with n8n Expressions? The `$json` variable gives you access to the output of the immediately previous node. You can read any field with dot notation (`$json.customerName`) or bracket notation (`$json["email"]`). For nested objects and arrays, chain the path: `$json.order.products[0].name` drills into the first item of an array. Both approaches use JMESPath querying under the hood, so pick whichever style is more readable for a given situation. To pull data from a node that is not immediately previous, reference it by name using `$('Node Name')` and dot notation. Built-in functions extend what raw JavaScript alone can do. Typing a dot after a string value surfaces methods like `.extractDomain()`, which pulls the domain from an email address without any manual split logic. The `$ifEmpty($json.email, 'Email not found')` function returns a fallback string when a field is blank, making data cleanup a one-liner. For dates, `$now` returns the current timestamp via the Luxon library, and chaining `.format('yyyy-MM-dd')` reformats it, while `.diff(DateTime.fromISO('2025-01-01'), 'days')` calculates elapsed days. n8n's documentation page for "Built-in functions and variables" lists all available methods by category: arrays, booleans, numbers, objects, and strings. Expressions are single-line only. The transcript demonstrates this directly: pasting a multi-line JavaScript function inside `{{ }}` produces an invalid-syntax error, even when collapsed onto one line. Any logic requiring function definitions, loops, or multiple statements belongs in the Code node, covered in the next lesson. ## Key Takeaways - **Expressions activate inside `{{ }}`** on any node field switched to Expression mode; everything inside runs as single-line JavaScript. - **`$json` is the primary data accessor**: dot notation (`$json.email`) and bracket notation (`$json["email"]`) both work, and you can chain them to reach nested objects and array indexes. - **Built-in functions** like `.extractDomain()`, `$ifEmpty()`, and Luxon date methods (`$now.format()`, `$now.diff()`) handle common transforms without custom code, and n8n's official docs list every available function by data type. - **Expressions are single-line only.** Multi-line logic, function definitions, and loops require the Code node, which supports both JavaScript and Python. - **Check built-in functions before writing custom code.** The n8n documentation flags whether each function is available in expressions, in the Code node, or in both, so you can pick the right tool before writing anything. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between Expressions and the Code node in n8n? Expressions run inside individual node fields and are limited to a single line of JavaScript wrapped in `{{ }}`. The Code node is a dedicated node that accepts multi-line JavaScript or Python, making it the right tool for function definitions, loops, or logic that cannot fit on one line. The transcript shows an expression returning an invalid-syntax error when multi-line code is pasted in, even when collapsed to a single line. ### How does `$json` work in n8n Expressions? `$json` references the output of the immediately previous node. You access fields with dot notation (`$json.customerName`) or bracket notation (`$json["email"]`). For nested objects and arrays, chain the path: `$json.order.products[0].name` returns the name of the first product in the array. To access a node that is not immediately previous, n8n lets you reference it by name using `$('Node Name')` and dot notation. ### Which built-in functions does n8n provide for string and date transformation in Expressions? n8n's built-in string functions include `.extractDomain()`, `.extractEmail()`, `.extractUrl()`, and `.hash()`. For dates, `$now` returns the current datetime via the Luxon library, and you chain `.format('yyyy-MM-dd')` to reformat it or `.diff(DateTime.fromISO('2025-01-01'), 'days')` to calculate elapsed days. The full list is in n8n's official documentation under "Built-in functions and variables", organized by data type. ### How do you handle a missing or empty field inside an n8n Expression? `$ifEmpty()` handles blank fields inline. The syntax is `$ifEmpty($json.email, 'Email not found')`: if the email field is empty, the expression returns the fallback string instead of null. The transcript demonstrates this by clearing the email field entirely and confirming the node outputs 'Email not found' rather than an error or a null value downstream. --- # How to use Code Node in n8n - Data Structure & Limitations | Python in n8n URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-code-node-in-n8n-data-structure-limitations/ > Learn n8n's Code node data structure, item limits, and Python syntax so you can write custom JavaScript or Python logic in your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is the Code node in n8n and when do you need it? The Code node lets you write multi-line JavaScript or Python directly inside an n8n workflow as a single pipeline step. Unlike expressions, which are limited to one line, the Code node handles complex data manipulation, filtering, and object creation. Use it when built-in nodes cannot express the logic you need, for example aggregating 291 merged order-detail rows into 100 unique order totals with a running sum. ## How to configure and use the Code node in n8n The Code node exposes two parameters you must set before writing any logic. First, **Language**: JavaScript (stable) or Python (beta). In JavaScript, n8n built-in variables use a `$` prefix, for example `$input`, `$execution`, `$binary`. In Python the same variables use an underscore prefix instead, for example `_input`. Python support is in beta and carries known limitations. Second, **Mode**: "Run once for all items" executes the code block one time and makes every incoming record available together via `$input.all()`. This is the right choice when you need cross-record logic, such as summing order totals across 291 rows. "Run once for each item" executes the code separately per record and exposes only the current item via `$input.item`, mirroring how other n8n nodes behave by default. Switching modes changes the access variable automatically in the editor stub. Every Code node must return an array of objects where each item is wrapped under a `json` key: `[{ json: { field: value } }, ...]`. Even a single result must sit inside the outer array. Binary file outputs use a `binary` key with a mandatory `data` field plus recommended fields such as `mimeType`, `fileExtension`, and `fileName`. Breaking this structure causes the node to fail or report an error. In the worked example, the code built an `orderTotals` lookup dictionary by looping through `$input.all()`, reading `item.json.orderId` and `item.json.totalPrice`, then converted each key-value pair into `{ json: { orderId: id, orderTotal: Number(total).toFixed(2) } }` before returning the result array. The output count changed from 291 inputs to 100 unique-order outputs, which is valid as long as the array-of-json-objects structure is preserved. The Code node carries two hard limitations. On cloud-hosted n8n, importing npm packages is blocked entirely. Self-hosted instances can use select built-in or whitelisted packages only. Regardless of hosting, the Code node cannot access the file system or make HTTP and API calls. Those tasks belong to dedicated nodes: the HTTP node for external requests and the Read File from Disk node for file access. ## Key Takeaways - The Code node runs multi-line JavaScript or Python as a single n8n step, filling the gap where single-line expressions run out of capability. - "Run once for all items" gives simultaneous access to every input record via `$input.all()`; "run once for each item" gives one record at a time via `$input.item`. Switching modes changes both the execution count and the access variable. - JavaScript variables use the `$` prefix; equivalent Python variables use an underscore prefix. Python support is currently in beta with known gaps. - Every Code node output must be an array of `{ json: { ... } }` objects. Returning a plain object, a raw value, or a non-array breaks the node. Output item count does not have to match input item count. - The Code node cannot import arbitrary npm packages on cloud, access the file system, or make HTTP calls. Use the HTTP node and Read File from Disk node for those tasks. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What data structure must the Code node return in n8n? The Code node requires an array of objects where each item is wrapped under a `json` key: `[{ json: { field: value } }, ...]`. Even a single output must sit inside the outer array. Binary file outputs add a `binary` key containing a mandatory `data` field plus optional fields like `mimeType`, `fileExtension`, and `fileName`. Returning any other structure, such as a plain object or a raw value, causes the node to fail with an error. ### What is the difference between 'Run once for all items' and 'Run once for each item' in the Code node? "Run once for all items" executes the code block once and exposes every incoming record together via `$input.all()`, making it the right choice for aggregation and cross-record logic such as summing order totals. "Run once for each item" executes the code separately per record, exposing only the current item via `$input.item`, and mirrors the default behavior of other n8n nodes. Switching modes also changes the variable stub the editor pre-populates. ### Can the Code node in n8n import npm packages or call external APIs? On cloud-hosted n8n, npm package imports are blocked entirely inside the Code node. Self-hosted instances can use select built-in or whitelisted packages only. The Code node also cannot make HTTP or API calls regardless of hosting model. Use the dedicated HTTP node for external API requests and the Read File from Disk node for file system access. Both nodes are covered in subsequent lessons of this course. ### Does Python work in the n8n Code node, and how does it differ from JavaScript? Python is supported in the Code node but is currently in beta with known limitations. The primary syntax difference is that n8n built-in variables use an underscore prefix in Python, for example `_input.all()`, rather than the dollar-sign prefix used in JavaScript, for example `$input.all()`. Basic Python logic runs, but the beta status means some features may be incomplete or unavailable compared to the stable JavaScript mode. --- # How to Use Aggregate Node in n8n | Combine & Summarize Data URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/ > Use the Aggregate node in n8n to combine multiple items into one, group fields, and summarize data across your entire workflow. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What does the Aggregate node do in n8n? The Aggregate node collapses multiple input items into a single output item so downstream nodes receive one record instead of many. It offers two modes: aggregate individual fields (pulling specific values, like order IDs, into a list) or merge all item data into one combined item. A workflow processing 41 pending orders produces exactly one item from the Aggregate node rather than 41, cutting email and Slack notification floods to a single summary message. ## How to configure the Aggregate node to send one summary email instead of many The Aggregate node inserts between your Switch node output and your action node. Disconnect the Send Email or Slack node from its current input, search the node palette for Aggregate, and drop it in the gap. In the node's configuration panel, choose Individual Fields mode, add the field you want to collect (for example, `order_id`), and rename the output field to something descriptive like `pending_order_ids`. Testing the step shows one output item containing a single list field holding all 41 order IDs, rather than 41 separate items. In the downstream Send Email node, switch the body from a fixed value to an expression and drag the aggregated `pending_order_ids` field into the body. For the subject line, reference `$now` to append today's date automatically. Connect the Aggregate node's output to the email node and run the workflow: one email goes out listing every pending order ID, instead of 41 individual emails. n8n's data model still wraps the Aggregate output in an outer list because every node receives a list of items. That outer list contains exactly one item, which itself holds the aggregated field as an inner list. This is expected behavior, not an error, and it is what prevents the downstream action node from iterating and firing once per original record. ## Key Takeaways - The Aggregate node always outputs one item regardless of how many items entered it: 41 pending-order records collapse into a single item with one `pending_order_ids` list field. - Individual Fields mode collects specific named field values across all input items into a list; the all-items mode collapses every field from every item into one combined record. - Inserting the Aggregate node between a Switch branch and a Send Email or Slack node is the direct fix for notification overload: the action node fires once on one item instead of once per record. - The aggregated list can still contain duplicate values (the transcript shows `OD00001` appearing multiple times), so the Remove Duplicates node is the recommended next step when unique values are required downstream. - A practical homework extension: add a second Switch condition checking both `order_priority = high` and `order_status = pending or processing` so delivered, shipped, cancelled, and refunded orders never reach the operations-team notification branch. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) - [Lesson 16: How to connect Google Forms & Webhook Node in n8n | Google Forms Integration](/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between the two modes in the n8n Aggregate node? The Aggregate node's Individual Fields mode picks specific fields by name, such as order_id, and collects their values across all input items into one list. The all-items mode takes every field from every item and merges them into one combined record. Use Individual Fields when you only need selected values downstream, for example a list of pending order IDs to paste into a single customer-service email body. ### Why does the Aggregate node output still appear wrapped in a list in n8n? The Aggregate node produces one item, but n8n requires every node's output to be a list of items. The outer array is always present; it simply contains exactly one item instead of many. That single item holds the aggregated field, for example pending_order_ids, which is itself an inner list of all the collected values from the original 41 records. ### How does the Aggregate node reduce Slack and email notification volume in a real workflow? The Aggregate node sits between the Switch node output and the Send Email or Slack node. It collapses all matching records, such as 41 pending orders, into one item before the action node sees any data. The action node then executes exactly once, sending one message with every order ID in the body rather than triggering a separate send per record. ### What additional condition should be added to avoid notifying the operations team about delivered orders? The Switch node branch that routes high-priority orders to the operations team currently checks only order_priority, not order_status. The instructor assigned adding a second condition so the branch fires only when order_priority equals high AND order_status is pending or processing. This prevents delivered, shipped, cancelled, and refunded orders from reaching the operations Slack notification even if they carry high priority. --- # How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/ > Set up n8n Cloud step by step in 2025, from signup to first workflow, and see how it compares to self-hosting your own instance. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n Cloud and how does it compare to self-hosting? n8n Cloud is the managed, browser-based version of n8n that lets you register, log in, and start building automation workflows immediately, with no installation or server management required. The trade-off is a paid subscription after the 14-day free trial and reduced control over where your data and logic live. Self-hosting gives you full control and flexibility but requires managing your own infrastructure. ## How to register on n8n Cloud step by step n8n Cloud registration takes just a few clicks starting at n8n.io. Click "Get started for free," fill in your name, a company email address, a password, and a unique account name. That account name becomes your permanent workspace URL, formatted as `.app.n8n.cloud`. No credit card is required to start the 14-day free trial. After submitting the form, n8n runs a short onboarding survey covering team type, company size, coding experience, and how you heard about n8n. The following screen offers a team-invite step so collaborators can access the same workspace. You can skip this and add team members later from inside the workspace. Once you complete onboarding, your n8n canvas opens immediately. The workspace URL you chose during registration appears at the top of the interface, confirming where your workflows are hosted. Clicking "Create workflow" opens a blank canvas where you can drag and drop nodes and start building right away, with no additional configuration needed. ## Key Takeaways - n8n Cloud requires no installation: register at n8n.io, complete a short form, and your workspace is live within minutes under a custom `.app.n8n.cloud` URL. - The 14-day free trial starts with no credit card required; paid plans become necessary once free-tier usage limits are exceeded. - n8n Cloud's main drawbacks are subscription cost at higher usage levels and reduced control over where your data and logic reside. - Self-hosting is the better fit for technical users who need full control over their infrastructure, data, and automation logic. - After registration the canvas opens immediately, and the "Create workflow" button lets you drag and drop nodes without any additional setup. ## Related Lessons - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) - [Lesson 9: Build Your First n8n Workflow - Send Welcome Emails Automatically](/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Does n8n Cloud require a credit card to sign up? n8n Cloud does not require a credit card at registration. The sign-up form collects only your name, a company email address, a password, and a unique account name. A full 14-day free trial starts immediately with no payment information needed. ### What format does an n8n Cloud workspace URL take? The n8n Cloud workspace URL follows the pattern `.app.n8n.cloud`, where the account name is the unique identifier you choose during registration. This URL hosts your entire workspace and is displayed at the top of the n8n interface every time you log in. ### When should you self-host n8n instead of using n8n Cloud? Self-hosting n8n makes sense when you need full control over your data and automation logic, have the technical skills to manage your own server, and want to avoid ongoing subscription costs. n8n Cloud suits beginners who want to start building immediately without any infrastructure setup or installation. ### Can you add team members to an n8n Cloud workspace after the initial setup? n8n Cloud lets you invite team members at any point after registration. The onboarding flow presents a team-invite screen immediately after the survey, but you can skip it entirely and add collaborators later from within your workspace. --- # How to Scale n8n Workflows with Enterprise Security & Version Control | Course Conclusion URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-scale-n8n-workflows-with-enterprise-security-version-control/ > See n8n's enterprise features: role-based security, version control, and the user-management CLI to scale workflows safely across teams. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 8. Enterprise Features & Conclusion. Watch the video above for the full tutorial, or read the written guide below. ## What enterprise-grade features does n8n offer for security and workflow management? The Execution Data node, Git-based version control, global variables, external secrets managers, and log streaming are n8n's five core enterprise features for scaling automation securely. Together they address the four challenges every medium-to-large deployment faces: filtering thousands of executions, preventing silent failures, protecting credentials, and keeping dev and production workflows in sync. Most features require a Pro or Enterprise plan. ## How do you configure n8n's enterprise security and version control features? The Execution Data node saves custom key-value pairs directly into each execution log. You add the node to any workflow, define a key such as `trade_id` or `purchase_date`, map its value from your workflow data, then use the Executions tab filter to retrieve the exact run tied to a specific order or customer. Without it, you'd have to browse every execution log manually to find a failure. Filtering by custom saved data requires a Pro or Enterprise plan. Git-based version control lives under Settings > Environment and connects your n8n instance to a Git repository so development and production workflows stay separate. When a dev workflow is ready, you push it to production. If something breaks, you roll back to a prior commit in seconds. Global variables, available on the Pro plan at $60 per month, store a value like `database_url` once and expose it across every workflow as `$vars.database_url`. Variables are immutable inside workflows: update the value in Settings > Variables and every referencing workflow picks up the change automatically, with no edits to individual nodes. The External Secrets tab under Settings connects n8n to HashiCorp Vault, Azure Key Vault, or AWS Secrets Manager so API keys and credentials are retrieved dynamically at runtime and never appear in workflow exports or execution logs. Log Streaming, also in Settings, pushes execution events to a central monitoring system in real time so SRE and IT teams can trigger alerts without manually checking n8n's Executions tab. Both require an Enterprise plan. LDAP and SSO integration are available at the same tier for organizations that manage access centrally. ## Key Takeaways - The Execution Data node saves searchable key-value pairs (trade IDs, order numbers, purchase dates) into execution logs; filtering those keys in the Executions tab requires a Pro or Enterprise plan. - Git-based version control (Settings > Environment) keeps dev and production n8n instances separate and enables rollback to any prior workflow version; available on Enterprise plan only. - Global variables (Pro plan, $60/month) store values such as `database_url` once and expose them as `$vars.variable_name` across all workflows; a single value change in Settings > Variables propagates everywhere instantly. - External secrets managers (HashiCorp Vault, Azure Key Vault, AWS Secrets Manager) pull credentials dynamically at runtime so sensitive keys never appear in workflow definitions or logs; Enterprise plan required. - Log Streaming exports execution events to a central monitoring dashboard in real time, removing the need for manual log reviews when workflows run thousands of daily executions. ## Related Lessons - [Lesson 41: n8n API Calling, Collaboration, Workflow Sharing & Credential Management](/courses/n8n/lessons/n8n-api-calling-collaboration-workflow-sharing-credential-management/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does the Execution Data node do in n8n and when should I use it? The Execution Data node saves custom key-value pairs, such as order IDs, customer numbers, or transaction dates, inside each execution log. Use it when your workflows run thousands of daily executions and you need to pinpoint the exact run tied to a specific business entity, for example when a customer reports a failed trade ID. Filtering by those saved keys in the Executions tab requires a Pro or Enterprise plan. ### How does n8n's Git-based version control separate dev and production environments? n8n's Git-based version control, configured under Settings > Environment, connects your n8n instance to a Git repository so development, test, and production workflow instances stay separate. When a development workflow is ready, you promote it to production through the repo. If a change breaks production, you roll back to a previous commit in seconds. This feature is available on the Enterprise plan only. ### What is the difference between a local workflow variable and a global variable in n8n? A local variable defined inside one workflow cannot be referenced by any other workflow, so teams end up duplicating the same database URL or endpoint string across 10 or 20 workflows. Global variables, available on the Pro plan, store a value once and make it accessible everywhere as `$vars.variable_name`. Changing that value in Settings > Variables propagates it to every workflow instantly, with no changes needed inside any individual workflow. ### How does n8n's External Secrets feature protect API keys and credentials? The External Secrets tab under Settings connects n8n to services like HashiCorp Vault, Azure Key Vault, or AWS Secrets Manager. n8n retrieves credentials dynamically at runtime rather than storing them inside workflow definitions, so sensitive keys never appear in workflow exports or execution logs. This eliminates exposure risk during audits or when workflows are shared across teams. The feature requires an Enterprise plan. --- # How to Install n8n for free on local machine using Docker Desktop URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/ > Install n8n for free on your local machine using Docker Desktop, then run through setup and launch your first working automation workflow. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What is Docker-based n8n installation and why does it exist? Docker-based n8n installation runs n8n inside an isolated container on your local machine, separating it from the host operating system to prevent compatibility conflicts. The Docker method gives you direct control over the database backend (SQLite by default, Postgres if you prefer), makes migrating to a new host straightforward, and produces a cleaner security boundary than a bare NPM install. It works on Mac and Windows via Docker Desktop; Linux users need Docker Engine and Docker Compose instead. ## How to install n8n on a local Mac or Windows machine using Docker Desktop Docker Desktop is the required prerequisite. Download it from the official Docker documentation page, choosing the Apple Silicon or Intel build if you are on a Mac. Docker Desktop is free for personal use and for companies with fewer than 250 employees and less than $10 million USD in annual revenue; larger enterprises need a paid subscription. Drag the downloaded file into your Applications folder, open it, and click "Use recommended settings" to finish setup. With Docker Desktop running, open a terminal and run the first command from the n8n Docker documentation to create a volume named `n8n_data`. You can confirm it exists by opening Docker Desktop and checking the Volumes section. Then paste the second command from the docs to pull the latest stable n8n image and start the container. n8n prints a URL, `localhost:5678`, when the container is ready. Open `localhost:5678` in a browser. Even if you already installed n8n via NPM on the same machine, this container treats itself as a fresh installation because it is fully isolated. Fill in the owner account form, complete the onboarding survey, and optionally enter an email address to receive a free license key that unlocks workflow history, advanced debugging, execution search, and folder tagging. From Docker Desktop's Containers view you can monitor CPU and memory usage and stop or restart the container with one click at any time. ## Key Takeaways - Docker Desktop n8n installation runs on Mac and Windows only; Linux requires Docker Engine plus Docker Compose and a separate docker-compose setup covered in a dedicated guide. - The `n8n_data` volume created by the first terminal command persists your workflows and credentials outside the container, so your data survives restarts and updates. - A Docker container is isolated from the host OS, so a Docker install and an NPM install can coexist on the same machine and each behaves as a completely independent instance. - Docker gives you the option to run Postgres instead of the default SQLite database, a level of database control the standard NPM install does not offer. - Self-hosting via Docker means you own security, scaling, and server configuration; the n8n cloud version handles all of that for you, making it the better choice if that responsibility feels too technical. ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) - [Lesson 9: Build Your First n8n Workflow - Send Welcome Emails Automatically](/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Does Docker Desktop n8n installation work on Linux? Docker Desktop is only available for Mac and Windows. Linux users must install Docker Engine and Docker Compose separately, then follow the docker-compose method documented in the n8n server-setup section. The n8n documentation lists this path under Server Setups alongside options for Heroku, Digital Ocean, AWS, Azure, and Google Cloud. ### Why does n8n via Docker ask me to create an owner account even though I already installed n8n via NPM on the same machine? The Docker container is a fully isolated environment. n8n running inside the container has no access to the NPM installation's data or settings, so it treats itself as a brand-new instance and runs the complete first-time setup wizard, including the owner account form, onboarding survey, and optional license key step. ### What is the n8n_data Docker volume and why must you create it before starting the container? The n8n_data volume is a Docker-managed storage location that holds your n8n workflows, credentials, and execution history outside the container itself. Creating it first means your data persists across container stops, restarts, and version updates. Skipping this step would cause n8n to lose all saved data every time the container is stopped. ### Is Docker Desktop free to use for running n8n locally? Docker Desktop is free for personal use and for organizations with fewer than 250 employees and less than $10 million USD in annual revenue. Larger enterprises require a paid Docker subscription. For individual learners and small teams, the free tier covers everything needed to download, run, and manage a local n8n Docker container. --- # How to Optimize Workflows in n8n - Faster & Scalable Automations URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-optimize-workflows-in-n8n-faster-scalable-automations/ > Speed up slow n8n workflows with practical optimization techniques that cut execution time and let you scale automations without breaking them. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is n8n workflow optimization and why does node count matter? Workflow optimization in n8n cuts execution time and API overhead by removing redundant nodes, running independent branches in parallel, batching API calls, and collapsing repetitive loops with merge-and-aggregate patterns. In a 100-item customer feedback workflow, applying all four techniques reduced total node executions from 441 to 206, a roughly 50% drop, without changing what the workflow produces. ## How to cut n8n workflow execution by 50% using the Merge node, parallel branches, and batch APIs Redundant node removal and parallel branching are the cheapest structural fixes. Every extra node adds execution overhead, so remove any node that adds a step without adding logic. For actions that share no dependency such as a Slack notification, a Notion entry, and an Airtable update, connect each one directly to the same upstream decision node instead of chaining them end to end. n8n processes branches left to right and top to bottom, so place the highest-priority branch leftmost. In the lesson's lead-qualification example, three downstream actions were chained sequentially; moving them into parallel branches cuts wall-clock time to whichever branch takes longest, not the sum of all three. The Merge node eliminates per-item API fetches and is the most impactful single change in the lesson. The unoptimized feedback workflow called Airtable's get-customer endpoint once per item inside a Loop Over Items node, producing 100 individual API calls. The optimized version fetches all customer records in one Airtable call, then passes both datasets into a Merge node configured to match on the email field, producing a single joined dataset of 100 enriched records. Those 100 API calls collapse to one. The Code node and batch APIs handle the remaining repetitive send actions. For 38 low-rated feedback entries, the unoptimized workflow fired 38 separate Slack alerts. The optimized version routes those entries through a Filter node (rating less than 3), then a Code node set to "run once for all items" that concatenates all records into one summary string, sending a single Slack message. Airtable's batch API, discussed but not fully implemented in the lesson, would compress 100 individual update calls into one bulk request, the highest-leverage remaining optimization in that workflow. ## Key Takeaways - Removing redundant nodes directly reduces execution count: the 100-item feedback workflow dropped from 441 to 206 node executions by restructuring alone, with no logic changes. - Parallel branches (Slack, Notion, Airtable side by side) replace sequential chains and cut wall-clock time to whichever branch takes longest, not the sum of all three. - The Merge node matched on email replaced 100 per-item Airtable get-customer calls with one bulk fetch plus one join, eliminating that category of calls entirely. - The Code node in "run once for all items" mode collapsed 38 individual Slack alerts into one summary message, reducing the Slack node's execution count from 38 to 1. - Airtable's batch API and equivalent bulk endpoints in other tools compress N individual update calls into one request, the single highest-impact optimization when updating many records in a loop. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### How does the Merge node replace per-item API calls in n8n? The Merge node joins two datasets on a shared field in a single pass. In the lesson's workflow, fetching all Airtable customer records at once and merging them with feedback records on the email field replaced 100 individual get-customer API calls that were firing inside a Loop Over Items node, eliminating that entire category of per-item requests. ### How should parallel branches be structured in an n8n workflow? Parallel branches in n8n connect multiple independent nodes directly to the same upstream node rather than chaining them end to end. n8n executes branches left to right and top to bottom, so place the highest-priority branch leftmost. In the lesson, Slack, Notion, and Airtable update nodes each connect directly to the qualifying decision node instead of running sequentially after each other. ### What does the Code node's 'run once for all items' mode do in n8n? The Code node's 'run once for all items' mode receives the full array of input items and executes its script exactly once across all of them. In the lesson, it concatenated 38 low-rated feedback entries into one summary string so a single Slack message replaced 38 individual alerts, cutting the Slack node's execution count from 38 to 1. ### When should you use Airtable's batch API instead of updating records one at a time in n8n? Airtable's batch API sends multiple records in a single HTTP request, so updating 100 records costs 1 API call instead of 100. The lesson kept individual updates for side-by-side comparison, but the instructor noted that switching to the batch API would compress 100 Airtable update executions into one bulk request, the largest remaining speed gain available in that workflow. --- # How to Pin Data in n8n or Edit Output for Faster AI Automation Development URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-pin-data-in-n8n-or-edit-output-for-faster-ai-automation-development/ > Pin data in n8n or edit a node's output directly, so you can test logic and build AI automations without rerunning workflows each time. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is data pinning in n8n, and how does it speed up AI workflow development? Data pinning in n8n logs a node's output and replays it on every subsequent test run instead of re-executing the node. When a webhook triggers your workflow or an HTTP node calls an external API like AccuWeather's 50-calls-per-day free tier, you pin the response once and iterate on downstream steps as many times as you need without re-submitting forms, firing webhooks, or burning quota. Pinned data persists across saves and workspace reloads. ## How to pin data, edit node outputs, and copy past execution data in n8n **Pinning data** starts at the node level. Open a webhook node, click "Listen for test event," submit your form once, then click the pin icon inside the node panel. A purple pin icon appears on the canvas confirming the payload is frozen. Every test run from that point replays the pinned data, not a live call, and the pin survives saves and reloads so you can return the next day without re-triggering the source. Five limitations apply: pinning only works in test runs (never live production), only on nodes with a single output, stores one pin per node (a second pin replaces the first), cannot pin binary output nodes, and has zero effect on production execution. **The edit output feature** lets you change the JSON values inside a node's output to simulate scenarios the source data does not currently contain. In the course demo, the merge node combines Google Sheets customer feedback with Airtable customer records. Clicking the edit icon beside the pin icon opens the raw JSON, where individual field values can be changed directly. Raising three customer ratings from 1 or 2 up to 4 or 5 and saving caused the downstream filter node (which passes records rated below 3) to drop from 38 matching items to 35. Saving the edits automatically pins the modified payload to that node so all downstream steps use the new values. **Copying past execution data** solves the problem of reproducing a bug without re-triggering the error condition. Navigate to the Executions section in your n8n workspace, open a failed run, find the input data on the node just before the error, and copy it. Return to the editor, open the node's edit output panel, paste the copied payload, and run. In the course demo, a missing email field had caused a "no email found" error. Pasting that exact erroneous input into the webhook node replicated the failure instantly and confirmed the stop-and-error node was handling it gracefully, all without submitting a new broken form. ## Key Takeaways - The purple pin icon on a canvas node signals that node's output is frozen; all downstream test runs use the pinned payload instead of calling the external service. - Pin data is test-only and does not affect production execution, so live workflows run normally against real data once deployed. - The edit output feature pins modified JSON automatically on save, making changed field values, like an updated rating, immediately visible to filter, IF, and merge nodes downstream. - Copying input from a failed execution via the Executions tab and pasting it into the editor's edit panel replicates bugs deterministically without re-triggering live API calls or form submissions. - All three techniques, pinning, editing output, and execution replay, eliminate unnecessary LLM API calls during AI workflow development, which directly cuts cost and preserves rate limits on external services. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Does pinned data in n8n survive after you save and close a workflow? Pinned data persists across saves and workspace reloads. When you reopen a workflow the next day, the purple pin icon remains on the node and the frozen payload is still available for test runs. You do not need to re-submit a form or call the external API again to continue building. ### What are the limitations of the pin data feature in n8n? Pin data in n8n has five constraints: it only works during test runs (not live production execution), only applies to nodes with a single output, stores one pin per node (a new pin replaces the existing one), cannot be used on nodes that produce binary output, and has no effect once a workflow is running in production. ### How does the edit output feature differ from simply pinning data in n8n? The edit output feature lets you manually change specific JSON field values inside a node's existing output to simulate edge cases, like raising a customer rating from 1 to 5, without altering the source system. Pin data freezes a real response as-is. Edit output is the right tool when you need the downstream filter or IF node to see different values than the live source currently holds. ### Why copy data from a past execution instead of re-running the workflow to reproduce a bug? The Executions tab in n8n stores the exact input that reached each node during a failed run. Copying that input and pasting it into the editor's edit output panel replicates the precise error condition, including a missing email field or malformed payload, without triggering live API calls, submitting forms, or consuming rate-limited quota. --- # How to fix AI Automation Workflows Fast in n8n | Error Handling & Debugging URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-fix-ai-automation-workflows-fast-in-n8n/ > Debug and fix broken AI automation workflows in n8n quickly using built-in error handling, retries, and node-level troubleshooting steps. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 4. Error Handling & Debugging. Watch the video above for the full tutorial, or read the written guide below. ## What does n8n's Debug in Editor feature do? Debug in Editor copies a failed production execution directly onto your n8n canvas in fully editable mode, so you can inspect and fix the exact data that caused the failure without re-triggering your webhook or reloading fresh data. You open the execution log, locate the failed run, and click "Debug in Editor" to load the erroneous payload into every node as live, editable input. ## How do you retry a failed execution in n8n? The Retry Execution button, located next to Debug in Editor in the execution log, replays a failed run so no data is lost from one-off failures caused by temporary outages. Clicking it surfaces two options: "Retry with currently saved workflow from node with error" runs the failed payload through your latest workflow changes, while "Retry with original workflow from node with error" reruns the exact workflow that was live at the time of failure. If a downstream service like AWS SES was temporarily unavailable, retrying with the original workflow reproduces the error. Retrying with the currently saved workflow, after you have applied a fix, picks up exactly where the run stopped and processes the original payload through your corrected nodes, ensuring no data is lost. ## How does Workflow Version History work in n8n? Workflow Version History saves a snapshot every time you save a workflow, letting you restore any previous version from the history panel. You access it via the "Workflow History" button next to the Save button on the canvas. Each saved version is listed with a timestamp, and the action menu on each entry lets you restore, clone to a new workflow, open in a new tab, or download the version. Restoring a version replaces the current workflow immediately. In the lesson demo, restoring an earlier version reverts both the misconfigured property reference (from `email` back to `user_email`) and the sender domain, confirming the rollback is complete. The Starter plan limits version history to one day; the $60 per month plan extends retention to five days. ## How do you prevent recurring errors from silently failing n8n workflows? The IF node routes workflow execution based on a condition check, catching bad input before it reaches fragile nodes like an email sender. In the lesson demo, an IF node checks whether the incoming email field is non-empty before the AWS SES node runs. The true branch continues the workflow; the false branch connects to a Stop and Error node, which halts execution and raises an explicit error instead of letting the workflow silently succeed with invalid data. Logging bad records to a Google Sheet on the false branch is one option, but the instructor flags that attaching a Stop and Error node is more elegant because it triggers n8n's error workflow system. That system handles recurring data-quality failures centrally, a topic covered in the next lesson of the course. ## Key Takeaways - **Debug in Editor** loads a real failed execution onto an editable canvas so you fix the exact payload that broke the workflow, with no need to re-trigger the webhook or reload data. - **Retry Execution** offers two modes: "current workflow" applies your latest fixes to the original payload, while "original workflow" reruns the flow exactly as it was, confirming whether a temporary outage or a configuration error caused the failure. - **Workflow Version History** saves a snapshot on every save; the Starter plan retains one day of history, the $60 per month plan retains five days, and restoring a version immediately replaces the current workflow. - **The IF node** guards fragile nodes by validating input data upstream, routing invalid records to a Stop and Error node rather than crashing mid-execution with a silent or ambiguous failure. - **Stop and Error node** raises an explicit error on the false branch of your validation IF node, enabling n8n's error workflow system to handle recurring data-quality problems centrally rather than burying them in execution logs. ## Related Lessons - [Lesson 21: Master Error Handling in n8n | Build Reliable n8n Workflows That Don't Break](/courses/n8n/lessons/master-error-handling-in-n8n/) - [Lesson 32: Master AI Automation Workflows Debugging & Error Handling with Execution Logs](/courses/n8n/lessons/master-ai-automation-workflows-debugging-error-handling-with-execution-logs/) - [Lesson 34: Error Workflows in n8n AI Automation | Stop & Error Node | Error Trigger Node](/courses/n8n/lessons/error-workflows-in-n8n-ai-automation/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between 'Retry with current workflow' and 'Retry with original workflow' in n8n? Retry Execution offers two modes. 'Retry with currently saved workflow' reruns the failed payload through your latest workflow changes, useful after you have applied a fix. 'Retry with original workflow' reruns the exact workflow that existed at the time of failure, which will reproduce the error if the root cause was a misconfiguration rather than a temporary outage. In the lesson demo, retrying with the original workflow fails again, while retrying with the corrected workflow succeeds. ### How do you access Debug in Editor in n8n? Debug in Editor is available from the execution log. Open the Executions view from the n8n home screen, click the failed execution entry, and click the 'Debug in Editor' button in the top-right area of that view. n8n loads the entire workflow onto the canvas with all the data from that failed run in fully editable mode, so you can change node settings and rerun individual nodes against the original erroneous payload without retriggering the webhook. ### What are the Workflow Version History limits on n8n's Starter plan? The Starter plan retains workflow version history for one day only. Every save creates a new snapshot, but only snapshots from the current day are accessible for restore, clone, open-in-new-tab, or download. The plan at $60 per month extends retention to five days. The history panel is opened via the 'Workflow History' button next to the Save button on the workflow canvas, and restoring any version immediately replaces the currently active workflow. ### Why should you add an IF node before a node like AWS SES in n8n? The IF node guards against invalid input data reaching a node that will throw an error on bad values. In the lesson demo, an empty or malformed email field causes the AWS SES node to fail with a bad-request error. Adding an IF node that checks for a non-empty email field before the SES node routes invalid submissions to a Stop and Error node instead of crashing mid-execution, making the failure explicit, traceable, and handleable by n8n's error workflow system. --- # How to connect Google Forms & Webhook Node in n8n | Google Forms Integration URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/ > Connect Google Forms to n8n using the Webhook node, so form submissions trigger your workflow automatically. Video walkthrough included. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What Is the Webhook Node and How Does It Differ from API Polling? The Webhook Node in n8n acts as a real-time data listener that triggers your workflow the instant data arrives at its URL. Unlike API polling, where your system must repeatedly request updates on a fixed interval, the Webhook receives a push the moment an external event fires. This removes polling delays and wasted compute, making it ideal for infrequent but time-sensitive events like form submissions, CRM entries, or security incidents. ## How to Connect Google Forms to the n8n Webhook Node Google Forms has no native webhook field in its settings. You bridge it to n8n by pasting a short Apps Script into the form's built-in code editor and registering an `onSubmit` trigger. The script intercepts each form submission and POSTs the response data to your n8n Webhook URL, connecting Google's closed form system to any external workflow. Inside your Google Form editor, click the three-dot menu next to your profile icon and select "Apps Script." Paste the provided script into the editor, replace the placeholder URL with your n8n test URL (copied from the Webhook Node panel after switching the HTTP method from GET to POST), and save the project to Google Drive with a recognizable name like "User Registration Form." In the Apps Script dashboard, add a new trigger: set the function to `onSubmit`, deployment to `Head`, event source to `From Form`, and event type to `On form submit`. Save. Google prompts you to authorize access, including permission to "connect to an external service." Click the "Advanced" link to pass the unverified-app warning, since you authored the script, then grant permissions. Back in n8n, click "Listen for test events" on the Webhook Node and submit a live form response. The node displays the received payload with field values nested under `body` in the JSON output. ## Key Takeaways - The Webhook Node must use the POST method, not the default GET, when receiving form submissions. Change the HTTP method in the node panel before clicking "Listen for test events." - Google Forms requires an Apps Script `onSubmit` trigger to forward submissions to an external URL. There is no native webhook configuration anywhere in Forms settings. - The test URL and production URL are separate endpoints. Configure the Apps Script with the test URL during development, then swap to the production URL before activating your n8n workflow. - The Webhook payload nests form field values under `body`. Use dot notation (`$json.body["Your Name"]`) to reference specific fields in downstream nodes like IF, Slack, or Amazon SES. - The Apps Script authorization requires clicking "Advanced" to bypass the "Google hasn't verified this app" screen. This is expected behavior for any self-authored script that connects to an external service. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the n8n Webhook Node need to be in 'Listen for test events' mode before the form is submitted? The Webhook Node only accepts incoming POST requests while it's actively listening. Without clicking 'Listen for test events,' the Apps Script trigger fires but the POST to the n8n test URL returns a 'request failed' error. The node must be in listening mode each time you submit a test form response during development. ### What HTTP method should the n8n Webhook Node use for Google Forms submissions? The Webhook Node must be set to POST, not the default GET. Google Forms sends submission data as a POST request. If the node stays on GET, it won't accept the incoming payload from the Apps Script trigger, and the form data will never reach your workflow. ### What permissions does the Google Apps Script trigger need to send form data to n8n? The Apps Script trigger requires two Google account permissions: 'View and manage your forms in Google Drive' and 'Connect to an external service.' These appear during the authorization step when you first save the trigger. You must click 'Advanced' on the unverified-app screen and proceed, since the script is self-authored and not a published third-party app. ### How does the IF node route Webhook data to Slack versus Amazon SES? The IF node reads a specific form field value from the Webhook payload, such as the answer to 'Are you planning to attend an event?', referenced as `$json.body["field name"]`. When the value equals 'Yes,' the true branch fires a Slack message to the events channel. When it equals 'No,' the false branch triggers an Amazon SES email to the admin team. --- # How to Create Mock Data in n8n to test AI Automations without Live APIs URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-create-mock-data-in-n8n-to-test-ai-automations-without-live-apis/ > Generate mock data in n8n so you can test AI automation workflows without calling live APIs, burning credits, or hitting rate limits. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is mock data and why does n8n need it for AI automation testing? Mock data is fake, pre-defined input you inject into an n8n workflow so you can test every branch and edge case before connecting live APIs or production databases. It lets you avoid repeated external API calls (saving time and cost), simulate realistic scenarios like blank email fields, and work with predictable outputs during early development without risking accidental overwrites to live records. ## How do you create mock data for n8n workflows? Mockaroo (mockaroo.com) is the recommended first method. The free plan generates up to 1,000 rows of schema-matched data with typed fields ranging from email and credit card to airport code and datetime ranges. A blank-percentage control on each field lets you deliberately inject missing data, so your IF node branches get tested against incomplete inputs. An AI field generator lets you type a topic, such as "stock trades" or "flight logs," and it assigns matching column types and formulas automatically. You download the result as JSON, copy it, and paste it into any n8n node using the Edit Output icon to pin the data for the rest of the workflow. ChatGPT or any LLM works as a second method when you need data shaped around a specific workflow. Prompt it with your workflow's purpose, required field count, and edge cases such as blank email IDs, and ask explicitly for a JSON list of items. If you ask for JSON and the first response comes back as individual objects rather than an array, n8n will reject the paste with an "unexpected non-whitespace character" error. Paste that error back into ChatGPT and ask it to reformat the output as a JSON list of items before retrying the pin. The Edit Fields node and the Code node handle custom in-workflow generation as a third approach. Use the Edit Fields node in JSON mode for single-record tests during very early workflow development. Use the Code node when you need a for loop or calculated fields, returning every record wrapped in the `{json: {...}}` structure n8n expects. A fourth option, the built-in Customer Data Store node, returns at most five records regardless of the limit you set, making it useful only for practicing node mechanics, not for bulk or edge-case validation. ## Key Takeaways - **Mockaroo** generates up to 1,000 typed, randomizable rows for free and exports JSON you paste directly into an n8n node via Edit Output to pin it as workflow input. - **Blank-percentage controls** in Mockaroo let you deliberately inject missing fields, such as empty emails, so your IF node gets tested against incomplete real-world inputs rather than a clean dataset. - **ChatGPT mock data must be formatted as a JSON list of items**, not individual objects. If n8n rejects the paste, copy the error back into ChatGPT and ask it to fix the array wrapping before retrying. - The **Edit Fields node** suits single-record early-stage tests; the **Code node** suits complex or programmatically generated datasets using a for loop with the `{json: {...}}` wrapper n8n requires. - The **Customer Data Store node** is capped at five records regardless of the limit you configure, making it suitable only for learning individual node concepts, not real workflow stress-testing. ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does Mockaroo's blank-percentage control do for n8n workflow testing? Mockaroo's blank-percentage control sets any field to return empty values for a chosen share of rows. In n8n, this means your IF node or email-validation branch gets tested against realistic missing-data scenarios, like 20% of email fields being blank, without you hand-crafting those edge cases. It is one of the fastest ways to verify that your workflow handles bad input gracefully before production. ### Why does ChatGPT-generated JSON fail when pasted into an n8n node's Edit Output? ChatGPT sometimes returns mock data as separate JSON objects rather than a single JSON array, and n8n's Edit Output pin requires a list of items. The error message reads "unexpected non-whitespace character after JSON." To fix it, paste that error message back into ChatGPT and ask it to reformat the output as a JSON list of items. The corrected array will pin without errors and expose all records to downstream nodes. ### When should you use the Code node instead of Mockaroo to generate mock data in n8n? The Code node is the right choice when your test data requires custom logic that no external generator can produce, such as a for loop that builds calculated fields or values derived from other fields in the same record. Wrap every record in the `{json: {...}}` structure n8n expects and return the full array. For standard datasets, Mockaroo or ChatGPT are faster and require no code. ### What is the Customer Data Store node's practical limit for n8n workflow testing? The Customer Data Store node returns a maximum of five records regardless of the row limit you configure. It is useful for learning how a specific n8n node behaves in isolation, but it cannot replicate bulk or edge-case scenarios. For any real workflow validation involving hundreds or thousands of rows, use Mockaroo, a ChatGPT-generated JSON list, or the Code node instead. --- # How to Auto-Save Gmail Attachments to Google Drive | n8n AI Automation Tutorial URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-to-auto-save-gmail-attachments-to-google-drive/ > Set up an n8n workflow that auto-saves Gmail attachments straight to Google Drive, with a full video walkthrough and steps. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 5. Hands-On Projects. Watch the video above for the full tutorial, or read the written guide below. ## What Is the Gmail-to-Google Drive Attachment Workflow in n8n? The Gmail Trigger node anchors an n8n automation that saves email attachments directly to a Google Drive folder and fires a Discord team notification. The four-node chain runs: Gmail Trigger polling the inbox every minute, a Filter node discarding emails with no binary data, a Google Drive upload node, and a Discord webhook node. Emails with multiple attachments need a fifth node, Split Out, to fan each binary field into its own item before the upload. ## How to Build the Gmail Attachment Auto-Save Workflow in n8n The Gmail Trigger, Filter, Split Out, Google Drive, and Discord nodes chain together to route every email attachment into a designated Drive folder automatically. Configure the Gmail Trigger to download attachments, gate with a binary-exists Filter, fan multi-attachment emails through Split Out, use two dynamic expressions in the Google Drive node to resolve field names and filenames, and send a Discord webhook notification on each upload. The Gmail Trigger node starts with the "On Message Received" event. Disable the "Simplify" toggle so the full email payload is available, then enable "Download Attachments" with the default prefix `attachment_`. That prefix is critical: n8n names every binary field `attachment_0`, `attachment_1`, and so on, and every downstream expression depends on that naming convention. Add a Filter node next with the condition set to expression `$binary`, type Object, condition Exists. This gate silently drops plain-text emails before they reach the upload node. The Split Out node solves the multiple-attachment problem. A Gmail email with nine attachments arrives in n8n as one item carrying nine binary fields, not nine separate items. Set the Split Out field to `$binary` so it outputs nine individual items. In the Google Drive node (resource: File, operation: Upload), replace the hardcoded `attachment_0` in "Input Data Field Name" with the expression `{{$binary.keys().first()}}`. This dynamically returns the correct binary key for whichever item is currently being processed. For "File Name," use `{{$("Filter emails with attachments").item.json.subject}}_{{$binary.values().first().fileName}}` to combine the email subject with each attachment's original filename stored in the binary metadata. Select the target parent drive and destination folder to complete the upload configuration. The Discord node completes the chain using a webhook credential, not a bot token. Reference the email subject from the Filter node in the message body. Because nine attachments produce nine separate Discord messages, place an Aggregate or Code node upstream of Discord to collapse them into a single team notification. ## Key Takeaways - The Gmail Trigger requires "Download Attachments" enabled and the `attachment_` prefix set; without it, no binary data flows to any downstream node. - The Filter node checks `$binary` Object Exists to catch any email carrying at least one attachment, regardless of the exact field name or total attachment count. - The Split Out node set to `$binary` converts one multi-attachment email item into N separate items so the Google Drive node runs once per file instead of erroring after the first. - `{{$binary.keys().first()}}` dynamically resolves each item's binary field name, replacing the hardcoded `attachment_0` that causes upload failures for every file beyond the first. - `{{$binary.values().first().fileName}}` reads the original attachment filename from the binary metadata, enabling organized and searchable filenames in Google Drive rather than generic hardcoded strings. ## Related Lessons - [Lesson 35: Lead Enrichment Capstone](/courses/n8n/lessons/lead-enrichment-capstone/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the Google Drive node fail when a Gmail email has more than one attachment? The Google Drive node fails because "Input Data Field Name" defaults to the hardcoded string `attachment_0`. A multi-attachment email arrives in n8n as a single item with binary fields named `attachment_0` through `attachment_8`. The node uploads the first file, then errors on every subsequent item because their binary keys do not match `attachment_0`. The fix is a Split Out node (field: `$binary`) upstream plus the dynamic expression `{{$binary.keys().first()}}` in the field name setting. ### What does the Split Out node do when processing Gmail attachments in n8n? The Split Out node converts one n8n item that carries multiple binary fields into individual items, one per binary field. Set "Field" to `$binary` so n8n reads the attachment object and outputs a separate item for each attachment. An email with nine attachments produces nine items, each holding one binary field, so the Google Drive node can upload each file in its own execution instead of failing after the first attachment_0 match. ### What expression retrieves the original filename from a Gmail attachment in n8n? The expression `{{$binary.values().first().fileName}}` retrieves the original filename stored by the Gmail Trigger. `$binary.values()` returns an array of the binary field objects on the current item, `.first()` selects the first one, and `.fileName` reads the filename property. Combine it with the email subject for organized Drive storage: `{{$('Filter emails with attachments').item.json.subject}}_{{$binary.values().first().fileName}}`. ### Why does the Filter node check whether the `$binary` object exists rather than checking a specific field like `attachment_0`? The Filter node checks `$binary` as an Object Exists because the binary field names change with attachment count, starting at `attachment_0` and incrementing. Checking the `$binary` object itself catches any email carrying at least one attachment regardless of how many files it includes. Checking a hardcoded field like `attachment_0` would only match that exact field and could silently pass or drop emails incorrectly once the Split Out node reorganizes the binary structure downstream. --- # How Branching works in n8n Workflows | Smart Automations with Multiple Paths URL: https://www.genaiunplugged.com/courses/n8n/lessons/how-branching-works-in-n8n-workflows/ > See how branching lets an n8n workflow split into multiple paths using IF and Switch nodes, so different data routes trigger different actions. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## What is the Switch node and how does it create multiple paths in an n8n workflow? The Switch node routes each incoming item to a named output branch based on configurable matching rules, replacing a chain of stacked IF nodes with a single, readable configuration. While the IF node produces only two outputs, true or false, the Switch node supports four or more branches simultaneously. In this lesson it evaluates `order_status` and splits 100 orders into pending, processing, canceled, and refunded streams in one step. ## How to build a multi-branch order-routing workflow in n8n The Manual Trigger node starts the workflow for testing, with a Schedule Trigger recommended for daily production runs at a fixed time. A Google Sheets node follows, configured with the "Get Rows" operation pointing to the mock orders spreadsheet, which returns all 100 records as a list of JSON objects. Every record shares seven properties: row number, order ID, first name, last name, customer email, order status, and order date. In n8n, even a single returned record is wrapped in a list because every node expects a list of items as input. The Switch node connects directly after Google Sheets. Each routing rule compares `$json.order_status` against a fixed string value: "pending", "processing", "canceled", or "refunded". Dragging the field from the item properties panel into the value slot auto-converts it from fixed text to expression mode, where anything inside double curly braces is evaluated as JavaScript. Each rule maps to a renamed output branch, such as "pending orders" or "processing orders". Renaming outputs is a best practice: without it, the canvas labels branches only as output 0, 1, 2, and 3, forcing you to reopen the Switch node to understand what each branch does. Two additional options improve reliability: "Fallback output" handles items that match no rule (left blank to silently drop unmatched statuses like "shipped" or "delivered"), and "Ignore case" prevents routing failures when source data uses inconsistent capitalization. Each branch connects to a specific action node based on business need. The pending-orders branch connects to an Amazon SES node that sends an alert email to the customer service team, with the subject built dynamically using `$json.order_id` as an expression. The processing-orders branch connects to a Slack node that posts to a dedicated high-priority channel so the operations team can expedite shipping without waiting for email. The canceled and refunded branches both connect into the same Amazon SES node and the same Slack node, because both statuses require identical downstream actions: a finance-team email and a Slack notification to the canceled-and-refunded channel. n8n allows multiple upstream branches to feed a single downstream node, so no duplication is needed. ## Key Takeaways - The Switch node replaces stacked IF nodes when three or more distinct conditions exist, producing one named output branch per rule from a single configuration panel. - Routing rules use `$json.` expressions, auto-generated by dragging a field from the item panel, to evaluate any property of the current item against a fixed value. - Renaming each output branch directly inside the Switch node, for example "pending orders", prevents canvas confusion where unnamed branches default to "output 0", "output 1", etc. - The "Ignore case" option makes string comparisons case-insensitive, preventing routing failures when order status values are entered with inconsistent capitalization in the source sheet. - Multiple upstream branches can share a single downstream action node, so canceled orders and refunded orders can both trigger the same email node and Slack node without duplicating either. ## Related Lessons - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) - [Lesson 16: How to connect Google Forms & Webhook Node in n8n | Google Forms Integration](/courses/n8n/lessons/how-to-connect-google-forms-webhook-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### When should you use the Switch node instead of the IF node in n8n? The Switch node handles three or more distinct conditions in a single node, producing a named output branch for each rule. The IF node supports only two outputs, true and false, so routing four order statuses like pending, processing, canceled, and refunded would require stacking multiple IF nodes. The Switch node keeps the canvas readable and the routing logic centralized in one place. ### How does the Switch node access item properties like order status in its routing rules? The Switch node uses `$json.order_status` in expression mode to read the order status field from each incoming item. Dragging the property from the item properties panel into the value field automatically converts the input from fixed text to an expression editor. Anything inside double curly braces is interpreted as JavaScript, but no manual expression writing is required when you drag and drop the field. ### Can multiple Switch node branches feed into the same downstream action node in n8n? Multiple upstream branches can connect into a single downstream node without any special configuration. In this lesson, both the canceled-orders branch and the refunded-orders branch connect to the same Amazon SES email node and the same Slack node. n8n processes the items from each incoming connection as separate runs on that shared node, executing it once per connected branch. ### What does the Switch node's fallback output do, and when should you configure it? The Switch node's fallback output determines what happens to items that match none of the defined routing rules. In this lesson, orders with statuses like "shipped" or "delivered" match no rule and are silently dropped by leaving the fallback blank. Configure a fallback branch whenever unmatched items need logging, a separate notification, or any downstream handling instead of a silent discard. --- # Build Your First Faceless YouTube Automation With n8n | TikTok - Instagram Reels Automation URL: https://www.genaiunplugged.com/courses/n8n/lessons/build-your-first-faceless-youtube-automation-with-n8n/ > Build your first faceless YouTube automation with n8n, then repurpose the same workflow for TikTok and Instagram Reels content. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 7. Final Project. Watch the video above for the full tutorial, or read the written guide below. ## What is the n8n Faceless YouTube Channel Automation workflow? The n8n faceless YouTube automation workflow pulls a pending topic from a Google Sheet, generates a video script and scene captions via an OpenAI LLM node, creates context-aware image prompts, renders those into short clips, produces an AI voiceover, stitches everything using a Creatomate template, and publishes the final video to Instagram, YouTube, TikTok, or LinkedIn, all without writing a single line of code. ## How to build the 8-step faceless video pipeline in n8n The Google Sheets node serves as the data entry point and first filter. You configure it with the operation "Get Rows," point it at your "Faceless YouTube Shorts" sheet, and set a filter where the Status column equals "pending." Enabling "Return Only First Matching Row" ensures the workflow processes exactly one video per run. The sheet stores columns for topic, tone, niche, persona, target platform (TikTok, Instagram, or YouTube Shorts), language, and CTA style (question, subscribe prompt, drop a comment, start a debate, or try-it-and-share), so every AI node downstream receives fully contextualized input before generating a single word. The Basic LLM Chain node connects next and calls OpenAI to produce two outputs in one pass: a full video script and scene captions for on-screen overlays. A second AI node then generates dynamic image prompts grounded in the video's content. Those prompts feed image-generation and video-generation nodes that turn stills into short clips. A dedicated voiceover node creates the audio narration, and a merge step combines the clips, captions, and audio into a single package ready for final rendering. Creatomate handles the video stitch in step eight. The node sends the merged assets to a predefined Creatomate template and renders a finished Reel or YouTube Shorts file. The workflow then publishes the video to Instagram and YouTube in sequence, archives the rendered file to Google Drive, and writes the status back to the Google Sheet as "done" along with the video URL, closing the loop on that topic row. ## Key Takeaways - The Google Sheets node's "Return Only First Matching Row" option limits each workflow run to a single pending topic, preventing simultaneous video generation that could cause resource conflicts. - The Google Sheet acts as the control panel: topic metadata including tone, niche, persona, platform, language, and CTA style flows directly into the OpenAI prompt, making the output platform-specific without any manual prompt editing. - The Basic LLM Chain node is the right choice here because it supports structured output and lets you swap the underlying LLM without rewiring downstream connections. - Creatomate abstracts the video composition step so n8n triggers a render via API call against a predefined template rather than running custom video-editing logic inside the workflow. - The workflow's final status loop, writing "done" and a video URL back to the sheet, means the Google Sheet doubles as a production log you can audit without opening n8n. ## Related Lessons - [Back to Full Course](/courses/n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does the 'Return Only First Matching Row' option do in the Google Sheets node? The 'Return Only First Matching Row' option on the Google Sheets node restricts the workflow to fetching a single row where Status equals 'pending,' so the entire pipeline generates exactly one video per execution. Without it, every pending row would be returned and processed simultaneously, which would break downstream nodes expecting a single topic context. ### What columns does the Google Sheet need for the faceless video automation to work correctly? The Google Sheet used in this workflow includes video number, topic, tone, niche, persona, target platform (TikTok, Instagram, or YouTube Shorts), language, CTA style, per-platform publish status (pending, published, or rejected), an overall status field (pending, working in progress, or done), and a video URL column that the workflow populates after archiving the rendered file to Google Drive. ### Why does the workflow use the Basic LLM Chain node instead of a simpler prompt node? The Basic LLM Chain node supports structured output formatting and makes the underlying LLM swappable without rebuilding node connections. The workflow needs both a full video script and scene captions in a predictable structure that downstream nodes can parse reliably, which a simple one-shot prompt node does not guarantee. ### What role does Creatomate play in the n8n faceless video pipeline? Creatomate receives the merged package of image-based video clips, AI voiceover audio, and scene captions from n8n and renders a finished short-form video using a predefined template. It handles video composition server-side so n8n only needs to make one API call with dynamic asset data, eliminating any need for ffmpeg or custom code inside the workflow. --- # Build Your First n8n Workflow - Send Welcome Emails Automatically URL: https://www.genaiunplugged.com/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/ > Follow a beginner n8n tutorial that builds your first workflow, automatically sending a welcome email to every new signup. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## What does a webhook-triggered welcome email workflow do in n8n? The Webhook trigger node listens for incoming POST requests from an external form and fires the n8n workflow the moment a submission arrives. Connected to an email action node such as AWS SES, Gmail, or any SMTP provider, it sends a personalized welcome email automatically, replacing manual outreach. The workflow uses submitted form fields, including first name and email address, as dynamic expression variables inside the message body and recipient field. ## How to build a form-to-email automation in n8n The Webhook node provides two URLs: a test URL for development and a production URL for live traffic. Set the HTTP method to POST because the workflow is receiving form data. Click "Listen for test event" to register the webhook and make it ready to accept requests. Google Forms don't support webhooks natively, so paste the test URL into a Google AppScript bound to the form, set the trigger event to "On form submit," and save the script. The AppScript fires a POST request to that URL every time someone submits the form. Switch the AppScript's `postUrl` variable to the production URL only after the workflow is fully tested and activated. Add an AWS SES (or Gmail, Outlook, or Send Email SMTP) node after the Webhook. In the body field, drag the `first_name` field from the webhook's JSON input panel directly onto the template text, and n8n converts it to the expression `{{$json.body.first_name}}` automatically. Do the same for the To address using the `email` field from the same JSON body. Use a brand-domain sender address rather than a personal Gmail to protect deliverability. Rename the node to something descriptive like "Send Welcome Message" so the canvas stays readable. The IF node extends the workflow to branch on customer type. Set two conditions joined by AND: email does not end with `gmail.com`, and email does not end with `hotmail.com`. Because the email data lives two nodes back on the Webhook, click the Webhook node in the input selector to access it inside the IF node configuration. When both conditions are true, the submission is treated as a corporate signup. Connect the true branch to a Google Sheets node set to "Append row" to log corporate customers automatically for sales or marketing follow-up. ## Key Takeaways - The Webhook node's test URL and production URL are separate. Update the `postUrl` variable in your Google AppScript every time you switch between them, or live submissions will hit a dead endpoint. - Google AppScript bridges Google Forms to n8n by catching the "On form submit" trigger event and sending a POST request to the webhook URL you configure in the script. - Dragging a field from the input panel into any configuration field switches that field from fixed to expression mode and wraps the reference in `{{$json.body.fieldName}}` automatically, so no manual expression syntax is required. - The IF node's "does not end with" string operation, chained with AND, identifies corporate emails by excluding known free domains. For production use, a regular expression covers more providers reliably. - Use a professional sending service such as AWS SES or SendGrid with a brand domain for outbound welcome emails. Free provider addresses like Gmail frequently land in spam. ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 5: [Free n8n] How to Install n8n on local machine using NPM Node.js](/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the Webhook node in n8n have a test URL and a production URL? The Webhook node provides a test URL so you can build and verify the workflow without exposing it to real traffic. Clicking 'Listen for test event' activates the test URL temporarily for a single submission. Once the workflow behaves correctly end to end, you paste the production URL into your Google AppScript's postUrl variable and activate the workflow so it runs continuously without needing manual listening. ### How does a Google Form pass submitted data to an n8n webhook? Google Forms don't support webhook integrations out of the box. A Google AppScript bound to the form intercepts the 'On form submit' trigger event, packages the field values from the response, and sends a POST request to the webhook URL stored in the script's postUrl variable. The Webhook node in n8n receives that POST request and exposes the field values as JSON under the body property. ### How do n8n expressions work when personalizing a welcome email? Dragging a field from the input panel into a configuration field switches that field from fixed mode to expression mode. n8n wraps the reference in double curly braces, for example {{$json.body.first_name}}, and evaluates it as JavaScript when the workflow runs. The submitted value replaces the placeholder in the final email, so every recipient receives a message addressed to their actual name without any manual variable syntax. ### What does the IF node's true branch represent in this workflow? The IF node's true branch activates when the submitted email address does not end with gmail.com AND does not end with hotmail.com. A submission that satisfies both conditions is classified as a corporate customer. That true branch connects to a Google Sheets 'Append row' node, which logs the corporate signup automatically so a sales or marketing team can follow up. --- # Error Workflows in n8n AI Automation | Stop & Error Node | Error Trigger Node URL: https://www.genaiunplugged.com/courses/n8n/lessons/error-workflows-in-n8n-ai-automation/ > Set up n8n Error Trigger and Stop & Error nodes to catch failures, send alerts, and build workflows that fail gracefully. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 4. Error Handling & Debugging. Watch the video above for the full tutorial, or read the written guide below. ## What is an error workflow in n8n and what does it do? An error workflow is a dedicated n8n workflow that automatically triggers whenever another workflow in your environment encounters a failure. It logs errors, sends alerts to the right people, and ensures no failure goes unnoticed. You build it once, attach it to as many workflows as you need via each workflow's settings panel, and it fires automatically whenever a covered workflow fails in production. ## How do you build and attach an error workflow in n8n? The Error Trigger node is the first node you add to any error workflow. It requires zero configuration because it automatically receives a rich error object the moment a failure occurs elsewhere. That object includes the workflow name and ID, the execution ID and a direct URL to the execution log, the full error message and stack trace, and the name of the specific node where the failure happened. To get sample data for building the rest of the workflow without waiting for a real failure, click "Fetch test event" directly on the node. Once the Error Trigger node is wired up, downstream nodes act on that data. A Gmail node set to "Send Message" is a fast first step: inject `workflow.name` into the subject line and build an HTML body that links directly to the execution URL so recipients can jump straight to the failing log. For team-wide visibility, a Slack node using Block Kit blocks lets you structure a richer message with the error details, the failing node name, and a "Debug here" button that points to the execution URL. To route alerts to the right owner rather than a generic inbox, add a Google Sheets lookup between the Error Trigger node and your notification nodes. A sheet that maps workflow names to owner emails and Slack user IDs lets the error workflow send a personalized direct message to the owner and a parallel alert to a shared team channel. To attach the error workflow to any covered workflow, open that workflow's settings via the three-dot menu, find the "Error workflow" field, and select your error handling workflow by name. One critical constraint: the Error Trigger node only fires on active production workflows, not manual test runs. The covered workflow must be switched on before errors route through to your error workflow. You can go further by adding conditional routing on HTTP status codes, categorizing 5xx responses as low-priority retryable errors, 4xx responses as medium-priority data-fix errors, and 401/403 responses as high-priority authentication failures requiring immediate escalation. ## Key Takeaways - The Error Trigger node auto-populates with execution ID, execution URL, error message, stack trace, and the name of the failing node. It has no configuration panel because the error object arrives automatically from the covered workflow. - Attaching an error workflow requires opening the target workflow's three-dot settings menu and selecting the error workflow by name in the "Error workflow" field. One error workflow can cover many workflows simultaneously. - The Error Trigger node fires only on active production workflows. Covered workflows must be enabled before errors will route to your error handling workflow. - The Stop and Error node lets you raise intentional errors when validation or conditional logic fails, pass a custom error message or object downstream, and halt execution cleanly so bad data does not silently propagate through the rest of the workflow. - Error workflows become progressively smarter: start with a single email alert, add owner-mapping via Google Sheets for personalized Slack messages, then layer HTTP-code-based severity routing and eventually an LLM node to classify and prioritize issues automatically. ## Related Lessons - [Lesson 21: Master Error Handling in n8n | Build Reliable n8n Workflows That Don't Break](/courses/n8n/lessons/master-error-handling-in-n8n/) - [Lesson 32: Master AI Automation Workflows Debugging & Error Handling with Execution Logs](/courses/n8n/lessons/master-ai-automation-workflows-debugging-error-handling-with-execution-logs/) - [Lesson 33: How to fix AI Automation Workflows Fast in n8n | Error Handling & Debugging](/courses/n8n/lessons/how-to-fix-ai-automation-workflows-fast-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What data does the Error Trigger node provide when another workflow fails? The Error Trigger node delivers the failed workflow's name and ID, the execution ID and a direct URL to the execution log, the full error message and stack trace, the HTTP status code when the failure is API-related, and the name of the specific node where execution stopped. In a real production failure, this data is more detailed than the mock event returned by 'Fetch test event.' ### How does the Stop and Error node differ from the Error Trigger node in n8n? The Stop and Error node is an action node you place inside any workflow to intentionally halt execution and raise an error when a validation or conditional check fails. It lets you define a custom error message or object. The Error Trigger node is a trigger node that sits at the start of your dedicated error workflow and listens passively for failures in other workflows. The Stop and Error node creates the error; the Error Trigger node detects and responds to it. ### Why does the Error Trigger node not fire during manual test runs in n8n? The Error Trigger node only responds to production executions, meaning the covered workflow must be switched to active before any failure in it will route to the error workflow. A manual test run inside the canvas editor does not count as a production execution, so errors raised during testing stay isolated and do not trigger the error handling workflow. ### How can you route error alerts to the specific owner of the failed workflow rather than a generic inbox? Add a Google Sheets node immediately after the Error Trigger node and filter the sheet by workflow name, matching it against the name field in the error object. A sheet with columns for workflow name, owner name, owner email, and Slack user ID gives the downstream Slack and Gmail nodes everything they need to send a personalized direct message to the owner and a parallel alert to a shared team channel. --- # [Free n8n] How to Install n8n on local machine using NPM Node.js URL: https://www.genaiunplugged.com/courses/n8n/lessons/free-n8n-how-to-install-n8n-on-local-machine-using-npm-nodejs/ > Install n8n on your local machine using npm or npx, then run it locally on Node.js for free before deploying anywhere else. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 2. Getting Started. Watch the video above for the full tutorial, or read the written guide below. ## How Do You Install n8n on Your Local Machine for Free? You install n8n free on your own machine with npm, the Node.js package manager. n8n is open-source, so a local install runs with no execution limits and no monthly fee, unlike n8n Cloud. You need Node.js, version 18 or newer, installed first. ## How to Install n8n with npm and Node.js Install Node.js from nodejs.org, then open a terminal and run `npm install n8n -g` to install n8n globally. Start it with `n8n start`, then open `http://localhost:5678` in your browser to load the editor. To update later, run `npm update -g n8n`. This local instance keeps all your workflows and credentials on your own machine. ## Key Takeaways - Understanding the core concepts covered in this lesson - Practical, hands-on experience you can apply immediately - Tips from real-world n8n workflow implementations ## Related Lessons - [Lesson 4: How to Set Up n8n Cloud in 2025 - Step by Step | n8n Cloud vs Self-Hosting](/courses/n8n/lessons/how-to-set-up-n8n-cloud-in-2025-step-by-step/) - [Lesson 6: How to Install n8n for free on local machine using Docker Desktop](/courses/n8n/lessons/how-to-install-n8n-for-free-on-local-machine-using-docker-desktop/) - [Lesson 7: n8n Interface Walkthrough 2025 | Complete n8n UI Guide - Admin Panel, Settings](/courses/n8n/lessons/n8n-interface-walkthrough-2025/) - [Lesson 8: n8n Node Types Explained (2025) | How to Build Workflow with Triggers, Apps, Core & Actions](/courses/n8n/lessons/n8n-node-types-explained/) - [Lesson 9: Build Your First n8n Workflow - Send Welcome Emails Automatically](/courses/n8n/lessons/build-your-first-n8n-workflow-send-welcome-emails-automatically/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What will I learn in this lesson? You install n8n free by running `npm install n8n -g` after installing Node.js 18 or newer, then starting it with `n8n start` and opening http://localhost:5678. This self-hosted local instance has no execution limits, unlike n8n Cloud. ### Do I need to watch the previous lessons first? This lesson builds on earlier concepts. If you are new to n8n, start with Lesson 1 for the best learning experience. ### Can I get help if I get stuck? Join the GenAI Unplugged community on Substack where Dheeraj answers questions and shares additional tips. --- # Automate File Management with n8n: Master Binary Data Handling URL: https://www.genaiunplugged.com/courses/n8n/lessons/automate-file-management-with-n8n-master-binary-data-handling/ > Handle n8n binary data end to end: automate file uploads, use binaryPropertyName and prepareBinaryData in your workflows. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 3. Deep Dive Concepts. Watch the video above for the full tutorial, or read the written guide below. ## How Does n8n Handle Files and Binary Data? n8n stores files as binary data in a separate binary property on each item, kept apart from the item's JSON. This lets workflows download, read, transform, and upload files like CSVs, PDFs, images, and spreadsheets while still passing structured JSON alongside them. ## How to Work With Files in n8n Use Read/Write Files from Disk to load or save local files, and the HTTP Request node to download or upload them over the web. Convert between formats with Extract From File, which reads a CSV, PDF, or spreadsheet into JSON, and Convert To File, which builds a file from JSON to send onward. Always reference a file by its binary property name so the next node can find it. ## Key Takeaways - Understanding the core concepts covered in this lesson - Practical, hands-on experience you can apply immediately - Tips from real-world n8n workflow implementations ## Related Lessons - [Lesson 11: How Branching works in n8n Workflows | Smart Automations with Multiple Paths](/courses/n8n/lessons/how-branching-works-in-n8n-workflows/) - [Lesson 12: How to Use Merge Node in n8n | Combine Data Like a Pro](/courses/n8n/lessons/how-to-use-merge-node-in-n8n/) - [Lesson 13: How to Use Set Node in n8n | Edit Fields Node | Add, Edit, Clean Data](/courses/n8n/lessons/how-to-use-set-node-in-n8n/) - [Lesson 14: How to Use Aggregate Node in n8n | Combine & Summarize Data](/courses/n8n/lessons/how-to-use-aggregate-node-in-n8n/) - [Lesson 15: How to Use Remove Duplicates Node in n8n | Clean Your Data Fast](/courses/n8n/lessons/how-to-use-remove-duplicates-node-in-n8n/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What will I learn in this lesson? n8n stores files as binary data in a separate binary property on each item, apart from the JSON. You will learn to read, write, download, and convert files using nodes like Read/Write Files, Extract From File, and Convert To File. ### Do I need to watch the previous lessons first? This lesson builds on earlier concepts. If you are new to n8n, start with Lesson 1 for the best learning experience. ### Can I get help if I get stuck? Join the GenAI Unplugged community on Substack where Dheeraj answers questions and shares additional tips. --- # AI Powered Email Assistant: Automate Your Inbox with n8n & OpenAI URL: https://www.genaiunplugged.com/courses/n8n/lessons/ai-powered-email-assistant-automate-your-inbox-with-n8n-openai/ > Build an AI-powered email assistant in n8n that reads incoming messages, drafts replies with OpenAI, and organizes your inbox automatically. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 6. AI-Powered Workflows. Watch the video above for the full tutorial, or read the written guide below. ## What is an AI-powered email assistant in n8n? The AI-powered email assistant workflow in n8n reads your Gmail inbox on a schedule, uses OpenAI's gpt-4o-mini to summarize each unread email and decide whether a reply is needed, then drafts a polite HTML reply when one is required. It saves that reply as a Gmail draft, sends a Telegram notification with Approve and Decline buttons, and dispatches the email automatically only after you tap Approve, with no code written. ## How to build an AI-powered email assistant in n8n The Schedule Trigger node fires at 8 AM daily (hour set to 8, minute set to 0). Add a Manual Trigger alongside it for test runs. A Gmail "Get Many Messages" node fetches unread inbox messages with the Simplify toggle disabled, because leaving Simplify on returns only a short snippet rather than the full email body, thread ID, and sender address the downstream nodes need. Set the limit to 1 during development so you can step through emails one at a time, and filter by label "inbox" and read status "unread." The OpenAI node targets gpt-4o-mini and takes two messages. The System message tells the model it is a helpful email assistant and instructs it to always draft replies in HTML format. The User message provides the email body and asks for a JSON response with three fields: `summary` (one sentence), `reply_needed` (the string "yes" or "no"), and `suggested_reply` (an HTML draft). Enabling "Output Content as JSON" in the OpenAI node strips surrounding prose automatically. An IF node then checks whether `reply_needed` equals "yes" (with the ignore-case option enabled to handle any capitalization the model returns) and routes only matching emails forward. The Gmail "Create Draft" node sets the email type to HTML, populates the body from `suggested_reply`, prefixes the subject with "Re:", and passes the original message's Thread ID via the "Add Option" menu to attach the draft to the correct conversation thread. The To address comes from the `from` field of the fetched email. The Telegram node then sends the summary and draft to your personal bot chat with "Send and Wait for Response" enabled, response type set to Approval, and the "Approve and Disapprove" option selected, which renders two buttons in the app and pauses the workflow. When you tap Approve, the webhook returns `approved: true`. A Gmail "Get Draft" node retrieves the saved draft by its ID, and an HTTP POST node calls `https://gmail.googleapis.com/gmail/v1/users/me/drafts/send` with the draft ID in the body and your Gmail OAuth2 credential for authentication, dispatching the reply and clearing the draft from your inbox. ## Key Takeaways - The Schedule Trigger node runs at 8 AM daily; swap it for a Gmail "On Email Arrival" trigger once the workflow is tested to process emails in real time rather than in a morning batch. - The Gmail "Get Many Messages" node requires Simplify to be disabled; the default Simplify-on mode returns only a snippet and omits the thread ID and full body the workflow depends on. - The OpenAI System prompt enforces HTML reply format, and the User prompt specifies the exact three-field JSON schema (`summary`, `reply_needed`, `suggested_reply`) so n8n parses the response without extra cleanup. - Thread ID from the fetched email must be passed to the Gmail "Create Draft" node via "Add Option" to tie the AI reply to the original conversation thread. - n8n has no native "Send Draft" operation on the Gmail node, so an HTTP POST to `https://gmail.googleapis.com/gmail/v1/users/me/drafts/send` with the draft ID and Gmail OAuth2 credential is the correct workaround. ## Related Lessons - [Lesson 36: AI Automation with n8n: Supercharge Your Workflows with OpenAI](/courses/n8n/lessons/ai-automation-with-n8n-supercharge-your-workflows-with-openai/) - [Lesson 38: AI Blog Writer](/courses/n8n/lessons/ai-blog-writer/) - [Lesson 39: AI Resume Screening](/courses/n8n/lessons/ai-resume-screening/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the Gmail 'Get Many Messages' node return only a short preview by default? The Gmail node's Simplify toggle is on by default, which trims the response to a snippet. Disabling Simplify returns the full email body, thread ID, sender address, and all headers that the OpenAI summarization node and the Gmail 'Create Draft' node all require to function correctly. ### What exact JSON schema does the OpenAI node return for each email in this workflow? The gpt-4o-mini model returns a three-field JSON object: `summary` (a one-sentence description of the email), `reply_needed` (the string "yes" or "no"), and `suggested_reply` (a full HTML-formatted draft reply). Enabling 'Output Content as JSON' in the OpenAI node removes any surrounding prose so n8n can parse the fields directly. ### How does the Telegram 'Send and Wait for Response' feature pause and resume the workflow? The Telegram node sends the email summary and suggested reply to your personal bot chat, then halts workflow execution and listens on a webhook. Choosing the Approval response type with 'Approve and Disapprove' renders two in-app buttons. Tapping Approve sends a webhook payload where `approved` equals true, which resumes the workflow and triggers the draft-send steps. ### Why is an HTTP node used to send the Gmail draft instead of a Gmail node? The n8n Gmail node has no native 'Send Draft' operation. The correct workaround is an HTTP POST node that calls `https://gmail.googleapis.com/gmail/v1/users/me/drafts/send` with the draft ID in the request body and the Gmail OAuth2 credential set under predefined credentials, which dispatches the reply and removes the draft from the inbox. --- # AI Blog Writer URL: https://www.genaiunplugged.com/courses/n8n/lessons/ai-blog-writer/ > Build an n8n workflow that generates full blog posts with AI, taking a topic from research through outline to a finished, publish-ready draft. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 6. AI-Powered Workflows. Watch the video above for the full tutorial, or read the written guide below. ## What is the AI Blog Writer workflow in n8n? The AI Blog Writer workflow in n8n connects a Google Sheet of content topics to OpenAI, producing an SEO-optimized blog post first, then using that post as input to generate Twitter, LinkedIn, Facebook, and YouTube script content. A status column in the source sheet tracks which topics are pending, and a separate AI Prompts sheet holds all platform-specific system and user prompts, keeping the workflow dynamic without hardcoded text. ## How to build the AI Blog Writer workflow in n8n The Google Sheets trigger fires on row added and runs every hour, preventing the workflow from publishing too fast. A second Google Sheets node fetches only the first row where the status column equals "pending," returning one topic at a time with its audience, tone, word count, domain/niche, and status fields. A manual trigger node pairs with this fetch step so you can test without waiting for a new sheet row. The AI Prompts sheet stores five rows, one per platform: WordPress, Twitter, LinkedIn, Facebook, and YouTube. Each row holds a system prompt and a user prompt with double-curly-brace placeholders such as `{{topic}}`, `{{word_count}}`, `{{tone}}`, and `{{domain_niche}}`. A code node, generated by n8n's built-in Ask AI tab from a plain-English instruction, loops over all five prompt rows and replaces every placeholder with the matching value from the fetched topic row. Adding a new platform like TikTok only requires a new row in the AI Prompts sheet, not a new node in the canvas. An IF node checks whether the content platform equals "WordPress" and routes that branch to an OpenAI node configured with the dynamic system and user prompts. The model returns a full HTML blog post wrapped in triple-backtick fences, so a Set Fields node strips those fences with a `replaceAll` expression before passing clean HTML to the WordPress node, which saves the post as a draft. The false branch from the IF node handles all social platforms, where each prompt receives the completed blog post as input rather than the raw topic title, keeping blog and social content consistent. ## Key Takeaways - The AI Prompts Google Sheet stores system and user prompts for all five platforms (WordPress, Twitter, LinkedIn, Facebook, YouTube), making the workflow extensible without adding or rewiring nodes. - Double-curly-brace placeholders like `{{topic}}` and `{{word_count}}` in prompt text get replaced at runtime by a code node generated via n8n's Ask AI tab from a plain-English description, so no manual coding is required. - The IF node branches on content platform equals "WordPress" so the blog post is generated first; every social media prompt then uses that completed blog post as its input, not the original topic title. - The WordPress node saves posts in draft mode, giving you an editing checkpoint before anything goes live, because AI output needs human review for hallucinations and tone mismatches before publishing. - The status column in the topics sheet controls which rows the workflow processes, letting you queue content for multiple blogs or niches in a single sheet by adding columns like blog name. ## Related Lessons - [Lesson 36: AI Automation with n8n: Supercharge Your Workflows with OpenAI](/courses/n8n/lessons/ai-automation-with-n8n-supercharge-your-workflows-with-openai/) - [Lesson 37: AI Powered Email Assistant: Automate Your Inbox with n8n & OpenAI](/courses/n8n/lessons/ai-powered-email-assistant-automate-your-inbox-with-n8n-openai/) - [Lesson 39: AI Resume Screening](/courses/n8n/lessons/ai-resume-screening/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### Why does the n8n AI Blog Writer store prompts in Google Sheets instead of hardcoding them in nodes? The AI Prompts sheet decouples prompt logic from workflow structure. Each platform gets its own row with a system prompt and user prompt, so adding TikTok, for example, means adding one row to the sheet. The code node loops over all rows automatically, and the canvas needs no new nodes or rewiring. ### What does the code node in the AI Blog Writer workflow actually do? The code node replaces double-curly-brace placeholders in both the system prompt and user prompt with real values from the fetched topic row. For example, `{{topic}}` becomes "Top 5 AI Tools for Solopreneurs" and `{{word_count}}` becomes 1200. n8n's Ask AI tab inside the code node generates this replacement logic from a plain-English instruction, so you don't write any code manually. ### Why does the IF node branch on WordPress before generating social media posts? The IF node ensures the full blog post exists before any social content is created. Twitter, LinkedIn, Facebook, and YouTube prompts all receive the completed blog post as their input, not just the topic title. This keeps blog and social content connected and avoids the disconnected feel that comes from generating both independently from the same raw topic. ### How does the workflow clean up the OpenAI blog post output before sending it to WordPress? The OpenAI node wraps its HTML output in triple-backtick fences with an 'html' label. A Set Fields node uses a `replaceAll` expression to strip both the opening fence and the closing fence, leaving pure HTML. The WordPress node then receives that clean HTML and saves it as a draft post ready for manual review. --- # AI Resume Screening URL: https://www.genaiunplugged.com/courses/n8n/lessons/ai-resume-screening/ > Build an n8n workflow that screens resumes with AI, with a full video walkthrough and code examples from the n8n Zero to Hero course. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 6. AI-Powered Workflows. Watch the video above for the full tutorial, or read the written guide below. ## What is the AI Resume Screening workflow in n8n? The AI Resume Screening workflow in n8n automates the end-to-end recruiter cycle: an n8n Form collects applicant details and a PDF resume, a parallel branch uploads the file to Google Drive while the main branch parses it with the Extract from File node, then two Information Extractor AI nodes pull structured personal and professional data from the raw text. A scoring step routes each candidate to a shortlist, a maybe sheet, or an archive. ## How to build the AI Resume Screening workflow in n8n The n8n Form node acts as the job application trigger. Add text fields for first name and last name, an email-type field, and a file upload field restricted to `.pdf`. Add a hidden field named "job code" with a static value such as `001` to tag which role the submission belongs to. The hidden field is invisible to applicants but flows into the workflow output, letting one workflow handle multiple job postings without duplication. Copy the form's production URL and embed it in your job posting so candidates apply directly through it. The Form node feeds two parallel branches simultaneously: a Google Drive Upload node that saves the resume to a designated "resumes" folder, and an Extract from File node that converts the binary PDF into a plain-text JSON field named `text`. In the Google Drive node, build the file name dynamically by concatenating the job code, first name, and last name from the form output. In the Extract from File node, set the operation to "Extract from PDF" and point the input binary field at the resume upload field. Both branches run in parallel so file storage never delays evaluation. Two Information Extractor cluster nodes transform the unstructured `text` field into structured JSON. The first node uses a JSON schema to extract personal information: full name, telephone, city, email, and LinkedIn URL, each with a plain-English description property. The second node uses the "from attribute descriptions" schema type to extract professional information: educational qualification, job history, skills, experience breakdown by role, most recent job title, and total years of experience, each attribute carrying a format instruction such as "summarize in 100 words" or "make a bulleted list." Attach one OpenAI Chat Model sub-node (GPT-4o mini) and share it across both cluster nodes. Add a system prompt to each node instructing the model to return "NA" for any attribute it cannot locate in the text. ## Key Takeaways - The n8n Form node's hidden field carries a job code (for example, `001`) that is invisible to applicants and lets one workflow distinguish between multiple open roles without duplicating downstream nodes. - The Extract from File node converts an uploaded PDF resume to a plain-text `text` field in one step, requiring no external API call or third-party parser. - The Information Extractor node is an advanced AI cluster node that requires an attached language model and supports three schema modes: attribute descriptions (UI-driven, no JSON required), a JSON example, or a raw JSON schema with typed properties and descriptions. - Splitting extraction into a personal-info node and a professional-info node feeds the LLM smaller, focused prompts per call and produces more accurate structured output than one large combined prompt. - One OpenAI Chat Model sub-node attaches to multiple Information Extractor cluster nodes in the same workflow, avoiding credential duplication and keeping model configuration in a single place. ## Related Lessons - [Lesson 36: AI Automation with n8n: Supercharge Your Workflows with OpenAI](/courses/n8n/lessons/ai-automation-with-n8n-supercharge-your-workflows-with-openai/) - [Lesson 37: AI Powered Email Assistant: Automate Your Inbox with n8n & OpenAI](/courses/n8n/lessons/ai-powered-email-assistant-automate-your-inbox-with-n8n-openai/) - [Lesson 38: AI Blog Writer](/courses/n8n/lessons/ai-blog-writer/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What does the Extract from File node return when processing a PDF resume in n8n? The Extract from File node returns a JSON object containing a `text` property that holds the entire PDF content as a single unstructured string. All resume pages merge into one text blob. Downstream Information Extractor nodes then parse this raw text into typed fields using a schema defined directly in the node configuration. ### What is the difference between the Information Extractor node and a standard OpenAI node in n8n? The Information Extractor node is a cluster node that enforces structured JSON output by accepting a schema with typed properties and plain-English descriptions for each field. A standard OpenAI node takes a free-form prompt and returns narrative text. The Information Extractor guarantees field-level output and lets one attached OpenAI Chat Model sub-node be shared across multiple instances in the same workflow. ### Why does the AI Resume Screening workflow use two Information Extractor nodes instead of one? Two Information Extractor nodes keep personal data (name, phone, email, LinkedIn) and professional data (job history, skills, experience, education) in separate, focused prompts. Smaller scoped prompts give the LLM a clearer extraction target per call and produce more accurate structured output than a single large prompt attempting to cover every resume field at once. ### How does the scoring and routing logic work in the AI Resume Screening workflow? The workflow assigns a numeric AI score to each resume and routes candidates through an IF node: a score above 7 shortlists the candidate, a score between 5 and 7 places the application in a maybe category, and a score below 5 archives it. Every submission, regardless of score, logs all extracted fields to a Google Sheets job applicants tracker that captures final score, AI status, AI assessment, skills, job history, and contact details. --- # AI Automation with n8n: Supercharge Your Workflows with OpenAI URL: https://www.genaiunplugged.com/courses/n8n/lessons/ai-automation-with-n8n-supercharge-your-workflows-with-openai/ > Connect OpenAI to n8n workflows to automate content creation, data processing, and decisions with step by step examples. ## Overview This lesson is part of the **n8n AI Automation - Zero to Hero** course, Section: 6. AI-Powered Workflows. Watch the video above for the full tutorial, or read the written guide below. ## What is AI-powered automation in n8n? AI-powered automation in n8n extends rule-based workflows by adding reasoning, decision-making, and content generation. Traditional workflows move data and fire actions on fixed rules, like sending an email when a CRM lead appears. AI-powered workflows go further: they read incoming emails, classify them, predict whether a reply is needed, generate a draft response, and save it to drafts, all without a human in the loop. ## How do you integrate OpenAI into an n8n workflow? The OpenAI node in n8n provides built-in connectivity to the OpenAI platform without requiring the HTTP node. To connect it, generate an API key at platform.openai.com under API Keys, add credits to your account (the instructor adds $5 to start), then paste the key into the n8n OpenAI node's credential screen. n8n tests the connection immediately and stores the credential in your personal workspace, keeping it private from other users on the same cloud instance. The Message a Model action inside the OpenAI node sends a prompt to any available GPT model and returns a text response. The role selector lets you choose between a "user" message for your actual question and a "system" message that sets the model's behavior or persona before the user prompt arrives. For example, you can instruct the model to behave as a customer service agent before asking it to draft a reply. The instructor recommends GPT-4o mini as the default for most n8n AI tasks because it is faster and more affordable, reserving GPT-4.1 or GPT-4o only for large data volumes or complex reasoning chains. In the lesson demo, a single user-role prompt, "Generate a friendly email message response to this message: I need help with my order that I placed 10 days ago," produced a complete customer-service reply with subject line, body, and a request for the order number, formatted with newline characters ready for an HTML email node downstream. The model recognized that no order details were provided and asked for them, demonstrating active reasoning rather than a fixed rule. ## Key Takeaways - The n8n OpenAI node covers text, image, audio, file, and assistant actions in one place, removing the need for a custom HTTP request to reach OpenAI APIs. - GPT-4o mini is the recommended default model: fast, affordable, and sufficient for most reasoning and generation tasks in n8n workflows. - OpenAI API credentials are scoped to your personal n8n workspace and are not visible to other users on the same cloud instance. - The "system" role prompt shapes model behavior across the entire workflow by setting a persona or domain expertise, such as a customer service agent, before the actual user query arrives. - AI-powered n8n workflows differ from traditional ones because they reason, generate content, and make decisions rather than following a fixed sequence of rules. ## Related Lessons - [Lesson 37: AI Powered Email Assistant: Automate Your Inbox with n8n & OpenAI](/courses/n8n/lessons/ai-powered-email-assistant-automate-your-inbox-with-n8n-openai/) - [Lesson 38: AI Blog Writer](/courses/n8n/lessons/ai-blog-writer/) - [Lesson 39: AI Resume Screening](/courses/n8n/lessons/ai-resume-screening/) ## Next Steps Continue your n8n journey with the full [n8n AI Automation - Zero to Hero](/courses/n8n/) course. ## Frequently Asked Questions ### What is the difference between traditional and AI-powered automation in n8n? Traditional n8n automation follows predefined rules to move data and trigger actions, for example sending an email when a CRM lead is created. AI-powered automation adds reasoning and content generation: the workflow reads emails, classifies them, decides whether a reply is needed, drafts that reply, and saves it, all without a human in the loop. ### Which OpenAI model does the course recommend for n8n AI workflows? GPT-4o mini is the recommended default for n8n AI automation because it is faster and more affordable than GPT-4.1 or GPT-4o. The instructor reserves the larger models only for tasks that involve large volumes of data or complex multi-step reasoning. ### How do you create OpenAI credentials in the n8n OpenAI node? The OpenAI node in n8n requires a single API key, generated at platform.openai.com after creating an account and adding credits. Paste the key into the "Create new credential" screen inside the node and n8n tests the connection immediately. The credential is stored in your personal workspace and is not shared with other users. ### What actions does the n8n OpenAI node support beyond basic text generation? The OpenAI node in n8n supports creating, listing, updating, and messaging assistants; messaging a model directly; classifying text for policy violations; analyzing and generating images; generating audio; transcribing and translating recordings; and managing files, all without writing a custom HTTP request. --- # What is MCP - Model Context Protocol? URL: https://www.genaiunplugged.com/courses/mcp/lessons/what-is-mcp-model-context-protocol/ > Introduction to MCP fundamentals and architecture MCP (Model Context Protocol) is an open standard, created by Anthropic and released in November 2024, that lets AI applications such as Claude Desktop and Cursor connect to external tools, files, and data sources through one shared interface instead of custom code for each connection. It works through a Host, Client, and Server. ## What you will be able to do - Explain what MCP is and why it replaces custom, one-off integrations between AI apps and tools. - Describe what the Host, Client, and Server each do when an AI model requests a tool. - Identify MCP's three building blocks: tools (actions), resources (data), and prompts (templates). - Tell someone how MCP differs from a regular API when they ask. - Work out why MCP changes integration effort from M x N connections to M + N. ## Before you start - No coding background required, MCP is meant for anyone who wants AI connected to other services, not just developers. - Access to an MCP-capable AI application, such as Claude Desktop or Cursor, since many already support MCP out of the box. - Basic familiarity with how you currently interact with an AI assistant, such as a chat window, IDE, or voice app. ## Reference | Piece | Category | What it does | Example from the article | |---|---|---|---| | Host | Architecture | Where you interact with the AI model | Chat window, IDE like Cursor, voice app | | Client | Architecture | Translator inside the Host that converts the model's request into MCP language and talks to the Server | Turns "I need to check the weather" into an MCP request | | Server | Architecture | Toolbox holding the real tools, waits for any MCP-speaking app to ask for them | One server holding get_weather, get_forecast, get_air_quality | | Tools | Primitive | Actions that perform or change something | Download a file, run code, send an email | | Resources | Primitive | Data the AI model can read but not modify | Company handbook, spreadsheet, weather data | | Prompts | Primitive | Instruction sets or templates that help start a task | A "Code Review Mode" prompt that reminds the model what to check | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Worrying the AI model could run a dangerous command through MCP | Good MCP applications ask your permission first before running anything risky, you stay in control of execution | | Assuming MCP is just another name for an API | An API is one specific connection between two systems, MCP is a shared protocol so you build one MCP connection instead of a separate API integration per tool | | Assuming MCP is only for developers | MCP is for anyone who wants AI to connect with other services, many AI applications already support pre-built MCP servers with no code required | | Not knowing where the actual tools live | Tools live on MCP Servers, which can run on your own machine or be hosted online | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 1 on Substack →

## More in this section - [Lesson 2: Why MCP Was Created?](/courses/mcp/lessons/why-mcp-was-created/) - [Lesson 3: How MCP Actually Works: Hosts, Clients, and Servers](/courses/mcp/lessons/how-mcp-actually-works-hosts-clients-and-servers/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # Why MCP Was Created? URL: https://www.genaiunplugged.com/courses/mcp/lessons/why-mcp-was-created/ > Problem MCP solves and its creation story Model Context Protocol (MCP) is an open standard Anthropic released in November 2024 that lets AI applications and tools communicate through one shared language instead of custom, one-off connectors. It solves the M times N integration problem: with 5 AI apps and 10 tools, 50 custom integrations drop to 15 shared connections. ## What you will be able to do - Explain the M times N integration problem and why it made connecting AI apps to tools expensive before MCP existed. - Calculate how many custom integrations a given number of AI apps and tools requires, with and without MCP. - Identify who built MCP, when Anthropic released it, and which existing protocol (LSP) it was modeled on. - List the four specific ways integrations broke before MCP: too many signals to learn, breakage on updates, vendor lock-in, and missing safety checks. - Describe how MCP's client and server model turns adding a new AI app or tool into a single new connection instead of a full new set of connections. ## Before you start - Have read or skimmed Lesson 1, "What Is MCP? Model Context Protocol Explained Simply," since this lesson builds on that definition. - Understand at a basic level that AI applications connect to external tools or data sources (files, APIs, calculators) to do useful work. - No coding or setup required for this lesson; it is conceptual and prepares you for Lesson 3 on MCP architecture (hosts, clients, servers). ## Reference | AI apps (M) | Tools (N) | Custom integrations without MCP (M x N) | Connections with MCP (M + N) | |---|---|---|---| | 3 | 3 | 9 | 6 | | 3 | 4 | 12 | 7 | | 4 | 4 | 16 | 8 | | 5 | 10 | 50 | 15 | | Key fact | Detail | |---|---| | Created by | Anthropic engineers including David Soria Parra and Justin Spahr-Summers | | Inspired by | Language Server Protocol (LSP), which solved the same M x N problem for code editors and language analyzers | | Internal development began | Mid-2024 | | Released as open standard | November 25, 2024 | | Community adoption | Over 1,400 public MCP servers built, growing faster than Zapier's integration catalog did in its first five years | ## Common errors and fixes | Problem before MCP | What it caused | How MCP fixes it | |---|---|---| | Every tool used a different custom setup ("signal") | Developers had to learn and build a new connection for every app-tool pair | One shared protocol that every AI app and tool speaks | | A tool's API or interface changed | Every AI app connected to that tool broke and needed a manual fix | Change the connection once; it syncs everywhere through the standard | | Vendors built proprietary, locked-in connectors | Switching AI providers meant rebuilding all integrations from scratch | An open standard that any AI app or tool can join | | Tools could run actions with no guardrails | Developers spent time building safety checks instead of improving AI systems | Tools must declare what they can do; nothing runs without approval | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 1: What is MCP - Model Context Protocol?](/courses/mcp/lessons/what-is-mcp-model-context-protocol/) - [Lesson 3: How MCP Actually Works: Hosts, Clients, and Servers](/courses/mcp/lessons/how-mcp-actually-works-hosts-clients-and-servers/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # Multi-Agent AI Collaboration Tutorial URL: https://www.genaiunplugged.com/courses/mcp/lessons/multi-agent-ai-collaboration-tutorial/ > MCP Full Course Lesson 6 - Multi-agent collaboration patterns Multi-Agent AI Collaboration with MCP is a lesson in the GenAI Unplugged MCP Masterclass that shows how to run two Claude Desktop conversations, a Researcher agent and a Writer agent, connected to the same MCP server so one saves research findings and the other reads them to write a polished draft. ## What you will be able to do - Build an MCP server named collaboration-hub with three tools: save_research, read_research, and save_draft - Run two separate Claude Desktop conversations as a Researcher agent and a Writer agent that share work through one MCP server - Decide when a task calls for a single agent versus multiple specialized agents, using the decision framework from the lesson - Update your Claude Desktop config to add a new MCP server alongside an existing one, using your Python path and server.py path - Verify your MCP SDK installation with check_setup.py before writing the server code ## Before you start - Completed the previous lesson's MCP server build, or have run pip install mcp to get the SDK - Python 3 installed, with the ability to create and activate a virtual environment - Claude Desktop installed and signed in (from claude.ai/download), used as the MCP host - A code editor such as VS Code, Cursor, or PyCharm ## Reference | Step / Tool | Purpose | Details | |---|---|---| | check_setup.py | Verify MCP SDK install | Imports mcp.server.Server, stdio_server, Tool, TextContent; run with python check_setup.py | | pip install mcp | Install the MCP SDK | Skip this step if you already installed it in the previous lesson | | save_research tool | Save research findings | Writes content to research_findings.txt and confirms it saved | | read_research tool | Read saved research | Reads research_findings.txt; reports an error if the file does not exist yet | | save_draft tool | Save the final document | Writes content to final_draft.txt and confirms it saved | | server.py | Defines the MCP server | Server named collaboration-hub; registers the three tools via handle_list_tools and handle_call_tool | | Claude Desktop config | Connect Claude to the new server | Settings, Developer tab, Edit Config; add collaboration-hub alongside the existing note-reader server using your Python path and server.py path | ## Common errors and fixes | What goes wrong | The fix | |---|---| | MCP SDK import fails when running check_setup.py | The script prints the ImportError and tells you to run pip install mcp | | read_research is called before any research has been saved | The tool returns: No research findings found. The Researcher agent needs to save research first using the save_research tool | | save_research or save_draft is called with no content | The handler returns: Error: No content provided to save | | A file read or write fails for another reason | The handler catches the exception and returns a message like Error saving research: (the exception text), or Error reading research: (the exception text) | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 6 on Substack →

## More in this section - [Lesson 4: The Three Superpowers of MCP - Tools, Resources, and Prompts](/courses/mcp/lessons/the-three-superpowers-of-mcp-tools-resources-and-prompts/) - [Lesson 5: Build an MCP Server in 30 Minutes](/courses/mcp/lessons/build-an-mcp-server-in-30-minutes/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # The Three Superpowers of MCP - Tools, Resources, and Prompts URL: https://www.genaiunplugged.com/courses/mcp/lessons/the-three-superpowers-of-mcp-tools-resources-and-prompts/ > See how MCP tools, resources, and prompts differ, what each is for, and how to use all three when building an MCP server. MCP servers expose three primitives: tools, resources, and prompts. Tools are actions the AI model decides to invoke, such as send_email or fetch_sales_data, and they require user permission. Resources are read-only data the application supplies, like documents or database results. Prompts are reusable instruction templates the user activates to shape AI behavior. ## What you will be able to do - Identify whether a task needs a tool, a resource, or a prompt using the model-controlled, application-controlled, and user-controlled distinction. - Decide when a workflow step needs explicit user permission (tools) versus when it can run automatically (resources). - Read a tool's JSON Schema definition to see what parameters it accepts, which are required, and what types they expect. - Design a multi-step workflow that chains a resource fetch, a prompt template, and a tool call into one flow. - Explain to a teammate why an MCP prompt behaves differently from a hardcoded system prompt. ## Before you start - Understanding of the MCP Host, Client, Server architecture covered in the previous lesson. - Basic familiarity with JSON Schema concepts such as parameters, required fields, and types. - An MCP-compatible AI application to test tools, resources, and prompts against once you build a server. ## Reference | Primitive | Who controls it | Can modify data | Permission required | Example | Use it when | |---|---|---|---|---|---| | Tool | The AI model decides when to invoke it | Yes | Yes, the host asks the user before running it | send_email(), fetch_sales_data(), create_meeting() | The task has a real-world side effect or needs real-time data | | Resource | The application or user selects it | No, strictly read-only | Generally not, safe to access automatically | Policy documents, database query results, file contents | The AI needs context or background information to answer accurately | | Prompt | The user activates it by choosing a mode | No, guides behavior only | No | "Code Review Mode", "Summarization Template" | You want consistent AI behavior repeated across sessions | ## Common errors and fixes | What goes wrong | The fix | |---|---| | You try to have the AI modify data through a Resource | Resources are read-only by design and cannot make changes. Use a Tool for any action that writes, sends, or deletes something | | A Tool runs without any confirmation step | Since tools can send emails, delete files, or post to social media, the host should always ask "Allow it?" before running one, keeping the user in control | | MCP prompts get treated the same as hardcoded system prompts | System prompts are baked into the application, so changing them means updating the app. MCP prompts live on the server, so updating one instantly benefits every connected AI application | | A tool is defined without a clear JSON Schema | Without a schema describing the inputs, required fields, and types, the AI model has no reliable way to know how to call the tool correctly | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 4 on Substack →

## More in this section - [Lesson 5: Build an MCP Server in 30 Minutes](/courses/mcp/lessons/build-an-mcp-server-in-30-minutes/) - [Lesson 6: Multi-Agent AI Collaboration Tutorial](/courses/mcp/lessons/multi-agent-ai-collaboration-tutorial/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # Give Your AI Agents Memory URL: https://www.genaiunplugged.com/courses/mcp/lessons/give-your-ai-agents-memory/ > MCP Full Course Lesson 7 - MCP shared memory for agents This lesson covers adding persistent memory to MCP-based AI agents using three tools, save_memory, read_memory, and search_memory, backed by a shared JSON file. It lets a Researcher and Writer agent pair store insights, recall past learnings, and build on previous work across sessions instead of starting from zero each time. ## What you will be able to do - Build three MCP memory tools: save_memory, read_memory, and search_memory - Set up a shared JSON file (shared_memory.json) that stores timestamped memory entries both agents can read and append to - Have agents check memory before starting a task and save new learnings after finishing it - Share memory across multiple agents so a Researcher and a Writer learn from each other's notes - Explain the difference between a context window and persistent memory when designing agent systems ## Before you start - A working multi-agent MCP system with a Researcher and Writer agent sharing an MCP server, built in the previous lesson - Basic understanding of how MCP tools are defined and called by agents - A place to store a shared file that both agents can read from and write to ## Reference | Tool/Element | Input | Purpose | When to use | |---|---|---|---| | save_memory | Memory content (text describing what was learned) | Saves content to shared_memory.json with a timestamp | After completing a task, to store new insights | | read_memory | None | Returns all saved memories | Before starting a new task, to check past learnings | | search_memory | Search term (e.g. "writing style") | Returns memories matching that term | When an agent needs focused context on one topic instead of everything | | shared_memory.json | N/A | Single file storing all memory entries; both agents read from and append to it | Acts as the shared filing cabinet for the whole agent team | | Memory record | timestamp, agent, content | JSON structure of each saved entry | Written automatically every time save_memory is called | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Assuming a large context window means the AI remembers past sessions | The context window only covers the current conversation; build a separate memory layer for anything that needs to survive between sessions | | Agents re-research topics and repeat past mistakes every session | Call read_memory before starting work so agents build on what was already learned | | Agents finish a task without recording what they learned | Call save_memory after completing significant work so learnings compound over time | | Reading the entire memory file overwhelms the agent with unrelated information | Use search_memory with a specific term to get focused results instead of reading everything | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 7 on Substack →

## More in this section - [Lesson 8: Building AI Agents That Learn From Experience](/courses/mcp/lessons/building-ai-agents-that-learn-from-experience/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # How MCP Actually Works: Hosts, Clients, and Servers URL: https://www.genaiunplugged.com/courses/mcp/lessons/how-mcp-actually-works-hosts-clients-and-servers/ > MCP architecture and component interaction MCP (Model Context Protocol) architecture splits into three parts: the Host (the app you use, like Claude Desktop or Cursor), the Client (lives inside the Host, translates AI model requests into MCP protocol messages), and the Server (runs the actual tools and returns structured JSON results). This lesson explains how a single request flows through all three. ## What you will be able to do - Trace a user request as it moves through Host, AI model, Client, and Server in an MCP-based application. - Explain the difference between an MCP host, an MCP client, and an MCP server in plain terms. - Identify which transport (STDIO or HTTP+SSE) fits a given MCP server setup, local versus remote. - Distinguish MCP from a REST API when explaining the protocol to someone else. - Recognize the JSON-RPC 2.0 message format underlying every MCP request and response. ## Before you start - Have read the first two lessons in this course: what MCP is, and why it was created (the M x N integration problem). - Be familiar with using a chat-based AI application such as Claude Desktop, ChatGPT, or Cursor. - No coding required for this lesson, it is conceptual. ## Reference | Component | Role | Lives where | Example | |---|---|---|---| | Host | Receives your message, sends it to the AI model, keeps conversation history, shows results, contains the Client | The application you interact with directly | Claude Desktop, Cursor, a voice interface | | AI model | Reads the request and decides what tool or resource is needed | Inside the Host | Decides "I need the summarize_file tool" | | Client | Translates the AI model's tool request into MCP protocol language, sends it to the right Server, passes the reply back | Inside the Host | Built-in MCP client, not something you interact with directly | | Server | Runs the actual tool, resource, or prompt and returns structured data (usually JSON) | Local (on your computer) or remote (in the cloud) | Tools like get_weather, summarize_text, delete_email | | STDIO transport | Local transport: Host launches the server as a child process, messages pass through stdin/stdout, no network needed | Local servers | File readers, code analyzers, local databases | | HTTP + SSE transport | Remote transport: Client sends HTTP requests, Server streams responses back via Server-Sent Events | Remote servers | Remote APIs, shared team servers, cloud services | | JSON-RPC 2.0 | Message format used by both transports: every request has a method name, parameters, and an ID; every response carries a result or an error | Both STDIO and HTTP+SSE | The standardized envelope for all MCP messages | ## Common errors and fixes | What goes wrong (common mix-up) | The fix (what's actually true) | |---|---| | Assuming the Host runs the tools itself | The Host only manages the interface and conversation; the Server is what actually runs the tool | | Confusing the Client with the AI model | The Client only translates requests into MCP protocol language and routes them; the AI model is the one that decides which tool is needed | | Treating MCP like a single point-to-point REST API connection | MCP is a standardized protocol, not one connection: one MCP Client can talk to hundreds of different Servers using the same language | | Expecting to interact with the Client or Server directly | You never talk to the Client or Server yourself, just like you never shout your order at the kitchen; the Host is the only thing you interact with | | Assuming every MCP server uses the same transport | Local servers use STDIO (stdin/stdout, no network); remote servers use HTTP+SSE (works across networks); the choice depends on where the server runs | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 3 on Substack →

## More in this section - [Lesson 1: What is MCP - Model Context Protocol?](/courses/mcp/lessons/what-is-mcp-model-context-protocol/) - [Lesson 2: Why MCP Was Created?](/courses/mcp/lessons/why-mcp-was-created/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # Building AI Agents That Learn From Experience URL: https://www.genaiunplugged.com/courses/mcp/lessons/building-ai-agents-that-learn-from-experience/ > MCP Full Course Lesson 8 - AI agent memory and learning systems Continuous learning for MCP AI agents is the layer that turns stored memories into changed behavior: agents review structured outcome data, calculate success rates per approach, and update behavior rules automatically. It uses in-context learning through memory and reflection, not model retraining or fine-tuning, so any solopreneur can build self-improving agents today. ## What you will be able to do - Store structured outcome data after each task with store_outcome (task type, approach, time taken, success rating, problems encountered) - Run analyze_patterns on the last 10-20 tasks to compare success rates between different approaches - Retrieve current behavioral recommendations with get_learning_insights before starting a new task - Set explicit rules with update_behavior_rules so agents apply what they learned without manual reminders - Share learning insights across multiple agents so a new agent inherits what the others already learned ## Before you start - An MCP server with the memory system from the previous lesson already working (agents that can store and recall memories) - One or more AI agents performing repeatable tasks, such as a Researcher, Writer, or Editor agent - Basic familiarity with adding new tool calls to an MCP server - A batch of completed tasks with varied approaches to generate data for pattern analysis (the lesson's experiment uses 5 to start) ## Reference | Item | What it does | Example | |---|---|---| | store_outcome | Saves structured outcome data: task type, approach used, time taken, success rating, problems encountered | {"task_type": "research", "approach": "developer_blogs", "time_minutes": 15, "success_rating": 9, "problems": "none"} | | analyze_patterns | Reviews the last 10-20 outcomes and compares success rates by approach | "developer_blogs approach has 90% success rate, academic_papers has 40% success rate" | | get_learning_insights | Returns current behavioral recommendations based on the pattern analysis | "Based on 15 recent tasks, prioritize developer blogs for research" | | update_behavior_rules | Stores explicit rules that guide future behavior | "For research tasks: start with developer blogs, use academic papers only for technical validation" | | Success threshold | A task counts as a success in the calculation if its success_rating is 7 or higher | used inside the analyze_patterns success-rate math | | Clear-winner threshold | One approach must beat another by more than 30 percentage points before the system recommends a change | if blog_success > paper_success + 0.3 | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Memories get stored but never analyzed, so the same mistakes repeat (like the runner whose knee keeps hurting despite a perfect training journal) | Add the analysis step: periodically review outcomes with analyze_patterns instead of only recording them | | Outcome data gets saved as free text instead of structured fields | Use store_outcome to save structured fields (task type, approach, time taken, success rating, problems) so patterns can actually be compared | | Periodic analysis gets skipped | Run analyze_patterns after every 5 to 10 tasks so performance does not plateau after initial setup | | Each agent learns in isolation | Share insights across agents with get_learning_insights so a new agent, like an Editor, inherits what the Researcher and Writer already learned instead of starting from zero | | Testing approaches without variation | When running the pattern-tracking experiment, vary the approach used (different source types, different search strategies) across tasks so there is enough contrast to detect a winner | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 8 on Substack →

## More in this section - [Lesson 7: Give Your AI Agents Memory](/courses/mcp/lessons/give-your-ai-agents-memory/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # Build an MCP Server in 30 Minutes URL: https://www.genaiunplugged.com/courses/mcp/lessons/build-an-mcp-server-in-30-minutes/ > Step-by-step tutorial on creating your first MCP server Build an MCP Server in 30 Minutes is a lesson from the MCP Masterclass course that walks through building a Python MCP server with one tool, read_note, and connecting it to Claude Desktop so Claude can read local files. It uses the same server structure found in every MCP server, from simple file readers to database connectors. ## What you will be able to do - Set up a Python virtual environment and install the official MCP SDK with pip install mcp. - Write an MCP server in Python that defines a tool using @server.list_tools() and @server.call_tool(). - Configure Claude Desktop's claude_desktop_config.json with the correct Python and script paths so it can find your server. - Verify a server connection in Claude Desktop's Search and tools menu before testing it. - Ask Claude to call your custom tool inside a real conversation and see it read a local file. ## Before you start - Python 3.8 or newer installed (check with python3 --version). - A code editor such as VS Code, Cursor, or PyCharm. - Claude Desktop installed and signed in with a free or paid Claude account. - About 30 minutes and basic comfort copying code and running terminal commands. ## Reference | Step | Command / Setting | Purpose | |---|---|---| | Create virtual env (macOS/Linux) | `python3 -m venv .venv` then `source .venv/bin/activate` | Isolates project dependencies | | Create virtual env (Windows) | `py -m venv .venv` then `.venv\Scripts\activate` | Isolates project dependencies | | Install SDK | `pip install mcp` | Installs the official Python MCP SDK | | Verify install | `python check_setup.py` | Confirms the MCP imports load without error | | Find Python path | `which python` (macOS/Linux) or `where python` (Windows) | Gets the path to put in the config `command` field | | Open config | Claude Desktop > profile icon > Settings > Developer tab > Edit Config | Opens `claude_desktop_config.json` | | Config keys | `command` (full path to venv python), `args` (full path to server.py) | Tells Claude Desktop how to launch your server | | Confirm connection | Message box > bottom-right Search and tools icon | Shows `note-reader` and its `read_note` tool if connected | ## Common errors and fixes | What goes wrong | The fix | |---|---| | `pip` command not found | Reinstall Python from python.org and check "Add Python to PATH" during install | | `check_setup.py` prints an ImportError | Run `pip install mcp` again while the virtual environment is active | | Windows config path uses single backslashes | JSON needs double backslashes (`\\`) in Windows paths inside `claude_desktop_config.json` | | `read_note` tool returns "File not found in the server directory" | Make sure the file sits directly in the project folder and the filename you send matches it exactly | | Claude Desktop doesn't show the `note-reader` tool after editing the config | Completely quit and restart Claude Desktop, and confirm both the Python path and server.py path in the config are correct | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **MCP Masterclass: Connect AI to Everything**.

Read Lesson 5 on Substack →

## More in this section - [Lesson 4: The Three Superpowers of MCP - Tools, Resources, and Prompts](/courses/mcp/lessons/the-three-superpowers-of-mcp-tools-resources-and-prompts/) - [Lesson 6: Multi-Agent AI Collaboration Tutorial](/courses/mcp/lessons/multi-agent-ai-collaboration-tutorial/) ## Continue the course Browse all lessons in the [MCP Masterclass: Connect AI to Everything](/courses/mcp/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/what-is-mcp-model-context-protocol) to get new lessons in your inbox. --- # The AI Writing System That 3x'd My Content Output URL: https://www.genaiunplugged.com/courses/claude-systems/lessons/the-ai-writing-system-that-3xd-my-content-output/ > 3x content production with consistent quality - Real content workflow implementation This lesson sets up a Claude Projects system for content creation: a brand voice document built from your own writing samples, five copy-paste prompts for newsletters, LinkedIn posts, Twitter threads, blog outlines and email sequences, plus a 3-pass draft-and-polish workflow that cuts writing time from about 60 minutes to 20 minutes per piece. ## What you will be able to do - Build a brand voice document in Claude Projects by uploading 3-5 samples of your best writing and running the extraction prompt. - Generate an 800-1000 word newsletter draft, complete with three subject line options, from a rough topic and bullet points. - Turn a newsletter excerpt into a 150-200 word LinkedIn post formatted with line breaks and an engagement question. - Break a concept into a numbered Twitter thread with each tweet under 280 characters. - Run the 3-pass process (brain dump, draft, polish) to take a piece from idea to finished copy in 15-20 minutes instead of 60. ## Before you start - A Claude Projects account (claude.ai) with access to the Projects feature. - 3-5 pieces of your existing writing (newsletter issues, LinkedIn posts, blog articles, or emails) saved as text files or Google Docs to upload. - Comfort copying prompt templates and filling in the bracketed sections. ## Reference | Template | Use when | Target length / count | Key requirement | |---|---|---|---| | Newsletter Draft Generator | Every time you write your weekly newsletter | 800-1000 words | Output includes 3 subject line options | | LinkedIn Post Creator | Repurposing newsletter content or writing a standalone post | 150-200 words | Hook under 10 words, no emoji bullets, ends with an engagement question | | Twitter Thread Builder | A concept needs step-by-step explanation or a story | 5-7, 8-10, or 12-15 tweets | Each tweet under 280 characters, numbered (1/7, 2/7, etc.) | | Blog Post Outliner | Before writing any blog post over 1500 words | 1500, 2500, or 3500 words | Outline includes suggested word counts per section | | Email Sequence Writer | Building welcome, launch, or re-engagement sequences | 3, 5, or 7 emails | 150-250 words per email, subject lines under 50 characters | | Polish & Punch-up | Final pass after a draft is generated (Pass 3) | Aim to cut draft by 10% | Shows before/after for each changed section | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Draft sounds too formal or generic | Check that the brand voice document is saved in Project Knowledge, and add to the prompt: reference my brand voice more heavily, this sounds too corporate | | Claude keeps forgetting details between chats | You're probably working in the main Claude chat instead of your Project chat. Switch to the Project so it can reference saved knowledge | | Skipping the brand voice document setup step | Every piece comes out generic. Spend the 10 minutes upfront to upload writing samples and generate the voice guide before creating any content | | Typing a one-line generic prompt like "write me a LinkedIn post about productivity" | Use the structured templates instead, which combine format requirements with a reference to the saved brand voice document | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Systems Masterclass**.

Read Lesson 3 on Substack →

## Continue the course Browse all lessons in the [Claude Systems Masterclass](/courses/claude-systems/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/subscribe) to get new lessons in your inbox. --- # My AI Research Assistant That Saves 5 Hours Per Client URL: https://www.genaiunplugged.com/courses/claude-systems/lessons/my-ai-research-assistant-that-saves-5-hours-per-client/ > 5 hrs saved per client on research - Multi-document analysis and competitor intelligence Client Research Assistant is a Claude Projects setup that lets a solo consultant upload competitor sites, industry reports, and client briefs once, then ask questions across all of them in one workspace. Custom instructions format every output the same way, cutting client research from about 5 hours to roughly 30 minutes. ## What you will be able to do - Set up a Claude Project with custom instructions that format competitor analysis, market research, and dashboard outputs consistently. - Upload competitor websites (saved as PDFs), industry reports, and client briefs so Claude can reference them across sessions without re-explaining context. - Run three copy-paste prompts to generate a competitor positioning table, a market trends synthesis, and a client-ready HTML dashboard. - Name research files with a consistent convention so Claude can cite exact sources by filename in its analysis. - Fix common problems such as blank uploaded PDFs, generic outputs, and unstyled dashboard artifacts. ## Before you start - A Claude Pro subscription ($20 per month) to use more than one Project; the free tier gets only one project. - Research materials ready to gather: competitor websites, industry reports, and client briefs, in PDF, TXT, CSV, or DOCX format (under 30MB or 8000x8000 pixels for images, 200K token limit per project). - Optional: the Claude Chrome Extension or the Project's Web Search Tool if you want Claude to pull competitor sites directly instead of manually saving pages as PDF. ## Reference | Component | Setting / Prompt | Purpose | |---|---|---| | Project name | "Client Research Assistant" | Created via Projects > New Project on claude.ai | | Project description | "Multi-document research workspace for client onboarding, competitor analysis, and market research." | Memory aid only, does not affect Claude's responses | | File types accepted | PDF, TXT, CSV, DOCX and more | Up to 200K tokens per project; files under 30MB or 8000x8000 pixels for images | | Naming convention | competitor-[company]-[page-type].pdf / report-[topic]-[year].pdf / client-[company]-brief.pdf | Lets Claude cite exact source files in its analysis | | Prompt 1: Competitor Analysis | Use after uploading 3-5 competitor sites | Outputs positioning summary table, strengths/weaknesses, market gaps, differentiation strategy | | Prompt 2: Market Research Synthesis | Use after uploading industry reports or trend data | Outputs executive summary, key trends with data, ranked opportunities, recommended actions | | Prompt 3: Research Dashboard Generation | Use after analysis is complete | Generates a color-coded HTML artifact for client presentations | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Claude says it can't find information in uploaded files | Reference the exact filename shown in the Project sidebar, e.g. "According to competitor-acme-homepage.pdf" instead of "the Acme file" | | Outputs are too generic or vague | Add specific context to the prompt, e.g. "compare pricing models, target audiences, and value propositions" instead of "analyze competitors" | | Uploaded website PDF appears blank | Use a browser extension like "Print Friendly" to strip navigation and ads before saving as PDF, or copy the page text into a .txt file and upload that instead | | Dashboard HTML doesn't look professional | Ask Claude for a revision directly, e.g. "make the styling more professional with a blue color scheme and larger headers," and it will regenerate the artifact | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Systems Masterclass**.

Read Lesson 5 on Substack →

## Continue the course Browse all lessons in the [Claude Systems Masterclass](/courses/claude-systems/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/subscribe) to get new lessons in your inbox. --- # How to Give Claude Your Brand Voice (And Sound Like You Every Time) URL: https://www.genaiunplugged.com/courses/claude-systems/lessons/how-to-give-claude-your-brand-voice/ > Give Claude your brand voice with style guides, examples, and constraints in Claude Projects, so its output finally sounds like you. Brand voice training in Claude Projects teaches Claude to write in one person's exact tone, sentence rhythm, and vocabulary instead of generic internet writing. It uses a voice analysis prompt, uploaded writing samples in Project Knowledge, and Custom Instructions that Claude references automatically in every chat, cutting editing time on AI drafts by 60-70%. ## What you will be able to do - Analyze 3 to 5 of your own writing samples with a structured prompt to produce a written voice profile covering sentence structure, vocabulary, structure, and quirks - Upload those same samples to a Claude Project's Project Knowledge so Claude references them in every conversation without re-pasting them - Write Custom Instructions that encode tone, sentence length, perspective, formality, and words to never use, applied automatically to every chat in the Project - Reuse a voice-consistent content prompt template to draft LinkedIn posts, newsletter sections, or emails that point Claude back to the saved voice profile and samples - Diagnose output that still sounds formal or generic and correct it with a refinement prompt that references specific samples in Project Knowledge ## Before you start - A Claude account with access to Claude Projects - 3 to 5 pieces of your own best writing (a LinkedIn post, newsletter section, email, or YouTube script/podcast outline) - Comfort pasting a prompt into Claude and editing a template with your own details - Basic understanding of what a system prompt or custom instructions do, since Custom Instructions work the same way ## Reference | Step | Action | Where it happens | |---|---|---| | 1 | Gather 3-5 of your best writing samples (LinkedIn post, newsletter section, email, video script) | Your own files | | 1 | Run the Voice Analysis Prompt against those samples to get a structured voice profile | New chat inside a Claude Project | | 2 | Create a Project and name it "[Your Name] Brand Voice" | claude.ai > Projects > New Project | | 2 | Upload or paste the same samples as separate, clearly named files | Project Knowledge > Add content | | 3 | Paste the Custom Instructions template and fill it in with your voice analysis | Project settings > Custom instructions | | 4 | Use the Voice-Consistent Content Prompt template for each new piece, filling in content type, topic, structure, and length | Any chat inside the trained Project | | Troubleshooting | Run a refinement prompt naming what's wrong (too formal/generic/corporate) and pointing to specific samples | Same Project chat | ## Common errors and fixes | What goes wrong | The fix | |---|---| | AI output sounds generic, professional, and forgettable | Claude defaults to the statistical average of internet writing until it is trained; upload samples and set Custom Instructions so it has a specific voice to follow | | Custom Instructions list style rules but no real samples are uploaded | Output stays vague because rules without examples aren't concrete enough; add the 3-5 writing samples to Project Knowledge | | Writing samples are uploaded but no Custom Instructions are set | Output is inconsistent because examples without explicit rules don't lock in a pattern; write out the Custom Instructions template | | Only banned words/constraints are defined, without rules or examples | Output turns into generic "safe" writing; constraints need to work together with style rules and writing examples, not alone | | Output from a trained Project still reads too formal, generic, or corporate | Run a refinement prompt in the same Project telling Claude what's off (formal/generic/corporate) and pointing it back to specific samples in Project Knowledge | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Systems Masterclass**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 1: Claude Projects 101: Your First Custom AI Assistant](/courses/claude-systems/lessons/claude-projects-101-your-first-custom-ai-assistant/) ## Continue the course Browse all lessons in the [Claude Systems Masterclass](/courses/claude-systems/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/subscribe) to get new lessons in your inbox. --- # Claude Projects 101: Your First Custom AI Assistant URL: https://www.genaiunplugged.com/courses/claude-systems/lessons/claude-projects-101-your-first-custom-ai-assistant/ > Learn how to set up your first Claude Project with persistent context and system prompts. Build a working AI assistant that actually knows your business. Claude Projects is a persistent workspace inside Claude.ai (included with Claude Pro at $20/month, one project available on the free plan) where you upload business documents and write a custom system prompt once. Every new conversation in that project then reads your files and instructions automatically, so Claude already knows your brand voice, services, and audience without re-explaining. ## What you will be able to do - Create a named Claude Project workspace scoped to one specific use case, like content creation or client onboarding, instead of a generic catch-all. - Upload 2-3 business documents (brand voice guide, service descriptions, frameworks, audience notes) so Claude reads them before every response. - Write a custom system prompt with CONTEXT, TONE, OUTPUT FORMAT, and WHAT TO AVOID sections that define Claude's role in that Project. - Test the assistant with prompts that check whether it cites your uploaded documents and stays on-brand without being reminded. - Diagnose and fix common failures, such as Claude ignoring your documents or drifting off-brand, using the troubleshooting fixes in this lesson. ## Before you start - A Claude Pro subscription ($20/month) for full Projects access, or the free plan, which allows one Project. - 2-3 existing business documents ready to upload (brand voice guide, service descriptions, frameworks, audience research, or an intake questionnaire) in TXT, PDF, DOC, DOCX, or Markdown format. - Awareness of the 200K token per-project limit (roughly 150,000 words) so you choose documents you reference constantly rather than uploading everything. ## Reference | Step | Action | Detail | |---|---|---| | 1. Create workspace | Click "Projects" in the left sidebar, then "+ New Project" | Name it for the specific use case (e.g. "Content Creation Assistant"), not "My Project" | | 2. Upload context | Click "Add content" in the Project header | Upload 2-3 key documents; 200K token limit per Project (about 150,000 words); supported formats: TXT, PDF, DOC, DOCX, Markdown | | 3. Write system prompt | Click the settings gear, then "Set custom instructions" | Structure it around four sections: CONTEXT, TONE, OUTPUT FORMAT, WHAT TO AVOID | | 4. Test | Start "New Chat" inside the Project | Ask a business-specific question without naming your uploaded documents; check if Claude cites them on its own | | Pricing | Claude Pro plan | $20/month, Projects included; free plan allows one Project | ## Common errors and fixes | Problem | Fix | |---|---| | Claude ignores your uploaded documents | Add an explicit line to the system prompt: always review uploaded documents before responding, and cite which document was used and quote the relevant section | | Responses don't match your brand voice | Rewrite the brand voice guide to be more specific, for example "write like explaining to a smart friend over coffee, use contractions, keep sentences short, no corporate jargon" instead of vague terms like "friendly and professional" | | Claude forgets context mid conversation | The lesson attributes this to likely hitting the Project's context window limit, which is also why it recommends keeping uploads to 2-3 focused documents within the 200K token limit rather than uploading everything | | Test conversation feels generic or off-brand overall | Edit the system prompt to be more specific about what you want, then rerun the test prompts and check for document citations and consistent tone | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Systems Masterclass**.

Read Lesson 1 on Substack →

## More in this section - [Lesson 2: How to Give Claude Your Brand Voice (And Sound Like You Every Time)](/courses/claude-systems/lessons/how-to-give-claude-your-brand-voice/) ## Continue the course Browse all lessons in the [Claude Systems Masterclass](/courses/claude-systems/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/subscribe) to get new lessons in your inbox. --- # The Claude Code Extension Stack: Commands, Skills, Hooks, and Agents Explained URL: https://www.genaiunplugged.com/courses/claude-code/lessons/the-claude-code-extension-stack-commands-skills-hooks-and-agents-explained/ > Compares Claude Code extension types: CLAUDE.md, commands, skills, hooks, agents, then builds a memory system and 3 custom commands. The Claude Code Extension Stack is a 4-layer system (CLAUDE.md, Skills, Hooks, Agents) that gives Claude Code persistent memory and automated behavior across sessions. This lesson explains what each layer does, when to use it, and walks through building a CLAUDE.md file and two starter skills in about 20 minutes. ## What you will be able to do - Write a CLAUDE.md file using the 5 essential sections: critical rules, project overview, how to work here, what Claude gets wrong, and deeper docs. - Place CLAUDE.md at the correct level, project (.claude/CLAUDE.md), user (~/.claude/CLAUDE.md), or auto memory (~/.claude/MEMORY.md), so project rules override personal ones correctly. - Build a user-invocable skill (SKILL.md with YAML frontmatter) like /quick-audit that runs on demand. - Set disable-model-invocation and user_invocable in a skill's frontmatter to control whether you, Claude, or both can trigger it. - Trim an oversized CLAUDE.md with progressive disclosure, moving task-specific content into separate docs files so Claude stops ignoring buried rules. ## Before you start - Claude Code installed and a project folder open to work in. - Basic comfort reading and writing markdown and YAML frontmatter. - Having completed Lesson 1 (AI Content Multiplication System) helps since this lesson extends that project, though it is not strictly required. ## Reference | Item | Location | Purpose | |---|---|---| | /init | Run in project root | Scans the project and generates a starter CLAUDE.md in about 30 seconds | | .claude/CLAUDE.md | Level 1: project memory | Read every session opened in this project directory; knows architecture, conventions, key files | | ~/.claude/CLAUDE.md | Level 2: user memory | Applies across all projects; personal preferences, name, business context | | ~/.claude/MEMORY.md | Level 3: auto memory | The only memory file Claude Code writes to itself, storing lessons across sessions | | .claude/skills/ (project) or ~/.claude/skills/ (global) | Skill location | Canonical folder for skills; legacy .claude/commands/ still works | | description (frontmatter field) | SKILL.md | Explains the skill to users and tells Claude when to auto-invoke it | | user_invocable: true/false | SKILL.md frontmatter | Controls whether the skill shows in the / menu (default: true) | | disable-model-invocation: true/false | SKILL.md frontmatter | Controls whether Claude can auto-invoke the skill (default: false, meaning Claude can invoke) | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Claude keeps skipping a rule you set (e.g. read files before editing) | The rule is buried in a long CLAUDE.md full of irrelevant content; cut the file to under 200 lines of universally relevant rules | | CLAUDE.md is stuffed with everything (linting rules, task workflows, code snippets, full docs) | Every irrelevant instruction degrades Claude's attention to the rules that matter; move linting to hooks, workflows to separate docs files, and replace code snippets with file:line pointers | | Claude auto-invokes a skill that has side effects, like distributing a draft before it is ready | Set disable-model-invocation: true on that skill so only you can trigger it | | Claude opens a new session with zero memory of the project and you re-explain everything | Create a CLAUDE.md file so project context persists automatically without repeating yourself | | A background-knowledge skill (e.g. legacy API patterns) clutters the / menu as a manual command | Set user_invocable: false so only Claude can invoke it as context, not you as a command | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 2 on Substack →

## More in this section - [Lesson 1: From 3x to 10x: The Content Multiplication Engine](/courses/claude-code/lessons/from-3x-to-10x-the-content-multiplication-engine/) - [Lesson 3: I Connected Claude Code to 5 Tools and Added Automation Hooks, Here is What Changed](/courses/claude-code/lessons/i-connected-claude-code-to-5-tools-and-added-automation-hooks-here-is-what-chang/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # I Connected Claude Code to 5 Tools and Added Automation Hooks — Here is What Changed URL: https://www.genaiunplugged.com/courses/claude-code/lessons/i-connected-claude-code-to-5-tools-and-added-automation-hooks-here-is-what-chang/ > Connect Claude Code to Perplexity, Firecrawl, and Notion via MCP servers, then build 3 automation hooks that enforce standards automatically. This lesson covers connecting Claude Code to external tools using MCP servers (Model Context Protocol) and adding automation hooks. It shows how to set up Perplexity for web search, Firecrawl for web scraping, and Notion for reading a content calendar, plus command hooks that auto-format files, block dangerous commands, and check content quality. ## What you will be able to do - Connect Claude Code to Perplexity, Firecrawl, and Notion through MCP servers so it can search the web, scrape pages, and read a content calendar. - Configure an MCP server with the claude mcp add command, including API keys and environment variables. - Write command hooks that run shell scripts automatically at PreToolUse, PostToolUse, and Stop events. - Block dangerous bash commands such as rm -rf and git push --force before they run, using exit code 2. - Auto-format edited files with Prettier and flag forbidden brand-voice phrases in draft markdown files. ## Before you start - jq installed, for parsing the JSON input hook scripts receive (brew install jq on macOS, sudo apt-get install jq on Linux). - Node.js and npm installed, for the npx commands used in MCP server setup. - prettier installed globally or in the project, for the format-on-save hook. - API keys for Perplexity, Firecrawl, and Notion, plus a Notion integration shared with your content calendar database. ## Reference | Component | Command / Config | What it does | |---|---|---| | Perplexity MCP | `claude mcp add perplexity --env PERPLEXITY_API_KEY=your-key-here -- npx -y @perplexity-ai/mcp-server` | Adds search and reason tools for live web data | | Firecrawl MCP | `claude mcp add firecrawl --url https://mcp.firecrawl.dev/your-api-key/v2/mcp` | Adds firecrawl_scrape, firecrawl_search, firecrawl_map tools | | Notion MCP | `claude mcp add --transport http notion https://mcp.notion.com/mcp` | Lets Claude Code read and check status of content calendar entries | | Verify servers | `/mcp` | Lists connected MCP servers and their available tools | | PreToolUse hook | Fires before any tool runs; exit code 2 blocks the action | Used to stop dangerous bash commands before they execute | | PostToolUse hook | Fires after any tool completes | Used to run Prettier automatically after Edit or Write | | Stop hook | Fires when Claude finishes responding | Used for cleanup or reporting tasks | | Exit codes | 0 = proceed, 2 = block, any other code = warning only | How a hook script communicates its result back to Claude Code | ## Common errors and fixes | What goes wrong | The fix | |---|---| | "command not found: jq" when a hook fires | Install jq: brew install jq (macOS) or sudo apt-get install jq (Linux) | | A CLAUDE.md rule like "always format with Prettier" gets skipped sometimes (in testing, followed 7 of 10 sessions) | Use a PostToolUse hook instead; hooks run every time, CLAUDE.md rules are only suggestions | | The format-on-save hook runs but the file is not formatted | Install prettier in the project or globally (npm install --save-dev prettier or npm install -g prettier); without it the hook skips formatting silently | | Claude Code attempts a destructive command such as git push --force or rm -rf | The block-dangerous.sh PreToolUse hook matches the pattern and exits with code 2, blocking the command and telling Claude Code why | | Claude Code cannot see the Notion content calendar after adding the MCP server | Share the Notion database with the integration you created at notion.so/my-integrations; creating the API key alone is not enough | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 3 on Substack →

## More in this section - [Lesson 1: From 3x to 10x: The Content Multiplication Engine](/courses/claude-code/lessons/from-3x-to-10x-the-content-multiplication-engine/) - [Lesson 2: The Claude Code Extension Stack: Commands, Skills, Hooks, and Agents Explained](/courses/claude-code/lessons/the-claude-code-extension-stack-commands-skills-hooks-and-agents-explained/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # I Built a 3-Agent Research Team in Claude Code (They Run in Parallel While I Write) URL: https://www.genaiunplugged.com/courses/claude-code/lessons/i-built-a-3-agent-research-team-in-claude-code/ > Build a 3-agent research team, researcher, writer, reviewer, that works in parallel with separate context windows inside Claude Code. Claude Code agents let you split one overloaded conversation into specialists, a researcher, a writer, and a reviewer, each with its own context window, tools, and instructions. This lesson covers the agent file format (frontmatter plus markdown body) and how to run agents sequentially or in parallel for content production. ## What you will be able to do - Create custom agent files in .claude/agents/ with YAML frontmatter and a markdown instructions body - Restrict an agent's tools, for example disallowedTools: Write, Edit, so a reviewer can find issues without silently fixing them - Chain agents in a sequential pipeline where the researcher's brief feeds the writer and the writer's draft feeds the reviewer - Run several agent instances in parallel to cut research time roughly in half - Write specific, checklist-style instructions instead of vague ones so an agent's output is actionable, not just a vibe check ## Before you start - Claude Code installed, with basic comfort writing prompts and reading YAML frontmatter - MCP servers already connected, such as Perplexity and Firecrawl, if the researcher agent should reach the web (covered in an earlier lesson) - A brand voice guide or content rules file the writer and reviewer agents can read, such as a brand-config.json or playbook doc - A drafts/ folder or similar location where the writer agent can save output for the reviewer to check ## Reference | Field | What it controls | Example from the lesson | |---|---|---| | name | Agent identifier; the filename becomes the agent name | researcher | | description | How Claude Code decides when to auto-spawn this agent; written like a job posting | "Deep web research on any topic. Searches the web, reads competitor articles, produces research briefs." | | tools | Which tools the agent is allowed to use | WebSearch, WebFetch, Read, Glob, Grep | | disallowedTools | Tools explicitly blocked, used to enforce a role | Write, Edit (blocked on the reviewer so it can't silently fix issues) | | model | Which model the agent runs on | sonnet | | memory | Whether the agent keeps what it learns between sessions | project | | maxTurns | Cap on tool round-trips per run, stops a curious agent from chasing tangents | 20 | | skills | Skill files preloaded into the agent's context at startup | seo-check | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Reviewer agent scores every draft 9/10 and flags zero critical issues | The instructions said "check brand voice" instead of listing every forbidden phrase and every structure rule with pass or fail criteria; write an exhaustive, specific checklist | | Reviewer given Write and Edit access quietly fixes problems instead of reporting them, so the same mistake keeps recurring in later drafts | Set disallowedTools: Write, Edit on the reviewer so it can only surface issues with a location and suggestion | | One long conversation handles research, writing, and review together and forgets the early research by the time it reaches quality checks | Split the work across separate agents, each with its own context window, instead of one generalist conversation | | A researcher agent burns 80+ tool calls chasing one tangent | Set maxTurns to cap the number of tool round-trips per run | | Writer agent wanders off the research brief into its own web searches | Give the writer agent no web tools, only Read, Write, Edit, Glob, Grep, so it stays tied to the brief and brand guide | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 4 on Substack →

## More in this section - [Lesson 5: Claude Code Runs My Content Business While I Create, Here is the Full System](/courses/claude-code/lessons/claude-code-runs-my-content-business-while-i-create-here-is-the-full-system/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # From 3x to 10x: The Content Multiplication Engine URL: https://www.genaiunplugged.com/courses/claude-code/lessons/from-3x-to-10x-the-content-multiplication-engine/ > 3x content production with consistent quality - Real content workflow implementation. Focus: Claude Code batch automation. The Content Multiplication Engine is a command-line system built with Claude Code that turns one source article into 10+ platform-specific pieces: 5 LinkedIn posts, 10 tweets, 3 newsletter sections, and 2 YouTube scripts. Running one command generates everything and organizes it into a content calendar in under 10 minutes. ## What you will be able to do - Run one command (node generate.js source-article.md) to turn a single article into 5 LinkedIn posts, 10 tweets, 3 newsletter sections, and 2 video scripts - Set up the whole system in about 30 minutes by describing your workflow to Claude Code in plain English, without writing code yourself - Match your own writing style in every generated piece by feeding Claude Code a brand-voice.md file containing your past LinkedIn posts, newsletter sections, and tweets - Get a content calendar (calendar/content-calendar.csv) listing publishing date, platform, content type, file location, and status for every generated piece - Reuse the system weekly or monthly, producing a full batch in about 5 minutes once it's built ## Before you start - A Claude account (claude.ai) and an Anthropic API key from console.anthropic.com (starts with "sk-ant-") - Terminal access (Mac Terminal, Windows PowerShell, or Linux terminal) with Node.js installed - A source article, blog post, or transcript saved as a Markdown file - Optional but recommended: 3-5 of your own LinkedIn posts, 2-3 newsletter paragraphs, and 10-15 tweets to paste into brand-voice.md so generated content matches your voice ## Reference | Step | Command / Setting | Detail | |---|---|---| | Install Claude Code | `npm install -g @anthropic-ai/claude-code` | One-time global install | | Get API key | console.anthropic.com > API Keys > Create Key | Key starts with "sk-ant-" | | Set API key (Mac/Linux) | `export ANTHROPIC_API_KEY="your-api-key-here"` | Must be set before running Claude Code | | Set API key (Windows) | `$env:ANTHROPIC_API_KEY="your-api-key-here"` | PowerShell equivalent | | Verify install | `claude --version` | Confirms Claude Code is working | | Start Claude Code | `claude` (inside project folder) | Opens the prompt where you describe what to build | | Generate a batch | `node generate.js source/article-001.md` | Produces 5 LinkedIn posts, 10 tweets, 3 newsletter sections, 2 video scripts, plus a content calendar | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 1 on Substack →

## More in this section - [Lesson 2: The Claude Code Extension Stack: Commands, Skills, Hooks, and Agents Explained](/courses/claude-code/lessons/the-claude-code-extension-stack-commands-skills-hooks-and-agents-explained/) - [Lesson 3: I Connected Claude Code to 5 Tools and Added Automation Hooks, Here is What Changed](/courses/claude-code/lessons/i-connected-claude-code-to-5-tools-and-added-automation-hooks-here-is-what-chang/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # Claude Code Channels: Turn Your Terminal Into a Messaging Hub (Telegram, Discord, Webhooks) URL: https://www.genaiunplugged.com/courses/claude-code/lessons/claude-code-channels-turn-your-terminal-into-a-messaging-hub/ > Set up Claude Code Channels for Telegram and Discord, push webhooks and alerts into your terminal, with security tips and custom channel code included. Claude Code Channels are MCP servers that push outside events, chat messages, webhooks, alerts, into a running Claude Code session so it can reply through the same channel. Available from version 2.1.80, they connect Telegram, Discord, or any webhook-enabled service to your terminal, turning a single-player session into a two-way messaging hub. ## What you will be able to do - Install and run the fakechat plugin to confirm channels work on your machine before touching a real platform - Set up a Telegram bot, pair your own account to it, and lock it down with an allowlist policy - Set up a Discord bot through its OAuth flow, pair it, and lock it down with an allowlist policy - Run Telegram and Discord channels at the same time in one Claude Code session, with replies routed to the correct platform automatically - Write a custom webhook channel server in TypeScript with the MCP SDK so CI, GitHub, or monitoring events reach Claude as they happen ## Before you start - Claude Code v2.1.80 or later, confirmed by running claude --version - claude.ai authentication (Console and API key auth do not support channels); Pro/Max users add the --channels flag, Team/Enterprise users need an admin to set channelsEnabled: true - Bun runtime installed (curl -fsSL https://bun.sh/install | bash) and available in your shell PATH - For custom channels: familiarity with the @modelcontextprotocol/sdk package and a bot token from BotFather (Telegram) or the Discord Developer Portal ## Reference | Task | Command | |---|---| | Install fakechat plugin | /plugin install fakechat@claude-plugins-official | | Start Claude Code with fakechat | claude --channels plugin:fakechat@claude-plugins-official | | Configure Telegram bot token | /telegram:configure | | Lock Telegram to your account | /telegram:access policy allowlist | | Configure Discord bot token | /discord:configure | | Lock Discord to your account | /discord:access policy allowlist | | Run Telegram and Discord together | claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official | | Load a custom channel (dev preview) | claude --dangerously-load-development-channels server:webhook-channel | ## Common errors and fixes | What goes wrong | The fix | |---|---| | "fakechat MCP failed" with a red X after install | Bun isn't in PATH yet; run exec /bin/zsh and source ~/.zshrc (or open a new terminal), then restart Claude Code with the --channels command | | fakechat test won't load in the browser | Port 8787 is already in use by a leftover process; run lsof -i :8787 to check, then lsof -ti :8787 \| xargs kill and restart | | Discord bot can't read message text | "Message Content Intent" under Privileged Gateway Intents was left off when creating the bot; it's easy to miss and must be enabled | | Anyone can message your Claude Code session | Without an allowlist policy, anyone who finds your bot's username can send it messages; run /telegram:access policy allowlist or /discord:access policy allowlist | | Custom channel metadata attribute goes missing | Meta keys must be identifiers (letters, digits, underscores only); keys with hyphens are silently dropped from the tag | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 7 on Substack →

## More in this section - [Lesson 6: Advanced Claude Code: Plugins, SDK, and Building Tools Others Can Use](/courses/claude-code/lessons/advanced-claude-code-plugins-sdk-and-building-tools-others-can-use/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # Claude Code Runs My Content Business While I Create — Here is the Full System URL: https://www.genaiunplugged.com/courses/claude-code/lessons/claude-code-runs-my-content-business-while-i-create-here-is-the-full-system/ > See the full Claude Code content pipeline with real monthly costs, actual time savings, and an honest list of what not to automate. This lesson connects four previously separate Claude Code pieces, CLAUDE.md, skills, agents, and MCP servers, plus hooks and headless mode, into one integrated content pipeline. It covers four skills (/research, /draft, /review, /repurpose), four agents, three hooks, and three headless automation patterns that take a topic from research through drafting, review, and platform-specific repurposing. ## What you will be able to do - Wire CLAUDE.md, skills, agents, MCP servers, hooks, and headless mode into one content pipeline instead of four disconnected pieces. - Build four slash-command skills (/research, /draft, /review, /repurpose) that pass arguments through $ARGUMENTS and route to dedicated agents. - Run the pipeline outside the terminal with claude -p, triggered by cron, an n8n webhook, or a GitHub Action. - Generate platform-specific copy (a LinkedIn post, an X thread, three Substack Notes) from one draft, stopping short of pushing it live. - Apply a slug-derivation convention and an immutability rule so each skill finds the correct upstream file every time, even weeks later. ## Before you start - Claude Code set up and used interactively, ideally having built or reviewed Lessons 1 to 4 (content multiplier, CLAUDE.md/skills/hooks stack, MCP servers, the 3-agent team), since this lesson wires those pieces together rather than building them from scratch. - MCP servers configured for Perplexity and Firecrawl, with Notion optional, since the researcher agent depends on them for live data. - A project CLAUDE.md file that defines file conventions, brand voice rules, and slug derivation logic. - Basic familiarity with cron, n8n, or GitHub Actions if you want to use the headless automation patterns. ## Reference | Skill / setting | What it does | Key detail | |---|---|---| | /research $TOPIC | Researcher agent gathers live data via MCP | Writes drafts/{slug}-research.md | | /draft $TOPIC | Writer agent drafts from the research brief | Looks up drafts/{slug}-research.md using the same slug | | /review | Reviewer agent scores the draft and flags fixes | permissionMode: plan, disallowedTools: Edit | | /repurpose $PATH | Multiplier agent creates platform-specific copy | Writes distribution/{slug}/*.md, does not post or schedule | | acceptEdits permission mode | Auto-approves file edits, still asks for bash commands | Used for trusted pipeline runs | | plan permission mode | Read-only, cannot edit anything | Pinned into the reviewer agent's frontmatter | | block-dangerous.sh hook | Fires on PreToolUse for Bash | Blocks rm -rf and git push --force, regardless of permission mode | | quality-check.sh hook | Fires on PostToolUse | Flags forbidden phrases only on drafts/*-draft.md files over 1,000 words | ## Common errors and fixes | What goes wrong | The fix | |---|---| | quality-check hook fires on every intermediate save, the writer edits to fix the flagged phrase, which triggers the hook again (feedback loop). | Restrict the hook to PostToolUse on drafts/*-draft.md files longer than 1,000 words only, the dual guard described in Layer 5. | | /draft cannot find the right research file, or silently picks the wrong one. | Define slug derivation (lowercase, hyphenate spaces, strip non-alphanumeric, truncate to 60 chars) in CLAUDE.md so /draft always looks for drafts/{slug}-research.md. | | Editing a *-research.md or *-draft.md file after the next stage has already run against it breaks reproducibility across sessions and team members. | Treat those files as immutable. Re-run the upstream skill instead of hand-editing the file. | | The reviewer agent could rewrite the draft it is supposed to be scoring. | Pin permissionMode: plan and disallowedTools: Edit in the reviewer's agent frontmatter, enforced by the system prompt regardless of what the prompt says. | | Assuming acceptEdits or auto-mode permission settings are enough to stop a dangerous command. | Hooks like block-dangerous.sh fire on every Bash PreToolUse regardless of permission mode, so rm -rf and git push --force stay blocked even in acceptEdits. | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 5 on Substack →

## More in this section - [Lesson 4: I Built a 3-Agent Research Team in Claude Code (They Run in Parallel While I Write)](/courses/claude-code/lessons/i-built-a-3-agent-research-team-in-claude-code/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox. --- # Advanced Claude Code: Plugins, SDK, and Building Tools Others Can Use URL: https://www.genaiunplugged.com/courses/claude-code/lessons/advanced-claude-code-plugins-sdk-and-building-tools-others-can-use/ > Package your Claude Code setup as a distributable plugin, run it in CI/CD, and learn the SDK and security model for building tools others use. A Claude Code plugin bundles agents, skills, hooks, and MCP servers into one installable package built around a .claude-plugin/plugin.json manifest. This lesson packages an existing Claude Code setup into a plugin, fixes the three most common breakages (manifest location, hardcoded hook paths, skill namespacing), and covers the three ways to install a plugin. ## What you will be able to do - Package an existing Claude Code setup (agents, skills, hooks, .mcp.json) into a plugin folder with a valid .claude-plugin/plugin.json manifest - Write portable hook commands using ${CLAUDE_PLUGIN_ROOT} instead of a hardcoded absolute path so hooks work on any machine - Test a plugin locally with claude --plugin-dir and iterate using /reload-plugins before publishing it - Install a plugin from the official marketplace, a GitHub repo, or a local directory using the correct plugin marketplace add / plugin install commands - Namespace skill references correctly (for example /content-ops:research) so they do not collide with another plugin's same-named skill ## Before you start - A working Claude Code setup with agents, skills, and hooks already built (the lesson uses the Lesson 5 content-pipeline-scaffold as its example) - Claude Code CLI installed and able to run claude --plugin-dir and the /plugin commands - Comfort editing JSON, for plugin.json and hooks.json - A GitHub repository (or self-hosted git) if you plan to distribute the plugin via that path rather than a local directory ## Reference | Item | Detail | |---|---| | Manifest path | `.claude-plugin/plugin.json`, only this file goes in the hidden folder; only `name` is required | | Hook config | `hooks/hooks.json` needs an outer `"hooks"` wrapper; plain `.claude/settings.json` hook configs do not use this wrapper | | Portable path variable | `${CLAUDE_PLUGIN_ROOT}` resolves to the plugin's install directory; contents written here are wiped on the next version update | | Persistent data variable | `${CLAUDE_PLUGIN_DATA}` resolves to `~/.claude/plugins/data/{plugin-id}/`, and survives version updates | | Local test command | `claude --plugin-dir ./content-ops` loads the plugin in-place without a marketplace | | Reload during dev | `/reload-plugins` picks up edited agent, skill, or hook files without restarting Claude Code | | Marketplace install | `/plugin marketplace add owner/repo-name` registers the marketplace, then `/plugin install @` installs it; pin a version with `@v1.2.0` | | Skill auto-invoke control | Add `disable-model-invocation: true` to a skill's frontmatter so it only runs when the user types it explicitly | ## Common errors and fixes | What goes wrong | The fix | |---|---| | Manifest placed outside `.claude-plugin/`, or other component folders placed inside it | Only `plugin.json` belongs in `.claude-plugin/`; `agents/`, `skills/`, `hooks/`, and `.mcp.json` live at the plugin root and are auto-discovered | | Hook command uses a hardcoded absolute path like `/Users/you/.claude/hooks/format-on-save.sh` | Replace it with `${CLAUDE_PLUGIN_ROOT}/hooks/format-on-save.sh` so it resolves on any machine the plugin installs on | | `hooks.json` is written without the outer `"hooks"` wrapper | Plugin hook configs require the wrapper; omitting it makes hooks silently fail to register | | `version` field is left out of `plugin.json` while distributing via git | Every commit becomes a new version and triggers an update prompt for installed users; set an explicit `version` and bump it intentionally | | Skill referenced as `/research` inside plugin docs or in another skill body | Use the namespaced form `/content-ops:research`, since the un-namespaced name collides with other plugins' skills of the same name | ## Read the full walkthrough The complete lesson, with screenshots and any downloads, is published on Substack as part of **Claude Code Masterclass: Build AI Systems Without Writing Code**.

Read Lesson 6 on Substack →

## More in this section - [Lesson 7: Claude Code Channels: Turn Your Terminal Into a Messaging Hub (Telegram, Discord, Webhooks)](/courses/claude-code/lessons/claude-code-channels-turn-your-terminal-into-a-messaging-hub/) ## Continue the course Browse all lessons in the [Claude Code Masterclass: Build AI Systems Without Writing Code](/courses/claude-code/) course, or subscribe to the [GenAI Unplugged newsletter](https://genaiunplugged.substack.com/p/ai-content-multiplication-system) to get new lessons in your inbox.