by FlyCode
⚙️ Automated Stripe Failed Payment Recovery (with Postmark + AI Email Generator) Recover failed Stripe subscription payments with AI-personalized emails sent via Postmark. 📝 Template Description Recover failed subscription payments automatically with Stripe, Postmark, and AI. This workflow listens for Stripe invoice.payment_failed webhooks, checks that the event is related to an auto-charged subscription, and then automatically sends a personalized email (generated with AI) to the customer. The email is polite, branded, but also urgent — encouraging the customer to pay quickly and avoid service cancellation. 🛠️ How it works 📣 Webhook Listens for Stripe webhook events. Make sure to connect it in your Stripe dashboard (see setup below). 🧹 Filter (Guard) Ensures the event is indeed an invoice event and filters out unrelated webhooks. 💡 Code Node Extracts useful fields (firstName, lastName, customer email, amount, currency, invoice number, hosted invoice URL, subscription description, account name). ✅ If Node Verifies that: Event type = invoice.payment_failed Billing reason = subscription_cycle Collection method = charge_automatically 👉 This ensures only recurring subscription invoices with auto-payment are processed. 🤖 AI Agent + OpenAI Generates a ready-to-send email JSON (to, subject, HTML body) using the extracted Stripe data. ✍️ You can customize the prompt here to match your brand’s tone of voice and style. 🧩 Code Parser Parses the AI model’s JSON output into fields (to_email, email_subject, email_body). 📧 HTTP Request (Postmark) Sends the email using Postmark’s API. You’ll need your own Postmark Server Token, From address, and Message Stream. 🚀 Setup Instructions 1. Stripe Webhook Go to Stripe Dashboard → Developers → Webhooks. Click + Add endpoint. Use your n8n Webhook URL (from the Webhook node) as the endpoint. Select event type: invoice.payment_failed. Save and deploy. 👉 Example docs: Stripe: Listen to events with webhooks. 2. Disable Stripe’s Default Failed Payment Emails In Stripe, go to Billing → Settings → Customer emails → Manage failed payments. Turn off “Failed payment” emails under the Revenue Recovery section. This prevents customers from receiving duplicate or conflicting emails. 3. Postmark Setup Create a Postmark account. Add a Server and copy the Server API Token. In n8n, add Postmark credentials with this token. Configure: From = your verified sending email (must be verified in Postmark). MessageStream = typically "outbound" (or any custom stream you set up). Docs: Postmark API overview. 4. OpenAI Setup Add your OpenAI credentials in n8n. Attach them to the OpenAI Chat Model node. You can modify the prompt in the AI Agent node to fit your company’s style. ✨ Customization Tips Update the AI prompt with your brand’s tone of voice (friendly, formal, playful, etc.). Adjust the HTML email design inside the prompt (button colors, footer, etc.). Add extra guard conditions (e.g., only trigger if invoice_amount > 0). Change the sending service: replace Postmark with Gmail, SMTP, or another provider. 💬 Or talk to our Billing Recovery Experts at flycode.com for hands-on help. ✅ Outcome Whenever a customer’s subscription payment fails, this workflow: Detects it instantly via Stripe Generates a polite but urgent recovery email Sends it automatically via Postmark Result: Fewer cancellations, higher recovered revenue, and a smoother customer experience. 💸💌
by Nguyen Thieu Toan
How it works 🧠 AI-Powered News Update Bot for Zalo using Gemini and RSS Feeds This workflow allows you to build a smart Zalo chatbot that automatically summarizes and delivers the latest news using Google Gemini and RSS feeds. It’s perfect for keeping users informed with AI-curated updates directly inside Vietnam’s most popular messaging app. 🚀 What It Does Receives user messages via Zalo Bot webhook Fetches the latest articles from an RSS feed (e.g., AI news) Summarizes the content using Google Gemini Formats the response and sends it back to the user on Zalo 📱 What Is Zalo? Zalo is Vietnam’s leading instant messaging app, with over 78 million monthly active users—more than 85% of the country’s internet-connected population. It handles 2 billion messages per day and is deeply embedded in Vietnamese daily life, making it a powerful channel for communication and automation. 🔧 Setup Instructions 1. Create a Zalo Bot Open the Zalo app and search for "Zalo Bot Creator" Tap "Create Zalo Bot Account" Your bot name must start with "Bot" (e.g., Bot AI News) After creation, Zalo will send you a message containing your Bot Token 2. Configure the Webhook Replace [your-webhook URL] in Zalo Bot Creator with your n8n webhook URL Use the Webhook node in this workflow to receive incoming messages 3. Set Up Gemini Add your Gemini API key to the HTTP Request node labeled Summarize AI News Customize the prompt if you want a different tone or summary style 4. Customize RSS Feed Replace the default RSS URL with your preferred news source You can use any feed that provides timely updates (e.g., tech, finance, health) 🧪 Example Interaction User: "What's new today?" Bot: "🧠 AI Update: Google launches Gemini 2 with multimodal capabilities, revolutionizing how models understand text, image, and code..." ⚠️ Notes Zalo Bots currently do not support images, voice, or file attachments Make sure your Gemini API key has access to the model you're calling RSS feeds should be publicly accessible and well-formatted 🧩 Nodes Used Webhook HTTP Request (Gemini) RSS Feed Read Set & Format Zalo Message Sender (via API) 💡 Tips You can swap Gemini with GPT-4 or Claude by adjusting the API call Add filters to the RSS node to only include articles with specific keywords Use the Function node to personalize responses based on user history Built by Nguyen Thieu Toan (Nguyễn Thiệu Toàn) (https://nguyenthieutoan.com). Read more about this workflow by Vietnamese: https://nguyenthieutoan.com/share-workflow-n8n-zalo-bot-cap-nhat-tin-tuc/
by Frederik Duchi
This n8n template demonstrates how to automatically create tasks (or in general, records) in Baserow based on template or blueprint tables. The first blueprint table is the master table that holds the general information about the template. For example: a standard procedure to handle incidents. The second table is the details table that holds multiple records for the template. Each record in that table is a specific task that needs to be assigned to someone with a certain deadline. This makes it easy to streamline task creation for recurring processes. Use cases are many: Project management (generate tasks for employees based on a project template) HR & onboarding (generate tasks for employee onboarding based on a template) Operations (create checklists for maintenance, audits, or recurring procedures) Good to know The Baserow template for handling Standard Operating Procedures works perfect as a base schema to try out this workflow. Authentication is done through a database token. Check the documentation on how to create such a token. Tasks are inserted using the HTTP request node instead of a dedicated Baserow node. This is to support batch import instead of importing records one by one. Requirements Baserow account (cloud or self-hosted) A Baserow database with at least the following tables: Assignee / employee table. This is required to be able to assign someone to a task. Master table with procedure or template information. This is required to be able to select a certain template Details table with all the steps associated with a procedure or template. This is required to convert each step into a specific task. A step must have a field Days to complete with the number of days to complete the step. This field will be used to calculate the deadline. Tasks table that contains the actual tasks with an assignee and deadline. How it works Trigger task creation (webhook)** The automation starts when the webhook is triggered through a POST request. It should contain an assignee, template, date and note in the body of the request. It will send a succes or failure response once all steps are completed. Configure settings and ids** Stores the ids of the involved Baserow database and tables, together with the API credentials and the data from the webhook. Get all template steps** Gets all the steps from the template Details table that are associated with the id of the Master template table. For example: the master template can have a record about handling customer complaints. The details table contains all the steps to handle this procedure. Calculate deadlines for each step** Prepares the input of the tasks by using the same property names as the field of the Tasks table. Adjust this names, add or remove fields if this is required for your database structure. The deadline of each step is calculated by adding the number of days a step can take based on the deadline of the first step. This is done through a field Days to complete in the template Details table. For example. If the schedule_date property in the webhook is set to 2025-10-01 and the Days to complete for the step is 3, then the deadline will be 2025-10-04 Avoid scheduling during the weekend** It might happen that the calculated deadline is on a Saturday or Sunday. This Code node moves those dates to the first Monday to avoid scheduling during the weekend. Aggregate tasks for insert** Aggregates the data from the previous nodes as an array in a property named items. This matches perfect with the Baserow API to insert new records in batch. Generate tasks in batch** Calls the API endpoint /api/database/rows/table/{table_id}/batch/ to insert multiple records at once in the tasks table. Check the Baserow API documentation for further details. Success / Error response** Sends a simple text response to indicate the success or failure of the record creation. This is to offer feedback when triggering the automation from a Baserow application, but can be replaced with a JSON response. How to use Call the Trigger task creation node with the required parameters through a POST request. This can be done from any web application. For example: the application builder in Baserow supports an action to send an HTTP request. The Procedure details page in the Standard Operating Procedures template demonstrates this action. The following information is required in the body of the request. This information is required to create the actual tasks. { "assignee_id": integer refering to the id of the assignee in the database, "template_id": integer refering to the id of the template or procedure in the master table, "schedule_date": the date the tasks need to start scheduling, "note": text with an optional note about the tasks } Set the corresponding ids in the Configure settings and ids node. Check the names of the properties in the Calculate deadlines for each step node. Make sure the names of those properties match the field names of your Tasks table. You can replace the text message in the Success response and Failure response with a more structured format if this is necessary in your application. Customising this workflow Add support for public holidays (e.g., using an external calendar API). Modify the task assignment logic (e.g., pre-assign tasks in the details table). Combine with notifications (email, Slack, etc.) to alert employees when new tasks are generated.
by WeblineIndia
Detect duplicate candidates by email/phone from Gmail to Slack using Google Sheets This workflow automatically detects duplicate job applicants by checking incoming emails from Gmail against existing records in Google Sheets. If a candidate's email is already found in the sheet, it sends an alert to Slack; otherwise, it adds the candidate to the sheet. Who’s it for HR and recruitment teams processing candidate emails manually Startups or SMEs handling job applications via Gmail Anyone who wants to automate resume collection and deduplication Teams using Slack and Google Workspace How it works Triggers every few minutes via the Schedule Trigger node Fetches recent emails labeled "applicant" from Gmail Extracts candidate details from the email body using regex Reads all existing rows from the Google Sheet Compares the candidate’s email with existing entries If duplicate → Sends a Slack alert If new → Appends to the Google Sheet How to set up Label candidate emails in Gmail with a label like applicant Connect Gmail, Google Sheets, and Slack credentials in n8n Create a Google Sheet with these columns: candidate_name, candidate_email, candidate_phone, role_applied, years_of_experience, recruiter, resume_url, source_email Import the workflow JSON Update: Gmail label ID Google Sheet ID Slack channel or user Activate the workflow Requirements n8n (self-hosted or cloud) Gmail account with access to labeled application emails Google Sheet to store candidates Slack account with chat:write scope Basic regex familiarity (optional) How to customize Change comparison logic to include phone numbers. Add fallback logic to check for similar names. Add filters for roles, experience levels. Forward resumes to Drive or Notion. Trigger an approval flow for screened candidates. Add‑ons Google Drive: Upload parsed resumes. Notion / Airtable: Store structured candidate records. Webhooks: Forward to ATS or CRM. PDF parsers: Extract data from attachments. Use Case Examples | Use Case | Description | | ------------------- | ----------------------------------------------------- | | Resume deduplication | Avoid processing the same applicant twice | | Auto Slack alert | Instantly notify recruiter of repeat candidates | | Centralized tracking | Keep candidate records in Sheets for filtering/export | | Passive sourcing | Run hourly checks on labeled Gmail inboxes | Common troubleshooting | Issue | Possible Cause | Solution | | ------------------------ | ------------------------------------------ | -------------------------------------------------------------- | | Slack message not sent | Invalid Slack token / channel not selected | Reauthorize Slack connection and select correct user/channel | | Google Sheet not updated | Sheet ID or tab name is incorrect | Double-check the Sheet URL and worksheet tab | | Email data not extracted | Email body format doesn’t match regex | Adjust regex in the "Code" node | | Nothing happens | Gmail label or date filter is too strict | Ensure emails exist with the right label in the last X minutes | Need Help? Need help setting it up or tweaking regex for your custom email format? We’re happy to help — just ask! Want to add phone number duplication checks or auto-resume upload to Google Drive? Our Automation team at WeblineIndia can guide you step-by-step.
by Ranjan Dailata
Who this is for This workflow is built for recruiters, HR professionals, talent acquisition teams, and AI-powered recruitment startups who need to analyze LinkedIn profiles at scale. It’s ideal for anyone looking to turn raw LinkedIn data into structured, ATS-ready candidate profiles and summarized professional insights automatically. What problem this workflow solves Recruiters spend countless hours manually reviewing LinkedIn profiles, extracting details like experience, skills, education, and crafting summaries for ATS or reporting. This process is time-consuming, inconsistent, and error-prone. This workflow automates that process — from profile scraping to data structuring and AI-driven summarization, allowing recruiters to instantly generate standardized talent profiles. What this workflow does The workflow integrates Decodo, Google Gemini, and Google Sheets to perform automated LinkedIn talent profiling. Here’s how it works step-by-step: Input Setup The workflow begins when the user executes it manually or passes a LinkedIn profile URL. The input includes url (LinkedIn profile link) and geo (location, e.g., India). Profile Extraction with Decodo The Decodo node scrapes structured data from the LinkedIn profile (headline, experience, skills, education, etc.). Output: Detailed text-based content of the LinkedIn profile. AI Processing and Enrichment (Google Gemini) Structured Data Extractor Node parses the scraped data into JSON Resume Schema using Gemini AI. The Summarize Content Node uses Gemini AI to produce a short, professional summary of the candidate’s profile. The two Gemini nodes ensure both structured and human-readable data formats are available. JSON Parsing & Merging The Code Node cleans and parses the JSON output from the AI for reliable downstream use. The Merge Node combines both structured profile data and the AI-generated summary. Data Storage in Google Sheets The Google Sheets Node appends or updates the record, storing the structured JSON and summary into a connected spreadsheet. This creates a live repository of candidate profiles with summaries for quick access or ATS integration. End Output A unified, machine-readable profile in JSON + an executive-level summary suitable for HR review or downstream automation. Setup Instructions Prerequisites n8n account** with workflow editor access Decodo API credentials** - You need to register, login and obtain the Basic Authentication Token via Decodo Dashboard Google Gemini (PaLM) API access** Google Sheets OAuth credentials** Setup Steps Import the workflow into your n8n instance. Configure Credentials Add your Decodo API credentials in the Decodo node. Connect your Google Gemini (PaLM) credentials for both AI nodes. Authenticate your Google Sheets account. Edit Input Node In the Set the Input Fields node, replace the default LinkedIn URL with your desired profile or dynamic data source. Run the Workflow Trigger manually or via webhook integration for automation. Verify that structured profile data and summary are written to the linked Google Sheet. How to customize this workflow to your needs Bulk Profile Input** Connect the “Set Input” node to a Google Sheet or CSV input for batch LinkedIn URLs. Alternate Output Format** Instead of Google Sheets, connect to Notion, Airtable, or PostgreSQL for centralized profile databases. Advanced Summaries** Modify the Summarize Content Gemini prompt to generate more specialized summaries — e.g., "Leadership Potential Summary" or "Technical Fit Analysis" Resume Comparison Feature** Add another Gemini node to compare a candidate’s profile against a job description and output a fit score or gap analysis. Notification Integration** Use Slack or Gmail nodes to send alerts when a new candidate summary is generated. Language Localization** Add a language detection step before summarization to support multilingual summaries. Summary The Automated LinkedIn Talent Profiling & Summary via Decodo + Google Gemini workflow streamlines recruitment intelligence by automating every step of LinkedIn profile research: Scraping (via Decodo) Structuring (via Gemini JSON Extraction) Summarizing (via Gemini Summarizer) Storing results (in Google Sheets) This workflow empowers recruiters to analyze hundreds of profiles within minutes, ensuring data consistency, faster candidate evaluation, and smarter hiring decisions — powered by Bright Data scraping intelligence and Google Gemini’s AI reasoning.
by Jose Castillo
Track your daily mood in one tap and receive automated AI summaries of your emotional trends every week and month. Perfect for self-reflection, wellness tracking, or personal analytics. This workflow logs moods sent through a webhook (/mood) into Data Tables, analyzes them weekly and monthly with OpenAI (GPT-4o), and emails you clear summaries and actionable recommendations via Gmail. ⚙️ How It Works Webhook – Mood → Collects new entries (🙂, 😐, or 😩) plus an optional note. Set Mood Data → Adds date, hour, and note fields automatically. Insert Mood Row → Stores each record in a Data Table. Weekly Schedule (Sunday 20:00) → Aggregates the last 7 days and sends a summarized report. Monthly Schedule (Day 1 at 08:00) → Aggregates the last 30 days for a deeper AI analysis. OpenAI Analysis → Generates insights, patterns, and 3 actionable recommendations. Gmail → Sends the full report (chart + AI text) to your inbox. 📊 Example Auto-Email Weekly Mood Summary (last 7 days) 🙂 5 ██████████ 😐 2 ████ 😩 0 Average: 1.7 (Positive 🙂) AI Insights: You’re trending upward this week — notes show that exercise days improved mood. Try keeping short walks mid-week to stabilize energy. 🧩 Requirements n8n Data Tables enabled OpenAI credential (GPT-4o or GPT-4 Turbo) Gmail OAuth2 credential to send summaries 🔧 Setup Instructions Connect your credentials: Add your own OpenAI and Gmail OAuth2 credentials. Set your Data Table ID: Open the Insert Mood Row node and enter your own Data Table ID. Without this, new moods won’t be stored. Replace the email placeholder: In the Gmail nodes, replace your.email@example.com with your actual address. Deploy and run: Send a test POST request to /mood (e.g. { "mood": "🙂", "note": "productive day" }) to log your first entry. ⚠️ Before activating the workflow, ensure you have configured the Data Table ID in the “Insert Mood Row” node. 🧠 AI Analysis Interprets mood patterns using GPT-4o. Highlights trends, potential triggers, and suggests 3 specific actions. Runs automatically every week and month. 🔒 Security No personal data is exposed outside your n8n instance. Always remove or anonymize credential references before sharing publicly. 💡 Ideal For Personal mood journaling and AI feedback Therapists tracking client progress Productivity or self-quantification projects 🗒️ Sticky Notes Guide 🟡 Mood Logging Webhook POST /mood receives mood + optional note. ⚠️ Configure your own Data Table ID in the “Insert Mood Row” node before running. 🟢 Weekly Summary Runs every Sunday 20:00 → aggregates last 7 days → generates AI insights + emails report. 🔵 Monthly Summary Runs on Day 1 at 08:00 → aggregates last 30 days → creates monthly reflection. 🟣 AI Analysis Uses OpenAI GPT-4o to interpret trends and recommend actions. 🟠 Email Delivery Sends formatted summaries to your inbox automatically.
by AureusR
Live Demo Booking Form with Outlook Calendar and Zoom link Who’s it for This workflow is designed for SaaS companies, consultants, or sales teams that regularly run live demos. It helps automate demo scheduling, ensuring clients can only book from available time slots while instantly generating Zoom links and calendar invitations. How it works / What it does Client fills demo request form → Collects company, contact details, and a preferred date. Check Outlook calendar availability → Searches for pre-created “Online Meeting Slot” events. Time slot selection → If the date has slots, the client chooses from up to 3 nearest available times. If not, they’re asked to pick another date. Create Zoom meeting → Once a date & time are confirmed, a Zoom link is automatically generated. Update Outlook calendar → The chosen slot is updated with the client’s details and Zoom link, marked as “Booked Live Demo” so it can’t be double-booked. Send confirmation → The client receives a styled confirmation screen, and both parties get the calendar invite. How to set up Import the workflow JSON into your n8n instance. Configure the following credentials: Microsoft Outlook OAuth2 API (for calendar access). Zoom OAuth2 API (for automatic meeting creation). Pre-create “Online Meeting Slot” events in your Outlook calendar to define available demo times. Publish the form via n8n’s webhook URL (embed it in your website or share the link). Test by submitting a request to ensure slots update correctly and Zoom links are created. Requirements n8n self-hosted or cloud account. Microsoft Outlook account with calendar access. Zoom account with OAuth2 credentials. Pre-created calendar slots named “Online Meeting Slot”. How to customize the workflow Form fields**: Adjust the client details form to capture additional data (e.g., industry, product interest). Email/notification**: Add an Email or Slack node to notify your sales team of new demo bookings. Custom branding**: Update the CSS in the form nodes to match your company’s style. Capacity rules**: Modify the IF nodes to limit the number of bookings per day or adjust the slot-checking logic.
by Daniel
AI Email Support Agent with RAG & Cohere Reranking Transform your inbox into an intelligent support system: automatically detect new emails, retrieve relevant knowledge from Pinecone, rerank with Cohere for precision, generate contextual replies using Gemini AI, and respond—all while maintaining conversation history. What It Does This workflow triggers on incoming Gmail messages, leverages a LangChain agent with PostgreSQL memory for context, queries a Pinecone vector store (RAG) enhanced by Cohere reranking and OpenAI embeddings, crafts personalized responses via Gemini 2.5, and auto-replies to keep support flowing. Key Features Gmail Integration** - Real-time polling for new emails every minute RAG with Pinecone** - Retrieves top 10 relevant docs from "agency-info" index as agent tool Cohere Reranking** - Boosts retrieval accuracy by reordering results semantically Persistent Memory** - Postgres chat history keyed by email ID for ongoing threads Gemini-Powered Agent** - Handles queries with custom system prompt for agency support Seamless Auto-Reply** - Sends formatted text responses directly in Gmail Perfect For Agencies**: Automate client FAQs on services, pricing, and ownership Support Teams**: Scale responses without losing conversation context Small Businesses**: Handle inquiries 24/7 with AI-driven accuracy Developers**: Prototype RAG agents with vector stores and rerankers Marketers**: Personalize outreach replies based on knowledge base Consultants**: Quick, informed answers from internal docs Technical Highlights Built on n8n's LangChain ecosystem, this workflow highlights: Trigger-to-response pipeline with polling and webhooks Hybrid retrieval: Embeddings + vector search + semantic reranking Stateful agents with database-backed memory for multi-turn chats Multi-provider setup: OpenAI (embeddings), Cohere (rerank), Google (LLM) Scalable for production with configurable topK and session keys Setup Instructions Prerequisites n8n instance with LangChain nodes enabled Accounts for: Gmail (OAuth2), OpenAI (API key), Cohere (API key), Google Gemini (API key), Pinecone (API key and index), Postgres (database connection, e.g., Neon or Supabase) Required Credentials Gmail OAuth2 Enable Gmail API in Google Cloud Console Create OAuth2 credential in n8n with scopes: https://www.googleapis.com/auth/gmail.readonly, https://www.googleapis.com/auth/gmail.send OpenAI API Get API key from platform.openai.com Add as OpenAI credential in n8n Cohere API Sign up at cohere.com Copy API key to n8n Cohere credential Google Gemini API Generate key at https://aistudio.google.com/ Add as Google PaLM credential in n8n (compatible with Gemini) Pinecone API Create index "agency-info" with dimension 1024 Add API key to n8n Pinecone credential Postgres Set up database (e.g., Neon/Supabase) with a table for chat history Add connection details (host, database, user, password) to n8n Postgres credential Configuration Steps Import the workflow JSON into your n8n instance Assign all required credentials to the respective nodes Populate the Pinecone "agency-info" index with your knowledge base documents (use a separate upsert workflow or Pinecone dashboard) Customize the tableName in the Postgres Memory node if needed (default: "email_support_agent_") Adjust the agent's system prompt or topK retrieval if required for your use case Activate the workflow and test by sending a sample email to trigger it Troubleshooting No trigger firing**: Verify Gmail scopes and polling interval Empty retrieval**: Check Pinecone index population, dimensions (must be 1024), and document embeddings Rerank errors**: Ensure Cohere API key is valid and has sufficient quota Memory issues**: Confirm Postgres connection and that sessionKey uses email ID Perfect for deploying hands-off email automation. Import, connect credentials, and activate!
by Khairul Muhtadin
Ticketing Backend automates registration, QR-ticket generation, email delivery, and check-in validation using Google Sheets, Gmail, and a webhook scanner — reducing manual ticket prep from ~3 hours to under 5 minutes for 200 attendees. Why Use This Workflow? Time Savings:** Automates ticket generation & delivery. reduces manual processing for 200 attendees from ~3 hours to <5 minutes. Cost Reduction:** Removes dependency on paid ticketing platforms for basic events — save up to $150–$300/month for small organizations. Error Prevention:** Single-source truth in Google Sheets with QR-based check-in reduces double-checkin and human errors by >90%. Scalability:** Runs on a schedule and webhooks; scales from dozens to thousands of tickets (watch API/email quotas). Ideal For Event Organizers / Community Managers:** Sell & distribute tickets for meetups, runs, and local events with immediate QR delivery. Operations / Venue Staff:** Fast, reliable check-in via mobile scanner POSTing to webhook for instant validation. Small Agencies & SaaS Teams:** Lightweight, low-cost ticketing backend that integrates with existing Google accounts. How It Works Trigger (Registration): POST /v1/register receives registration payload (nama, email, no_hp, jumlah_tiket, total_price, payment_method). Data Collection (Registration): Validate input → check existing participant in Register sheet → append registration. Processing (Ticket Generation): Scheduled job (START runs every minute) finds rows with Payment Status = PAID and Email Sent = NO. Intelligence Layer: For each ticket: generate unique Ticket ID (TL-YYYYMMDD-XXXX-N-HASH), build QR payload JSON, create QR image via qrserver API, and build HTML email with embedded base64 QR. Output & Delivery: Send ticket email(s) via Gmail; write one Tickets row per generated ticket and mark Email Sent = YES in Register. Storage & Logging: All participant & ticket records persisted to Google Sheets; check-in events update row (Checked In = YES and Checkin TIme). Core Endpoints Registration webhook: POST /v1/register Scanner webhook (check-in): POST /v1/scanner Event Metadata Event:** TABRAK_LARI Event date:** 15 November 2025 Event location:** GOR Pontianak Setup Guide Prerequisites | Requirement | Type | Purpose | |-------------|------|---------| | n8n instance(https://n8n.partnerlinks.io/khmuhtadin)) | Essential | Host the workflow and webhooks | | Google account (Sheets + Gmail) | Essential | Store tickets & send emails | | Google Sheet | Essential | Register & Tickets data store | | Public webhook URL / reverse proxy | Essential | Expose /v1/register & /v1/scanner to scanners/clients | | qrserver.com (public API) | Optional | Generate QR images (no credentials) | > Important: Make sure your n8n instance URL is publicly accessible or use a tunneling/reverse proxy so webhooks can receive POSTs. Installation Steps Import the JSON into your n8n instance([https://n8n.partnerlinks.io/khmuhtadin). Configure credentials: Google Sheets OAuth2: Grant access to Google Drive & Sheets API (spreadsheets.readonly & spreadsheets). Gmail OAuth2: Grant send email scope (Gmail send). Update environment-specific values: Verify Google Sheet ID. Set the public base URL for ticket scanner clients to POST /v1/scanner. Customize settings: Event name/date/location (variables in Generate Ticket Data / Build HTML Email). Email sender address and subject line in Gmail node. Test execution: Use a sample POST to /v1/register with valid fields to create a registration. Mark a row as PAID and Email Sent = NO to trigger scheduled ticket generation. Simulate a scanner POST to /v1/scanner with the barcode JSON payload to test check-in. Technical Details Core Nodes | Node | Purpose | Key Configuration | |------|---------|-------------------| | REGISTER (Webhook) | Accepts registration POSTs | Path: /v1/register | | Validate Input (Code) | Server-side validation | Validates nama, email, no_hp, jumlah_tiket, payment_method | | Get Participant (Google Sheets) | Check duplicate email | Filters Register tab by Email | | Store Data (Google Sheets) | Append registration | Tab: Register (gid=0) | | START (Schedule Trigger) | Finds paid registrations | Runs every 1 minute | | Get Rows (Google Sheets) | Reads Register rows | Reads full Register tab | | Filter Paid Not Sent (Filter) | Finds rows with Payment Status=PAID & Email Sent=NO | Filter node conditions | | Generate Ticket Data (Code) | Generate ticket IDs & QR payloads | Ticket ID format TL-YYYYMMDD-XXXX-N-HASH | | Generate QR Code (HTTP Request) | Calls qrserver.com to build PNG | URL: https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=... | | Build HTML Email (Code) | Builds ticket HTML & embeds Base64 QR | Template contains ticket details & QR | | Send Email (Gmail) | Sends ticket email | To: recipient Email; Subject configurable | | Update Sheet (Tickets) | Append ticket rows | Tab: Tickets (gid=2010454173) | | Parse Data (Code) | Aggregates ticket IDs per email | Updates Register with combined ticket IDs | | SCAN TICKET (Webhook) | Check-in endpoint | Path: /v1/scanner | | Parse Barcode (Code) | Parses incoming scanner payload | Expects JSON in body.barcode | | Get Tickets (Google Sheets) | Lookup ticket by Ticket ID | Filters Tickets tab by Ticket ID | | Ticket Available? (If) | Validates existence & Checked In status | Branches to update or return error | | Update Ticket Status (Google Sheets) | Mark Checked In = YES | Sets Checkin TIme to scannedAt | | Checked IN / Already Checked IN (RespondToWebhook) | Respond payloads for scanner | JSON responses with status & metadata | Workflow Logic Registration:** Writes to Register sheet. A scheduled job picks up PAID rows where Email Sent = NO; for each row it generates one record per ticket, calls the QR API for an image, sends an email per ticket (multi-ticket support), then appends Tickets rows and marks Email Sent = YES by updating the Register sheet with combined ticket IDs. Check-in:** The scanner webhook accepts barcode JSON, extracts ticket_id, looks up the Tickets sheet, prevents duplicate check-ins by checking "Checked In" flag, and updates sheet with check-in timestamp on success. Customization Options Basic Adjustments Email Template:** Edit Build HTML Email node to change branding, copy, or layout. Ticket ID Format:** Change code in Generate Ticket Data to alter prefix or hash length. Event Metadata:** Change event_name, event_date, event_location in code nodes. Advanced Enhancements Payment Gateway Integration:** Integrate with payment gateway (e.g., webhook from Stripe) to automatically set Payment Status = PAID — complexity: medium. Cloud Storage for QR Images:** Use cloud storage (S3) for QR images instead of base64-embedding — complexity: medium-high. Batch Email Provider:** Use batch email provider (SendGrid/Mailgun) for high-volume events to reduce Gmail quota risks — complexity: medium. Troubleshooting | Problem | Cause | Solution | |---------|-------|----------| | Invalid QR / scanner returns "Invalid QR code format" | Scanner payload not sending barcode JSON or malformed JSON | Ensure scanner POST body contains valid JSON string under body.barcode; validate payload in Parse Barcode node | | Ticket exists but cannot update | Google Sheets API auth / permission error | Reconnect Google Sheets OAuth2 credential; ensure the service account/user has edit access to the sheet | | Emails not sent | Gmail OAuth2 credential missing or Gmail API quota reached | Reauthorize Gmail credential; consider switching to SendGrid/Mailgun for large volumes | | Duplicate check-in allowed | Logic checking "Checked In" value mismatch (case/format) | Normalize the Checked In field values and use strict comparisons in Ticket Available? node | | Slow generation for many tickets | Sequential QR calls and sends | Use parallel execution or a dedicated email service; increase worker resources for n8n instance | Use Case Examples Scenario 1: Community Fun Run (200 attendees) Challenge:** Manual QR generation and emailing takes ~3 hours. Solution:** After marking registrations as PAID, the scheduled job generates 200 QR tickets and emails them automatically. Result:** Ticket prep completed in <5 minutes; volunteer time reduced by ~3 hours. Scenario 2: Regional Festival (2,000 tickets) Challenge:** High volume requires reliable delivery and check-in speed. Solution:** Use this workflow but replace Gmail with a transactional email provider (SendGrid) and host n8n on a scalable instance. Monitor Google Sheets and email provider quotas. Result:** Automated delivery scales; on-site check-in handled via the /v1/scanner endpoint with near-instant validation. Additional Information Created by: Khmuhtadin Category: Event Automation, Ticketing Backend Tags: google-sheets, gmail, qr-code, webhook, ticketing Need custom workflows or help adapting this for your event? Contact us Note: Import the JSON into your n8n instance to get started. My Social: Threads LinkedIn Medium Workflow Collections portfolio
by Stephan Koning
Who it's for Construction and renovation businesses that need to generate detailed quotes from customer inquiries—plasterers, painters, contractors, renovation specialists, or any construction service provider handling quote requests through online forms. What it does Automatically transforms JotForm submissions into professional, itemized construction quotes with complete CRM tracking—no subscription needed (saving €200-500/year). When a customer fills your project request form (specifying wall/ceiling areas, finish types, ceiling heights, wet areas, prep work), the workflow extracts measurements, normalizes service selections, applies intelligent pricing rules from your Supabase catalog, calculates line items with material and labor costs plus proper VAT handling, stores everything in a structured CRM pipeline (customer → project deal → estimate), and generates a branded HTML email ready for delivery. This self-hosted pricing engine replaces paid invoicing software for quote generation, saving thousands over time while eliminating manual takeoffs and quote preparation— from 30-60 minutes to under 30 seconds. How it works Stage 1: JotForm webhook triggers → Parser extracts project data (m² measurements, service types, property details) → Normalize Dutch construction terms to database values → Save raw submission for audit trail Stage 2: Upsert customer record (idempotent on email) → Create project deal → Link to form submission Stage 3: Fetch active pricing rules → Calculate line items based on square meters, service type (smooth plaster vs decorative), ceiling height premiums, property status (new build vs renovation), wet area requirements → Apply conditional logic (high ceilings = price multiplier, prep work charges, finish level) → Group duplicate items → Save estimate header + individual lines Stage 4: Query optimized view (single call, all data) → Generate professional HTML email with logo, itemized services table (description, m², unit price, totals), VAT breakdown, CTA buttons, legal disclaimer Setup requirements Supabase account** (free tier sufficient) - Database for CRM + pricing catalog JotForm account** (free tier works) - Form builder with webhook support Email service** - Gmail, SendGrid, or similar (add your own email node) How to set up 1. Database setup (2 minutes): Run this workflow's "SQL Generator" node to output complete schema Copy output → Paste in Supabase SQL Editor → Click Run Creates 9 tables + 1 optimized view + sample construction services (plastering €21-32/m², painting €12-15/m², ornamental work, ceiling finishes) 2. Credentials: Add Supabase credentials to n8n (Project URL + Service Role Key from Supabase Settings → API) No JotForm credentials needed (uses webhook) 3. JotForm webhook: Clone demo construction form: [jotform stucco planet demo](https://form.jotform.com/252844786304060 )- Form fields: Property type, postcode, services needed, wall/ceiling m², finish level, ornament quantities, molding meters, wet areas, ceiling heights, prep removal, start date, customer contact Settings → Integrations → Webhooks → Add your n8n webhook URL Test with preview submission 4. Customize email: Update company info in "Generate Email HTML" node (logo, business address, contact details, Chamber of Commerce number, VAT number) Adjust colors/branding in HTML template Available in Dutch and English versions How to customize Add your construction services: Edit price_catalog table in Supabase (no code changes): INSERT INTO price_catalog (item_code, name, unit_price, vat_rate, unit_type) VALUES ('DRYWALL_INSTALL', 'Drywall Installation', 18.50, 9, 'm²');
by Oneclick AI Squad
This automated n8n workflow monitors real-time cryptocurrency prices using CoinGecko API and sends smart alerts when price conditions are met. It supports multi-coin tracking, dynamic conditions, and instant notifications via Email, Telegram, and Discord. Good to Know Reads crypto watchlist data from Google Sheets. Monitors prices at defined intervals (24/7 monitoring). Handles upper and lower price limits with direction-based alerts (above, below, both). Implements cooldown logic to avoid duplicate alerts. Updates last alert price and timestamp in Google Sheets. Supports multiple alert channels: Email, Telegram, Discord. Uses CoinGecko API for price data (Free tier supported). How It Works 24/7 Crypto Trigger – Runs every minute (or custom interval) to check latest prices. Read Crypto Watchlist – Fetches symbols and conditions from Google Sheets. Parse Crypto Data – Converts Google Sheet data into structured JSON. Fetch Live Crypto Price – Uses CoinGecko API to get latest market price for each coin. Smart Crypto Alert Logic – Compares live price with upper/lower limits and evaluates conditions: Above – Trigger alert if price > upper\_limit. Below – Trigger alert if price < lower\_limit. Both – Trigger alert if either condition is met. Implements cooldown\_minutes to prevent repeated alerts. Check Crypto Alert Conditions – Validates alerts before sending notifications. Send Crypto Email Alert – Sends email alert if condition is true. Send Telegram Crypto Alert – Sends Telegram alert. Send Discord Crypto Alert – Sends Discord alert. Update Crypto Alert History – Updates last_alert_price and last_alert_time in Google Sheet. Crypto Alert Status Check – Ensures alert process completed successfully. Success Notification – Sends confirmation message on success. Error Notification – Sends an error alert if something fails. Google Sheet Columns (A-G) | Column | Description | | ------ | ---------------------------------- | | A | symbol (BTC, ETH, SOL, etc.) | | B | upper_limit (e.g., 45000) | | C | lower_limit (e.g., 40000) | | D | direction (both / above / below) | | E | cooldown_minutes (e.g., 10) | | F | last_alert_price (auto-updated) | | G | last_alert_time (auto-updated) | How to Use Import the workflow into n8n. Configure Google Sheets credentials and link your watchlist sheet. Add your CoinGecko API endpoint in the Fetch Price node (Free tier). Set up Email, Telegram, and Discord credentials for notifications. Test with sample data: Example: BTC, upper\_limit=45000, lower\_limit=40000, direction=both. Execute the workflow and monitor alerts. Requirements n8n environment with execution permissions. Google Sheets integration (with API credentials). CoinGecko API (Free tier supported). Notification channels: Email (SMTP settings in n8n). Telegram Bot Token. Discord Webhook URL. Customizing This Workflow Add more coins in Google Sheet. Modify alert conditions (e.g., percentage change, moving averages). Add SMS or WhatsApp notifications. Integrate with Slack or Microsoft Teams. Use AI-based price predictions for smarter alerts.
by moosa
This workflow monitors product prices from BooksToScrape and sends alerts to a Discord channel via webhook when competitor's prices are lower than our prices. 🧩 Nodes Used Schedule (for daily or required schedule) If nodes (to check if checked or unchecked data exists) HTTP Request (for fetching product page ) Extract HTML (for extracting poduct price) Code(to clean and extract just the price number) Discord Webhook (send discord allerts) Sheets (extract and update) 🚀 How to Use Replace the Discord webhook URL with your own. Customize the scraping URL if you're monitoring a different site.(Sheet i used) Run the workflow manually or on a schedule. ⚠️ Important Do not use this for commercial scraping without permission. Ensure the site allows scraping (this example is for learning only).