Skip to content
FlowHubFluxonLab

Code workflows

101 results — all source-linked n8n references

Csheets
free

Extract purchase order line items from PDFs with easybits and Google Sheets

Quick overview This workflow collects purchase order PDFs through an n8n form, extracts header fields and line-item tables with easybits Extractor, appends one row per article to Google Sheets, and shows a completion summary highlighting any missing or incomplete extracted fields. How it works Receives a form submission with one or more uploaded purchase order PDF files. Splits the upload into one workflow item per PDF and processes the PDFs one at a time. Sends each PDF to easybits Extractor to extract purchase order header details and the articles table. Flattens the extracted articles into one row per line item, repeats the PO header fields on each row, and records per-document flags for missing header values or incomplete article fields. Appends the generated rows to a Google Sheets worksheet. After all PDFs are processed, builds a summary of any flagged documents and displays it on the n8n form completion screen. Setup Create an easybits Extractor account, generate an API key, add it as an easybits Extractor credential, and configure the extractor fields (mark_for, po_number, po_date, delivery_date, pr_number, reference_no, and an articles array with article/unit/quantity). Ad

by Felix
Csheetstelegram
free

Deploy Gainium DCA bot pairs with Telegram approval and Google Sheets logging

Quick overview This workflow runs daily, pulls top coins from the Gainium crypto screener, formats them into USDT trading pairs, and asks for Telegram approval before updating and starting a Gainium DCA bot, with optional deployment logging to Google Sheets and Telegram error alerts. How it works Runs every day at 08:00 on a schedule. Queries the Gainium screener for coins meeting the configured filters (market cap threshold, Binance listing, positive 24h change) and sorts them by 24h volume. Cleans the screener results and selects the top N unique SYMBOL_USDT pairs. Sends the proposed pairs to Telegram with Deploy/Skip buttons and pauses until you respond. If approved, replaces the Gainium DCA bot’s pairs, starts the bot, appends a deployment row to Google Sheets, and sends a Telegram confirmation. If skipped, leaves the bot unchanged and sends a Telegram message confirming the skip. Sends Telegram alerts if the Gainium screener call fails or if any other workflow node errors. Setup Install the community node n8n-nodes-gainium and add a Gainium API credential with permission to manage your bot. Create a Telegram bot, add a Telegram API credential in n8n, and set your telegram_chat

by Gainium
Csheets
free

Enrich contact emails and phone numbers with Tomba and Google Sheets

Quick overview This workflow runs on a schedule to read “Pending” contacts from Google Sheets, uses Tomba to find email addresses and (when available) phone numbers, then writes the enriched results back to the same spreadsheet. How it works Runs on a scheduled trigger. Reads rows from a Google Sheets worksheet where the Status column equals “Pending”. Processes the contacts in batches and sends each contact’s name, company, and domain to Tomba to find an email address. If Tomba indicates phone data is available, looks up the phone number in Tomba using the found email address. Normalizes the output (email, phone, score, and enrichment status) and updates the matching row in Google Sheets with the results and Status set to “Done”. Setup Connect your Google Sheets OAuth credentials and set the target spreadsheet and worksheet that contains your contacts. Add a Tomba API credential. Ensure your Google Sheet includes the expected columns (First Name, Last Name, Company, Domain, Status) and output columns (Email, Phone, Score), with Status set to “Pending” for rows you want to enrich.

by Zain Khan
Csheets
free

Enrich LinkedIn profiles into full contacts with Tomba and Google Sheets

Quick overview This workflow runs on a schedule to read “Pending” LinkedIn profile URLs from Google Sheets, uses Tomba to find and enrich contact details (email and phone), and writes the results back to the same sheet with updated status and scoring. How it works Runs on a schedule trigger. Reads rows from a Google Sheets worksheet where the Status column is set to “Pending”. Processes each LinkedIn URL in batches and calls Tomba’s LinkedIn Finder to retrieve the person’s email and phone details. Normalizes the returned contact data (including combining multiple phone numbers) and sets an enrichment status based on whether an email is found. Updates the corresponding row in Google Sheets with the enriched fields (Email, Phone, Score) and marks the Status as “Done”. Setup Connect your Google Sheets OAuth2 credentials and set the target spreadsheet and worksheet that contains LinkedIn URL, Status, and output columns. Add your Tomba API credentials and ensure the LinkedIn URL column contains valid LinkedIn profile links. Make sure your sheet includes a row_number field (used for matching updates) and uses “Pending” as the Status value for rows you want to process.

