Quick overview This workflow sends a daily product newsletter from Google Sheets via Gmail and tracks opens, clicks, and unsubscribes through an n8n webhook, logging all events back to Google Sheets. How it works Runs every day at 08:00 (configured in the Schedule Trigger). Reads products from Google Sheets and keeps only rows whose send_date matches today. If there are products to send, builds an HTML newsletter with a per-campaign newsletter ID, tracked click URLs, a tracking pixel, and an unsubscribe link, and logs the newsletter contents to Google Sheets. Reads recipients and the unsubscribe list from Google Sheets, removes unsubscribed addresses, and personalizes the newsletter HTML for each recipient by inserting their email and the campaign ID into tracking links. Sends each personalized email via Gmail and appends a “sent” event to the Google Sheets tracking log. Receives open, click, and unsubscribe requests on a webhook endpoint, routes by event type, and logs the event to Google Sheets.
Tags
Related workflows
See all Gmail→Recover Shopify abandoned carts and send weekly reports via Gmail and Sheets
Quick overview This template automates Shopify abandoned cart recovery with a 3-email Gmail sequence, tracks recoveries in Google Sheets via Shopify “order paid” webhooks, and sends a weekly HTML performance report every Monday using data aggregated from the same spreadsheet. How it works Receives a Shopify “checkout created” webhook, verifies the checkout includes an email address, and skips customers who already have an active recovery sequence logged in Google Sheets. Logs the abandoned checkout details to Google Sheets and waits one hour before checking Shopify Orders for a paid purchase by the same email. If no paid order exists, sends the first recovery email via Gmail and updates the Google Sheets row to mark Email 1 as sent. After another 23 hours, checks Shopify Orders again and, if still unpaid, sends the second recovery email via Gmail and updates Google Sheets. After another 48 hours, checks Shopify Orders again and, if still unpaid, creates a unique one-time Shopify discount (price rule + discount code) and sends the third email via Gmail, then stores the discount code and Email 3 status in Google Sheets. Receives a Shopify “order paid” webhook, looks up the customer i
Create human-reviewed personalized PDFs from Stripe payments using OpenAI
Quick overview This workflow receives Stripe payment webhooks, looks up the customer’s order in Google Sheets, generates personalized HTML content with OpenAI, converts it to a PDF using PDFShift, then queues the request for human approval and delivers the final document via Gmail with Slack notifications. How it works Receives a Stripe payment notification via a webhook endpoint. Extracts payment details (event type, payment ID, customer email, amount, currency) and stops the main flow if the email is missing. Pulls order rows from Google Sheets and matches the order to the payer’s email. Sends the combined payment and order data to the OpenAI Chat Completions API to generate structured personalized content, then renders it into an HTML document. Converts the HTML to a PDF with PDFShift and sends the customer an acknowledgement email via Gmail. Appends the request to a Google Sheets “ReviewQueue” and notifies staff in Slack with instructions to approve via a separate webhook. When an approval webhook is received and marked approved, emails the final message to the customer via Gmail and updates the “ReviewQueue” status in Google Sheets. Setup Create and configure two webhook URLs
Screen, score and route job applicants with Gemini, Gmail, Sheets and Slack
Quick Overview This workflow runs daily to pull job applicants from Google Sheets, score each candidate against role requirements using the Google Gemini API, log results back to Google Sheets, and notify a Slack channel when an applicant meets or exceeds a minimum score. How it works Runs every day at 08:00 on a schedule. Reads applicant records from an “Applicants” tab in Google Sheets. Combines the job title, requirements, and each applicant’s resume text into a screening prompt. Sends the prompt to the Google Gemini API and requests a JSON response with score, verdict, strengths, gaps, and summary. Parses the returned JSON and normalizes the screening fields (score, verdict, strengths, gaps, and summary). Appends the screening result for every applicant to a “Screening” tab in Google Sheets. Posts a formatted message to a Slack channel when the applicant’s score is greater than or equal to the configured minimum score. Setup Connect credentials for Google Sheets OAuth, Google Gemini (PaLM) API, and Slack OAuth. Select your Google Sheets spreadsheet and ensure it has an “Applicants” sheet with fields like Name, Email, and Resume/ResumeText, plus a “Screening” sheet to store resu