by Kristian Jønsson
Quick overview This workflow triggers on new Shopify products, generates studio-style product shots from one product image using Dreem.ai and appends the rendered images back to the Shopify product listing, with optional Slack posting and approval before publishing. How it works A Shopify webhook fires when a product is created. Products without a photo are skipped. he Dreem node generates your chosen shot types (defaults: flat lay + ghost mannequin) from the product's first image. Sends the product’s first image (and optionally a second/back image URL) to Dreem AI to generate the configured product shot types and provides an n8n callback URL. Waits for Dreem AI to call back with the render result and verifies the render status is completed. Optionally posts the generated image links to Slack and waits for an Approve/Reject response. Finished shots are appended to the product, keeping existing photos. An optional second row renders back-view shots from the product's second image. Setup Install the Dreem community node and add a Dreem API key credential (dreem_pk_...) to the Dreem generate nodes. Add a Shopify Admin access token credential with read_products and write_products scopes and select it in the Shopify trigger and update nodes. Review and adjust the Dreem shotCodes and output aspect ratio for your desired front shots (and enable/configure the back-shots row if you want back images). Optional: Add a Slack OAuth2 credential, choose a target channel, and enable the Slack posting/approval and timeout alert steps if you want human review or notifications. Requirements Dreem account + API key, Shopify store with Admin API access, Slack (optional, for approvals) Additional info Pick different shot codes on the Generate node (the sticky lists the full menu), enable the back-shots row, or turn on Slack approval.
by Ossian Madisson
This n8n template makes it easy to perform DNS lookups directly within your n8n workflow using dns.google, without any API credentials. Use Cases Track changes:** Schedule execution and log DNS answers to track changes to records over time. Monitoring and alerts:** Schedule execution for DNS monitoring to detect misconfiguration and to trigger immediate alerts. Prerequisite checks:** Use in more extensive workflows to ensure DNS resolves correctly before running a website crawl or other sensitive tasks. Good to Know Requires no API credentials. You do not need to sign up for any third party service for DNS resolution. Can easily be modified to use with a webhook instead of the default Forms node for external triggering. By default performs lookup for: A CNAME AAAA MX TXT NS How It Works The workflow checks the input for a specified DNS type. If none is found, it uses all types in a predefined list. It splits the data into separate items for each DNS type. It loops through all items and executes DNS resolution via the highly reliable dns.google service. It aggregates all results into a single, easy-to-use output structure. How to Use Import the template and execute the workflow to enter the domain you want to look up in the Form interface. Connect the final output node to your specific use case (logging, alerting, subsequent workflow steps, etc.).
by Trung Tran
AWS Certificate Manager (ACM) Auto-Renew with Slack notify & approval Who’s it for SRE/DevOps teams managing many ACM certs. Cloud ops who want hands-off renewals with an approval step in Slack. MSPs that need auditable reminders and renewals on schedule. How it works / What it does Schedule Trigger – runs daily (or your cadence). Get many certificates – fetches ACM certs (paginate if needed). Filter: expiring in next 7 days – keeps items where: NotAfter before today + 7d NotBefore before today (already valid) Send message and wait for response (Slack) – posts a certificate summary and pauses until Approve/Reject. Renew a certificate – on Approve, calls the renew action for the item. How to set up Credentials AWS in n8n with permissions to list/read/renew certs. Slack OAuth (bot in the target channel). Schedule Trigger Set to run once per day (e.g., 09:00 local). Get many certificates Region: your ACM region(s). If you have several regions, loop regions or run multiple branches. Filter (IF / Filter node) Add these two conditions (AND): {{ $json.NotAfter.toDateTime('s') }} is before {{ $today.plus(7,'days') }} {{ $json.NotBefore.toDateTime('s') }} is before {{ $today }} Slack → Send & Wait Message (text input): :warning: ACM Certificate Expiry Alert :warning: Domain: {{ $json.DomainName }} SANs: {{ $json.SubjectAlternativeNameSummaries }} ARN: {{ $json.CertificateArn }} Algo: {{ $json.KeyAlgorithm }} Status: {{ $json.Status }} Issued: {{ $json.IssuedAt | toDate | formatDate("YYYY-MM-DD HH:mm") }} Expires: {{ $json.NotAfter | toDate | formatDate("YYYY-MM-DD HH:mm") }} Approve to start renewal. Add two buttons: Approve / Reject (the node will output which was clicked). Renew a certificate Map the CertificateArn from the Slack Approved branch. Requirements n8n (current version with Slack Send & Wait). AWS IAM permissions (read + renew ACM), e.g.: acm:ListCertificates, acm:DescribeCertificate, acm:RenewCertificate (plus region access). Slack bot with permission to post & use interactivity in the target channel. How to customize the workflow Window size:** change 7 to 14 or 30 days in the filter. Catch expired: add an OR path {{ $json.NotAfter.toDateTime('s') }} is before {{ $today }} → send a **red Slack alert. Auto-renew w/o approval:** bypass Slack and renew directly for low-risk domains. Multiple regions/accounts:** iterate over a list of regions or assume roles per account. Logging:** add a Google Sheet/DB append after Slack click with user, time, result. Escalation:** if no Slack response after N hours, ping @oncall or open a ticket. Notes The Slack node pauses execution until a button is clicked—perfect for change control. Time conversions above assume NotAfter/IssuedAt are Unix seconds ('s'). Adjust if your data differs.
by Sirenic
Quick Overview This workflow monitors a Google Sheets payment list for new French suppliers, verifies each supplier’s SIREN (and optional IBAN) with Sirenic’s French Pack checks, then logs approved suppliers back to Google Sheets or posts a detailed block alert to a Slack channel. How it works Triggers every minute when a new row is added to a specified Google Sheets worksheet. Sends the row’s SIREN and optional IBAN to Sirenic (French Pack) to validate company and invoicing-related registry signals. Checks Sirenic’s verdict field (pret_a_facturer) to determine whether the supplier is ready to invoice. If approved, appends a “ready to invoice” entry (including supplier name, timestamp, and VIES VAT status) to a Google Sheets verification log. If blocked, posts a Slack message to the chosen channel with the supplier details and the closed-list reasons returned by Sirenic (plus VAT/VIES and IBAN/bank hints when available). Setup Self-host n8n, install the n8n-nodes-sirenic community node, and create Sirenic credentials. Add Google Sheets credentials and select the source sheet (trigger) and the destination sheet (verification log) by setting the document and sheet values in both Google Sheets nodes. Add Slack credentials and choose the target channel for blocked-supplier alerts in the Slack node. Ensure your source sheet includes a SIREN column and optionally an IBAN column that matches the field names used in the Sirenic step.
by Yves Tkaczyk
Use cases Ensure that the calls to the workflow's webhook are (a) originating from the correct GitHub repository and (b) haven't been tampered with. How it works When a secret is provided in a GitHub webhook configuration, a x-hub-signature-256 header is added to the webhook. Compute HMAC256 computes the HMAC256 signature similarly to how it was computed by GitHub. Validate HMAC256 tests for the equality of the computed value and the value provided by the header. If the values are equal then 200 is returned to GitHub and the workflow continues If the values are NOT equal then 401 is returned and the workflow ends. Note: The Stop and Error step is optional and can be removed. Removing it means that the workflow completes successfully while still returning 401 to GitHub. This means that you will not be able to easily track malicious or incorrect calls to your webhook from n8n. How to use Add the steps (1) and (2) of the workflow to your current workflow receiving webhook calls from GitHub. Update the Secret field in the Compute HMAC256 node with the same value as the secret stored in the Secret field in the GitHub webhook definition. Requirements GitHub account and repository. GitHub webhook setup with a Secret key. Key can be of any length and should be generated with a key or password generator. Who’s it for Developers or DevOps engineers who want to ensure secure webhook communication between GitHub and n8n. How to customize the workflow This is a building block for your own workflow. If you use this workflow as a base, replace step (3) with your own business logic. You can modify the Stop and Error node to log unauthorized requests or trigger alerts. ⚠️ Warning The secret is stored in plain text in the workflow. You should take this into consideration if the workflow is committed to source control or shared in any other way. Need Help? Reach out on LinkedIn or Ask in the Forum!
by Singgi Aditya
Attendance Telegram App with Google Sheets Manage employee attendance directly through Telegram with seamless Google Sheets integration. Employees can check in, check out, and view their daily attendance status from a Telegram bot. All records are stored in Google Sheets for easy tracking and reporting. 👉 Includes a Google Sheets template to get started quickly. ✨ Features 🕘 Check-in & Check-out via Telegram bot 📊 View daily attendance status (Check-in/Check-out done or not) 🔒 Employee validation – only registered employees can log attendance ⚠️ Duplicate prevention – prevents multiple check-ins/outs on the same day 📂 Google Sheets integration – easy to manage, export, and share data 🛠 Requirements n8n (Cloud or Self-hosted) A Telegram Bot (create via BotFather) Google Sheets account 🚀 Setup Instructions 1. Import Workflow Download and import Attendance Telegram App.json into n8n. Configure your Telegram API credentials. Configure your Google Sheets credentials. 2. Use Provided Google Sheets Template We provide a template with two sheets: Employee** → List of registered employees (id_employee, full_name, username_telegram) Attendance** → Attendance logs (date, time, attendance_type, etc.) 👉 Copy the Google Sheets Template Update the Employee sheet with your employee data before running the workflow. 3. Configure Telegram Bot Create a bot with BotFather on Telegram. Copy the API token. Add it into n8n’s Telegram credentials. 4. Run the Workflow Start the workflow. Open your Telegram bot and type /start or /menu. Available options: ✅ Check-in (⏰) 🚪 Check-out (🏁) 📊 View Today’s Attendance Status 📋 Example Flow User types /menu in Telegram. Bot displays menu with Check-in/Check-out and Today’s Attendance Status. If user taps Check-in: Workflow validates if they are a registered employee. Checks if attendance already exists for today. If valid → record in Google Sheets. Bot replies: “Check-in recorded. ⏰”
by DataForSEO
With this n8n automation, you no longer have to manually dig through backlink reports to find broken links. The workflow automatically retrieves them with the DataForSEO Backlinks API and generates a structured Google Sheets report. In addition to the backlink, each entry includes essential metrics such as the referring page URL, referring domain, target URL, anchor text, domain rank (DR), spam score, and dofollow/nofollow status. This gives you full context about the quality and impact of each broken link. When new broken backlinks are detected, the workflow also creates an Asana task with all relevant details included, helping you quickly investigate the issue, restore the page, or implement redirects. Who’s it for This workflow is ideal for SEOs, link-building specialists, and website owners who want to maintain a healthy backlink profile and prevent ranking drops caused by broken pages or incorrect redirects. What it does The workflow automatically detects broken backlinks and generates a structured Google Sheets report to help you identify and fix link-related issues before they negatively impact your SEO performance. How it works Triggers automatically according to the set schedule. Pulls recently detected broken backlinks using the DataForSEO Backlinks API. Creates or updates a Google Sheets report with the latest link data. Creates a relevant Asana task. Requirements DataForSEO account and API credentials Google Sheets connection in n8n Asana account and connection in n8n Customization You can easily customize this workflow by monitoring specific URLs instead of the entire domain, adjusting how many backlinks are analyzed per run, adding additional metrics to your report, storing reports in other tools, integrating with project management platforms, or changing the execution frequency.
by CALL-E
Quick overview This workflow manually triggers two sequential IVR quality-sample calls via the CALL-E API, validating transcripts and metadata post-call. Note: Default placeholders must be replaced with authorized E.164 test numbers before execution. How it works Runs when you start the workflow manually. Loads the CALL-E API configuration (base URL, polling interval, timeout) and stops with an error if the API key is missing. Creates a small list of IVR QA call tasks (phone, task instructions, locale/region, and metadata) to be processed. Processes the call list one item at a time, building the CALL-E /v1/calls request with a JSON result schema, metadata, and an idempotency key. Calls the CALL-E API to create the call and repeatedly polls the call status until it reaches a terminal state (completed/failed/canceled) or times out. Extracts the call outcome, structured result, transcript turns, and failure signals, then formats a demo-friendly per-call view and an overall execution summary. Setup Add your CALL-E API key by replacing replace_with_calle_api_key in the CALL-E configuration step. Replace the sample phone numbers with numbers you own or are authorized to call, and adjust the task text and metadata for your IVR QA scenario. Review and adjust the CALL-E base URL, polling interval, and timeout values if your environment requires different settings.
by David
Quick overview This workflow runs hourly on weekdays (8AM–5PM), uses the Apify API to scrape recent Upwork job listings that match your keywords, and sends each job as a Markdown push notification to your phone via ntfy. How it works Runs every hour on weekdays between 8AM and 5PM. Sets the ntfy topic name and keyword search terms used for scraping. Calls an Apify actor (cheapest Upwork jobs scraper) to fetch Upwork jobs posted within the last 60 minutes that match the configured keywords. Sends each returned job to ntfy.sh as a clickable Markdown link notification. Setup Create an Apify account, generate an API token, and add it in n8n as an HTTP Bearer Auth credential for the Apify request. Set your ntfy topic and keywords in the Config step (for example, ntfy_topic and space-separated keywords). Subscribe to the same topic in the ntfy mobile or desktop app so you receive the notifications.
by Telemark Digital
Quick overview This workflow runs hourly to execute an Apify RSS monitoring Task, retrieves the run’s dataset items, normalizes them into a stable delivery key, and upserts new or updated feed entries into an n8n Data Table for idempotent storage and run status reporting. How it works Runs every hour on a schedule. Starts an Apify Actor Task for RSS monitoring and waits for the run to finish. Checks whether the finished Apify run provides a default dataset ID and, if present, fetches up to 200 dataset items from Apify. Normalizes each dataset item into a consistent schema, generating a URL-encoded delivery key from feedUrl and itemKey and creating diagnostic records for malformed rows. Upserts each normalized record into the n8n Data Table (monitor-deliveries) using deliveryKey as the unique match to avoid duplicates across runs. Outputs a run summary including counts of persisted items and throws an error if the Apify run did not finish with SUCCEEDED. Setup Install the community node @apify/n8n-nodes-apify (0.6.10 or later) and add an Apify API credential in n8n. Create and configure an Apify RSS monitoring Task, set it to onlyNew: true, and keep maxItemsPerRun at 200 or less, then paste the Task ID into the workflow. Create an n8n Data Table named monitor-deliveries with columns matching the upsert mapping (including deliveryKey as the matching/unique field). Requirements Self-hosted n8n with @apify/n8n-nodes-apify 0.6.10 or later, an Apify account with a saved RSS monitoring Task, and an n8n Data Table named monitor-deliveries. Customization Adjust the hourly schedule; change feed sources, keyword or regex filters, exclusions, and maxItemsPerRun in the saved Apify Task; or map additional dataset fields into the Data Table. Additional info The export is credential-free and uses PASTEYOURTASKID as its only Task placeholder. The supporting public package is available at https://github.com/Telemark-Digital/apify-monitoring-workflows/tree/main/rss-keyword-monitor.
by Aryan
Quick overview This workflow listens to Trello board events via a webhook, filters for card creations and list moves, and posts a formatted update to a Discord channel using an incoming webhook, with a fallback Discord alert if the primary post fails. How it works Triggers when Trello sends a webhook event for activity on the configured board. Extracts key details from the Trello action payload (card name, URL, member, and list context). Filters events to keep only card creations and updates that include a destination list (card moves). Chooses the correct message format for a newly created card versus a moved card. Posts the formatted message to Discord using an incoming webhook. If the Discord post fails, captures the card and error details and posts a warning message to Discord as a fallback alert. Setup Create and add Trello API credentials (API key and token) for an account that has access to the target board. Set the Trello board ID to watch (for example via the TRELLO_BOARD_ID environment variable or by replacing the placeholder in the Trello trigger). Create a Discord incoming webhook for the target channel and add it as a Discord webhook credential for the Discord posting step (and optionally a second webhook for the failure-alert channel).
by Kevin Yu
Quick overview This workflow monitors a Notion questions database and, for items marked “To Research,” uses You.com Research to generate a cited answer, then writes the answer and sources back to the same Notion page and updates the status to “Answered”. How it works Triggers when a new page is added to a specified Notion database (polled every minute). Checks that the page has a non-empty Question field and that Status equals “To Research”. Sends the question text to You.com using the Research operation to generate an answer with sources. Updates the same Notion page with the generated Answer and Sources fields and sets Status to “Answered”. If the You.com request fails, writes an error message into the Answer field and leaves the item in “To Research” so it can be retried. Setup Use self-hosted n8n and install the community node package @youdotcom-oss/n8n-nodes-youdotcom. Add Notion API credentials and a You.com API credential, then select them in the corresponding nodes. Replace the Notion database ID in the trigger and ensure the database has properties named Question, Status (select), Answer (text/rich text), and Sources (text/rich text) with Status options “To Research” and “Answered”. Requirements A self-hosted n8n instance where community package installation is enabled. That is an owner-level setting, and n8n Cloud cannot run community nodes at all. A You.com account and API key with access to the Research operation. A Notion internal integration, with the questions database explicitly shared with it. Without that share the trigger returns nothing and both write nodes fail. Edit access to the database, since the workflow writes back into the same rows it reads. No model provider credential of any kind. You.com returns the written answer and the source list in a single call. Customization The trigger polls every minute. Drop it to hourly if that is more Notion API traffic than you want. The guard compares Status to To Research with case sensitivity on, so the text must match exactly. Change the string, or add a topic or requester condition. Both success writes trim to 1900 characters to stay under Notion's 2000-character property limit. Raise it, or write the answer into page blocks instead of a property. Source lines are built as 1. Title - url and joined with newlines. Change the format to Markdown links or bare URLs. Answered is the status value written on success. Swap it for whatever your board uses. The failure branch writes only into Answer and deliberately leaves Status alone. Add a Failed status there, or replace it with a Slack alert. Additional info Cost follows rows rather than clock time, since exactly one You.com call fires per question that clears the guard, though the trigger still polls Notion every minute whether or not anything arrives. The trigger fires on pages added to the database, which has a consequence worth understanding before you rely on the retry behaviour: a failed lookup does leave the row at "To Research", but nothing re-triggers it, so retrying means re-running that execution by hand or adding the question again. For the same reason, flipping an existing row to "To Research" will not start anything. Rows that fail the guard end the execution quietly with nothing written back, so a question typed without a status gives no signal on the board. The failure note is written into the Answer field itself, so it replaces whatever was there and a later successful run replaces it in turn. Only the You.com call has an error branch, so a Notion write failure stops the whole run and leaves the row untouched, and no node has retries enabled. Answers are generated text, so wording and sources will differ between two runs of the same question.