by Zain Khan
Csheets
free

Track and de-duplicate email leads in Google Sheets from Gmail

Quick overview This workflow polls Gmail for new unread emails with a specific label, extracts lead details from each message, checks Google Sheets for duplicates by email or message ID, and appends only new leads to a designated spreadsheet. How it works Polls Gmail every minute for unread messages matching the search query (for example, emails labeled “Leads”). Extracts sender name and email, subject, message text, phone number (if found), received timestamp, and the Gmail message ID. Reads existing rows from the target Google Sheets tab to compare against previously captured leads. Flags the incoming lead as a duplicate if an existing row matches either the sender email address or the message ID. Appends the lead as a new row in Google Sheets only when it is not flagged as a duplicate. Setup Connect your Gmail OAuth2 credentials and adjust the Gmail trigger query/label and read status filter to match your intake process. Connect your Google Sheets OAuth2 credentials. Update the Google Sheet ID and sheet tab name in the extraction step, and ensure the sheet has columns for Email, Name, Subject, Phone, Message, Received At, and Message ID. Requirements n8n Cloud or self-hosted n8n

by Precision Tech
CsheetsWtelegram
free

Reply to Instagram comments with Groq, Telegram approval, and Google Sheets logging

Quick Overview This workflow monitors new Instagram comments, generates a draft reply with Groq (OpenAI-compatible chat completions), sends it to Telegram for YES/NO approval, and logs the decision in Google Sheets before optionally posting the approved reply back to Instagram. How it works Runs every 10 minutes, reads existing comment IDs from Google Sheets, then fetches your 10 most recent Instagram media items and their comments via the Instagram Graph API. Filters out comments made by your own Instagram account and limits processing to recent comments. Skips any comment already logged in Google Sheets, and sends new comments (with the post caption as context) to Groq to generate a short draft reply. Sends the draft reply to a Telegram chat for approval and appends a “pending_review” row to Google Sheets with the Telegram message ID for tracking. Runs every 3 minutes, polls the Telegram Bot API for new updates, and keeps an offset so only new messages are processed. For Telegram messages that are replies to an approval request, matches the replied-to message ID to the pending row in Google Sheets and routes the decision. If the reviewer replies YES, posts the draft as an Instagr

by Emel
Csheets
free

Capture and deduplicate inbound leads with webhooks and Google Sheets

Quick overview Capture inbound leads via webhook, validate and sanitize the data, deduplicate against Google Sheets, and store only clean leads ready to feed an AI-powered email/SMS nurture sequence. How it works Webhook receives the lead POST request from any form builder or landing page. Validation Missing email or phone returns a 400 and stops execution. Sanitize & normalize Trims whitespace, lowercases email, normalizes phone to international format, sets lead stage to 1, fills defaults for optional fields. Dedupe check Looks up the email in Google Sheets; flags duplicates safely even when the sheet returns zero rows. Duplicate → 200 "Already Registered", execution ends. New lead → appended to Sheets, 200 "Lead Accepted" returned. Setup Import all 4 workflows they share one Google Sheet. Create a sheet with these exact headers: Name, Email, Phone, Stage, Next Followup At, Has Replied, Lead Source, Service of Interest, SMS Consent Connect Google Sheets OAuth2 in the Lookup and Append nodes; paste your Sheet ID/tab into the 🔧 CONFIG nodes. Copy the webhook URL into your form builder. Map fields to: name, email, phone, lead_source, service_of_interest, sms_consent Requirements Go

by Syed Jawad
CsheetsW
free

Log Strava zone 2 and 5K test runs to Google Sheets

Quick overview This scheduled workflow pulls your latest running activities from Strava, classifies them as Zone 2 runs or 5K tests based on pace and distance, and writes the formatted results into specific cells in a Google Sheets training log while tracking processed activity IDs. How it works Runs on a daily schedule. Fetches recent activities from the Strava API for the authenticated athlete. Processes each activity to calculate pace (min/km) and routes it into “Zone 2” or “Test Run” based on sport type, duration, pace, and distance rules. Formats the selected activities into sheet-ready fields (date, pace string, moving time, and distance) and labels them as ZONA 2 or TEST 5KM. Reads the target Google Sheets range to find the next available slots and checks an “IDs Registrados” list to avoid reprocessing activities. Updates Google Sheets with the activity details in the appropriate cycle columns and appends new Strava activity IDs to the “IDs Registrados” cell. Setup Connect your Strava OAuth2 credentials and ensure the athlete has permission to read activities. Connect your Google Sheets OAuth2 credentials and update the spreadsheet URL/ID and sheet (tab) selection used for r

