by Sirhexalot
This workflow facilitates seamless synchronization between Entra (Microsoft Azure AD) and Zammad. It automates the following processes: Fetch Entra Contacts: Create Universal User Object: Extracts key user information, such as email, phone, and name, and formats it for Zammad compatibility. Synchronize with Zammad: Identifies users in Zammad who need updates based on Entra data. Adds new users from Entra to Zammad. Deactivates users in Zammad if they are no longer in Entra. Key Features Dynamic Matching**: Compares contacts from Entra with existing Zammad users based on email and updates records accordingly. Efficient Management**: Automatically creates, updates, or deactivates Zammad users based on their status in Entra. Custom Fields**: Supports custom field mapping, ensuring enriched user profiles in Zammad. Setup Instructions Microsoft Entra Integration: Ensure proper API permissions for accessing Entra contacts. Configure Microsoft OAuth2 credentials in n8n. Zammad Integration: Set up Zammad API credentials with appropriate access rights. Customize the workflow to include additional fields or map existing fields as needed. Run Workflow: Trigger the workflow manually or set up an automation schedule (e.g., daily sync). Review created/updated/deactivated users in Zammad. Use Cases IT Administration**: Keep your support system in sync with the organization’s Entra data. Customer Management**: Ensure accurate and up-to-date user records in Zammad. Prerequisites Access to an Entra (Azure AD) environment with contacts data. A Zammad instance with API credentials for user management. A custom field in Zammad User Object (entra_key) of type String. A custom field in Zammad User Object (entra_object_type) of type `Single selection field with two key value pairs user = User contact = Contact` This workflow is fully customizable and can be adapted to your organization’s specific needs. Save time and reduce manual errors by automating your user sync process with this template! If you have found an error or have any suggestions, please report them here on Github.
by David Roberts
AI evaluation in n8n This is a template for n8n's evaluation feature. Evaluation is a technique for getting confidence that your AI workflow performs reliably, by running a test dataset containing different inputs through the workflow. By calculating a metric (score) for each input, you can see where the workflow is performing well and where it isn't. How it works This template shows how to calculate a workflow evaluation metric: text similarity, measured character-by-character. The workflow takes images of hand-written codes, extracts the code and compares it with the expected answer from the dataset. The images look like this: The workflow works as follows: We use an evaluation trigger to read in our dataset It is wired up in parallel with the regular trigger so that the workflow can be started from either one. More info We download the image and use AI to extract the code If we’re evaluating (i.e. the execution started from the evaluation trigger), we calculate the string distance metric We pass this information back to n8n as a metric
by ist00dent
This n8n template allows you to automatically create shortened URLs using the TinyURL API by simply sending a webhook request. It's a quick and efficient way to integrate URL shortening into your automated workflows, ideal for sharing long links in social media, emails, or other applications. 🔧 How it works Receive Link Webhook: This node acts as the entry point for the workflow. It listens for incoming POST requests and expects a JSON body containing the url to be shortened and your api_key for TinyURL. Create TinyURL: This node sends a POST request to the TinyURL API, passing the long URL and your API key. It can also accept optional parameters like domain, alias, and description to customize the shortened link. Respond with Shortened URL: This node sends the response from the TinyURL API (which includes the new shortened URL) back to the service that initiated the webhook. 👤 Who is it for? This workflow is ideal for: Content Managers & Marketers: Quickly shorten links for campaigns, social media posts, or tracking. Developers: Automate the process of link shortening within applications or scripts. Automation Enthusiasts: Integrate a URL shortener into various n8n workflows (e.g., after generating a report, before sending a notification). Anyone needing on-demand short links: A flexible solution for ad-hoc link shortening. 📑 Data Structure When you trigger the webhook, send a POST request with a JSON body structured as follows: { "api_key": "YOUR_TINYURL_API_KEY", "url": "https://www.verylongwebsite.com/path/to/specific/page?param1=value1¶m2=value2", "domain": "tinyurl.com", // Optional: defaults to tinyurl.com "alias": "myCustomAlias", // Optional: desired custom alias for the link "description": "My project link" // Optional: description for the link } The workflow will return the JSON response directly from the TinyURL API, which will include the short_url and other details about the newly created link. ⚙️ Setup Instructions Obtain TinyURL API Key: Before importing, make sure you have an API key from TinyURL. You can typically get this by signing up for an account on their website. Import Workflow: In your n8n editor, click "Import from JSON" and paste the provided workflow JSON. Configure Webhook Path: Double-click the Receive Link Webhook node. In the 'Path' field, set a unique and descriptive path (e.g., /shorten-link). Activate Workflow: Save and activate the workflow. 📝 Tips Dynamic Inputs: The workflow is set up to dynamically use the url, api_key, alias, and description from the incoming webhook data. This makes it highly flexible. Error Handling: You can add an Error Trigger node to catch any issues (e.g., invalid API key, malformed URL) during the TinyURL creation process. Configure it to send notifications or log errors for easy troubleshooting. Post-Shortening Actions: After generating the shortened URL, you can insert additional nodes before the Respond with Shortened URL node to perform other actions. For example, you could: Save to a Database: Store the original and shortened URLs in a database like Airtable, Google Sheets, or a PostgreSQL database. Send a Message: Automatically send the shortened URL via Slack, Discord, email, or SMS. Update a Record: Update a CRM record or project management task with the new shortened link. Custom Domains: If you have a custom domain configured with your TinyURL account, you can change the domain parameter in the Create TinyURL node to use it.
by Matthieu
LinkedIn Profile Enrichment Automation Who is this for? This template is perfect for sales teams, recruiters, marketing professionals, and business development specialists who need to gather comprehensive LinkedIn profile data at scale. Ideal for lead generation teams building prospect databases, recruiters sourcing candidate information, sales professionals researching prospects, and marketing teams creating targeted outreach campaigns. What problem does this workflow solve? Manually collecting detailed information from LinkedIn profiles is incredibly time-consuming and prone to inconsistency. Visiting each profile individually to extract names, job titles, experience, education, skills, and contact details can take hours for even small prospect lists. This automation eliminates the tedious manual data entry while ensuring consistent, comprehensive profile enrichment. What this workflow does This workflow automatically enriches a list of LinkedIn profile URLs by extracting comprehensive professional data including: Personal details** (first name, last name, headline, location) Professional status** (hiring status, open to work indicators) Network metrics** (connections, followers count) Work experience** (up to 5 most recent positions with company details, dates, and roles) Education background** (up to 3 educational institutions with degrees and dates) Skills and languages** (complete skill sets and language proficiencies) Professional summary** (profile description and bio) The enriched data is automatically organized and updated in your Google Sheets database with structured formatting for easy analysis and outreach. Setup Create a Ghost Genius API account and obtain your API key for cookieless LinkedIn profile scraping Configure HTTP Request credentials with Header Auth using your Ghost Genius API key Set up your Google Sheets database using the provided template with columns: URL, Firstname, Lastname, Tagline, Location Connections, Followers, Hiring?, Open to work? Summary, Languages, Skills Experience 1-5, Education 1-3 Configure Google Sheets OAuth2 credentials following n8n's authentication setup guide Add LinkedIn profile URLs to the first column of your Google Sheet to begin enrichment Test the workflow with a small batch before processing larger lists How to customize this workflow Adjust batch processing settings** to handle larger volumes by modifying the batch size and interval timing Add data validation rules** to filter out incomplete or invalid profiles before processing Integrate with CRM systems** like HubSpot or Salesforce to automatically sync enriched data Set up automated scheduling** to regularly re-enrich profiles and capture profile updates Add email notifications** to alert when enrichment batches are completed or encounter errors Customize data mapping** to include additional profile fields or reorganize the output structure Add duplicate detection** to prevent re-processing the same profiles multiple times
by Jakkrapat Ampring
Description Quickly organize your inbox with AI! This simple workflow automatically classifies incoming emails into different categories — like High Priority, Work Related, or Promotions — and applies Gmail labels accordingly. Setup takes less than 2 minutes, and it runs 24/7, helping you stay focused on what matters most without manual sorting. Tools/Services Needed Gmail: To trigger the workflow and label emails. Google Gemini (or any LLM Model): To intelligently classify email content. How It Works Gmail Trigger: Detects every new incoming email. Text Classifier Node: Classifies the email content into predefined categories. Google Gemini Chat Model: Provides the AI-powered understanding behind the classification. Conditional Labeling: If the email is High Priority, label it accordingly. If it’s Work Related (e.g., internal emails), apply the work label. If it’s a Promotion, sort it into the promotions label. Gmail Labeling: Automatically adds the correct label to the email. Setup Instructions Connect your Gmail account to n8n. Connect your Google Gemini (or other LLM) credentials. Customize the categories and labels if needed. Activate the workflow — and that's it! Notes You can easily add more categories (like "Finance," "Newsletters," etc.) by adjusting the classification prompt. Works best with a clean and minimal set of categories to avoid overlap. Can be adapted to work with any other large language model (OpenAI, Claude, etc.) if preferred.
by Ranjan Dailata
Notice Community nodes can only be installed on self-hosted instances of n8n. Who this is for? This workflow template enables intelligent data extraction from ProductHunt using Bright Data’s Model Context Protocol (MCP) and processes search results with Google Gemini. This workflow is designed for individuals and teams who need automated, intelligent discovery and analysis of new tech products. It's especially valuable for: Startup Analysts & VC Researchers Growth Hackers & Marketers Recruiters & Tech Scouts Product Managers & Innovation Teams AI & Automation Enthusiasts What problem is this workflow solving? Traditional product discovery on ProductHunt is constrained by limited descriptions and requires repeated manual validation through web searches. Manually extracting and enriching this data is slow, repetitive, and error-prone. This workflow solves the problem by: Extracting real-time ProductHunt data using Bright Data’s MCP infrastructure to mimic real-user behavior and avoid blocks. Performing contextual searches on Google for a specific product on ProductHunt to gather use cases, reviews, and related information. Structuring results using Google Gemini LLM to provide human-readable insights and reduce noise. Delivering results seamlessly by saving output to disk, updating Google Sheets, and sending Webhook alerts. What this workflow does Input Field Node Define the ProductHunt category with the search term(s) you want to target. This is used to drive extraction and search operations. Agent Operation Node The agent performs two major tasks: Extract from ProductHunt Retrieves trending products from ProductHunt using Bright Data MCP Contextual Google Search for the product the agent searches Google for deeper context, including: Reviews Competitor mentions Real-world usage examples LLM Node (Google Gemini) Analyzes and summarizes extracted web content Removes noise (ads, menus, etc.) Structures content into bullet points, insights, or JSON objects Pre-conditions Knowledge of Model Context Protocol (MCP) is highly essential. Please read this blog post - model-context-protocol You need to have the Bright Data account and do the necessary setup as mentioned in the Setup section below. You need to have the Google Gemini API Key. Visit Google AI Studio You need to install the Bright Data MCP Server @brightdata/mcp You need to install the n8n-nodes-mcp Setup Please make sure to setup n8n locally with MCP Servers by navigating to n8n-nodes-mcp Please make sure to install the Bright Data MCP Server @brightdata/mcp on your local machine. Sign up at Bright Data. Create a Web Unlocker proxy zone called mcp_unlocker on Bright Data control panel. Navigate to Proxies & Scraping and create a new Web Unlocker zone by selecting Web Unlocker API under Scraping Solutions. In n8n, configure the Google Gemini(PaLM) Api account with the Google Gemini API key (or access through Vertex AI or proxy). In n8n, configure the credentials to connect with MCP Client (STDIO) account with the Bright Data MCP Server as shown below. Make sure to copy the Bright Data API_TOKEN within the Environments textbox above as API_TOKEN=<your-token> How to customize this workflow to your needs This workflow is flexible and modular, allowing you to adapt it for various research, product discovery, or trend analysis use cases. Below are the key customization points and how to modify them. Define Your Target Products or Topics: Change the input parameter to a specific ProductHunt category, tag, or keyword (e.g., "AI tools", "SaaS", "DevOps") Change Output Destinations : Save to Disk**: Change the file format (.json, .csv, .md) or directory path Google Sheet**: Modify sheet name, structure (columns like Product, Summary, Link) Webhook Notification**: Point to a Slack/Discord/CRM/Webhook URL with payload mapping
by Alex Emerich
Convert PostgreSQL table to CSV CSV is a super useful and universal way to transfer data between different tools. This workflow gives an example of how to take data from PostgreSQL and convert it easily into a CSV. What you need Before running the workflow, please make sure you have access to a remote PostgreSQL server and have table data: book_title,book_author,read_date Demons,Fyodor Dostoyevsky,2022-09-08 Ulysses,James Joyce,2022-05-06 Catch-22,Joseph Heller,2023-01-04 The Bell Jar,Sylvia Plath,2023-01-21 Frankenstein,Mary Shelley,2023-02-14 How it works Trigger the workflow on click Declare the name of the Excel file and sheet names Remotely connect to the PostgreSQL database and specify query execution Write the query data to CSV The detailed process is explained further in the tutorial: https://blog.n8n.io/postgres-export-to-csv/
by David Olusola
PromptCraft AI – Telegram Image Generator 🚀 How It Works PromptCraft AI is an n8n automation that transforms simple image ideas sent through Telegram into stunning AI-generated images using OpenAI's DALL·E (or other image models). 🔁 Workflow Overview: Telegram Trigger: Listens for messages from a user on Telegram. Prompt Expansion: The message is transformed into a rich image description using GPT (OpenAI Chat Model). Image Generation: The prompt is passed to OpenAI's image API to generate a high-quality image. Send Image: The final image is sent back to the user on Telegram. (Optional) Log image titles and links to Google Drive and Google Sheets. ⚙️ Setup Instructions 📋 Prerequisites [ ] n8n installed (Self-hosted or via n8n.cloud) [ ] Telegram bot token (via @BotFather) [ ] OpenAI API key (platform.openai.com) [ ] Google Sheets & Drive OAuth2 credentials (optional) 🧠 Step-by-Step Configuration 1. 📥 Import the Workflow Go to n8n → click Import → upload PromptCraft_AI_Template.json 2. 🔐 Set Up Credentials In Credentials, add the following: Telegram API → Paste your bot token OpenAI API → Paste your OpenAI API key (Optional) Google Sheets OAuth2, Google Drive OAuth2 3. 🔄 Replace Placeholders Open each node that requires credentials: Replace REPLACE_OPENAI_API_KEY with your actual OpenAI API key Replace REPLACE_TELEGRAM_API_ID and credential names as needed (Optional) Update Google Drive Folder ID & Sheet ID in respective nodes 4. ✅ Activate the Workflow Turn on the Telegram Trigger node. Deploy and activate the full workflow. 5. ✉️ Test It Out Send your Telegram bot a message like: > a knight riding a robotic horse in the future Receive the generated image back in Telegram! 💡 Pro Tips Use detailed or imaginative inputs for better outputs. Fine-tune the GPT prompt for specific visual styles. Extend with Google Vision, image upscaling, or watermarking. 🛟 Support For setup assistance or custom feature requests, feel free to contact me @dimejicole21@gmail.com Happy Prompting! 🖼✨
by Michael Muenzer
This workflow contains community nodes that are only compatible with the self-hosted version of n8n. Fetch SEO and traffic information from ahref for a list of domains in a Google Sheet. This is great for marketing research and SEO workflow optimizations and saves tons of time. How it works We'll import domains from the Google sheet We use an SEO MCP server to fetch data from ahref free tooling The fetched data is stored in the Google sheet Set up steps Copy Google Sheet template and add it in all Google Sheet nodes Make sure that n8n has read & write permissions for your Google sheet. Add your list of domains in the first column in the Google sheet Add MCP credentials for seo-mcp
by Jez
This n8n workflow template uses community nodes and is only compatible with the self-hosted version of n8n. This workflow demonstrates how to build and expose a sophisticated n8n AI Agent as a single, callable tool using the Multi-Agent Collaboration Protocol (MCP). It allows external clients or other AI systems to easily query software library documentation via Context7, without needing to manage the underlying tool orchestration or complex conversational logic. Core Idea: Instead of building complex agentic loops on the client-side (e.g., in Python, a VS Code extension, or another AI development environment), this workflow offloads the entire agent's reasoning and tool-use process to n8n. The client simply sends a natural language query (like "How do I use Flexbox in Tailwind CSS?") to an SSE endpoint, and the n8n agent handles the rest. Key Features & How It Works: Public MCP Endpoint: The main workflow uses the Context7 MCP Server Trigger node to create an SSE endpoint. This makes the agent accessible to any MCP-compatible client. The path for the endpoint is kept long and random for basic 'security by obscurity'. Tool Workflow as an Interface: A Tool Workflow node (named call_context7_ai_agent in this example) is connected to the MCP Server Trigger. This node defines the single "tool" that external clients will see and call. Dedicated AI Agent Sub-Workflow: The call_context7_ai_agent tool invokes a separate sub-workflow which contains the actual AI logic. This sub-workflow starts with a Context7 Workflow Start node to receive the user's query. A Context7 AI Agent node (using Google Gemini in this example) is the brain, equipped with: A system prompt to guide its behavior. Simple Memory to retain context for each execution (using {{ $execution.id }} as the session key). Two specialized Context7 MCP client tools: context7-resolve-library-id: To convert library names (e.g., 'Next.js') into Context7-specific IDs. context7-get-library-docs: To fetch documentation using the resolved ID, with options for specific topics and token limits. Seamless Tool Use: The AI Agent autonomously decides when and how to use the resolve-library-id and get-library-docs tools based on the user's query, handling the multi-step process internally. Benefits of This Approach: Simplified Client Integration:** Clients interact with a single, powerful tool, sending a simple query. Reduced Client-Side Token Consumption:** The detailed prompts, tool descriptions, and conversational turns are managed server-side by n8n, saving tokens on the client (especially useful if the client is another LLM). Centralized Agent Management:** Update your agent's capabilities, tools, or LLM model within n8n without any changes needed on the client side. Modularity for Agentic Systems:** Perfect for building complex, multi-agent systems where this n8n workflow can act as a specialized "expert" agent callable by others (e.g., from environments like Smithery). Cost-Effective:** By using a potentially less expensive model (like Gemini Flash) for the agent's orchestration and leveraging the free tier or efficient pricing of services like Context7, you can build powerful solutions economically. Use Cases: Providing an intelligent documentation lookup service for coding assistants or IDE extensions. Creating specialized AI "micro-agents" that can be consumed by larger AI applications. Building internal knowledge base query systems accessible via a simple API-like interface. Setup: Ensure you have the necessary n8n credentials for Google Gemini (or your chosen LLM) and the Context7 MCP client tools. The Path in the Context7 MCP Server Trigger node should be unique and secure. Clients connect to the "Production URL" (SSE endpoint) provided by the trigger node. This workflow is a great example of how n8n can serve as a powerful backend for building and deploying modular AI agents. I've made a video to try and explain this a bit too https://www.youtube.com/watch?v=dudvmyp7Pyg
by Mark de Jonge
About the workflow The workflow reads every reply that is received from a cold email campaign and qualifies if the lead is interested in a meeting. If the lead is interested, a deal is made in pipedrive. You can add as many email inboxes as you need! Setup: Add credentials to the Gmail, OpenAI and Pipedrive Nodes. Add a in_campaign field in Pipedrive for persons. In Pipedrive click on your credentials at the top right, go to company settings > Data fields > Person and click on add custom field. Single option [TRUE/FALSE]. If you have only one email inbox, you can delete one of the Gmail nodes. If you have more than two email inboxes, you can duplicate a Gmail node as many times as you like. Just connect it to the Get email node, and you are good to go! In the Gmail inbox nodes, select Inbox under label names and uncheck Simplify.
by ist00dent
This n8n template allows you to perform real-time currency conversions by simply sending a webhook request. By integrating with the ExchangeRate.host API, you can get up-to-date exchange rates for over 170 world currencies, making it an incredibly useful tool for financial tracking, e-commerce, international business, and personal budgeting. 🔧 How it works Receive Conversion Request Webhook: This node acts as the entry point for the workflow, listening for incoming POST requests. It's configured to expect a JSON body containing: from: The 3-letter ISO 4217 currency code for the source currency (e.g., USD, PHP). to: The 3-letter ISO 4217 currency code for the target currency (e.g., EUR, JPY). amount: The numeric value you want to convert. Important: The ExchangeRate.host API access_key is handled securely by n8n's credential system and should not be included in the webhook body or headers. Convert Currency: This node makes an HTTP GET request to the ExchangeRate.host API (api.exchangerate.host). It dynamically constructs the URL using the from, to, and amount from the webhook body. Your API access key is securely retrieved from n8n's pre-configured credentials (HTTP Query Auth type) and automatically added as a query parameter (access_key). The API then performs the conversion and returns a JSON object with the conversion details. Respond with Converted Amount: This node sends the full currency conversion result received from ExchangeRate.host back to the service that initiated the webhook. 👤 Who is it for? This workflow is ideal for: E-commerce Platforms: Display prices in local currencies on the fly for international customers. Convert incoming international payments to your local currency for accounting. Calculate shipping costs in different currencies. Financial Tracking & Budgeting Apps: Update personal or business budgets with converted values. Track expenses incurred in foreign currencies. Automate portfolio value conversion for multi-currency investments. International Business & Freelancers: Generate invoices in a client's local currency based on your preferred currency. Quickly estimate project costs or earnings in different currencies. Automate reconciliation of international transactions. Travel Planning: Convert travel expenses from one currency to another while abroad. Build simple tools to estimate costs for trips in different countries. Data Analysis & Reporting: Standardize financial data from various sources into a single currency for unified reporting. Build dashboards that display converted financial metrics. Custom Integrations: Connect to CRMs, accounting software, or internal tools to automate currency-related tasks. Build chatbots that can answer currency conversion queries. 📑 Data Structure When you trigger the webhook, send a POST request with a JSON body structured as follows: { "from": "USD", "to": "PHP", "amount": 100 } The workflow will return a JSON response similar to this (results will vary based on currencies and amount): { "date": "2025-06-03", "historical": false, "info": { "rate": 58.749501, "timestamp": 1717398188 }, "query": { "amount": 100, "from": "USD", "to": "PHP" }, "result": 5874.9501, "success": true } ⚙️ Setup Instructions Get an ExchangeRate.host Access Key: Go to https://exchangerate.host/ and sign up for a free API key. Create an n8n Credential for ExchangeRate.host: In your n8n instance, go to Credentials. Click "New Credential" and search for "HTTP Query Auth". Set the Name (e.g., ExchangeRate.host API Key). Set API Key to your ExchangeRate.host access key. Set Parameter Name to access_key. Set Parameter Position to Query. Save the credential. Import Workflow: In your n8n editor, click "Import from JSON" and paste the provided workflow JSON. Configure ExchangeRate.host API Node: Double-click the Convert Currency node. Under "Authentication", select "Generic Credential Type". Choose "HTTP Query Auth" as the Generic Auth Type. Select the credential you created (e.g., "ExchangeRate.host API Key") from the dropdown. Configure Webhook Path: Double-click the Receive Conversion Request Webhook node. In the 'Path' field, set a unique and descriptive path (e.g., /convert-currency). Activate Workflow: Save and activate the workflow. 📝 Tips This workflow is a powerful starting point. Here's how you can make it even more robust and integrated: Robust Error Handling: Add an IF node after Convert Currency to check {{ $json.success }}. If false, branch to an Error Trigger node or send an alert (e.g., Slack, Email) with {{ $json.error.info }} to notify you of API issues or invalid inputs. Include a Try/Catch block to gracefully handle network issues or malformed responses. Input Validation & Defaults: Add a Function node after the webhook to validate if from, to, and amount are present and in the correct format. If not, return a clear error message to the user. Set default from or to currencies if they are not provided in the webhook, making the API more flexible. Logging & Auditing: After a successful conversion, use a Google Sheets, Airtable, or database node (e.g., PostgreSQL, MongoDB) to log every conversion request, including the input currencies, amount, converted result, date, and possibly the calling IP (from the webhook headers). This is crucial for financial auditing and analysis. Rate Limits & Caching: If you anticipate many requests, be mindful of ExchangeRate.host's API rate limits. You can introduce a Cache node to store recent conversion results for a short period, reducing redundant API calls for common conversions. Alternatively, add a Delay node to space out requests if you're hitting limits. Format & Rounding: Use a Function node or Set node to format the result to a specific number of decimal places (e.g., {{ $json.result.toFixed(2) }}). Add currency symbols or full currency names to the output for better readability. Alerting on Significant Changes: Chain this workflow with a Cron or Schedule node to periodically fetch exchange rates for a pair you care about (e.g., USD to EUR). Use an IF node to compare the current rate with a previously stored rate. If the change exceeds a certain percentage, send an alert via Slack, Email, or Telegram to notify you of significant market shifts. Integration with Payment Gateways: For e-commerce, combine this with nodes for payment gateways (e.g., Stripe, PayPal) to automatically convert customer payments received in foreign currencies to your base currency before recording. Multi-currency Pricing for Products: Use this workflow in conjunction with your product database. When a user selects a different country/currency, trigger this webhook to dynamically convert product prices and display them instantly.