Structured Output Parser workflows
233 results — all source-linked n8n references
Send a daily AI-ranked job match digest with Anthropic and Gmail from 6+ boards
Quick Overview This workflow runs every morning to pull jobs from multiple free job boards (and optional Adzuna), filters and de-duplicates results, scores each role against your resume and preferences using Anthropic, then emails a ranked digest via Gmail. How it works Runs every morning at 08:00 using a schedule trigger. Builds a list of job board API URLs (RemoteOK, Remotive, Arbeitnow, Jobicy, Himalayas, TheMuse, and optional Adzuna) based on your search settings. Fetches job listings from each board over HTTP. Normalizes all responses into a single job format, applies your filters (title keywords, tags, locations/remote, salary, and excluded terms), and de-duplicates roles across boards. Sends your resume, preferences, and the short-listed jobs to an Anthropic-powered AI agent to return a structured fit score, fit reason, risk/concerns, and a tailored first-person pitch for each job. Keeps only roles at or above your minimum score, ranks them by score, and generates an HTML email digest with links and source board attribution. Sends the digest to your target address using Gmail. Setup Add an Anthropic API credential, select an Anthropic chat model, and keep the structured outp
Archive and index legal PDFs from Gmail with Gemini, Sheets and Google Drive
Quick Overview This workflow monitors Gmail for unread emails with PDF attachments, uses Google Gemini to extract Japan Electronic Books Preservation Act filing metadata, logs a searchable index in Google Sheets, and archives documents into Google Drive folders while notifying Slack when extraction or classification fails. How it works Polls Gmail hourly for unread emails that contain attachments and downloads the attached files. Extracts text from the first PDF attachment. Sends the extracted text to Google Gemini to pull out transaction date, counterparty, amount, and document type, and alerts Slack if the document text cannot be read. Builds an Act-compliant PDF filename from the extracted fields and checks that date, counterparty, and amount are all present. If required metadata is missing, posts a warning to a Slack channel to handle the document manually. If metadata is complete, appends a row to a Google Sheets “Document Index”, marks the Gmail message as read to prevent reprocessing, and uploads the PDF to the matching Google Drive folder (invoice/receipt/contract) or flags it in Slack if unclassified. Setup Connect credentials for Gmail, Google Gemini (PaLM) API, Google Sh
Match Japanese jGrants subsidies to your company with Gemini, Slack and Gmail
Quick Overview This workflow runs weekly to search the public jGrants API for open Japanese subsidies, scores each subsidy’s fit for your company using Google Gemini, logs results to Google Sheets, and notifies a Slack channel (and drafts a Gmail kickoff email) for strong matches. How it works Runs weekly on a schedule and loads your company profile details (industry, headcount, prefecture, investment plan, and search keyword). Calls the public jGrants subsidies API to retrieve currently accepting programs sorted by newest first, and posts to Slack if the search fails. Processes each returned subsidy individually and asks Google Gemini to produce a fit score, verdict (strong/possible/no), reasons, next steps, and a short summary. Normalizes the Gemini response into consistent fields, and posts to Slack if scoring fails for a subsidy. Upserts each scored subsidy into a Google Sheets tracker (keyed by subsidy ID) to avoid duplicates across weekly runs. Routes results by verdict: sends a detailed Slack alert and creates a Gmail draft for strong matches, posts a lightweight Slack message for possible matches, and flags unclear verdicts in Slack. Setup Add credentials for Google Gemini
Monitor Japanese business partners for registry changes with gBizINFO and Gemini
Quick Overview This workflow runs weekly to check Japanese business partners listed in Google Sheets against the gBizINFO corporate registry API, uses Google Gemini to assess the risk impact of detected changes, updates the stored partner snapshot, and escalates findings to Slack and Gmail based on materiality. How it works Runs every week on a schedule. Reads the partner list (including corporate numbers and last-known name/address) from Google Sheets. Queries the gBizINFO corporate registry API for each partner and posts a Slack message if the lookup fails. Compares the latest registry data to the stored snapshot to detect name, address, or closure/dissolution changes and continues only when changes are found. Sends the detected changes to Google Gemini to classify materiality (high/medium/low) with a short summary and recommended action, and posts a Slack message if the assessment fails. Updates the Google Sheets partner snapshot with the latest registry details so the change is recorded. Routes by materiality to notify Slack (medium/other), and for high materiality also posts a Slack alert and creates a Gmail draft requesting a credit review. Setup Create a Google Sheets spread
Monitor overtime risk against Japanese labour caps with Gemini, Sheets, Slack & Gmail
Quick Overview This workflow runs weekly to read attendance overtime from Google Sheets, totals it per employee and month, uses Google Gemini to classify risk against Japanese labour-law limits, writes results back to Sheets, and escalates high-risk cases via Slack and a Gmail draft. How it works Runs every week on a schedule. Loads configured Japanese overtime limits and fetches raw attendance rows from a Google Sheets “Attendance” worksheet. Aggregates overtime hours per employee per month. Sends each employee-month total to Google Gemini, which returns a structured risk level (over/approaching/ok) plus a short summary and recommended manager actions. Stores or updates the assessment in a Google Sheets “Overtime Status” worksheet keyed by employee and month. Posts to Slack when overtime is over the cap (and drafts a manager notice in Gmail), posts an early-warning Slack message when approaching the cap, and flags unclear or failed assessments to Slack for manual review. Setup Add credentials for Google Sheets OAuth, Google Gemini (PaLM) API, Slack OAuth2, and Gmail OAuth2. Create a Google Sheets spreadsheet with an “Attendance” sheet containing Employee (or Name), Month (or Date)
Triage Gmail and draft replies with GPT-5 Mini and Google Sheets
Quick overview This workflow watches your Gmail inbox for new unread emails, uses OpenAI (GPT-5 Mini) to classify each message by priority and category, logs the triage results to Google Sheets, and creates a Gmail draft reply only when the email needs a personal response. How it works Triggers every minute when a new unread email arrives in Gmail. Applies your configured preferences (name, role, categories, and drafting style) to guide the triage. Sends the email content to OpenAI (GPT-5 Mini) to return a structured priority, category, one-line summary, whether a reply is needed, and an optional draft reply. Appends or updates a row in Google Sheets with the email details and triage results. If the email needs a reply, creates a draft reply in Gmail in the same thread addressed to the original sender. Setup Connect your Gmail account (Gmail Trigger and Gmail Draft) and ensure the trigger is set to monitor unread mail as desired. Add an OpenAI credential and select the GPT-5 Mini chat model in the OpenAI node. Connect Google Sheets OAuth credentials, then set the target spreadsheet document ID and sheet name for the triage dashboard. Create a Google Sheet with columns for Date, Fro
Check Japanese ad copy compliance with Google Gemini, Sheets, Slack and Gmail
Quick Overview This workflow runs daily to review Japanese ad copy in Google Sheets using Google Gemini, writes compliance risk results back to the sheet, and alerts the right team in Slack (and drafts a Gmail revision request) based on high/medium/low risk. How it works Runs every day at 9:00 on a schedule. Reads ad copy rows from Google Sheets to find items that still need a compliance check. Sends each copy item to Google Gemini with the configured product category, target laws, and extra rules to generate a risk level, violations, and a compliant rewrite. Parses and normalizes the Gemini output into fields like risk level, violation count, and safe rewrite, and posts a Slack alert if the AI check fails. Updates the corresponding Google Sheets row with the compliance results to keep a record of the review. Routes the item by risk level and posts to Slack for legal blocking (high), marketing review (medium), publish-ready notification (low), or manual review when the result is inconclusive. For high-risk copy, also creates a Gmail draft requesting the author to revise the copy using the suggested compliant rewrite. Setup Add credentials for Google Sheets, Google Gemini (PaLM) API
Verify Japanese invoice registration numbers from Gmail using Gemini, NTA API, Sheets and Slack
Quick Overview This workflow monitors Gmail for unread invoice emails with PDF attachments, extracts invoice details with Google Gemini, verifies Japanese qualified invoice registration numbers against the National Tax Agency (NTA) Invoice Web-API, logs results to Google Sheets, and sends Slack alerts for invalid, missing, or inconclusive checks. How it works Polls Gmail hourly for unread emails matching “has:attachment invoice” and downloads the first attachment. Extracts text from the attached invoice PDF. Uses Google Gemini to parse the invoice text into structured fields such as the T-registration number, issuer name, invoice date, and amounts. Normalizes and validates the registration number to ensure it matches the required “T + 13 digits” format. If the format is valid, calls the NTA Invoice Web-API to verify the registration number and interprets the response as valid, invalid, or not found. Appends the invoice details and verification status to a Google Sheets worksheet. Routes the outcome by sending the appropriate Slack alert for invalid/not found/inconclusive results or marking the invoice email as read when the number is valid. Setup Connect your Gmail OAuth2 credentia
Answer customer questions on WhatsApp with OpenAI, Gmail, and Google Sheets
Quick overview This workflow answers incoming WhatsApp customer questions using an OpenAI-powered agent that reads your live website via HTTP requests, escalates unclear or sensitive cases to your support team via Gmail, and logs each conversation to Google Sheets. How it works Triggers when a new WhatsApp message is received. Loads configuration values (company name, website root URL, AI model, language rules, escalation email, and WhatsApp phone number ID) and extracts the customer phone number and message text. Ignores non-text WhatsApp updates (such as images, audio, and status messages). Uses OpenAI with conversation memory to navigate your website by listing links and fetching relevant pages, then generates a structured result containing an answer, escalation flag, sentiment, topic, and source URLs. If the agent marks the request as needing a human, sends an escalation email via Gmail to your support address with the customer details and the drafted reply. Sends the final plain-text reply back to the customer on WhatsApp. Appends the conversation details to a Google Sheets log. Setup Connect credentials for WhatsApp Trigger/WhatsApp Cloud API, OpenAI, Gmail, and Google Sheets
Route urgent Gmail support emails and WhatsApp digests with Groq and Supabase
Quick overview This workflow monitors a Gmail inbox, uses Groq LLM classification to label each support email as urgent, routine, or spam, logs the result to Supabase, sends immediate WhatsApp alerts for urgent messages, and delivers a daily WhatsApp digest summarizing routine emails. How it works Triggers every minute when a new email arrives in Gmail. Uses Groq (via an LLM prompt) to classify the email as urgent, routine, or spam and generate a one-sentence summary and reason. Inserts the email metadata, category, and summary into a Supabase table for tracking. Sends an immediate WhatsApp message to the support owner when the email is classified as urgent and updates the Supabase record to reflect it was notified. Runs on a daily schedule to fetch all routine emails in Supabase that have not yet been included in a digest. Aggregates those routine emails into a single WhatsApp digest message, sends it to the support owner, and marks the included Supabase records as digested. Setup Connect Gmail OAuth2 credentials and ensure the trigger watches the support inbox/labels you want monitored. Add Groq API credentials for the chat model used to classify and summarize emails. Add Supabas
Generate weekly student progress reports with Gemini, Supabase, and WhatsApp
Quick overview This workflow runs weekly to pull student attendance and score data from Supabase, uses Google Gemini to generate per-student performance summaries and attention flags, sends immediate WhatsApp alerts for flagged students, then compiles all summaries into a PDF report, uploads it, and shares it with the coach via WhatsApp. How it works Runs weekly on a schedule. Fetches all student weekly metrics (attendance and scores) from Supabase. Uses Google Gemini to write a short performance summary per student and determine whether the student should be flagged for attention based on attendance and score-drop rules. If a student is flagged, sends a WhatsApp message to the coach and inserts a flag record into Supabase. Aggregates all students’ summaries into a single HTML weekly report. Converts the HTML report to a PDF via an HTTP-based HTML-to-PDF API, uploads the PDF to a file-hosting API, and sends the PDF link/document to the coach via WhatsApp. Logs the report URL to Supabase for recordkeeping. Setup Add Supabase credentials and create the required tables/columns (weekly_student_data, attention_flags, and weekly_reports) referenced by the workflow. Add a Google Gemini (P
Draft personalized cold emails from Google Sheets using Gemini and HubSpot
Quick overview This workflow batch-processes leads from Google Sheets, researches each person and company using Tavily plus Google Gemini, drafts a personalized cold email, then creates/updates the contact in HubSpot with a research note and a saved email draft before marking the lead as Done in the sheet. How it works Runs manually and sets a batch size that controls how many leads to process per run. Reads leads from Google Sheets, skips rows already marked as Done, and normalizes the selected batch into clean lead fields. Processes the batch one lead at a time and uses Tavily search (last 60 days) with Google Gemini to extract the most recent public activity, pain points, and a personalization hook. Cleans and parses the research JSON so it can be reused reliably downstream. Uses Google Gemini to draft a 90–120 word cold outreach email (subject and body) that incorporates the research and offers a free “Automated LinkedIn Post Creator” n8n workflow. Creates or reuses the HubSpot contact, logs a HubSpot note with the research and drafted email, and saves the email as a HubSpot engagement in DRAFT status. Updates the matching row in Google Sheets (by Email) to set Status to “Done
Send and track Slack invoice requests with Gemini, Google Sheets and Gmail
Quick overview Youtube Video: https://youtu.be/42-oHh9w9Eo This workflow listens for Slack @mentions, uses Google Gemini to classify the request and extract invoice details, then reads and updates Google Sheets, generates invoice PDFs with PdfBro, sends invoices or reminders via Gmail, and posts confirmations or errors back to Slack. How it works Triggers when the workflow’s Slack app is mentioned in a specified Slack channel. Uses Google Gemini to classify the message intent (send invoice, remind invoice, or check status) and extract the recipient email and invoice due date. Routes the request based on the extracted intent and stops if the intent cannot be determined. For SEND_INVOICE, looks up the client in a Google Sheets “Client Bill” spreadsheet and posts a Slack error if no matching email is found. If a client is found, generates an invoice PDF with PdfBro, emails it to the client via Gmail, appends/updates the invoice record in a Google Sheets “Client Invoices” spreadsheet, and posts a Slack confirmation. For REMIND_INVOICE, finds an UNPAID invoice for the email in the “Client Invoices” Google Sheet, regenerates the invoice PDF with PdfBro, emails a reminder via Gmail, and p
Report workflow errors to Asana tasks with Google Chat and Grok 4.5 analysis
Quick overview When a monitored workflow fails, this reads its Description field to find the owning client and assignee, looks them up in Asana, analyses the error with Grok 4.5, and creates an assigned task with a severity-based due date. Repeat failures comment on the existing task. How it works Any workflow that names this one as its error workflow triggers it on failure. There is no production trigger by design. The error payload only carries a workflow ID, so an HTTP Request calls the n8n API to read that workflow's own Description field, which holds a small JSON object naming the client and the assignee. Asana projects and users are fetched live and matched by name, so no GID is ever hardcoded. A failed match raises a warning that travels downstream instead of failing silently. Asana is searched for an open task covering the same workflow and node. If one exists, a comment carrying the new execution ID is added rather than a duplicate task. For a new error, Grok 4.5 via OpenRouter returns a root cause, a solution, concrete steps, a severity, and a category, held to a fixed shape by a structured output parser. Severity sets the due date: Critical today, High tomorrow, Medium i
Send and track LinkedIn outreach with Airtable, Unipile, and OpenRouter
Quick overview This workflow automates LinkedIn outreach by using Airtable as a CRM, Unipile to fetch profiles and send connection requests/messages, and OpenRouter to generate personalized connection notes and follow-ups, while tracking accepts and replies via Unipile webhooks. How it works Runs every weekday at 09:00 to pull up to 15 Airtable leads with Connection Status set to New. For each lead, derives the LinkedIn public identifier, fetches the LinkedIn profile from Unipile, and uses OpenRouter to generate a personalized connection note capped at 300 characters. Sends the LinkedIn connection request via Unipile, updates the Airtable record with request details (note, timestamps, invitation ID), and waits 30–90 seconds between sends. Receives Unipile new_relation webhook events, matches the lead by Provider ID, and marks the Airtable record as Accepted with an Accepted At timestamp. Receives Unipile message_received webhook events, filters to inbound replies, finds the matching Airtable lead, and marks it Replied while stopping the campaign. Runs daily at 10:00 to find accepted, no-reply leads due for follow-up, uses OpenRouter to write follow-up #1 or #2, sends the DM via Uni
Scrape and score Amazon products with Apify, OpenAI, and Google Sheets
Quick overview This workflow manually scrapes product results from an Amazon search URL via the Apify Amazon Crawler actor, uses OpenAI to generate a structured product analysis (category, key feature, verdict, value score), and appends the enriched results to a Google Sheets spreadsheet. How it works Runs when you manually click “Test workflow” in n8n. Sends the configured Amazon search URL and scraping limits to the apify Amazon Crawler actor and retrieves the dataset items. Filters out any scraper items that are missing a title or contain an error. Uses OpenAI to analyze each product’s title, brand, price, rating, and review count and returns a structured category, key feature, buyer verdict, and 1–10 value score. Combines the scraped fields and AI analysis into a single row format and adds a timestamp. Appends each enriched product as a new row in Google Sheets. Setup Create an apify API token and add it as an HTTP Header Auth credential used by the Apify request. Add an OpenAI API key as an OpenAI credential and choose the model to use in the configuration. Connect a Google Sheets OAuth2 account and select the target spreadsheet, sheet tab, and columns for appending rows. Upda
Turn LinkedIn post reactions into AI content ideas with OpenAI and Google Sheets
Quick overview This workflow runs daily to fetch your recent LinkedIn post reactions via a RapidAPI LinkedIn endpoint, uses OpenAI to turn each reacted post into a structured original content idea, and appends or updates the results in a Google Sheets idea vault without duplicates. How it works Runs every day at 08:00 using a schedule trigger. Loads configurable settings like your LinkedIn username, reaction type filter, recency window, max posts to analyze, OpenAI model, and output language. Calls the linkedin-api8 RapidAPI endpoint to retrieve posts you recently reacted to and splits the response into individual reaction items. Filters reactions to keep only the selected reaction type (or all when blank) and posts newer than the configured number of days. Limits the number of reactions sent for analysis to control cost. Sends each source post (author, reaction, text, and URL) to OpenAI to generate a structured content idea (category, angle, hook, takeaway, format, and hashtags). Saves each idea to Google Sheets using an upsert that matches on Post URL to avoid duplicate rows. Setup Create a RapidAPI subscription for linkedin-api8 and add an HTTP Header Auth credential that sends
Analyze YouTube comments with OpenAI, Google Sheets, and Gmail
Quick overview This workflow monitors a Google Sheets list of YouTube video IDs, fetches video details and top comments from the YouTube Data API, analyzes the comments with OpenAI into structured sentiment and themes, emails an HTML report via Gmail, and writes the results back to Google Sheets. How it works Triggers every minute when a row in Google Sheets is added or updated. Reads the video ID and status from the row and continues only if the status is set to “Pending”. Calls the YouTube Data API to fetch the video’s metadata and the top comment threads for that video. Flattens the comment threads, calculates basic stats (comment count and average likes), and compiles a limited comment text block for analysis. If comments exist, sends the compiled comments and video title to OpenAI to generate a structured analysis (sentiment score, sentiment breakdown, themes, questions, feedback, insights, and summary). Builds an HTML email report from the structured results, sends it to the configured recipient with Gmail, and updates the Google Sheet row with the analysis fields; if no comments exist, marks the row as “No comments”. Setup Create or duplicate a Google Sheet with at least “Vi
Audit landing page CRO and log results with OpenAI and Data Tables
Quick overview This workflow collects a landing page URL, scrapes its HTML, and uses OpenAI to generate a structured conversion-rate-optimization (CRO) audit with scores and prioritized tips, then renders a styled report in the browser and logs each audit to an n8n Data Table. How it works Presents an n8n Form where the user submits a landing page URL. Fetches the landing page HTML via an HTTP request with retries, and routes to an error page if the URL can’t be retrieved. Sends the scraped HTML and URL to OpenAI to produce a CRO audit including an overall score, category scores, a written roast, and a ranked list of optimization tips. Uses a structured output parser with an OpenAI “fixer” model to validate and auto-correct the AI response into the required JSON schema. Builds a styled HTML report from the structured audit results. Logs the audit metadata (URL, score, verdict, summary, language, timestamp) to an n8n Data Table and displays the report back in the user’s browser. Setup Add an OpenAI API credential and select it for both the main OpenAI model and the output-fixer model. Create or select an n8n Data Table (for example, “CRO Audit Log”) and map the columns used for url,
Enrich company records with social media links using GPT-4o and Supabase
Quick overview This workflow is manually triggered to pull company names and websites from Supabase, crawl each site with an OpenAI-powered agent to extract social media profile URLs, and write the enriched results to a separate Supabase table. How it works Runs when you manually execute the workflow. Reads all rows from the Supabase companies_input table and keeps the name and website fields for processing. Uses an OpenAI (GPT-4o) agent to crawl the company website, following discovered links and extracting social media profile URLs. Forces the agent output into a structured JSON schema and maps the extracted links into a social_media array. Merges the original company name and website with the extracted social media data. Inserts the enriched record into the Supabase companies_output table. Setup Add a Supabase credential and set the correct project details for both reading from companies_input and writing to companies_output. Add an OpenAI API credential for the GPT-4o chat model used by the crawling agent. Ensure your input table has name and website fields or update the field selection and mapping to match your schema. Confirm the output table accepts the mapped fields (for ex
Generate daily auto-service AI videos and post them with OpenAI, Perplexity, AtlasCloud, and Blotato
Quick overview This workflow runs daily (or manually) to research an auto-service topic with Perplexity, generate a caption and text-to-video prompt with OpenAI, render an AI video via AtlasCloud, then publish it to TikTok, YouTube, Instagram, and Facebook through Blotato while sending a Telegram preview. How it works Runs every morning on a schedule (or starts via a manual trigger). Loads your business settings (name, topic, language, video format, and CTA) from a central configuration. Uses Perplexity web research plus an OpenAI chat model to produce a structured caption, hashtags, and a cinematic text-to-video prompt. Sends the prompt to AtlasCloud to generate a short vertical video and waits before polling AtlasCloud for the render status. Repeats the wait-and-check loop until AtlasCloud reports the video render as completed. Prepares the final caption and video URL, then publishes the video to TikTok, YouTube, Instagram Reels, and Facebook Reels via Blotato and sends a Telegram message with the post preview and video link. Setup Add credentials for OpenAI, Perplexity, AtlasCloud (HTTP Header Auth), Blotato, and Telegram. Update the Configuration values (business name, topic, C
Create AI product video ad Shorts from Telegram photos with OpenAI and AtlasCloud
Quick overview This workflow takes a product photo sent via Telegram, uses OpenAI Vision to describe it and OpenAI to write a short-form video ad prompt, generates a vertical video via AtlasCloud, then (after two approvals in Telegram) publishes the Short to YouTube via Blotato. How it works Triggers when a user sends a product photo (optionally with a caption/campaign) to a Telegram bot. Downloads the image from Telegram and uses OpenAI Vision to extract an advertising-focused product description. Uses OpenAI to generate a single cinematic text-to-video prompt plus a YouTube Shorts title and description. Sends the proposed prompt to Telegram and waits for your approval before proceeding. If approved, requests video generation from AtlasCloud and polls the render status until the video is completed. Sends the generated video back to Telegram for preview and waits for a second approval to publish. If approved, publishes the video to YouTube as an unlisted Short via Blotato and notifies you in Telegram (otherwise it stops and sends a decline message). Setup Create and connect a Telegram bot credential, then start a chat with the bot so it can receive photos and send approval prompts.
Publish AI social posts from Telegram to LinkedIn, Instagram, Facebook and Threads with OpenAI and Blotato
Quick overview This workflow listens for a Telegram message or voice note, uses OpenAI to turn it into a cross-platform social caption and matching AI image, publishes the post via Blotato to LinkedIn, Instagram, Facebook, and Threads, then sends a confirmation back to Telegram. How it works Triggers when a new Telegram message is received by your bot. Routes the input as voice or text, downloading voice notes from Telegram and transcribing them with OpenAI. Sends the resulting text to an OpenAI chat model to generate a single ready-to-publish caption plus an image prompt. Generates an image with OpenAI (gpt-image-1) using the returned image prompt. Uploads the generated image to Blotato to get a hosted media URL. Publishes the caption and image to LinkedIn, Instagram, Facebook Pages, and Threads through Blotato. Sends a Telegram message confirming publication and includes the posted caption. Setup Create a Telegram bot in @BotFather, add the bot token as a Telegram credential in n8n, and activate the Telegram Trigger. Add an OpenAI API credential for audio transcription, caption generation, and image generation, and (optionally) adjust the model, language, image size, and quality
Manage Google and Trustpilot reviews with OpenAI and Slack
Quick overview This workflow runs hourly to fetch new Google Business Profile and Trustpilot reviews, deduplicates them, uses OpenAI via a LangChain agent to draft sentiment-aware replies, escalates negative reviews in Slack, and routes positive replies to Slack for approval before posting the reply back to Trustpilot. How it works Runs every hour on a schedule. Fetches the latest reviews from the Google Business Profile API and the Trustpilot API and combines the results. Deduplicates reviews by tracking previously seen review IDs in workflow static data and stops if there are no new reviews. Processes each new review and uses OpenAI (via a LangChain agent) to generate structured JSON containing sentiment, a draft reply, and an optional suggested resolution. Sends negative reviews to a Slack channel for the owner along with the suggested resolution. Sends positive draft replies to Slack for one-tap approval (with a 24-hour timeout) and, if approved, publishes the reply to the Trustpilot API. Sends a Slack alert to the ops channel if the workflow errors. Setup Configure authentication and replace placeholders for the Google Business Profile reviews endpoint (account and location) i