by Facundo Witt
Csheets
free

Enrich CRM contacts in Google Sheets with Tomba firmographic data

Quick overview This workflow watches a Google Sheets contacts list for new rows and enriches each contact using Tomba to find a likely email address, company firmographics, and a phone number, then writes the enriched fields back to the same spreadsheet. How it works Triggers when a new row is added to a specified Google Sheets worksheet (polled every minute). Processes new contacts one at a time to control throughput. Uses Tomba to find an email address for the contact based on the provided domain, company, and name. Uses Tomba to enrich the company with firmographic details such as industry, company size, revenue, and location. Uses Tomba to look up a company phone number from the contact’s domain. Combines the enrichment results into a single contact record and sets a status like “Enriched” or “Not Found.” Updates the matching row in Google Sheets with the enriched Email, Phone, Industry, Company Size, Revenue, Country, and Status fields. Setup Connect Google Sheets credentials and select the target spreadsheet and worksheet to monitor. Add Tomba API credentials to each Tomba step used for email, company, and phone enrichment. Ensure your Google Sheet includes the destination co

by Zain Khan
Csheets
free

Track and notify lead callbacks with Tomba, Google Sheets, and Slack

Quick overview This workflow receives new lead details via a webhook, looks up a company phone number with Tomba using the lead’s domain, updates a Google Sheets lead tracker, and sends a formatted callback alert to a Slack channel. How it works Receives lead data in a POST webhook request. Processes incoming leads in batches to handle multiple items safely. Uses Tomba to find a phone number for each lead based on the provided company domain. Formats the lead details and enrichment results into tracker fields and a Slack-ready message. Updates the matching lead row in Google Sheets (matched by Domain) with the phone, status, and “Slack Notified” flag. Posts the callback alert message to a selected Slack channel and continues until all leads in the batch are handled. Setup Configure the source system to send lead payloads to the workflow’s webhook URL (path: /GHL) with fields like Full name, Email, Company name, and Company domain. Add your Tomba API credentials to enable phone lookup by domain. Connect your Google Sheets credentials and set the target spreadsheet and sheet, ensuring columns like Domain, Phone, Status, and Slack Notified exist. Connect your Slack credentials and cho

by Zain Khan
Csheets
free

Build hospitality lead lists from Booking.com using Apify and Google Sheets

Quick Overview This workflow uses Apify and Google Sheets to find accommodation leads from Booking.com, enrich them with Google Maps contact details, discover official websites via Google Search, scrape additional contacts from those sites, and then append the finalized partner list to a Google Sheets spreadsheet. How it works Manually triggers and sets the destination, maximum number of results, and property type to search. Runs the Apify Booking Scraper actor for the configured destination and retrieves the Booking.com dataset results. Maps each Booking.com result into a normalized lead record, using Booking trader details (when available) for initial email and phone fields. Runs the Apify Google Maps with Contact Details actor for leads missing email and merges any найден emails, phones, websites, and social links into the lead records. For leads still missing both email and website, runs the Apify Google Search Scraper actor to find an “official website” candidate and assigns the best non-OTA domain. Scrapes those candidate websites with the Apify Contact Info Scraper actor to extract emails/phones/socials and merges the results into the final lead rows. Appends the finalized l

by Apify
CsheetsW
free

Enrich Google Maps business leads with Apify and Google Sheets

Quick overview This workflow runs on demand to scrape Google Maps business leads with Apify, optionally fetches each business website to extract an email address, and appends the enriched lead data to a Google Sheets spreadsheet. How it works Starts manually and loads the Apify API key, Google Maps search query, max results, and target Google Sheets spreadsheet ID. Launches the Apify Google Places scraper run for the provided search query and stores the returned run ID and dataset ID. Polls Apify until the actor run status is SUCCEEDED, waiting and retrying until results are ready. Downloads the scraped business items from the Apify dataset and processes them one business at a time. If a business has a website, requests the site HTML and extracts the first valid email address found; otherwise it keeps the email blank. Appends each enriched lead (name, email, phone, rating, address, review count, and website) as a new row in Google Sheets. Setup Add your Apify API token and replace the placeholder value in the configuration step. Connect Google Sheets credentials in n8n and set the target spreadsheet ID (and sheet name if not Sheet1). Update the Google Maps search query and max resu

by Igor
Csheets
free

Find and log high-quality domain contacts with Tomba and Google Sheets

Quick overview This workflow runs on a schedule, pulls “Pending” company domains from Google Sheets, uses Tomba to find email addresses for each domain, filters for high-scoring personal contacts, logs the results to an enrichment sheet, and marks each processed domain as Done. How it works Runs on a schedule to check a Google Sheets “Company domains” tab for rows where the status is set to “Pending”. Processes the pending rows one domain at a time to avoid handling the whole list in a single run. For each domain, queries the Tomba API to retrieve up to 50 email addresses associated with the company domain. Filters the returned results to keep only personal emails with a quality score of 90 or higher and extracts key contact fields (name, email, position, company, domain). Appends the filtered contacts to a Google Sheets “Enrichment” tab. Updates the original domain row in Google Sheets to set the status to “Done” and continues with the next pending domain. Setup Connect Google Sheets credentials and update the spreadsheet and sheet references for both the source “Company domains” tab and the destination “Enrichment” tab. Add your Tomba credentials and ensure the domain input maps

by Zain Khan
CsheetsW
free

Monitor negative customer reviews with an HTTP API, Google Sheets and Slack

Quick Overview This workflow polls your review API every 6 hours, filters for reviews rated 3 stars or lower, and posts an alert to a Slack channel for each negative review. How it works Runs every 6 hours on a schedule. Fetches the latest reviews from a configured HTTP endpoint. Filters the returned items to keep only reviews with a rating of 3 or below. Checks whether any negative reviews were found and stops if none exist. Posts each negative review to a selected Slack channel with the rating, author, and review text. Setup Provide a reviews API endpoint (and any required authentication) in the HTTP Request node. Connect Slack using an OAuth2 credential. Select the target Slack channel and adjust the rating threshold in the filter logic if you want a stricter or looser definition of “negative”.

by Redowan Ahmed Farhan
CsheetsW
free

Scrape business emails from Google Maps to Google Sheets

Quick overview This workflow takes a list of Google Maps search queries, extracts candidate business website URLs from the search results, visits each site, scrapes email addresses from the page content, and appends cleaned, deduplicated emails to Google Sheets fully automated, no manual research needed. How it works A manual trigger fires with a pinned list of Google Maps search queries, each representing a location and business type combination. A query loop iterates through each query, launching a sub-workflow execution per query and applying a configurable wait between executions to reduce request bursts. The sub-workflow sends an HTTP GET to the Google Maps search results URL for that query and reads the raw HTML response. A code node extracts all URLs from the HTML using a regex pattern, after which a filter node removes known system domains such as Google, gstatic, schema.org, and Wix internals, and a deduplication node removes repeated URLs before visiting. A URL loop processes each candidate business website one at a time, fetching the page HTML and passing it into the email processing flow. A code node applies a regex to the fetched page content to extract email-shaped st

by Ravi Patel
Csheets
free

Monitor SaaS contract renewals from Google Sheets and send Slack alerts

Your automated SaaS contract renewal monitor that sends multi-stage Slack alerts 45, 30, 14, and 7 days before each contract expires. Stop missing renewal deadlines and overpaying on auto-renewals. This workflow monitors your contract calendar in Google Sheets, sends progressive Slack notifications with manual research checklists, and tracks alert history to prevent duplicate notifications. You manage the vendors; it manages the reminders. This is not a generic reminder bot. It is a production-ready procurement intelligence system designed to give finance and operations teams the advance notice needed to research alternatives, negotiate better terms, and avoid costly auto-renewals. How the workflow works The workflow executes in four stages: 1. TRIGGER & SCHEDULE The workflow runs daily at 9:00 AM using a cron trigger (0 9 * * *). The schedule runs in your configured timezone (default: UTC). A single daily check scans your entire contract portfolio and identifies which renewals are entering their alert windows. 2. LOAD & VALIDATE Using Google Sheets' native integration, the workflow reads your contract tracking spreadsheet (columns A-F: Contract Name, Vendor Name, Renewal Date, Ann

