by Lucas Peyrin
How it works This workflow automates your initial hiring pipeline by creating an AI-powered CV scanner. It collects job applications through a web form, uses AI to analyze the candidate's CV against your job description, and neatly organizes the results in a Google Sheet. Here’s the step-by-step process: The Application Form:** A Form Trigger provides a public web form for candidates to submit their name, email, and CV (as a PDF). Initial Logging:** As soon as an application is submitted, the candidate's name and email are added to a Google Sheet. This ensures every applicant is logged, even if a later step fails. CV Text Extraction:* The workflow uses *Mistral's OCR** model to accurately extract all the text from the uploaded CV PDF. AI Analysis:* The extracted text is sent to *Google Gemini**. A detailed prompt instructs the AI to act as a hiring assistant, scoring the CV against the specific requirements of your job role and providing a detailed explanation for its score. Structured Output:** A JSON Output Parser ensures the AI's analysis is returned in a clean, structured format, making the data reliable. Final Record:** The AI-generated qualification score and explanation are added to the candidate's row in the Google Sheet, giving you a complete, analyzed list of applicants. Set up steps Setup time: ~15 minutes You'll need API keys for Mistral and Google AI, and to connect your Google account. Get Your Mistral API Key: Visit the Mistral Platform at console.mistral.ai/api-keys. Create and copy your API key. In the workflow, go to the Extract CV Text node, click the Credential dropdown, and select + Create New Credential. Paste your key into the API Key field and Save. Get Your Google AI API Key: Visit Google AI Studio at aistudio.google.com/app/apikey. Click "Create API key in new project" and copy the key. In the workflow, go to the Gemini 2.5 Flash Lite node, click the Credential dropdown, and select + Create New Credential. Paste your key into the API Key field and Save. Connect Your Google Account: Select the Create 'CVs' Spreadsheet node. Click the Credential dropdown and select + Create New Credential to connect your Google account. Repeat this for the Log Candidate Submission and Add CV Analysis nodes, selecting the credential you just created. Create Your Spreadsheet: Click the "play" icon on the Start Here node to run it. This will create a new Google Sheet in your Google Drive named "CVs" with the correct columns. Customize the Job Role: Go to the AI Qualification node. In the Text parameter, find the job_requirements section and replace the example job description with your own. Be as detailed as possible for the best results. Start Screening! Activate the workflow using the toggle at the top right. Go to the Application Form node and click the "Open Form URL" button. Fill out the form with a test application and upload a sample CV. Check your Google Sheet to see the AI's analysis appear within moments
by Ravi Patel
Enterprise AI Outreach Automation Description This n8n template demonstrates how to build a complete AI-powered outbound email system using Google Sheets, Gmail, Gemini, and website scraping. The workflow is designed to help you move from basic lead data to personalized cold outreach without manually researching each company or writing each email yourself. You only need to add a few lead details such as first name, last name, email, and website in your Google Sheet. From there, the workflow scrapes the lead’s website, cleans the text, analyzes the business with Gemini, generates outreach context like pain points and growth signals, creates a six-email sequence, sends the first message, schedules follow-ups, and updates the lead record automatically. The workflow also includes protections for working hours and daily sending limits. It has a separate Gmail reply-monitoring branch that detects responses, marks leads as active or replied, and stops unnecessary future follow-ups by updating the lead sheet. Good to know This workflow uses two Gemini-powered AI steps: one to generate business research from website content and another to generate the six-email sequence, so usage cost will depend on your Gemini plan and token usage. The workflow also depends on website scraping through a Puppeteer node connected to a Browserless endpoint, so you need a working scraping setup before activating the template. It is also built around a Google Sheets structure that stores lead details, email content, send dates, send status fields, thread IDs, notes, and service information. For best results, keep the sheet columns aligned with the workflow mappings before you start using it. How it works A scheduled trigger starts the new lead flow and first passes through a working-hours protection check so emails are only processed during allowed business hours. The workflow reads leads from Google Sheets and filters for rows where the lead status is blank, which means only fresh leads are processed first. The lead website is scraped with Puppeteer, then a code node removes noisy HTML, scripts, duplicate lines, and low-value content so the AI receives cleaner business text. Gemini analyzes the cleaned website text and returns structured data such as company summary, industry, target audience, pain points, growth signals, automation opportunities, email angle, and a personalized opening line. That research is written back to the lead sheet, after which the workflow reads your service data from a separate sheet so the offer can be matched to the lead context. A second Gemini step generates a full six-email sequence, with only Email 1 receiving a subject line and follow-ups designed to be sent in the same Gmail thread. The parsed email content is cleaned and formatted, a random wait is applied before sending, Email 1 is sent through Gmail, and tracking fields such as thread ID, send dates, sent flags, sequence step, and follow-up dates are updated in Google Sheets. A separate scheduled branch handles Email 2 to Email 6 by checking lead status, sequence step, send dates, working hours, and daily limits before sending the next follow-up reply in the existing Gmail thread. Another Gmail Trigger branch monitors replies, extracts reply details, updates the lead record, and marks the lead so follow-ups stop once a response is received. How to use Add new leads to your main Google Sheet with at least First Name, Last Name, Email, and Website. Add your services, offers, or solution descriptions to the services sheet so the workflow can align outreach messaging with what you actually sell. Connect your Google Sheets, Gmail, and Gemini credentials in n8n, and configure your Browserless or Puppeteer scraping setup. Review the mapped sheet columns carefully, especially the fields for subject lines, email bodies, send timestamps, sent-status flags, thread IDs, notes, and sequence steps. Activate the workflow to allow the scheduled lead-processing flow, follow-up flow, and Gmail reply-monitoring flow to run automatically. Requirements Google Sheets account for lead storage, service data, tracking fields, and daily limit control. Gmail account for sending the first email, replying in existing threads, and detecting incoming replies. Gemini account for website analysis and AI email sequence generation. Puppeteer node plus a working Browserless or compatible scraping endpoint for website extraction. Customising this workflow You can adapt this template to different outreach styles by changing the prompts in the “Generate Website Summary” and “Generate Email” nodes. The current setup focuses on B2B personalized outreach with a six-step sequence, but you can easily change the tone, CTA style, email lengths, service positioning, or follow-up intervals to fit agencies, consultants, SaaS founders, recruiters, or niche lead generation campaigns. You can also adjust the sheet logic to support additional statuses, separate campaigns, multiple sender accounts, or different daily sending caps for new emails and follow-ups. Since the workflow already tracks sent counts, send windows, sequence stages, and reply updates, it provides a strong base for scaling into a more advanced outreach system. Optional “Try it out” section Try It Out This n8n template is a complete AI-powered cold email outreach system for teams that want to automate lead research, email writing, follow-up scheduling, and reply tracking. You only need to provide basic lead details in Google Sheets, and the workflow handles the rest automatically. It researches each company website, creates personalized outreach context, generates a full six-email sequence, sends emails through Gmail, updates tracking fields, and stops follow-ups once a reply is detected.
by gotoHuman
💼 Lead Outreach Agent This AI workflow helps you quickly react to new leads with an initial personalized outreach. A great start of your lead nurturing sequence to avoid loosing precious leads that could turn into paying customers. Most importantly it uses gotoHuman so you can review the AI-analysis and the AI-generated editable email draft before it is sent out in your name. How it works We receive a new form submission incl. the email address and company name of the prospect and extract the website URL from the address. We proceed only for company email addresses. We scrape the website using Firecrawl and summarize it with OpenAI Our AI agent runs an analysis based on the lead information and documents describing our own company and the defined Ideal Customer Profiles. It also fetches previously approved examples from gotoHuman so you're effectively creating a self-learning agent. It responds with the analysis and the drafted outreach email. Human Approval in gotoHuman. Allows editing the drafted email. We can now send our email including any edits made during the review and be sure that we are using high-quality content instead of AI slop. How to set up Most importantly, install the gotoHuman node before importing this template! (Just add the node to a blank canvas before importing) Set up your credentials for the different services In gotoHuman, select and create the pre-built review template "Lead Outreach Agent" or import the ID: T873fI1Xli5nt3eh33Rj Select this template in the gotoHuman node Requirements You need accounts for gotoHuman (Human Supervision) OpenAI (AI Agent) Typeform (Lead Form Submissions) Firecrawl (Website Scraping) Gmail Google Docs (Company Wiki) How to customize Replace the Typeform trigger with any other way you might receive or find new leads Provide the AI Sales Agent with more context to properly analyze the lead and create better personalized emails. Consider adding tools that allow the agent to fetch more infos about the prospect's company or personal profile, or to find out more about your specific product/service offerings and how your sales pitches look like.
by Khairul Muhtadin
Automatically extract job listings from any website URL, format them with AI, and publish directly to WordPress. Just send a URL via Telegram, and watch as the workflow scrapes the job details, enhances the content with GPT, and creates a polished post on your site. 💡 Why Use Job Repost? ⏰ Save countless hours Automatically extract, process, and publish job offers from any website, freeing your time from repetitive tasks. ✅ Eliminate human errors Say goodbye to typos and missed fields — every job post is validated before going live. 📈 Boost engagement Fresh, well-structured job listings attract more candidates, improving your site's reach and authority. 🚀 Stay ahead Leveraging AI with GPT means your content is not just automated but polished and SEO-friendly — the digital assistant you never knew you needed. ⚡ Perfect For Job board managers:** Want to aggregate listings from multiple sources with minimal effort Recruiters & HR teams:** Who need to streamline job posting workflows without technical hassles Content creators & marketers:** Looking to automate publishing while maintaining style and SEO standards 🔧 How It Works | Step | Process | Description | |------|---------|-------------| | 📱 | Trigger | Send a job URL via Telegram bot to initiate the process | | 🔥 | Extract | Firecrawl API scrapes and extracts clean content from the provided URL | | 📎 | Process | Job data is extracted via AI, text split and cleaned, job categories and types mapped to your system | | 🤖 | Smart Logic | GPT crafts formatted job posts, intelligent validation ensures all key data is present, default values fill in the blanks if necessary | | 💌 | Output | Posts automatically published to WordPress with company logos uploaded, and success or error notifications sent via Telegram | | 🗂 | Storage | Uses Supabase vector store for managing document embeddings, ensuring quick lookup and reference compliance | 🔐 Quick Setup Import the provided JSON file into your n8n instances Add credentials: Firecrawl API key Google Drive OAuth2 (for RAG storage) OpenAI API WordPress API Telegram API Supabase Customize: Telegram bot token WordPress URLs Default images and category mappings if needed Update: URLs and API tokens where placeholders are used Test: Send a job URL to your Telegram bot to verify accurate extraction and posting 🧩 You'll Need ✅ Active n8n instances ✅ Firecrawl account with API access ✅ Google Drive account for RAG document storage ✅ OpenAI account with GPT API access ✅ WordPress site with autojob plugin and API enabled ✅ Telegram bot for URL submission and notifications ✅ Supabase account for vector store management 🛠️ Level Up Ideas 🌍 Add multi-language support to expand global reach 🔗 Support batch URL processing for multiple jobs at once 💬 Integrate Slack or email notifications for wider team alerts 🎯 Use more AI nodes to summarize or rate job offers for quality control 🔄 Schedule periodic cleanup of vector store for performance optimization 📊 Add analytics tracking for published jobs performance 🧠 Nodes Used Core Components: Firecrawl HTTP Request** (Web scraping and content extraction) Google Drive** (RAG document storage) Supabase Vector Store** OpenAI** (Embeddings, GPT Extraction) Code Nodes** for mapping categories Telegram Trigger & Message** HTTP Request** (for WordPress API and image uploads) Made by: Khaisa Studio Tags: automation recruitment job-posting wordpress AI web-scraping firecrawl Category: Human Resources, Recruitment, Wordpress, Scrapping Need a custom? contact me on LinkedIn or Web
by Trung Tran
Decodo Scraper API Workflow Template (n8n Automation Amazon Book Purchase Report) Watch the demo video below: > This workflow demos how to use Decodo Scraper API to crawl any public web page (headless JS, device emulation: mobile/desktop/tablet), extract structured product data from the returned HTML, generate a purchase-ready report, and automatically deliver it as a Google Doc + PDF to Slack/Drive. Who’s it for Creators / Analysts** who need quick product lists (books, gadgets, etc.) with prices/ratings. Ops & Marketing teams** building weekly “top picks” reports. Engineers** validating the Decodo Scraper API + LLM extraction pattern before scaling. How it works / What it does Trigger – Manually run the workflow. Edit Fields (manual) – Provide inputs: targetUrl (e.g., an Amazon category/search/listing page) deviceType (desktop | mobile | tablet) Optional: maxItems, notes, reportTitle, reportOwner Scraper API Request (HTTP Request → POST) Calls Decodo Scraper API with: URL to crawl, headless JS enabled Device emulation (UA + viewport) Optional waitFor / executeJS to ensure late-loading content is captured HTML Response Parser (Code/Function or HTML node) Pulls the HTML string from Decodo response and normalizes it (strip scripts/styles, collapse whitespace). Product Analyzer Agent (LLM + Structured Output Parser) Prompts an LLM to extract structured “book” objects from the HTML: The Structured Output Parser enforces a strict JSON schema and drops malformed items. Build 📚 Book Purchase Report (Code/LLM) Converts the JSON array into a Markdown (or HTML) report with: Executive summary (top picks, average price/rating) Table of items (rank, title, author, price, rating, link) “Recommended to buy” shortlist (rules configurable) Notes / owner / timestamp Configure Google Drive Folder (manual) Choose/create a Drive folder for output artifacts. Create Document File (Google Docs API) Creates a Doc from the generated Markdown/HTML. Convert Document to PDF (Google Drive export) Exports the Doc to PDF. Upload report to Slack Sends the PDF (and/or Doc link) to a chosen Slack channel with a short summary. How to set up 1 Prerequisites n8n** (self-hosted or Cloud) Decodo Scraper API** key OpenAI (or compatible) API key** for the Analyzer Agent Google Drive/Docs** credentials (OAuth2) Slack** Bot/User token (files:write, chat:write) 2 Environment variables (recommended) DECODO_API_KEY OPENAI_API_KEY DRIVE_FOLDER_ID (optional default) SLACK_CHANNEL_ID 3 Nodes configuration (high level) Edit Fields (Set node) Scraper API Request (HTTP Request → POST) HTML Response Parser (Code node) Product Analyzer Agent Build Book Purchase Report (Code/LLM) Create Document File Convert to PDF Upload to Slack Requirements Decodo**: Active API key and endpoint access. Be mindful of concurrency/rate limits. Model**: GPT-4o/4.1-mini or similar for reliable structured extraction. Google**: OAuth client (Docs/Drive scopes). Ensure n8n can write to the target folder. Slack**: Bot token with files:write + chat:write. How to customize the workflow Target site: Change targetUrl to any **public page (category, search, or listing). For other domains (not Amazon), tweak the LLM guidance (e.g., price/label patterns). Device emulation**: Switch deviceType to mobile to fetch mobile-optimized markup (often simpler DOMs). Late-loading pages**: Adjust waitFor.selector or use waitUntil: "networkidle" (if supported) to ensure full content loads. Client-side JS**: Extend executeJS if you need to interact (scroll, click “next”, expand sections). You can also loop over pagination by iterating URLs. Extraction schema**: Add fields (e.g., discount_percent, bestseller_badge, prime_eligible) and update the Structured Output schema accordingly. Filtering rules**: Modify recommendation logic (e.g., min ratings count, price bands, languages). Report branding**: Add logo, cover page, footer with company info; switch to HTML + inline CSS for richer Docs formatting. Destinations**: Besides Slack & Drive, add Email, Notion, Confluence, or a database sink. Scheduling: Add a **Cron trigger for weekly/monthly auto-reports.
by Incrementors
Quick overview This workflow checks Gmail for emails with PDF invoice attachments, saves each PDF to a month-based Google Drive folder, uses OpenAI to extract key invoice fields, and appends qualifying invoices to a month-named tab in Google Sheets. How it works Triggers hourly from Gmail (or can be run manually to backfill a date range) and downloads email attachments. Filters out emails from unwanted senders and extracts only PDF attachments from each message. Finds the current month’s folder in Google Drive, then uploads each PDF and builds shareable file and folder links. Extracts text from the PDF and sends it to an OpenAI-powered agent that returns structured invoice fields as strict JSON, retrying with an auto-fixing parser when needed. Checks whether Sales Tax or VAT is present and appends the invoice details (including PDF URL and Drive folder link) to a Google Sheets tab named for the current month. Waits briefly and continues processing the next PDF attachment. Setup Connect Gmail, Google Drive, and Google Sheets credentials, and add an OpenAI API key for both OpenAI chat model connections. Update the Google Sheets document ID and ensure the target spreadsheet has columns that match the mapped fields (Company Name, Invoice Number, taxes, totals, links, and capture date). In Google Drive, set the parent folder ID in the Drive search step and create monthly subfolders named like YYYY-MM (for example, 2026-04). Edit the unwanted sender filter (or disable it) to match the email addresses you want to ignore.
by Zain Khan
Quick Overview This workflow monitors a Gmail inbox for resume attachments, sends them to Parseur for data extraction, uses Groq (LLM) to generate an AI fit score, then uploads the original resume to Google Drive and appends or updates a candidate tracker in Google Sheets. How it works Polls Gmail every minute for new emails that include PDF/DOC/DOCX resume attachments. Downloads the email and its attachment and submits the resume file to Parseur for parsing. Waits briefly, then calls the Parseur API to fetch the latest parsed document metadata and download the extracted candidate fields as JSON. Skips processing if the extracted “Candidate Name” field is empty. Builds a standardized base filename and document ID from the extracted candidate fields and uses Groq to generate a 1–10 fit score for the role. Downloads the original resume from Parseur, uploads it to Google Drive, and writes the candidate details, fit score, and Drive link to a Google Sheets tracker (append or update by email). Setup Connect Gmail OAuth credentials and confirm the Gmail search query targets the inbox/labels you use for applications. Set up Parseur (with the same parserId used in the workflow) and add Parseur API authentication headers for the HTTP requests. Add Groq credentials for the LangChain Groq chat model used to generate the fit score. Connect Google Drive and Google Sheets OAuth credentials, then select the target Drive folder and update the spreadsheet/sheet where candidates are logged. Ensure your Parseur template outputs the expected fields (for example Candidate Name, Email, Phone, Position Applied For, Years of Experience, Key Skills, and DocumentURL) so the validation, naming, and sheet mapping work correctly.
by ayo.o
Quick overview This workflow accepts invoice files via a Telegram bot, extracts text with OCR.space, uses OpenAI to turn the OCR output into structured invoice fields, appends the data to Google Sheets, archives the original file in Google Drive, and sends a confirmation message back to Telegram. How it works Triggers when a user sends an invoice image (JPG/PNG) or PDF to your Telegram bot. Downloads the file from Telegram, detects its MIME type, and continues only for JPG, PNG, or PDF invoices. Sends the invoice file to OCR.space to extract the raw text content. Uses OpenAI to convert the OCR text into structured invoice JSON and validates the output against a predefined schema. Formats item lines into newline-separated fields and appends the invoice details to a Google Sheets worksheet. Uploads the original invoice file to a specified Google Drive folder and generates a short confirmation message with key details and your database link. Sends the confirmation message back to the same Telegram chat. Setup Create a Telegram bot, add the Telegram credentials in n8n, and start a chat with the bot so it can receive messages. Add an OCR.space API key using HTTP Header Auth credentials and connect it to the OCR request step. Add OpenAI API credentials for the model used to extract structured invoice data and write the confirmation message. Connect Google Sheets and Google Drive OAuth credentials, then set the Google Sheet ID and Drive folder ID in the workflow variables. Create a Google Sheet (for example, “Sheet1”) with the required column headers used by the append step and update the sheet name if different. Set the invoice database link in the workflow variables so it can be included in the Telegram confirmation. Requirements Telegram Bot (created via BotFather) OpenAI API key OCR.space API key (free tier available at ocr.space) Google Sheets OAuth2 credentials Google Drive OAuth2 credentials
by Incrementors
Description Submit your carousel topic, brand name, target audience, tone, and number of content slides via a simple form and the workflow generates a complete LinkedIn carousel PDF automatically. GPT-4o-mini returns a structured JSON array of slides — title slide, content slides with 3 bullet points each, and a CTA slide — which are assembled into a full branded HTML document with dark gradient backgrounds, slide number badges, and a swipe prompt, then converted into a square-format PDF at 1080×1080px per slide. The PDF is uploaded to Google Drive, logged to Google Sheets with the Drive link, and emailed to you with step-by-step LinkedIn posting instructions. Built for LinkedIn creators who want a fully formatted, ready-to-upload carousel PDF in minutes without designing slides manually. What This Workflow Does Generates structured slide content in pure JSON** — GPT-4o-mini produces a title slide, content slides with exactly 3 bullet points each, and a CTA slide as a validated JSON array — not free text Converts content to a branded square-format PDF** — Each slide is rendered as a 1080×1080px page with dark gradient backgrounds, slide number badges, and your brand name in the footer Adds a swipe prompt on the title slide** — A "Swipe →" label is automatically added to the title slide so viewers know to scroll through the carousel Uploads the finished PDF to Google Drive** — The PDF is saved with a structured filename including the topic and date — for example linkedin-carousel-seo-mistakes-2025-05-18.pdf Logs every carousel run to Google Sheets** — Topic, brand name, slide count, file name, Drive link, Drive file ID, PDF size, and generation timestamp are saved per run Sends a delivery email with posting instructions** — A styled HTML email arrives in your inbox with the Drive link and a 4-step guide on how to post the carousel on LinkedIn Setup Requirements Tools Needed n8n instance — self-hosted only (the PDF generation step requires installing an npm package on your n8n server — see step 1 below) OpenAI account with GPT-4o-mini API access Google Drive (one folder for carousel PDFs) Google Sheets (one sheet with a tab named Carousel Log) Gmail account Credentials Required OpenAI API key Google Drive OAuth2 Google Sheets OAuth2 Gmail OAuth2 > ⚠️ This workflow requires a self-hosted n8n instance. The PDF generation step uses html-pdf-node, an npm package that must be installed on your n8n server. This cannot be done on n8n Cloud. If you use n8n Cloud, the PDF step will fail. Estimated Setup Time: 25–30 minutes Step-by-Step Setup Install html-pdf-node on your n8n server — This is required before anything else. Run this command on your server: Standard install: npm install html-pdf-node Docker install: docker exec -it n8n npm install html-pdf-node After installing, restart your n8n instance for the package to be available Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import Connect OpenAI — Open node OpenAI — GPT-4o-mini Model → click the credential dropdown → add your OpenAI API key → test the connection Get your Google Drive folder ID — Open your target Google Drive folder in a browser → the folder ID is the string at the end of the URL after /folders/ Connect Google Drive — Open node 6. Google Drive — Upload PDF → click the credential dropdown → add Google Drive OAuth2 → authorize access → replace YOUR_GDRIVE_FOLDER_ID in the folder field with your actual folder ID Create your Google Sheet tab — Open your Google Sheet → add a tab named exactly Carousel Log → add these 9 column headers in row 1: Date, Topic, Brand Name, Slide Count, File Name, Drive Link, Drive File ID, PDF Size (bytes), Generated On Get your Google Sheet ID — Open your Google Sheet in a browser → copy the string between /d/ and /edit in the URL Connect Google Sheets — Open node 7. Google Sheets — Log Carousel → replace YOUR_GOOGLE_SHEET_ID with your actual Sheet ID → click the credential dropdown → add Google Sheets OAuth2 → authorize access Set your email address — Open node 8. Gmail — Email PDF to You → replace YOUR_EMAIL_ADDRESS in the Send To field with your actual email address Connect Gmail — Open the same node 8. Gmail — Email PDF to You → click the credential dropdown → add Gmail OAuth2 → complete the Google authorization flow Customize your brand color (optional) — Open node 4. Code — Build HTML Slides → find the BRAND SETTINGS section near the top of the code → replace #0A66C2 in BRAND_COLOR with your own hex color code Activate the workflow — Toggle the workflow to Active → copy the Form URL from node 1. Form — Carousel Topic + Details → open it in a browser to submit your first carousel How It Works (Step by Step) Step 1 — Form: Carousel Topic + Details You open the form URL and fill in five fields: the carousel topic (e.g. "5 SEO mistakes beginners make"), your name or brand, the target audience, the tone (e.g. Professional, Motivational, Educational), and the number of content slides you want (recommended: 4 to 7). Submitting the form starts the full pipeline. Step 2 — AI Agent: Generate Slide Content GPT-4o-mini receives the topic, audience, tone, and slide count. The system prompt instructs it to return ONLY a valid JSON array — no text before or after, no markdown backticks. The array contains one title slide object, the requested number of content slide objects (each with a headline, one emoji, an empty subtitle, and exactly 3 bullet points), and one CTA slide object with a follow prompt and a comment-baiting question. Each slide has a type field set to "title", "content", or "cta". Step 3 — Code: Parse Slides JSON The AI output is cleaned of any accidental markdown code fences and parsed as a JSON array. If parsing fails, the step throws a clear error showing the first 300 characters of the output for debugging. If the array is empty or missing, another error is thrown. The topic, brand name, audience, and tone from the form are also extracted and packaged alongside the slides array. Step 4 — Code: Build HTML Slides Each slide in the array is converted to a full-height HTML div at 1080×1080px with a dark gradient background using your brand color. Content slides get a numbered badge in the top-right corner. The title slide gets a "Swipe →" label at the bottom-right. All slides get a brand name label at the bottom-left. Content slides render the 3 bullet points as a list with circular checkmark icons. All styles are inline so the HTML is fully self-contained. A complete HTML document wrapping all slide divs is returned alongside a structured filename built from the topic and today's date. Step 5 — Code: Generate PDF The html-pdf-node npm package is called with the full HTML string. The PDF is generated at 1080×1080px per page with no margins and printing backgrounds enabled. The resulting PDF buffer is converted to base64 and returned as binary data alongside the filename, slide count, topic, brand name, and PDF file size in bytes. Step 6 — Google Drive: Upload PDF The PDF binary is uploaded to your specified Google Drive folder using the structured filename from step 4. Google Drive returns the file's ID and other metadata. Step 7 — Google Sheets: Log Carousel One row is appended to your Carousel Log tab with all 9 columns. The Drive Link is constructed directly from the file ID as https://drive.google.com/file/d/FILE_ID/view so every row has a clickable link immediately. Step 8 — Gmail: Email PDF to You A styled HTML email is sent to your address with the carousel topic, slide count, filename, and a clickable "Open in Google Drive" link. A blue callout box at the bottom of the email shows the 4-step LinkedIn posting process: download the PDF from Drive, go to LinkedIn, create a post, add the PDF as a document, add your caption, and post. Key Features ✅ Pure JSON output from GPT — GPT is instructed to return only a JSON array — making the output directly parseable without regex extraction and producing consistent slide structures every time ✅ Slide count badge auto-numbered — Content slides automatically get a numbered circle badge in the top-right corner showing which slide number it is — no manual numbering needed ✅ Swipe prompt on title slide — The first slide automatically gets a "Swipe →" label so LinkedIn viewers know to scroll through — this is a standard carousel best practice ✅ Brand color applied globally — Change one value in the code and the entire PDF reflects your brand color across all backgrounds and gradients ✅ Filename includes topic and date — Files are named linkedin-carousel-[topic]-[date].pdf so your Drive folder stays organized and searchable ✅ PDF size logged in bytes — The sheet log records the exact file size so you can monitor output consistency and catch any generation issues ✅ LinkedIn posting instructions in every email — The delivery email includes a 4-step posting guide so anyone on your team can upload the carousel without knowing how LinkedIn document posts work Customisation Options Change the brand color — In node 4. Code — Build HTML Slides, find const BRAND_COLOR = '#0A66C2' in the BRAND SETTINGS section at the top and replace the hex code with your own brand color — the change applies to all slide backgrounds and gradients. Change the slide layout font — In the same BRAND SETTINGS section of node 4. Code — Build HTML Slides, change const FONT = 'Arial, sans-serif' to any web-safe font — for example 'Georgia, serif' for a more editorial look or 'Verdana, sans-serif' for a cleaner style. Add your topic to the topic emoji map — In node 10. Code — Build HTML Email (note: this is in the News Digest workflow — for the carousel, the emoji is generated by GPT per slide) — if you want to control which emoji appears on each slide type, add instructions to the GPT system prompt in node 2. AI Agent — Generate Slide Content. Send to a Slack channel when a carousel is ready — After node 8. Gmail — Email PDF to You, add a Slack step that posts the carousel topic, slide count, and a direct Drive link to a #content-team channel so your team is notified without checking email. Increase the slide bullet point count — In the system prompt of node 2. AI Agent — Generate Slide Content, change Exactly 3 bullet points per content slide to a different number — for example 4 or 5 — and update the bullet point rendering in node 4. Code — Build HTML Slides accordingly. Troubleshooting PDF generation failing with a module not found error: Confirm html-pdf-node was installed on the same n8n server instance running this workflow — run npm install html-pdf-node again if unsure For Docker: run docker exec -it n8n npm install html-pdf-node and restart the container — the package must be installed inside the container, not on the host machine Check the exact error message in the execution log of node 5. Code — Generate PDF — a "Cannot find module" error confirms the package is not installed; any other error may point to a specific HTML rendering issue GPT returning a JSON parse error: Check the execution log of node 3. Code — Parse Slides JSON — it shows the first 300 characters of the raw GPT output, which helps identify whether GPT added text outside the JSON array If GPT added markdown fences despite instructions, the parse step strips them — but if it added a preamble sentence, parsing will still fail; try rerunning the form Confirm the OpenAI API key in node OpenAI — GPT-4o-mini Model is valid and your account has credits Form submission not starting the workflow: Confirm the workflow is Active — inactive workflows do not receive form submissions Copy the Form URL fresh from node 1. Form — Carousel Topic + Details after activating Make sure all five fields are filled in — all are required Google Drive upload failing: Confirm the Google Drive OAuth2 credential in node 6. Google Drive — Upload PDF is connected and not expired — re-authorize if needed Confirm YOUR_GDRIVE_FOLDER_ID is replaced with just the folder ID from the URL — not the full Drive URL If the PDF generation step returned an empty or failed binary, the upload will also fail — check the execution log of step 5 first Google Sheets not logging or Gmail not sending: Confirm YOUR_GOOGLE_SHEET_ID in node 7. Google Sheets — Log Carousel is replaced with your actual Sheet ID and the tab is named Carousel Log exactly Confirm YOUR_EMAIL_ADDRESS in node 8. Gmail — Email PDF to You is replaced with a valid email address and the Gmail OAuth2 credential is connected Support Need help setting this up or want a custom version built for your team or agency? 📧 Email: info@incrementors.com 🌐 Website: https://www.incrementors.com/
by Ruth Aju
Quick Overview This workflow generates a personalized freelance proposal from a Tally form submission, using OpenAI to extract text from screenshots and write the proposal, SerpAPI to pull proposal examples, Google Sheets to reference past projects, pdf.co to create a PDF, and Gmail to email it to the submitter. How it works Triggers when a new submission is received from a Tally form. Detects whether the submission contains a job screenshot and, if so, uses OpenAI (GPT-4o Vision) to extract the job description text; otherwise it uses the typed job description. Searches Google via SerpAPI for proposal examples based on the submitted job title and compiles relevant snippets. Combines the job title, job description, and example snippets into a single prompt payload for proposal writing. Uses an OpenAI agent that first looks up relevant past projects from Google Sheets and then generates a proposal and a short email body as HTML inside a JSON response. Converts the proposal HTML to a PDF using the pdf.co API, downloads the generated file, and emails it with Gmail to the address provided in the form. Setup Create a Tally form with job title, job description, optional job screenshot upload, and email fields, then set the Tally Form ID and replace all YOUR_*_FIELD_ID placeholders with your actual Tally field IDs. Add OpenAI credentials for both the image text extraction step and the proposal-generation agent, and update the OWNER BIO section in the agent prompt with your real profile details. Add a SerpAPI credential. Create a Google Sheets spreadsheet containing your past projects and connect a Google Sheets credential, then set the spreadsheet ID and sheet/tab used by the “get_relevant_projects” tool. Create a pdf.co account and add an HTTP Header Auth credential that sends your x-api-key header, and confirm the PDF conversion endpoint is reachable. Connect a Gmail OAuth2 credential and confirm the workflow can send emails to the recipient address captured from the Tally form.
by Rahul Joshi
Quick overview This workflow watches Gmail for incoming order emails, extracts structured order and line-item data using OpenAI (vector stores and GPT-4o-mini), then exports the results as CSV files to Google Drive and logs each order to Google Sheets. How it works Triggers every minute on new Gmail messages and routes emails based on MIME type to handle messages with attachments versus other formats. For attachment-based orders, downloads attachments from Gmail, uploads them to OpenAI Files, creates an OpenAI vector store, and attaches the uploaded files to it. Polls OpenAI until vector store file processing completes, then asks GPT-4o-mini (with file search against the vector store) to extract order header details and all line items as structured JSON. Splits the extracted items into individual rows, converts the structured output into a CSV, and uploads the CSV to a specified Google Drive folder. If the AI extraction indicates an error, calls the OpenAI Chat Completions API as a fallback to parse the order from the available content, converts the parsed items to CSV, uploads the CSV to Google Drive, and logs the order link and customer/order fields to Google Sheets. In a second pipeline, triggers on forwarded iPaper order emails in Gmail, parses the email text with custom logic to extract customer details and line items, converts them to CSV, uploads the CSV to Google Drive, and appends an order log row to Google Sheets. Setup Add Gmail OAuth2 credentials and adjust the Gmail trigger filters/labels/subjects to match the order emails you want to process (including forwarded iPaper messages). Add an OpenAI API credential for the OpenAI Files, vector stores, and Chat Completions API requests used for extraction and fallback parsing. Add Google Drive OAuth2 credentials and replace YOUR_DRIVE_FOLDER_ID in each Google Drive upload step with your target folder. Add Google Sheets OAuth2 credentials and replace YOUR_GOOGLE_SHEET_ID and the sheet/tab reference so the Append Row steps write to your intended spreadsheet. Ensure your Google Sheet has columns matching the workflow’s appended fields (for example name, email, phone, address/county, Order REF, PO Number, Order Date, and Google File Link).
by Tom
This workflow parses content from a website (for this example, Baserow's release page) and creates an RSS feed based on the extracted data. Prerequisites Some familiarity with HTML and CSS selectors Nodes Webhook node triggers the workflow when new content (a new Baserow release) is published on a website. Set nodes set the required URLs and links for the RSS feed. HTTP Request node fetches data from a specified website page. HTML Extract nodes extract the posts and their fields (such as date, title, description, and link) from the website. Item Lists node iterates over each post on the page. Date & Time node converts the date of the post to a different format. Function Item node creates RSS items for each post. Function node creates the response code for the RSS feed. Respond to Webhook node returns the RSS feed in response to the Webhook node. The result of this workflow would look like this: