Marketplace
İndirebileceğin 3.557 hazır workflow dosyası, artı 10.661 kaynağa bağlı n8n referansı.
Generate studio and on-model product photos for new Shopify products with Dreem AI
Quick overview This workflow turns every new Shopify product into a complete photo set with Dreem.ai: studio product shots plus an on-model render, generated from one photo and added straight back to the listing. Optional Slack approval before anything goes live. How it works A Shopify webhook fires on every new product. Products without a photo are skipped. The Dreem node renders your chosen shot types from the product's first image (defaults: flat lay + ghost mannequin). The first generated product shot becomes the garment input for the on-model render - a clean studio input instead of your raw upload - on the talent and pose you pick. Each render calls the workflow back when ready. Product shots + on-model shot are appended to the product, keeping existing photos. An optional second row adds back-view shots. Setup Add a Shopify Admin access token credential with read_products and write_products scopes and select it in the Shopify trigger and update nodes. Install the Dreem community node and add a Dreem API key credential (dreem_pk_...) to the Dreem generate nodes. Ensure new Shopify products include at least one image (and a second image if you plan to enable back-shot generati
Deploy curated Docker app stacks to a Hostinger VPS via forms and email
Quick overview This workflow collects a stack choice and notification email via a form, lets you pick a Hostinger VPS, deploys the selected curated app stack as separate Docker Compose projects using the Hostinger API, and emails a per-app deployment summary with ports, container status, and generated credentials. How it works Receives a form submission with the selected stack (Developer, Hobbyist, Freelancer, or AI/LLM) and a notification email address. Uses the Hostinger API to list available VPS instances and presents a second form to select the target virtual machine. Expands the chosen stack into one item per app by generating Docker Compose content and creating random values for any required secrets. Creates a Docker Compose project for each app on the selected Hostinger VPS via the Hostinger API. Waits briefly, polls the Hostinger action status for each deployment, and branches based on whether the action completes successfully. On success, lists the project’s containers and formats a status block including ports, container states, and any generated credentials, and on failure, fetches recent Docker project logs and formats an error block. Aggregates all per-app blocks into
Guard Hostinger VPS CPU spikes with Anthropic, SSH, and email approvals
Quick overview This workflow monitors a Hostinger VPS every 15 minutes for CPU spikes, correlates them with traffic anomalies, and either auto-activates a lockdown firewall or emails a process report with AI analysis and an email-reply approval path to snapshot and kill high-CPU processes. How it works Runs every 15 minutes and loads the VPS ID, SSH host, alert email, and CPU/traffic thresholds. Fetches the last two hours of CPU and network traffic metrics from the Hostinger API and determines whether the latest CPU usage exceeds the configured threshold and whether traffic is anomalous. When a CPU spike is detected, connects over SSH to run ps aux --sort=-%cpu, formats the top processes, and flags PIDs exceeding the kill CPU threshold. Sends the raw process list to Anthropic (Claude) to generate a short diagnosis and recommendation. If the spike appears traffic-driven, lists/creates a Hostinger “lockdown” firewall that only allows the configured ports, activates it on the VPS, and emails a lockdown alert. If the spike is not traffic-driven, writes a pending-approval case entry to /var/log/n8n-cpu-guard.log over SSH and emails a report with the case ID, process table, AI analysis,
Send daily Zillow new-listing digests to Gmail with ScraperAPI
Quick Overview This workflow monitors Zillow searches using ScraperAPI’s AI Parser, stores seen listings in n8n Data Tables, and emails a daily HTML digest of newly found listings via Gmail. How it works Runs on a daily 9AM schedule or manually to check for new listings across saved Zillow search URLs. Loads all search configurations from an n8n Data Table and processes them one at a time. Uses ScraperAPI AI Parser to scrape each Zillow search results page and extract listing fields like address, price, beds, baths, and URL. Filters the scraped listings against the search thresholds and compares them to previously logged ZPIDs in an n8n Data Table to identify new listings. Writes each newly discovered listing into the “seen” Data Table to prevent duplicate alerts in future runs. Retrieves all listings first seen today, builds an HTML digest grouped by search name, and sends it as a Gmail email. Setup Create n8n Data Tables access (or enable Data Tables in your n8n instance) and run the manual initialization trigger once to create and seed the zillow_searches and zillow_seen tables. Add your ScraperAPI credentials, run the “Create Parser” manual trigger once, and copy the resulting
Route meeting action items to Slack using Gmail, OpenAI, and Google Sheets
Quick overview This workflow watches a Gmail label for new meeting transcript emails, extracts the transcript, uses OpenAI to generate a summary and action items, routes urgent items to the right Slack channel, and logs the meeting and action items to Google Sheets. How it works Triggers every minute when an unread email arrives in Gmail with the label Transcripts. Applies your configured Google Sheets and Slack settings, then extracts meeting metadata and transcript text from the email body. Reads the existing meeting log from Google Sheets and skips processing if the email matches a previously logged message ID or meeting hash. Sends the transcript to OpenAI to produce a JSON analysis including summary, decisions, risks, and structured action items. Parses and normalizes the action items, then routes the result as urgent, standard, or FYI based on priority and due date threshold. Posts a formatted message to the appropriate Slack channel when action items exist, otherwise marks the run as FYI. Appends the meeting record to the Meetings sheet and writes each extracted action item as a separate row in the ActionItems sheet. Setup Connect credentials for Gmail OAuth2, Google Sheets
Create TikTok carousel posts with Upload Post, Google Sheets, Gemini, GPT-4.1
Quick overview This workflow runs daily to pull TikTok post and profile analytics from Upload Post, updates a Google Sheets performance log, uses Google Gemini and OpenAI to generate a new carousel concept and caption, creates four images via fal.ai, publishes to TikTok, and updates a persistent “Agent Skill” sheet. How it works Runs on a daily schedule (or manually) and loads product, Upload Post, and Google Sheets configuration values. Reads the Google Sheets “Performance Log,” selects posts missing stats or posted recently, fetches TikTok post analytics from the Upload Post API, and writes updated metrics back to the sheet. Aggregates the refreshed history, fetches TikTok profile analytics from Upload Post, reads the “Agent Skill” sheet, and compiles a single context summary. Uses Google Gemini (via a structured JSON output) to generate a TikTok carousel plan including caption, strategy notes, four slide prompts, hashtags, and an engagement question. Sends the four prompts to fal.ai to generate four 9:16 PNG carousel images and collects their hosted image URLs. Uses OpenAI (GPT-4.1) to write a short TikTok photo-post description, publishes the carousel to TikTok via Upload Post
Collect post-purchase product reviews with WooCommerce, Google Sheets, and SMTP
Quick overview This workflow sends post-purchase review request emails for WooCommerce orders, stores expiring form links in Google Sheets, optionally shortens links with Dub.co and delays delivery, serves a hosted rating form via n8n webhooks, and submits collected reviews back to WooCommerce. How it works Receives an order completion event via a WooCommerce webhook or an external POST webhook and returns a 200 OK response. Normalizes the incoming order payload, generates a unique form token and expiry, and builds a customer-specific review form URL. Fetches each product’s image and permalink from the WooCommerce REST API, aggregates the product list, and appends the form record to a Google Sheets tab. Optionally shortens the form URL using the Dub.co API and optionally waits a configured number of days before sending the message. Renders an HTML email containing the ordered products and the review link and sends it via SMTP to the customer. When the customer opens the review link, looks up the form token in Google Sheets, validates status/expiry, and serves either the multi-product rating form HTML or an error page. When the form is submitted, validates the token again, posts eac
Organize VNTANA showroom assets by style and color via webhook and CSV report
Quick overview This workflow receives a VNTANA showroom event (or a manual UUID) via webhook, fetches the showroom, validates naming and metadata rules, reorganizes products into ordered groups, updates the showroom in VNTANA, and returns a CSV report of the new layout. How it works Receives a POST webhook containing either a showroomUuid field or a VNTANA showroom event payload with showroom.uuid. Validates and extracts the showroom UUID from the request body. Calls the VNTANA API to fetch the full showroom details and product list. Enforces organization rules by requiring a Style attribute on every product, a _.ext filename pattern, and unique color codes within each style group, then builds grouped and sorted ordering data. Updates the same showroom in VNTANA by writing the computed groups and per-product order back via the API. Generates a CSV “receipt” listing each asset UUID, name, assigned group, and order, and returns it as a downloadable file in the webhook response. Setup Create and configure a VNTANA API credential in n8n and assign it to the VNTANA API requests. Ensure showroom assets in VNTANA have a non-empty Style attribute and follow the _.ext naming pattern with un
Monitor competitor web page changes with HTTP and Slack or Discord
Quick overview This workflow checks a list of competitor web pages every six hours, detects content changes by hashing cleaned page text, and posts a diff-style alert to a Discord or Slack channel via an incoming webhook. How it works Runs every 6 hours on a schedule. Loads a configured list of target competitor page URLs and the destination Discord/Slack webhook URL. Fetches each target page over HTTP with browser-like headers and continues even if a request fails. Converts the fetched HTML into cleaned plain text, stores a baseline on first run, and compares the latest hash against the previously saved version. When a change (or fetch error) is detected, generates a message including the URL and a small list of added/removed lines. Sends the alert message to your Discord or Slack webhook endpoint. Setup Create an incoming webhook in Discord or Slack and paste its URL into the workflow configuration. Update the target list with the competitor page names and URLs you want to monitor. Ensure n8n can persist workflow static data between runs (so change history is retained) and that your instance can reach the target sites over HTTP. Requirements n8n version 1.60+. A Discord or Slack
Extract invoice data from Google Drive images with GPT-4o and Postgres
Quick overview This workflow watches a Google Drive folder for new invoice images, extracts key invoice fields with OpenAI vision, checks for duplicates in Postgres, and then stores the invoice or moves the file into processed, duplicate, or failed folders. How it works Triggers every hour when a new file is created in a specific Google Drive folder. Downloads the new file from Google Drive and sends the image to OpenAI (GPT-4o) to extract invoice fields as JSON. Cleans and parses the AI response into structured invoice data, routing invalid or unparseable results to a failed path. Checks Postgres to see if an invoice with the same vendor name, invoice number, and total already exists. If the invoice is a duplicate, moves the source file in Google Drive to a duplicate folder. If the invoice is not a duplicate, inserts the invoice into the Postgres invoices table (status set to processed) and moves the source file to a processed folder. Setup Connect Google Drive OAuth2 credentials and set the incoming, processed, duplicate, and failed folder IDs to match your Drive structure. Add an OpenAI API credential and ensure the selected model (gpt-4o) is available for image analysis. Add Po
Post TikTok, YouTube Shorts and Instagram Reels with Airtable, OpenAI and Google
Quick Overview This workflow runs on a schedule, pulls the next publish-ready video from Airtable, uses OpenAI, Google Gemini, and CloudConvert to generate a transcript, title, description, tags, and hashtags, then uploads to YouTube Shorts, posts an Instagram Reel via Meta Graph API, and queues TikTok publishing via Google Sheets. How it works Runs on a schedule (or manually) and waits a random number of minutes to stagger posting. Searches Airtable for content marked Publish = true and Status = “In Publish Queue”, then selects a single record to process. Downloads the video, converts it to MP3 with CloudConvert, and transcribes the audio with OpenAI. Uses OpenAI and Google Gemini to extract a main keyword, generate a YouTube-optimized title, and create YouTube tags, hashtags, and a full YouTube description, then derives a shorter content-only caption for Instagram/TikTok. Uploads the video to tmpfiles.org to generate a direct file URL and updates the Airtable record with the generated metadata and set Status = “Published”. Uploads the video to YouTube with the generated title, description, and tags. Creates and publishes an Instagram Reel via the Meta (Facebook) Graph API after a
Score LinkedIn job matches with OpenAI, Google Sheets, Slack, and Apify
Quick overview Runs fetch_cat/linkedin-jobs-scraper daily to collect recent LinkedIn jobs, scores each listing against your candidate profile with OpenAI, saves qualified matches to Google Sheets, and sends the five strongest results to Slack without redelivering previously processed job IDs. How it works Runs on a daily schedule (or via manual trigger) and ensures an n8n Data Table exists to track which LinkedIn job IDs have already been delivered. Runs the FetchCat LinkedIn Jobs Scraper (fetch_cat/linkedin-jobs-scraper) through Apify's API using your configured keywords and location, waits for the Actor run to finish, and downloads up to 10 structured job records from its dataset. Normalizes the scraped job records, caps the list to 10 items, and skips any jobs that already exist in the delivery ledger. Sends the remaining jobs to OpenAI in one structured request to score each job against your candidate profile and filters out results below the minimum score. Appends or updates qualified matches in Google Sheets (upserting by LinkedIn job ID) and formats a Slack message containing the five highest-scoring jobs. Posts the digest to your chosen Slack channel and records the deliver
Run a Telegram voice and chat assistant with OpenAI, Gmail, Calendar, and Notion
Quick overview This workflow turns a Telegram bot into a personal assistant that understands text or voice notes (transcribed with OpenAI), can read Gmail and Google Calendar, look up Notion tasks and contacts, and can draft and send emails with an approval step in Telegram. How it works Triggers when a new Telegram message arrives. Loads assistant settings (name, OpenAI model, languages, memory window) and checks whether the message is a voice note or plain text. If it is a voice note, downloads the audio from Telegram and transcribes it with OpenAI; otherwise it uses the message text as the user input. Sends the user input to an OpenAI-powered agent that keeps short-term chat memory and decides whether to call Gmail, Google Calendar, or Notion tools to answer the request. If the agent decides to send an email via Gmail, it asks for explicit approval in Telegram before proceeding. Sends the agent’s final response back to the user in Telegram. Setup Create a Telegram bot with @BotFather, add your Telegram credentials in n8n, and start a chat with the bot so it can reply to you. Add an OpenAI API credential and set the desired chat model and transcription language in the Configurati
Build multi-touch attribution reports with Supabase multi-model MTA
Quick Overview This workflow ingests marketing touch events, stores them in Supabase, stitches identities by shared email, and calculates first-touch, last-touch, linear, and time-decay multi-touch attribution credit per channel, outputting a side-by-side model comparison. How it works Runs when triggered manually (or can be adapted to receive real touch events via a webhook). Loads configuration such as the channel list and the time-decay half-life window. Generates a batch of synthetic multi-touch customer journeys for the demo run. Writes all touch events to a Supabase table via the Supabase REST API. Reloads the stored touches from Supabase and merges visitors into a single identity when they share an email address. Computes revenue-weighted channel credit across converting journeys using first-touch, last-touch, linear, and time-decay attribution models. Prints a formatted comparison table of channel credit across the four models. Setup Create a Supabase project and table (for example, mta_touches) to store touch events, matching the fields used in the workflow (visitor_id, email, channel, ts, is_conversion, revenue). Add SUPABASE_URL and SUPABASE_KEY environment variables to
Reconcile blended ROAS, MER and CAC with Meta, Google, TikTok and Claude
Quick overview This workflow pulls ad spend and platform-reported revenue from Meta (with placeholders for Google Ads and TikTok), combines it with your actual store revenue and new-customer count, calculates blended ROAS/MER and blended CAC plus over-claiming, and uses Anthropic Claude to generate a short executive efficiency brief. How it works Runs manually to start the reconciliation for the configured date range. Loads the reporting window plus store revenue, new-customer count, and any additional platform spend/revenue inputs. Calls the Meta Marketing API to fetch account-level ad spend and conversion value, then merges it with the additional platform figures. Calculates total spend, total platform-reported revenue, blended ROAS/MER, blended CAC, and the over-claim amount and percentage, plus per-platform reported ROAS. Sends the reconciled metrics to Anthropic Claude to generate a terse JSON brief with a verdict, over-claim note, and recommended action. Prints a console scorecard with blended ROAS/MER, CAC, over-claiming, per-platform breakdown, and the Claude-generated brief. Setup Set the environment variables META_ACCESS_TOKEN, META_AD_ACCOUNT_ID, and optionally META_API_
Find wasted Meta ad spend by placement, region, age and hour with Claude
Quick overview This workflow pulls the last 30 days of Meta Ads insights across multiple breakdowns, calculates an account cost-per-result benchmark, flags high-waste delivery slices, and uses Anthropic Claude to rank a prioritized “kill list” with recommended actions. How it works Runs when triggered manually. Sets the analysis configuration, including the date preset, spend floor, cost-per-result multiple, minimum attribution threshold, and which Meta “action” events count as results. Queries the Meta Marketing API for account-level insights and breakdown insights (placement, region, age/gender, and hour), then computes the account cost-per-result benchmark and skips breakdowns with low conversion attribution coverage. Flags breakdown slices that exceed the spend floor and either have zero results or a cost-per-result above the benchmark threshold, then calculates “at risk” spend and keeps the top waste candidates. Sends the waste list and benchmark context to Anthropic Claude to rank the slices and return a recommended action (pause, exclude, or reallocate) with a one-line rationale. Prints a formatted wasted-spend report (and returns the parsed JSON ranking) for use in downstre
Monitor Meta CAPI event match quality with Meta Graph API and Claude
Quick overview This workflow runs on demand to monitor Meta Conversions API Event Match Quality across the pixels in a Meta ad account, calculates a weighted 0–100 match-quality score from Graph API stats, and uses Anthropic Claude to summarize risks and fixes for any pixels below an alert threshold. How it works Runs when you manually trigger the workflow. Loads configuration for which pixels to monitor, how far back to consider pixels active, which conversion events to weight more heavily, and the alert threshold. Uses the Meta Graph API to discover recently active pixels (or uses a provided list of pixel IDs) and pulls per-event “had_pii” coverage stats for each pixel. Computes a weighted match-quality score per pixel (conversion events count triple) and builds a scorecard sorted from lowest to highest. Sends the scorecard to Anthropic Claude to generate a short JSON summary with a one-line risk and a concrete fix for each pixel below the threshold. Prints a formatted EMQ scorecard with alerts and Claude’s recommendations to the execution log. Setup Create a Meta access token with permissions to read pixel stats, and set META_ACCESS_TOKEN, META_AD_ACCOUNT_ID, and (optionally) ME
Create and approve AI social posts with OpenAI, Telegram and Blotato
Quick overview This workflow runs daily to generate an AI-written social post and DALL·E image with OpenAI, sends it to Telegram for approval, and—if approved—publishes it to LinkedIn, X, Instagram, Facebook, and Threads via Blotato while logging outcomes to Google Sheets. How it works Runs every 24 hours on a schedule trigger. Uses OpenAI to generate a single content topic (title, angle, and hook) based on your niche, audience, and language settings. Uses OpenAI to write one social post with a separate hashtag line and an image prompt in your specified tone and style. Uses OpenAI Images (DALL·E) to generate a matching image and extracts a shareable image URL. Sends the post text, hashtags, and image link to Telegram and waits for you to approve or skip within the configured time window. If approved, publishes the post with the image to LinkedIn, X, Instagram, Facebook, and Threads using Blotato and appends a “Published” log row to Google Sheets. If skipped or not approved, appends a “Skipped” log row to Google Sheets. Setup Add OpenAI API credentials and ensure the selected chat model and image model in the configuration match models available to your account. Add Telegram credent
Track and analyze TikTok videos with Apify, OpenAI, and Google Sheets
Quick overview This workflow runs daily (or manually) to fetch recent videos from a list of TikTok accounts via Apify, transcribes each video with OpenAI, generates content insights and translations, and then appends or updates one row per video in Google Sheets. How it works Runs on a daily schedule (or manually) and loads configuration values like the date window, video limit, output language, and Apify actor. Reads the TikTok usernames to monitor from the accounts tab in Google Sheets. Calls the Apify TikTok Scraper API to retrieve the latest videos for each configured account. Filters and normalizes the results to keep only videos published within the last N days and extracts metrics, captions, hashtags, and download URLs. Downloads each video file and transcribes it with OpenAI speech-to-text. Sends the transcription plus caption and hashtags to OpenAI to extract a hook, classify the content, infer the video format, and translate the transcription. Writes the combined video metadata, transcription, and AI insights to the insights tab in Google Sheets using an append-or-update operation. Setup Create a Google Sheets spreadsheet with an accounts sheet containing a username colum
Generate CCTV-style animal TikTok videos with OpenAI, Seedance and Blotato
Quick Overview This workflow runs every four hours to generate a CCTV-style animal video concept with OpenAI, renders an 8-second vertical clip using AtlasCloud Seedance, then publishes it to TikTok via Blotato and sends a preview to Telegram. How it works Runs every 4 hours on a schedule. Uses OpenAI to create a hyper-realistic CCTV-style image and video prompt based on a random (or overridden) animal, location, action, and a current timestamp overlay. Starts a Seedance text-to-video render on AtlasCloud with the generated prompt, duration, aspect ratio, and optional audio. Polls AtlasCloud at a fixed interval until the render status is completed or succeeded and retrieves the output video URL. Uses OpenAI to generate a TikTok-ready title and exactly five hashtags from the video concept. Publishes the generated video to TikTok via Blotato with the title/hashtags and the selected privacy level, flagged as AI-generated. Sends the rendered video and title as a preview to a specified Telegram chat. Setup Add OpenAI API credentials and set the prompt and caption models in the Configuration values if you want to change them. Add an AtlasCloud API key (HTTP Header Auth) and ensure it is
Route WhatsApp support requests with Claude, Supabase, HubSpot and Slack
Quick overview This workflow turns incoming WhatsApp messages (text, audio, images, and documents) into actionable support interactions by extracting content, detecting sentiment, and using an AI agent with a Supabase knowledge base to route requests to Google Calendar, HubSpot, Slack, Gmail, and back to WhatsApp. How it works Receives incoming WhatsApp messages via a WhatsApp webhook trigger. Routes the message by type and converts it into text using OpenAI Whisper for audio, OpenAI GPT-4o Vision for images, or a PDF extractor for documents (or passes text messages through). Loads the sender’s session context from Supabase and runs sentiment/language detection on the extracted text. Uses a LangChain AI agent (Claude) with Supabase vector search (with OpenAI embeddings and Cohere reranking) plus tool access (Google Calendar, HubSpot, Slack, and Gmail) to produce a structured intent, response, and metadata. Logs conversation analytics (intent, sentiment, message type, and response length) to an n8n Data Table. Routes by intent to either create a Google Calendar event, create/update a HubSpot contact, email a document via Gmail (and upload it to Google Drive), create a HubSpot ticket
Calculate Shopify variant prices from Google Sheets with Slack approvals
Quick overview Video Explanation: https://youtu.be/_geRatkc1kU?si=qALW_nrPrNB4THuO This workflow runs daily to calculate Shopify variant prices from Google Sheets COGS inputs, automatically updates qualifying prices in Shopify, and posts Slack alerts for changes that need manual approval; it also supports Slack-based approvals to apply a proposed price from a Slack thread. How it works Runs every day on a scheduled trigger. Reads product dependency/recipe data from Google Sheets and looks up the latest supplier prices in a second Google Sheets sheet. Calculates raw COGS, landed COGS (with hidden cost percentage), and a target-margin retail price for each Shopify variant. Checks the calculated price against thresholds and either updates the Shopify variant price via the Shopify Admin API or posts an approval-required alert to Slack. Posts a Slack confirmation message when a scheduled Shopify price update succeeds. Triggers on Slack reaction events, verifies an authorized Slack user approved the change, then fetches the Slack thread replies and extracts the variant ID and approved price. Updates the Shopify variant price with the extracted value and posts a final status message to Sl
Extract text from images with Apify Google Lens OCR and Google Sheets
Quick overview Turn image URLs into clean, structured text and log it to Google Sheets automatically. No OCR library, no setup, powered by Apify Google Lens. How it works Runs manually when you click Test workflow. Sets the target public image URL to process. Sends the image URL to Apify (Google Lens OCR) to extract the full text and related OCR metadata. Keeps the key fields (image URL, detected language, full text, and scrape timestamp) from the OCR result. Appends the extracted text and metadata as a new row in Google Sheets. Setup Install the Apify community node and add an Apify API token credential for the OCR step. Add a Google Sheets OAuth credential. Replace the Google Sheets document ID with your spreadsheet ID and confirm the target sheet name/columns for auto-mapping. Update the imageUrl value to a publicly accessible image you want to OCR (PNG/JPG/WebP).
Send prescription PDFs to patients via WhatsApp with Google Gemini and Supabase
Quick overview This workflow listens for incoming WhatsApp messages from clinic staff, uses Google Gemini to extract prescription details, generates a prescription PDF via an HTML-to-PDF API, uploads it to a public URL, sends the document back over WhatsApp, and logs outcomes to Supabase. How it works Triggers whenever a new WhatsApp message is received on your WhatsApp Business Cloud number. Captures configuration values and the incoming message text and sender number. Uses Google Gemini to extract patient name, doctor name, and medication details into structured data and flags any missing required fields. If required details are missing, replies to staff on WhatsApp with what to fix and inserts a needs_review record into Supabase. If details are complete, renders a prescription HTML document, converts it to a PDF via an external HTML-to-PDF API, and uploads the PDF to an external file-hosting API. Sends the prescription PDF to the sender on WhatsApp and inserts a “sent” log record (including the PDF URL) into Supabase. Setup Connect WhatsApp Business Cloud credentials for the WhatsApp trigger and the WhatsApp send steps, and configure the workflow’s webhook in Meta/WhatsApp so in