by Mychel Garzon
CsheetsWpostgres
free

Check job apply URLs and deactivate dead links in Postgres and Google Sheets

Keep your job listings database clean without manual checks. Every three days, this workflow fetches all active jobs from your Postgres database, runs each application URL through a validation check, identifies dead links via HTTP status codes and soft-404 redirect detection, then marks failed entries as inactive in both Supabase and Google Sheets simultaneously. Who it's for Teams running a job aggregator, career platform, or internal hiring tracker who store job listings in Postgres and want stale or broken apply links removed automatically — without waiting for user reports. How it works A Schedule Trigger fires every 3 days All active jobs are fetched from your Postgres (Supabase) database via a SQL query A Prepare URLs node filters out any rows with missing, malformed, or non-HTTP URLs before they're checked An HTTP Request node sends a HEAD request to each apply_url A Find Dead Jobs code node analyzes each response and flags a job as dead if: Status code is 404 or 410 DNS resolution fails (ENOTFOUND) Connection is refused (ECONNREFUSED) A 301/302/307 redirect points to a different path — indicating the job was removed and the ATS is silently redirecting (soft-404 detection) I

by Panth1823
CsheetsWpostgres
free

Aggregate multi-source job boards into Supabase and Google Sheets

Stop manually checking dozens of career pages. This workflow runs every morning, hits the public APIs of 8+ ATS platforms and job boards, normalizes every listing into a single clean schema, and syncs everything to Supabase and Google Sheets deduplicated and ready to query. Who it's for Job seekers, recruiters, or career platforms that want a consolidated, up-to-date feed of openings from specific companies without scraping, without API keys, and without paying for a jobs aggregator. How it works A Schedule Trigger fires daily at 8 AM IST A Company List code node defines all sources grouped by ATS type (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, RemoteOK, and board APIs like Remotive, Himalayas, Arbeitnow, Jobicy) A Prepare Request node builds the correct API URL and headers for each source, including multi-page pagination for SmartRecruiters (up to 500 jobs via offset) and Himalayas (up to 500 via page param) An HTTP Request node fetches all sources in batches of 5 A Parse + Enrich + Filter node normalizes all divergent JSON structures into a unified schema — resolving ISO country codes, Indian city detection, salary parsing across all formats, and domain-based filtering

by Panth1823
CsheetsW
free

Generate 7 new LinkedIn posts from top Apify posts using OpenAI and save to Google Sheets

This workflow helps you turn your best-performing LinkedIn posts into a repeatable content creation system. It pulls LinkedIn post data from Apify, normalizes and ranks the posts by impressions, identifies the strongest-performing content, and sends the top posts to OpenAI for pattern analysis. Based on those insights, it generates 7 new LinkedIn post ideas, then saves both the insights and generated posts to Google Sheets for easy review and planning. It is ideal for founders, creators, consultants, marketers, and social media teams who want to use real LinkedIn performance data to guide new content creation with a faster and more structured workflow.

by Jonas Frewert
CsheetsW
free

Send personalized LinkedIn connection requests with Google Sheets and Unipile

Send personalized LinkedIn connection requests automatically using n8n, Google Sheets, and Unipile — with built-in safety limits, duplicate prevention, and full invitation tracking. Scale your LinkedIn outreach without manually sending a single connection request. This workflow reads your leads from a Google Sheet, filters out already-contacted prospects, and sends each one a personalized connection note via LinkedIn — automatically, on a schedule, and safely within LinkedIn's limits. Built for founders, sales teams, and recruiters who want consistent LinkedIn outreach without repetitive manual work. Every request is tracked back to your sheet with its invitation ID and status, making follow-up workflows easy to build on top. Good to know Unipile pricing is based on the number of connected accounts, not per API call or per message sent. The base plan starts at €49/$55 per month and includes up to 10 linked accounts For this workflow, connecting one LinkedIn account counts as one account Unipile does not enforce usage limits — you can send as many requests as you need. However, LinkedIn itself applies its own rate limits and usage policies A 7-day free trial is available with all fe

by Salman Mehboob
CsheetsW
free

Make outbound sales calls from Google Sheets using a VAPI voice agent

