by Davide
This workflow automates the process of sending voice calls for verification purposes and combines it with email verification. It uses the ClickSend API for voice calls and integrates with SMTP for email verification. This workflow is a powerful tool for automating phone and email verification, ensuring a seamless and secure user verification process. Below is a breakdown of the workflow: 1. How It Works The workflow is designed to verify a user's phone number and email address through a combination of voice calls and email verification. Here's how it works: Form Submission: The workflow starts with a Form Trigger node, where users submit a form with the following fields: To: The recipient's phone number (including the international prefix, e.g., +1xxxx). Voice: The voice type (male or female). Lang: The language for the voice call (e.g., en-us, it-it, fr-fr, etc.). Email: The recipient's email address. Name: The recipient's name. Set Voice Code: The Set Voice Code node defines the verification code that will be spoken during the voice call. Format Code for Voice: The Code for Voice node formats the verification code by adding spaces between characters for better clarity during the voice call. Send Voice Call: The call includes the verification code, which is read aloud to the recipient. Verify Voice Code: The Verify Voice Code node prompts the user to enter the code they received via the voice call. The Is Voice Code Correct? node checks if the entered code matches the predefined code. If correct, the workflow proceeds to email verification. If incorrect, the user is notified of the failure. Set Email Code: The Set Email Code node defines the verification code that will be sent via email. Send Email: The Send Email node sends an email to the recipient with the verification code using SMTP. Verify Email Code: The Verify Email Code node prompts the user to enter the code they received via email. The Is Email Code Correct? node checks if the entered code matches the predefined code. If correct, the user is notified of successful verification. If incorrect, the user is notified of the failure. 2. Set Up Steps To set up and use this workflow in n8n, follow these steps: ClickSend API Key: Create an account on ClickSend and obtain your API Key. In the Send Voice node, set up HTTP Basic Authentication: Username: Use the username you registered with on ClickSend. Password: Use the API Key provided by ClickSend. SMTP Configuration: Set up SMTP credentials in n8n for the Send Email node. Ensure the SMTP server is configured to send emails from the specified email address. Form Configuration: The Form Trigger node is pre-configured with fields for: To: The recipient's phone number. Voice: Choose between male or female voice. Lang: Select the language for the voice call. Email: The recipient's email address. Name: The recipient's name. Customize the form fields if needed. Set Verification Codes: In the Set Voice Code node, define the verification code that will be spoken during the voice call. In the Set Email Code node, define the verification code that will be sent via email. Test the Workflow: Submit the form with the required details (phone number, voice, language, email, and name). The workflow will: Send a voice call with the verification code. Prompt the user to verify the code. Send an email with the verification code. Prompt the user to verify the email code. Notify the user of success or failure. Need help customizing? Contact me for consulting and support or add me on Linkedin.
by Joseph LePage
🎦🚀 YouTube Video Comment Analysis Agent This n8n workflow is designed to help YouTube creators analyze video details and comments to generate a comprehensive and actionable report. The workflow provides insights into video performance, audience engagement, and viewer feedback, helping creators identify trends, interests, and opportunities for future content creation. ✨ Key Features Video Performance Analysis: Extracts metrics like views, likes, and comments to evaluate the video's success. Comment Sentiment Analysis: Determines the tone of comments (positive, neutral, or negative) to understand audience sentiment. Recurring Themes Detection: Identifies common topics or questions in comments to highlight viewer interests. Engagement Drivers: Pinpoints what aspects of the video resonated most with viewers. Actionable Recommendations: Offers strategies for creating follow-up content or improving future videos. Keyword Suggestions: Extracts frequently mentioned terms for better discoverability on YouTube. Collaboration Opportunities: Suggests potential partnerships based on viewer feedback or related channels. 🛠️ How to Use Set Up Workflow Variables: Add your GOOGLE_API_KEY and the VIDEO_ID of the YouTube video you want to analyze in the "Workflow Variables" node. Ensure your Google API key has access to the YouTube Data API. Run the Workflow: Trigger the workflow manually or through another workflow using the "Execute Workflow Trigger" node. The workflow will fetch video details and comments using pagination to ensure all data is captured. Generate Insights: The workflow processes video details and comments to create a detailed report with actionable insights. Outputs include sentiment analysis, engagement drivers, content opportunities, and audience profiling. View or Share Results: The report is converted into Markdown and can be emailed via Gmail or saved to Google Drive as a document. 🌟 Value from This Workflow Gain a deeper understanding of your audience's preferences and feedback. Identify trends and engagement drivers to replicate success in future videos. Discover new content opportunities based on viewer questions and suggestions. Improve discoverability by leveraging keyword suggestions extracted from comments. Build stronger connections with your audience by addressing their needs effectively.
by tanaypant
This workflow automatically follows the steps in a custom incident response playbook and manages incidents in PagerDuty, Jira tickets, and notifies the on-call team in Mattermost. This workflow consists of three sub-workflows, each automating specific steps in the playbook. Read more about this use case and learn how to set up the workflows step-by-step in the blog tutorial How to automate every step of an incident response workflow. Prerequisites A PagerDuty account and credentials A Mattermost account and credentials A Jira account and credentials Nodes Webhook nodes trigger the workflows when an incident is created in PagerDuty, and when the incidedent is acknowledged and resolved. Mattermost nodes create an auxiliary channel for the on-call team to discuss the incident with buttons to acknowledge the incident and mark it as resolved. PagerDuty nodes update the status of the incident. Jira nodes create an issue about the incident and update its status when it's resolved.
by Don Jayamaha Jr
Track NFT listings, offers, orders, and trait-based pricing in real time! This workflow integrates OpenSea API, AI-powered analytics (GPT-4o-mini), and n8n automation to provide instant insights into NFT trading activity. Ideal for NFT traders, collectors, and investors looking to monitor the market and identify profitable opportunities. How It Works A user submits a query about NFT listings, offers, or order history. The OpenSea Marketplace Agent determines the correct API tool: Retrieve active NFT listings for a collection. Fetch valid offers for individual NFTs or entire collections. Identify the cheapest NFT listings by collection or token ID. Track the highest offer made for a single NFT. Access detailed order history for a transaction. The OpenSea API (requires API key) is queried to fetch real-time data. The AI engine processes and structures the response, making it easy to interpret. The NFT marketplace insights are delivered via Telegram, Slack, or stored in a database. What You Can Do with This Agent 🔹 Find the Best NFT Listings → Retrieve the cheapest available listings in any collection. 🔹 Track Offers on NFTs → See all active offers, including highest bids. 🔹 Analyze Collection-Wide Market Data → Compare listings, offers, and sales activity. 🔹 Retrieve Order Details → Search by order hash to check buyer, seller, and transaction status. 🔹 Fetch NFT Trait-Based Offers → Identify rare traits that receive premium bids. 🔹 Monitor Multi-Chain Listings → Works across Ethereum, Polygon (Matic), Arbitrum, Optimism, and more. Example Queries You Can Use ✅ "Show me the 10 cheapest listings for Bored Ape Yacht Club." ✅ "Find the highest bid for CryptoPunk #1234." ✅ "Track all open offers for Azuki NFTs." ✅ "Retrieve details for this OpenSea order: 0x123abc... on Ethereum." ✅ "List all NFTs for sale in the 'CloneX' collection." Available API Tools & Endpoints 1️⃣ Get All Listings by Collection → /api/v2/listings/collection/{collection_slug}/all (Fetches active listings for a collection) 2️⃣ Get All Offers by Collection → /api/v2/offers/collection/{collection_slug}/all (Retrieves all offers for a collection) 3️⃣ Get Best Listing by NFT → /api/v2/listings/collection/{collection_slug}/nfts/{identifier}/best (Finds the lowest-priced NFT listing) 4️⃣ Get Best Listings by Collection → /api/v2/listings/collection/{collection_slug}/best (Fetches the cheapest listings per collection) 5️⃣ Get Best Offer by NFT → /api/v2/offers/collection/{collection_slug}/nfts/{identifier}/best (Retrieves the highest offer for an NFT) 6️⃣ Get Collection Offers → /api/v2/offers/collection/{collection_slug} (Shows collection-wide offers) 7️⃣ Get Item Offers → /api/v2/orders/{chain}/{protocol}/offers (Fetches active item-specific offers) 8️⃣ Get Listings by Chain & Protocol → /api/v2/orders/{chain}/{protocol}/listings (Retrieves active listings across blockchains) 9️⃣ Get Order Details by Hash → /api/v2/orders/chain/{chain}/protocol/{protocol_address}/{order_hash} (Checks order status using an order hash) 🔟 Get Trait-Based Offers → /api/v2/offers/collection/{collection_slug}/traits (Fetches offers for specific NFT traits) Set Up Steps Get an OpenSea API Key Sign up at OpenSea API and request an API key. Configure API Credentials in n8n Add your OpenSea API key under HTTP Header Authentication. Connect the Workflow to Telegram, Slack, or Database (Optional) Use n8n integrations to send alerts to Telegram, Slack, or save results to Google Sheets, Notion, etc. Deploy and Test Send a query (e.g., "Get the best listing for BAYC #5678") and receive instant insights! Stay ahead of the NFT market—gain powerful insights with AI-powered OpenSea analytics!
by Amjid Ali
Smart Email Auto-Responder with AI Classification Automatically Categorize and Reply to Emails using LangChain + Google Gemini + Gmail + SMTP + Brevo This n8n workflow is designed to intelligently manage incoming emails and automatically send personalized responses based on the content. It classifies emails using LangChain's Text Classifier, sends HTML responses depending on the category, and updates Gmail and Brevo CRM accordingly. Key Features Triggers and Classifies Emails Listens for new Gmail messages every hour Uses AI-based classification to identify the type of inquiry For Example: Guest Post YouTube Review Udemy Course Inquiry Responds Automatically Sends professional HTML replies customized for each type Uses SMTP to deliver emails from your domain Enhances Workflow with Automation Marks processed emails as read Applies Gmail labels Adds sender to Brevo contact list Optional AI Chat Integration Uses Google Gemini (PaLM 2) to enhance classification or summarization Tools & Integrations Required Gmail account (OAuth2) LangChain (Text Classifier node) Google Gemini API account SMTP credentials (e.g., Gmail SMTP, Brevo, etc.) Brevo/Sendinblue account and API key Step-by-Step Node Guide 1. Gmail Trigger Polls Gmail every hour for new emails. Filters out internal addresses (e.g., @syncbricks.com). Avoids replying to already-responded emails (Re: subject filter). 2. LangChain Text Classifier Uses AI to categorize the content of the email based on pre-defined categories: Guest Post** Youtube** Udemy Courses** 3. Google Gemini (PaLM) Chat Model (Optional) Provides additional AI support to enhance classification accuracy. Can be used to summarize or enrich the context if needed. 4. Email Send Nodes Each response category has a separate SMTP node with a custom HTML email: Guest Post Inquiry** YouTube Video Inquiry** Udemy Course Inquiry** 5. Gmail: Mark as Read Marks the email so it isn’t processed again. 6. Gmail: Apply Label Adds a label (e.g., Handled by Bot) for organization. 7. Brevo: Create/Update Contact Saves the sender to your CRM for future communication or marketing. Email Templates Included Guest Post Template Includes pricing, website list, submission guidelines, and payment instructions. YouTube Review Template Includes package pricing, review samples, video thumbnails, and inquiry instructions. Step by Step Tutorial GET n8n Now N8N COURSE n8n Book More courses: http://lms.syncbricks.com YouTube Channel: https://youtube.com/@syncbricks How to Use Import the template into your n8n instance. Configure your Gmail OAuth2 and SMTP credentials. Set up your LangChain Text Classifier and Google Gemini API credentials. Update label ID in the Gmail node and ensure all custom fields like from.value[0].name match your use case. Run the workflow and watch it respond intelligently to new inquiries. Best Practices Always test with mock emails first. Keep the Google Gemini node optional if you want to reduce cost/API calls. Use Gmail filters to auto-label certain types of emails. Monitor your Brevo contacts to track new leads. Attribution & Support Developed by Amjid Ali This template took extensive time and effort to build. If you find it useful, please consider supporting my work. Buy My Book: Mastering n8n on Amazon Full Courses & Tutorials: http://lms.syncbricks.com Follow Me Online: LinkedIn: https://linkedin.com/in/amjidali Website: https://amjidali.com YouTube: https://youtube.com/@syncbricks
by WeblineIndia
This workflow automatically forwards incoming Gmail emails to a Telegram chat only if the email subject contains specific keywords (like "Urgent" or "Server Down"). The workflow extracts key details such as the sender, subject, and message body, and sends them as a formatted message to a specified Telegram chat. This is useful for real-time notifications, security alerts, or monitoring important emails directly from Telegram — filtering out unnecessary emails. Prerequisites: Before setting up the workflow, ensure the following: The Gmail API should be enabled. Create a bot using @BotFather and obtain the API key. Retrieve the telegram Chat ID (for personal messages or group messages). Set up OAuth2 for Gmail and use the Bot Token for Telegram. Customisation Options : Modify the subject keywords in the IF Node to change the filtering criteria. Customize how the email details appear in Telegram (bold subject, italic body, etc.). Extend the workflow to include email attachments in Telegram. Steps : Step 1: Gmail Trigger Node (On Message Received) Select "Gmail Trigger" and add it to the workflow. Authenticate with your Google Account. Set Trigger Event to "Message Received". (Optional) Add filters for specific senders, labels, or subjects. Click "Execute Node" to test the connection. Click "Save". Step 2: IF Node (Conditional Filtering) Add an "IF" Node after the Gmail Trigger. Configure the condition to check if the email subject contains specific keywords (e.g., "Urgent", "Server Down", "Alert"). If the condition is true, proceed to the next step. If false, you can stop or route it elsewhere (optional). Step 3: Telegram Node (Send Message Action) Click "Add Node" and search for Telegram. Select "Send Message" as the action. Authenticate using your Telegram Bot Token. Set the Chat ID (personal or group chat). Format the message using email details received from the email trigger node and set the message in text. Steps 4. Connect & Test the Workflow Link Gmail Trigger → if node → Telegram Send Message. Save and execute the workflow manually. Send a test email to your Gmail account. Verify if the email details appear in your Telegram chat. About the Creator, WeblineIndia This workflow is created by the Agentic business process automation developers at WeblineIndia. We build automation and AI-driven tools that make life easier for your team. If you’re looking to hire dedicated developers who can customize workflows around your business, we’re just a click away.
by WeblineIndia
This workflow streamlines the process of creating events in Google Calendar using event data stored in a Google Sheet. The process begins by retrieving the latest event entry from Google Sheets, ensuring only the most recent event details are processed. Once fetched, a Function node formats the event date to align with Google Calendar's required format—ensuring consistency and preventing date-related errors. After formatting, the structured event details are sent to Google Calendar, where an event is created with essential information such as the event title (summary), description, date, and location. Additionally, the workflow allows customization by setting the event's status as either "Busy" or "Available," helping attendees manage their schedules. A background color can also be assigned for better visibility and categorization. By automating this process, you eliminate the need for manual event creation, ensuring seamless synchronization between Google Sheets and Google Calendar. This improves efficiency, accuracy, and productivity, making event management effortless. Prerequisites : Before setting up this workflow, ensure the following: You have an active Google account connected to Google Sheets and Google Calendar. The Google Sheets API and Google Calendar API are enabled in the Google Cloud Console. n8n has the necessary OAuth2 authentication configured for both Google Sheets and Google Calendar. Your Google Sheet has columns for event details (event name, description, location, date, etc.). |Event Name|Event Description|Event Start Date|Location| |-|-|-|-| |Birthday|Celebration|27-Mar-1989|City| |Anniversary|Celebration|10-Jun-2015|City| Customization Options : Modify the Google Sheets trigger to track updates in specific columns. Adjust the data formatting function to support: Different date/time formats Time zone settings Custom event colors Attendee invitations Steps : Step 1: Add the Google Sheets Trigger Node Click "Add Node" and search for Google Sheets. Select "Google Sheets Trigger" and add it to the workflow. Authenticate using your Google account (select an existing account if already authenticated). Select the Spreadsheet and Sheet Name to monitor. Set the Trigger Event to "Row Added". Click "Execute Node" to test the connection. Click "Save". Step 2: Process Data with Function Node Click "Add Node" and search for Function. Add the Function Node and connect it to the Google Sheets Trigger Node. In the function editor, write a script to extract and format data. Ensure the required fields (title, location, date) are properly structured. Click "Execute Node" to verify the formatted output. Click "Save". Step 3: Add the Google Calendar Node Click "Add Node" and search for Google Calendar. Select "Create Event" operation. Authenticate with Google Calendar. Map the required fields Title Description Location Start time Optional: Set Event Status and Event Colors. Click "Execute Node" to test event creation. Click "Save". Step 4: Final Steps Connect all nodes in sequence (Google Sheets Trigger → Function Node → Google Calendar Node). Test the workflow by adding a sample row in Google Sheets. Verify that the event is created in Google Calendar with the correct title, description, date, and location. About WeblineIndia This workflow was built by the AI development team at WeblineIndia. We help businesses automate processes, reduce repetitive work, and scale faster. Need something custom? You can hire AI developers to build workflows tailored to your needs.
by Samir Saci
Tags: Productivity, Pomodoro, Organization Context Hey! I’m Samir, a Supply Chain Engineer and Data Scientist from Paris, founder of LogiGreen Consulting 🌱 A significant improvement in my productivity came from following the Pomodoro Technique. What is the Pomodoro Technique? The Pomodoro Technique is a time management method that breaks your workday into 25-minute focus intervals followed by short breaks. After 4 cycles, you take a longer break to recharge. It helps maintain concentration while preventing burnout. I’ve used this technique with web apps to receive break/work notifications. But I always wished I had a way to track my sessions for self-assessment. > Let’s use n8n to boost our productivity and log our deep work sessions automatically! 📬 For business inquiries, you can add me on Here Who Is This Template For? I built this workflow for creators, freelancers, students, and professionals who love the Pomodoro technique but want more than just timers — they want data. This template helps you: Track every deep work session automatically Store logs in Google Sheets for later analysis Stay in control via Telegram commands There is no need to pay for premium apps. It’s all free and powered by n8n. How Does It Work? This Telegram bot tracks your Pomodoro sessions and sends you alerts during the process. Here’s what happens: A user sends /start to the bot. It launches a 25-minute deep work timer. After 25 minutes, the bot sends a break reminder. After four cycles, a long break is triggered and the session is logged. The session is automatically recorded to Google Sheets with (Date & Time, User ID, Pomodoro count, Session ID, Duration of focus and breaks) What Gets Tracked? | Field | Description | |-------------------|--------------------------------------| | Date & Time | When the session was logged | | User ID | Your Telegram ID | | Block Type | Deep Work or Short Break | Pomodoro Count | Number of cycles completed | | Working Session ID | Unique ID for each session | | Focus Duration | Length of each deep work session | | Break Duration | Short or long break info | You can use this workflow as a base to bring additional features like: Connecting with tasks from Google Task Send automated productivity reports to monitor your activity Link a Pomodoro with a task using Google Calendar What Do I Need to Start? This workflow is beginner-friendly — no coding required. Google Drive API* and *Google Sheet API** credentials A Google Sheet set up to log sessions (with the columns of the table above) API Credentials: Google Sheets API (OAuth2) Telegram Bot Token Telegram app to chat with the bot > The template is plug-and-play. Just follow the sticky notes in the n8n editor to configure it. Next Steps Follow the sticky notes in the n8n workflow editor to: Set your credentials Connect your Google Sheet Initialize the static data Launch your first /start command on Telegram 🎥 Watch My Tutorial 🚀 Curious how n8n can supercharge productivity and learning skills?? 📬 Let’s connect on LinkedIn This workflow has been created with N8N 1.82.1 Submitted: March 24th, 2025
by CustomJS
This n8n template shows how to extract selected pages from a generated PDF with the PDF Toolkit by www.customjs.space. @custom-js/n8n-nodes-pdf-toolkit Notice Community nodes can only be installed on self-hosted instances of n8n. What this workflow does Downloads** each PDF using an HTTP Request. Extract** pages from the PDF file as needed. Requirements Self-hosted** n8n instance CustomJS API key** for extracting PDF files. PDF files to be merged** to be converted into a PDF Workflow Steps: Manual Trigger: Runs with user interaction. Download PDF File: Pass urls for PDF files to merge. Extract Pages from PDF: Extract selected pages from a generated PDF Usage Get API key from customJS Sign up to customJS platform. Navigate to your profile page Press "Show" button to get API key Set Credentials for CustomJS API on n8n Copy and paste your API key generated from CustomJS here. Design workflow A Manual Trigger for starting workflow. HTTP Request Nodes for downloading PDF files. Extract Pages from PDF. You can replace logic for triggering and returning results. For example, you can trigger this workflow by calling a webhook and get a result as a response from webhook. Simply replace Manual Trigger and Write to Disk nodes. Perfect for Taking a note of specific pages from PDF files. Splitting PDF file into multiple parts.
by Friedemann Schuetz
Update 19-04-2025 Change from OpenAI to Claude 3.7 Sonnet module Adding the Think Tool The update enables significantly better results to be achieved. This is particularly noticeable during longer meetings! What this workflow does This workflow retrieves the Zoom meeting data from the last 24 hours. The transcript of the last meeting is then retrieved, processed, a summary is created using AI and sent to all participants by email. AI is then used to create tasks and follow-up appointments based on the content of the meeting. Important: You need a Zoom Workspace Pro account and must have activated Cloud Recording/Transcripts! This workflow has the following sequence: manual trigger (Can be replaced by a scheduled trigger or a webhook) retrieval of of Zoom meeting data filter the events of the last 24 hours retrieval of transcripts and extract of the text creating a meeting summary, format to html and send per mail create tasks and follow-up call (if discussed in the meeting) in ClickUp/Outlook (can be replaced by Gmail, Airtable, and so forth) via sub workflow Requirements: Zoom Workspace (via API and HTTP Request): Documentation Microsoft Outlook: Documentation ClickUp: Documentation AI API access (e.g. via OpenAI, Anthropic, Google or Ollama) SMTP access data (for sending the mail) You must set up the individual sub-workflows as separate workflows. Then set the “Execute workflow trigger” here. Then select the corresponding sub-workflow in the AI Agent Tools. You can select the number of domains yourself. If the data queries are not required, simply delete the corresponding tool (e.g. “Analytics_Domain_5). Feel free to contact me via LinkedIn, if you have any questions!
by ConvertAPI
Who is this for? For developers and organizations that need to convert PDF files to PDFA for long term archiving. What problem is this workflow solving? The file format conversion problem. What this workflow does Downloads the PDF file from the web. Converts the PDF file to PDFA. Stores the PDFA file in the local file system. How to customize this workflow to your needs Open the HTTP Request node. Adjust the URL parameter (all endpoints can be found here). Add your secret to the Query Auth account parameter. Please create a ConvertAPI account to get an authentication secret. Optionally, additional Body Parameters can be added for the converter.
by Yaron Been
This workflow automatically monitors social media advertising performance across platforms to track campaign effectiveness and ROI. It saves you time by eliminating the need to manually check multiple ad platforms and provides consolidated performance data for all your social media campaigns. Overview This workflow automatically scrapes social media advertising platforms to extract campaign performance metrics including impressions, clicks, conversions, and cost data. It uses Bright Data to access ad platforms without being blocked and AI to intelligently parse advertising data into structured performance reports. Tools Used n8n**: The automation platform that orchestrates the workflow Bright Data**: For scraping social ad platforms without being blocked OpenAI**: AI agent for intelligent ad performance data extraction and analysis Google Sheets**: For storing and organizing advertising performance data How to Install Import the Workflow: Download the .json file and import it into your n8n instance Configure Bright Data: Add your Bright Data credentials to the MCP Client node Set Up OpenAI: Configure your OpenAI API credentials Configure Google Sheets: Connect your Google Sheets account and set up your ad performance tracking spreadsheet Customize: Set target ad platform URLs and campaign monitoring parameters Use Cases Digital Marketing**: Track ROI and performance across all social media ad campaigns Performance Analysis**: Identify top-performing ads and optimize underperforming campaigns Budget Management**: Monitor ad spend and cost-per-acquisition metrics Campaign Optimization**: Make data-driven decisions for ad creative and targeting Connect with Me Website**: https://www.nofluff.online YouTube**: https://www.youtube.com/@YaronBeen/videos LinkedIn**: https://www.linkedin.com/in/yaronbeen/ Get Bright Data**: https://get.brightdata.com/1tndi4600b25 (Using this link supports my free workflows with a small commission) #n8n #automation #socialads #adperformance #brightdata #webscraping #digitalmarketing #n8nworkflow #workflow #nocode #adautomation #campaigntracking #socialmediamarketing #adanalytics #performancetracking #marketingautomation #admonitoring #campaignanalysis #socialadvertising #marketingdata #admetrics #digitaladvertising #adoptimization #campaignmonitoring #marketinganalysis #adinsights #socialmediaads #paidads #adcampaigns #marketingroi