This n8n workflow automates outbound phone calls to new leads using VAPI, with built-in timezone detection to ensure you're only calling during business hours. Use cases include appointment setting, lead qualification, follow-up surveys, payment reminders, and sales outreach—anywhere you need to scale phone conversations without scaling headcount. Good to know You'll need a VAPI phone number and configured voice agent before using this workflow. VAPI offers $10 free credit when you sign up (~70 minutes of calls). Create your account here. The timezone logic covers common country codes (UK, US, EU, Australia, India, UAE, Singapore, Japan). You can extend this in the Code node. How it works A new row in Google Sheets triggers the workflow (you can swap this for a webhook, form, or CRM trigger). The phone number is sanitised—stripping spaces, dashes, and brackets so it's in the correct format for dialling. The lead's timezone is determined from their country code, and the workflow checks whether it's between 8am-5pm local time. If not, it waits and retries. VAPI places the outbound call using your configured voice agent. The workflow polls VAPI's API until the call ends, then retrieve

by Marcus Taylor
Csheets
free

Enrich LinkedIn Leads with Apify using Google Sheets

Enrich Profiles directly in Google Sheet ! This n8n template shows how to enrich Google spreadsheet with LinkedIn profiles automatically using the Apify LinkedIn Profile Enrichment actor from Anchor. It will create a new sheet with the enriched data. You can use it to build lead enrichment workflows, update your CRM records, or personalize outreach campaigns — all directly inside n8n. Who is this for Sales Teams: Build targeted B2B lead lists fast. Recruiters: Gather candidate data from LinkedIn profiles. Growth Marketers: Enrich outreach lists with LinkedIn info. Researchers: Analyze industries, roles, and company trends. CRM Builders: Auto-populate contact data from LinkedIn. Lead-Gen Agencies: Deliver qualified prospect lists at scale. How it works The workflow starts with a list of LinkedIn profile URLs (you need to set the Google sheet URL after you added the Google credentials from the n8n settings). The Apify node runs the LinkedIn Profile Enrichment actor to extract structured data such as name, title, company, location, and more. The results are then stored in a new Google Sheet How to use In Google Sheet: Create a Google sheet, rename the sheet "profiles" and add all the

by Anchor
Csheets
free

Scheduled Walmart Product Scraping to Google Sheets with ScrapeOps

Overview This n8n template automates Walmart product discovery and sends clean results to Google Sheets on a fixed schedule (default: every 4 hours). It uses ScrapeOps Proxy API for resilient page fetches (with JS render + scroll) and ScrapeOps Parser API for structured data extraction (title, price, rating, reviews, image, URL, sponsored flag). The result is a repeatable, low-maintenance workflow for market research, price monitoring, and assortment tracking; ideal for ops and growth teams that need fresh data without babysitting scrapers. Who is this for? E-commerce operators** tracking price & inventory signals Market/competitive analysts** building price baskets and trend views Growth & SEO teams** validating product coverage and SERP facets No-code/low-code builders** who prefer visual pipelines over custom code What problems it solves Reliability:** Offloads JS rendering and scrolling to ScrapeOps to reduce breakage. Structure:** Normalizes fields for analysis-ready rows in Sheets. Scale:** Runs on a timer; no manual downloading or copy-paste. Speed to value:** Simple setup, minimal credentials, immediate output. How it works Schedule triggers every 4 hours. Keyword builds a

by Ian Kerins
Csheets
free

Automate Review Request via WhatsApp for Completed WooCommerce Order with Rapiwa

Who is this for? This workflow is designed for online store owners, customer-success teams, and marketing operators who want to automatically verify customers' WhatsApp numbers and deliver order updates or invoice links via WhatsApp. It is built around WooCommerce order WooCommerce Trigger (order.updated) but is easily adaptable to Shopify or other platforms that provide billing and line_items in the WooCommerce Trigger payload. What this Workflow Does / Key Features Listens for WooCommerce order events (example: order.updated) via a Webhook or a WooCommerce trigger. Filters only orders with status "completed" and maps the payload into a normalized object: { data: { customer, products, invoice_link } } using the Code node Order Completed check. Iterates over line items using SplitInBatches to control throughput. Cleans phone numbers (Clean WhatsApp Number code node) by removing all non-digit characters. Verifies whether the cleaned phone number is registered on WhatsApp using Rapiwa's verify endpoint (POST https://app.rapiwa.com/api/verify-whatsapp). If verified, sends a templated WhatsApp message via Rapiwa (POST https://app.rapiwa.com/api/send-message). Appends an audit row to a

by Rapiwa