Back to Catalog
Baptiste Fort

Baptiste Fort

Fondateur de l'agence : visionia.io contact : baptiste@visionia.io

Total Views9,609
Templates7

Templates by Baptiste Fort

Scrape Google Maps leads (email, phone, website) using Apify + GPT + Airtable

Who is it for? This workflow is for marketers, sales teams, and local businesses who want to quickly collect leads (business name, phone, website, and email) from Google Maps and store them in Airtable. You can use it for real estate agents, restaurants, therapists, or any local niche. If you need a professional automation agency to build advanced lead generation systems like this, check out Vision IA's n8n automation services. --- How it works Scrape Google Maps with Apify Google Maps Extractor. Clean and structure the data (name, address, phone, website). Visit each website and retrieve the raw HTML. Use GPT to extract the most relevant email from the site content. Save everything to Airtable for easy filtering and future outreach. It works for any location or keyword – just adapt the input in Apify. --- Requirements Before running this workflow, you’ll need: ✅ Apify account (to use the Google Maps Extractor) ✅ OpenAI API key (for GPT email extraction) ✅ Airtable account & base with the following fields: Business Name Address Website Phone Number Email Google Maps URL --- Airtable Structure Your Airtable base should contain these columns: Airtable Structure | Title | Street | Website | Phone Number | Email | URL | |-------------------------|-------------------------|--------------------|-----------------|------------------------|----------------------| | Paris Real Estate Agency| 10 Rue de Rivoli, Paris | https://agency.fr | +33 1 23 45 67 | contact@agency.fr | maps.google.com/... | | Example Business 2 | 25 Avenue de l’Opéra | https://example.fr | +33 1 98 76 54 | info@example.fr | maps.google.com/... | | Example Business 3 | 8 Boulevard Haussmann | https://demo.fr | +33 1 11 22 33 | contact@demo.fr | maps.google.com/... | --- Error Handling Missing websites: If a business has no website, the flow skips the scraping step. No email found: GPT returns Null if no email is detected. API rate limits: Add a Wait node between requests to avoid Apify/OpenAI throttling. Now let’s take a detailed look at how to set up this automation, using real estate agencies in Paris as an example. Step 1 – Launch the Google Maps Scraper Start with a When clicking Execute workflow trigger to launch the flow manually. Then, add an HTTP Request node with the method set to POST. 👉 Head over to Apify: Google Maps Extractor On the page: https://apify.com/compass/google-maps-extractor Enter your business keyword (e.g., real estate agency, hairdresser, restaurant) Set the location you want to target (e.g., Paris, France) Choose how many results to fetch (e.g., 50) Optionally, use filters (only places with a website, by category, etc.) ⚠️ No matter your industry, this works — just adapt the keyword and location. Once everything is filled in: Click Run to test. Then, go to the top right → click on API. Select the API endpoints tab. Choose Run Actor synchronously and get dataset items. Copy the URL and paste it into your HTTP Request (in the URL field). Then enable: ✅ Body Content Type → JSON ✅ Specify Body Using JSON` Go back to Apify, click on the JSON tab, copy the entire code, and paste it into the JSON body field of your HTTP Request. At this point, if you run your workflow, you should see a structured output similar to this: title subTitle price categoryName address neighborhood street city postalCode ........ Step 2 – Clean and structure the data Once the raw data is fetched from Apify, we clean it up using the Edit Fields node. In this step, we manually select and rename the fields we want to keep: Title → {{ $json.title }} Address → {{ $json.address }} Website → {{ $json.website }} Phone → {{ $json.phone }} URL → {{ $json.url }}* This node lets us keep only the essentials in a clean format, ready for the next steps. On the right: a clear and usable table, easy to work with. Step 3 – Loop Over Items Now that our data is clean (see step 2), we’ll go through it item by item to handle each contact individually. The Loop Over Items node does exactly that: it takes each row from the table (each contact pulled from Apify) and runs the next steps on them, one by one. 👉 Just set a Batch Size of 20 (or more, depending on your needs). Nothing tricky here, but this step is essential to keep the flow dynamic and scalable. Step 4 – Edit Field (again) After looping through each contact one by one (thanks to Loop Over Items), we're refining the data a bit more. This time, we only want to keep the website. We use the Edit Fields node again, in Manual Mapping mode, with just: Website → {{ $json.website }} The result on the right? A clean list with only the URLs extracted from Google Maps. 🔧 This simple step helps isolate the websites so we can scrape them one by one in the next part of the flow. Step 5 – Scrape Each Website with an HTTP Request Let’s continue the flow: in the previous step, we isolated the websites into a clean list. Now, we’re going to send a request to each URL to fetch the content of the site. ➡️ To do this, we add an HTTP Request node, using the GET method, and set the URL as: {{ $json.website }} This value comes from the previous Edit Fields input This node will simply “visit” each website automatically and return the raw HTML code (as shown on the right). 📄 That’s the material we’ll use in the next step to extract email addresses (and any other useful info). We’re not reading this code manually — we’ll scan through it line by line to detect patterns that matter to us. This is a technical but crucial step: it’s how we turn a URL into real, usable data. Step 6 – Extract the Email with GPT Now that we've retrieved all the raw HTML from the websites using the HTTP Request node, it's time to analyze it. 💡 Goal: detect the most relevant email address on each site (ideally the main contact or owner). 👉 To do that, we’ll use an OpenAI node (Message a Model). Here’s how to configure it: ⚙️ Key Parameters: Model: GPT-4-1-MINI (or any GPT-4+ model available) Operation: Message a Model Resource: Text Simplify Output: ON Prompt (message you provide): Look at this website content and extract only the email I can contact this business. In your output, provide only the email and nothing else. Ideally, this email should be of the business owner, so if you have 2 or more options, try for most authoritative one. If you don't find any email, output 'Null'. Exemplary output of yours: name@examplewebsite.com {{ $json.data }} Step 7 – Save the Data in Airtable Once we’ve collected everything — the business name, address, phone number, website… and most importantly the email extracted via ChatGPT — we need to store all of this somewhere clean and organized. 👉 The best place in this workflow is Airtable. 📦 Why Airtable? Because it allows you to: Easily view and sort the leads you've scraped Filter, tag, or enrich them later And most importantly… reuse them in future automations ⚙️ What we're doing here We add an Airtable → Create Record node to insert each lead into our database. Inside this node, we manually map each field with the data collected in the previous steps: | Airtable Field | Description | Value from n8n | | -------------- | ------------------------ | ------------------------------------------ | | Title | Business name | {{ $('Edit Fields').item.json.Title }} | | Street | Full address | {{ $('Edit Fields').item.json.Address }} | | Website | Website URL | {{ $('Edit Fields').item.json.Website }} | | Phone Number | Business phone number | {{ $('Edit Fields').item.json.Phone }} | | Email | Email found by ChatGPT | {{ $json.message.content }} | | URL | Google Maps listing link | {{ $('Edit Fields').item.json.URL }} | 🧠 Reminder: we’re keeping only clean, usable data — ready to be exported, analyzed, or used in cold outreach campaigns (email, CRM, enrichment, etc.). ➡️ And the best part? You can rerun this workflow automatically every week or month to keep collecting fresh leads 🔁. Need Help Building an Automated Lead Generation System? This workflow is a solid foundation for scraping Google Maps and extracting contact emails automatically. If you want to go further with AI-powered lead qualification, multi-channel outreach, and automatic follow-ups, our agency builds custom lead generation systems that run 24/7. 👉 Explore our lead generation automation services: Vision IA – Automated Lead Generation Agency We help B2B companies and agencies scale their prospecting without hiring more people—everything from data collection to booking qualified meetings happens on autopilot. Questions about this workflow or other automation solutions? Visit Vision IA or reach out for a free consultation.

Baptiste FortBy Baptiste Fort
4634

Send a voice note on Telegram to generate a professional email with ChatGPT

Telegram Voice Message → Automatic Email Imagine: What if you could turn a simple Telegram voice message into a professional email—without typing, copying, pasting, or even opening Gmail? This workflow does it all for you: just record a voice note, and it will transcribe, format, and write a clean HTML email, then send it to the right person—all by itself. Prerequisites Create a Telegram bot (via BotFather) and get the token. Have an OpenAI account (API key for Whisper and GPT-4). Set up a Gmail account with OAuth2. Import the JSON template into your automation platform. 🧩 Detailed Flow Architecture Telegram Trigger Node: Telegram Trigger This node listens to all Message events received by the specified bot (e.g., “BOT OFFICIEL BAPTISTE”). Whenever a user sends a voice message, the trigger fires automatically. &gt; ⚠️ Only one Telegram trigger per bot is possible (API limitation). Key parameter: Trigger On: Message Wait Node: Wait Used to buffer or smooth out calls to avoid collisions if you receive several voice messages in a row. Retrieve the Audio File Node: Get a file Type: Telegram (resource: file) Parameter: fileId = {{$json["message"]["voice"]["file_id"]}} This node fetches the voice file from Telegram received in step 1 Automatic Transcription (Whisper) Node: Transcribe a recording Resource: audio Operation: transcribe API Key: Your OpenAI account The audio file is sent to OpenAI Whisper: the output is clean, accurate text ready to be processed. Optional Wait (Wait1) Node: Wait1 Same purpose as step 2: useful if you want to buffer or add a delay to absorb processing time. Structured Email Generation (GPT-4 + Output Parser) Node: AI Agent This is the core of the flow: The transcribed text is sent to GPT-4 (or GPT-4.1-mini here, via OpenAI Chat Model) Prompt used: markdown You are an assistant specialized in writing professional emails. Based on the text below, you must: {{ $json.text }} Detect if there is a recipient's email address in the text (or something similar like "send to fort.baptiste.pro") If it’s not a complete address, complete it by assuming it ends with @gmail.com. Understand the user's intent (resignation, refusal, application, excuse, request, etc.) Generate a relevant and concise email subject, faithful to the content Write a professional message, structured in HTML: With a polite tone, adapted to the situation Formatted with HTML tags (<p>, <br>, etc.) No spelling mistakes in French My first name is jeremy and if the text says he is not happy, specify the wish to resign ⚠️ You must always return your answer in the following strict JSON format, with no extra text: json { "email": "adresse@gmail.com", "subject": "Objet de l’email", "body": "<p>Contenu HTML de l’email</p>" } Everything is strictly validated and formatted with the Structured Output Parser node. Automatic Email Sending (Gmail) Node: Send a message To: {{$json.output.email}} Subject: {{$json.output.subject}} HTML Body: {{$json.output.body}} This node takes the JSON structure returned by the AI and sends the email via Gmail, to the right recipient, with the correct subject and full HTML formatting. If you want to automate manual tasks, visit our French Agence automatisation 0vni.

Baptiste FortBy Baptiste Fort
1244

Google Maps leads (names,emails,phones...) Apify + Airtable + custom emails

Who is it for? This workflow is perfect for anyone who wants to: Automatically collect contacts from Google Maps: emails, phone numbers, websites, social media (LinkedIn, Facebook), city, ratings, and reviews. Organize everything neatly in Airtable, without dealing with messy CSV exports that cause headaches. Send a personalized email to each lead, without writing it or hitting "send" yourself. 👉 In short, it's the perfect tool for marketing agencies, freelancers in prospecting, or sales teams tired of endless copy-paste. If you're looking for a professional n8n automation agency to build custom workflows like this one, check out Vision IA's n8n automation services. How does it work? Here's the pipeline: Scrape Google Maps with Apify (business name, email, website, phone, LinkedIn, Facebook, city, rating, etc.). Clean and map the data so everything is well-structured (Company, Email, Phone, etc.). Send everything into Airtable to build a clear, filterable database. Trigger an automatic email via Gmail, personalized for each lead. 👉 The result: a real prospecting machine for local businesses. What you need before starting ✅ An Apify account (for Google Maps scraping). ✅ An Airtable account with a prepared base (see structure below). ✅ A Gmail account (to send automatic emails). Airtable Base Structure Your table should contain the following columns: | Company | Email | Phone Number | Website | LinkedIn | Facebook | City | Category | Google Maps Reviews | Google Maps Link | | ------- | ---------------------------------------- | ----------------- | -------------------------------------------- | -------------- | -------------- | ---------------- | ---------------- | ------------------- | ----------------- | | 4 As | contact@4-as.fr | +33 1 89 36 89 00 | https://www.4-as.fr/ | linkedin.com/… | facebook.com/… | 94100 Saint-Maur | training, center | 48 reviews / 5 ★ | maps.google.com/… | Detailed Workflow Steps Step 1 – GO Trigger Node: Manual Trigger Purpose: Start the workflow manually. 👉 You can replace this trigger with a Webhook (to launch the flow via a URL) or a Cron (to run it automatically on a schedule). Step 2 – Scrape Google Maps Node: HTTP Request Method: POST Where to find the Apify URL? Go to Google Maps Email Leads Fast Scraper Click on API (top right) Open API Endpoints Copy the URL of the 3rd option: Run Actor synchronously and get dataset items 👉 This URL already includes your Apify API token. Body Content Type: JSON Body JSON (example): Body Content Type: JSON Body JSON (example): *{ "area_height": 10, "area_width": 10, "emails_only": true, "gmaps_url": "https://www.google.com/maps/search/training+centers+near+Amiens/", "max_results": 200, "search_query": "training center" }* Step 3 – Wait Node: Wait Purpose: Give the scraper enough time to return data. Recommended delay: 10 seconds (adjust if needed). 👉 This ensures that Apify has finished processing before we continue. Step 4 – Mapping Node: Set Purpose: Clean and reorganize the raw dataset into structured fields that match Airtable columns. Assignments (example): Company = {{ $json.name }} Email = {{ $json.email }} Phone = {{ $json.phone_number }} Website = {{ $json.website_url }} LinkedIn = {{ $json.linkedin }} Facebook = {{ $json.facebook }} City = {{ $json.city }} Category = {{ $json.google_business_categories }} Google Maps Reviews = {{ $json.reviews_number }} reviews, rating {{ $json.review_score }}/5 Google Maps Link = {{ $json.google_maps_url }} 👉 Result: The data is now clean and ready for Airtable. Step 5 – Airtable Storage Node: Airtable → Create Record Parameters: Credential to connect with: Airtable Personal Access Token account Resource: Record Operation: Create Base: Select from list → your base (example: GOOGLE MAPS SCRAPT) Table: Select from list → your table (example: Google maps scrapt) Mapping Column Mode: Map Each Column Manually 👉 To get your Base ID and Table ID, open your Airtable in the browser: https://airtable.com/appA6eMHOoquiTCeO/tblZFszM5ubwwSYDK Here: Base ID = appA6eMHOoquiTCeO Table ID = tblZFszM5ubwwSYDK Authentication Go to: https://airtable.com/create/tokens Create a new Personal Access Token Give it access to the correct base Copy the token into n8n credentials (select Airtable Personal Access Token). Field Mapping (example) Company: {{ $json['Company'] }} Email: {{ $json.Email }} Phone: {{ $json['Phone'] }} Website: {{ $json['Website'] }} LinkedIn: {{ $json.LinkedIn }} Facebook: {{ $json.Facebook }} City: {{ $json.City }} Category: {{ $json['Category'] }} Google Maps Reviews: {{ $json['Google Maps Reviews'] }} Google Maps Link: {{ $json['Google Maps Link'] }} 👉 Result: Each lead scraped from Google Maps is automatically saved into Airtable, ready to be filtered, sorted, or used for outreach. Step 6 – Automatic Email Node: Gmail → Send Email Parameters: To: = {{ $json.fields.Email }} Subject: = {{ $json.fields['Company'] }} Message: HTML email with dynamic lead details. Example HTML message: Hello {{ $json.fields['Company'] }} team, I design custom automations for training centers. Goal: zero repetitive manual tasks, from registration to invoicing. Details: {{ $json.fields['Company'] }} in {{ $json.fields.City }} — website: {{ $json.fields['Website'] }} — {{ $json.fields['Google Maps Reviews'] }} Interested in a quick 15-min call to see a live demo? 👉 Result: Each contact receives a fully personalized email with their company name, city, website, and Google Maps rating. Final Result With just one click: Scrape Google Maps (Apify). Clean and structure the data (Set). Save everything into Airtable. Send personalized emails via Gmail. 👉 All without copy-paste, without CSV, and without Excel headaches. Need Help Automating Your Lead Generation? This n8n workflow is a powerful starting point for automating Google Maps prospecting at scale. If you want a turnkey solution with advanced features like AI-powered personalization, multi-channel outreach, and automatic follow-ups, our agency specializes in building custom lead generation systems. 👉 Discover our automated lead generation services: Vision IA – AI-Powered Lead Generation Agency We help B2B companies automate their entire prospecting pipeline—from finding the right contacts to booking meetings—all running 24/7 without manual intervention. Questions about this workflow or other automation possibilities? Visit Vision IA or reach out directly for a free consultation.

Baptiste FortBy Baptiste Fort
967

Automate a Tally form: store with Airtable, notify via Slack

🎯 Workflow Goal Still manually checking form responses in your inbox? What if every submission landed neatly in Airtable — and you got a clean Slack message instantly? That’s exactly what this workflow does. No code, no delay — just a smooth automation to keep your team in the loop: Tally → Airtable → Slack Build an automated flow that: receives Tally form submissions, cleans up the data into usable fields, stores the results in Airtable, and automatically notifies a Slack channel. Step 1 – Connect Tally to n8n What we’re setting up A Webhook node in POST mode. Technical Add a Webhook node. Set it to POST. Copy the generated URL. In Tally → Integrations → Webhooks → paste this URL. Submit a test response on your form to capture a sample structure. Step 2 – Clean the data After connecting Tally, you now receive raw data inside a fields[] array. Let’s convert that into something clean and structured. Goal Extract key info like Full Name, Email, Phone, etc. into simple keys. What we’re doing Add a Set node to remap and clean the fields. Technical Add a Set node right after the Webhook. Add new values (String type) manually: Name: Full Name → Value: {{$json["fields"][0]["value"]}} Name: Email → Value: {{$json["fields"][1]["value"]}} Name: Phone → Value: {{$json["fields"][2]["value"]}} (Adapt the indexes based on your form structure.) Use the data preview in the Webhook node to check the correct order. Output You now get clean data like: { "Full Name": "Jane Doe", "Email": "jane@example.com", "Phone": "+123456789" } Step 3 – Send to Airtable ✅ Once the data is cleaned, let’s store it in Airtable automatically. Goal Create one new Airtable row for each form submission. What we’re setting up An Airtable – Create Record node. Technical Add an Airtable node. Authenticate or connect your API token. Choose the base and table. Map the fields: Name: {{$json["Full Name"]}} Email: {{$json["Email"]}} Phone: {{$json["Phone"]}} Output Each submission creates a clean new row in your Airtable table. Step 4 – Add a delay ⌛ After saving to Airtable, it’s a good idea to insert a short pause — this prevents actions like Slack messages from stacking too fast. Goal Wait a few seconds before sending a Slack notification. What we’re setting up A Wait node for X seconds. ✅ Technical Add a Wait node. Choose Wait for X minutes. Step 5 – Send a message to Slack 💬 Now that the record is stored, let’s send a Slack message to notify your team. Goal Automatically alert your team in Slack when someone fills the form. What we’re setting up A Slack – Send Message node. Technical Add a Slack node. Connect your account. Choose the target channel, like leads. Use this message format: New lead received! Name: {{$json["Full Name"]}} Email: {{$json["Email"]}} Phone: {{$json["Phone"]}} Output Your Slack team is notified instantly, with all lead info in one clean message. Workflow Complete Your automation now looks like this: Tally → Clean → Airtable → Wait → Slack Every submission turns into clean data, gets saved in Airtable, and alerts your team on Slack — fully automated, no extra work. Looking for professional automation support? Try 0vni – Agence automatisation.

Baptiste FortBy Baptiste Fort
607

Automatically reply to customer emails with Airtable, Gmail, and GPT-4.1 Mini

Automatically Reply to Customer Emails with Airtable, Gmail, and OpenAI Introduction This guide walks you step by step through setting up an automated agent that: Receives emails sent by your customers. Analyzes the content of the email. Generates an appropriate response using an AI model (OpenAI GPT). Stores all information (received email, AI response, date, customer email) in Airtable. Automatically replies to the customer in the same Gmail thread. --- Prerequisites Before you start, you’ll need: A Gmail account connected to n8n. An Airtable account. An n8n instance (cloud or self-hosted). An OpenAI API key. --- Prepare the Airtable Base No need to build everything from scratch — here’s a ready-to-use base you can copy: 👉 Open the Airtable base It already contains the following structure: Subject (text) → email subject. Date (date/time) → date of reception. Customer Email (text) → customer’s email address. Message (long text) → body of the received email. AI Response (long text) → AI-generated reply. You can reuse it as it is or duplicate it into your Airtable account. Set Up Gmail Trigger in n8n Alright, now that we have our Airtable base ready, we need to capture customer emails. That’s the job of the Gmail Trigger. Basically, this node lies in wait inside your inbox, and as soon as a new message arrives… bam, your workflow fires up. Connect Your Gmail Account In n8n, add a Gmail Trigger node. Click Credential to connect with and select your Gmail account. If you haven’t done it yet, click Add new, connect your Google account, and allow access. Pro tip: don’t worry, it won’t read your personal emails to gossip — everything stays inside your workflow. Basic Settings Poll Times: select Every Minute. → This way, n8n checks your inbox every minute. Mode: Message Received. → You want the flow to trigger whenever a customer writes to you. Event: Message Received. → Same logic, keep it simple. Simplify: turn it off (OFF). → Why? Because if you enable "Simplify," you only get a stripped-down version of the email. And you want it all: subject, sender, raw message… the full package. Expected Output When you execute the node, you should see: id: unique identifier of the email. threadId: conversation identifier (super useful to reply in the same thread). snippet: a short preview of the email (first lines). From: your customer’s email address. To: your email address. Subject: the subject of the email. payload: the full body of the email (yep, in base64 — but we’ll handle that later). And that’s it — your Gmail Trigger is set up. In short, the moment a customer writes “Hey, I have an issue with my account,” your workflow kicks in instantly (well, almost — it checks every minute). Set Up the AI Agent in n8n After configuring your Gmail Trigger (which captures incoming customer emails), you now need a brain to take over, analyze the email, and draft a reply. That’s where the AI Agent node comes in. Its Role The AI Agent node is used to: Read the email content (via the Gmail Trigger). Understand the context and tone of the customer. Generate a clear, concise, and human-like response. Prepare a personalized reply that will later be sent back via Gmail and stored in Airtable. In short, it’s your 24/7 support colleague, but coded as a bot. --- How to Configure It Source for Prompt (User Message) → choose Define below. Prompt (User Message) → describe your business and role as if you were training an intern. Example: “You are an AI support agent for a company that sells solar panels. You respond to technical requests, quotes, and customer questions. Your replies must be short, clear, friendly, and precise.” Chat Model → connect your AI model (e.g. OpenAI GPT-4.1 Mini). Memory (optional but recommended) → connect a Conversation Memory node. → This allows the AI to retain conversation history and better understand follow-ups. --- Expected Output When you run this node, you should see in the output: A field output containing the automatically generated AI reply. The text should be short, natural, and adapted to the customer’s tone (casual or formal). 👉 With the Gmail Trigger you capture emails, and with the AI Agent you get a reply ready to send — as if you had written it yourself. Save Emails and Responses in Airtable Now that your AI Agent generates replies, you need to store them somewhere to keep a clear record of all interactions. That’s where Airtable comes in. Quick Reminder You’ve already copied my ready-to-use Airtable base: 👉 Access the base This base contains a table Email Support Logs with the following columns: Subject Date Customer Email Message AI Response --- How to Connect Airtable in n8n Add an Airtable node right after your AI Agent. Under Operation, select Create. In Base → choose BASE AGENT IA EMAIL. In Table → select Email Support Logs. --- Map the Correct Values Then, link the fields as follows: Subject → {{ $('Email Received').item.json.Subject }} Customer Email → {{ $('Email Received').item.json.From }} Message → {{ $('Email Received').item.json.snippet }} AI Response → {{ $('AI Agent').item.json.output }} Date → {{ $now }} --- Expected Output For each new email received: Gmail captures the email. Your AI drafts the reply. All details (email, sender, subject, reply) are automatically stored in your Airtable base. 👉 You now have a fully automated customer support log. Automatically Reply to the Customer in Gmail Now that you’re storing each interaction in Airtable, it’s time to send your AI’s reply directly back to the customer. This closes the loop: customer writes → AI replies → everything gets logged in Airtable. Add the Gmail Reply Node Add a Gmail node right after your AI Agent (or after Airtable if you prefer logging before replying). Under Operation, select Reply. Connect your Gmail account (same credential as your Gmail Trigger). Configure the Reply Thread ID → {{ $('Email Received').item.json.threadId }} → Ensures the reply is sent in the same conversation thread. To → {{ $('Email Received').item.json.From }} → Customer’s email address. Subject → Re: {{ $('Email Received').item.json.Subject }} → The "Re:" keeps the continuity of the conversation. Message Body → {{ $('AI Agent').item.json.output }} → This is the text automatically generated by your AI. --- Expected Output When a customer sends an email: Gmail Trigger captures the message. The AI Agent generates a tailored reply. Airtable logs the full interaction. Gmail automatically sends the response in the same conversation thread. Your customer receives a quick, personalized, and natural reply without you typing a single word. 👉 You now have a complete support agent: listen, analyze, log, reply. Want to save hours each week? Visit Agence automatisation 0vni.

Baptiste FortBy Baptiste Fort
590

Centralize your forms and reply automatically with Tally + Airtable + Gmail

Still manually copy-pasting your Tally form responses? What if every submission went straight into Airtable — and the user got an automatic email right after? That’s exactly what this workflow does. No code, no headache — just a simple and fast automation: Tally → Airtable → Gmail. STEP 1 — Capture Tally Form Responses Goal Trigger the workflow automatically every time someone submits your Tally form. What we're setting up A webhook that catches form responses and kicks off the rest of the flow. Steps to follow Add a Webhook node Parameter : Value Method : POST Path : formulaire-tally Authentication : None Respond : Immediately Save the workflow → This will generate a URL like: https://your-workspace.n8n.cloud/webhook-test/formulaire-tally 💡 Use the Test URL first (found under Parameters &gt; Test URL) Head over to Tally Go to your form → Form Settings &gt; Integrations &gt; Webhooks Paste the Test URL into the Webhook field Enable the webhook ✅ Submit a test entry → Tally won’t send anything until a real submission is made. This step is required for n8n to capture the structure. Expected output n8n receives a JSON object containing: General info (IDs, timestamps, etc.) A fields[] array with all the form inputs (name, email, etc.) Each field is nicely structured with a label, key, type, and most importantly, a value. Perfect foundation for the next step: data cleanup. STEP 2 — Clean and Structure the Form Data (Set node) Goal Take the raw data sent by Tally and turn it into clean, readable JSON that's easy to use in the rest of the workflow. Tally sends the responses inside a big array called field. Can you grab a field directly with something like {{$json["fields"][3]["value"]}}? Yes. But a good workflow is like a sock drawer — when everything’s folded and labeled, life’s just easier. So we’re going to clean it up using a Set node. Steps to follow Add a Set node right after the Webhook. Enable the “Keep only set” option. Define the following fields in the Set node: Field name: Expression full_name: {{$json["fields"][0]["value"]}} company_name: {{$json["fields"][1]["value"]}} job_title: {{$json["fields"][2]["value"]}} email: {{$json["fields"][3]["value"]}} phone_number: {{$json["fields"][4]["value"] ?? ""}} submission_date: {{$now.toISOString()}} ⚠️ The order of fields[] depends on your Tally form. If you change the question order, make sure to update these indexes accordingly. Expected output You’ll get a clean, structured JSON like this: Now your data is clear, labeled, and ready for the rest of your workflow. STEP 3 — Save Data in Airtable Goal Every time someone submits your Tally form, their info is automatically added to an Airtable base. No more copy-pasting — everything lands right where it should. Steps to follow Create your Airtable base Start by creating a base named Leads (or whatever you prefer), with a table called Form Submissions. Add the following columns in this exact order so everything maps correctly later: Generate an Airtable token So n8n can send data into your base: Go to 👉 [ https://airtable.com/create/tokens](https://airtable.com/create/tokens ) Click Create token Give it a name (e.g. Tally Automation) Check the following permissions: data.records:read data.records:write schema.bases:read Under Base access, either choose your base manually or select “All current and future bases” Click Create token and copy the generated key Add configure the Airtable node in n8n Node: Airtable Operation: Create Authentication: Personal Access Token Paste your token n8n will suggest your base and table (or you can manually grab the IDs from the URL: https://airtable.com/appXXXXXXXX/tblYYYYYYYY/...) Map your fields Inside the Airtable node, add the following field mappings: Every new Tally form submission automatically creates a new row in your Airtable base. STEP 4 — Send an Automatic Confirmation Email Goal Send a professional email as soon as a form is completed Steps to follow Add a Wait node You don’t want the email to go out instantly — it feels cold and robotic. → Add a Wait node right after Airtable. Mode: Wait for a period of time Delay: 5 to 10 minutes Unit: Minutes Add a Gmail &gt; Send Email node Authentication: OAuth2 Connect a Gmail account (business or test) ⚠️ No API keys here — Gmail requires OAuth. Configure the Send Email node Field Value Credential to connect with Gmail account via OAuth2 Resource : Message Operation : Send To : {{ $json.fields["Email"] }} Subject : Thanks for reaching out! Email Type : HTML Message: (but do the mapping correctly using the Input so that lead receives its name correctly ) End of the Workflow And that’s it — your automation is live! Your lead fills out the Tally form → the info goes to Airtable → they get a clean, professional email without you doing a thing.

Baptiste FortBy Baptiste Fort
366

Export Google Search Console data to Airtable automatically

Export Google Search Console Data to Airtable Automatically If you’ve ever downloaded CSV files from Google Search Console, opened them in Excel, cleaned the weird formatting, and pasted them into a sheet just to get a simple report… this workflow is made for you. Who Is This Workflow For? This automation is perfect for: SEO freelancers and consultants → who want to track client performance without wasting time on manual exports. Marketing teams → who need fresh daily/weekly reports to check what keywords and pages are performing. Website owners → who just want a clean way to see how their site is doing without logging into Google Search Console every day. Basically, if you care about SEO but don't want to babysit CSV files, this workflow is your new best friend. If you need a professional n8n agency to build advanced data automation workflows like this, check out Vision IA's n8n automation services. What Does It Do? Here’s the big picture: It runs on a schedule (every day, or whenever you want). It fetches data directly from the Google Search Console API. It pulls 3 types of reports: By Query (keywords people used). By Page (URLs that ranked). By Date (daily performance). It splits and cleans the data so it’s human-friendly. It saves everything into Airtable, organized in three tables. End result: every time you open Airtable, you have a neat SEO database with clicks, impressions, CTR, and average position — no manual work required. Prerequisites You’ll need a few things to get started: Access to Google Search Console. A Google Cloud project with the Search Console API enabled. An Airtable account to store the data. An automation tool that can connect APIs (like the one we’re using here). That’s it! --- Step 1: Schedule the Workflow The very first node in the workflow is the Schedule Trigger. Why? → So you don’t have to press “Run” every day. What it does → It starts the whole workflow at fixed times. In the JSON, you can configure things like: Run every day at a specific hour (e.g., 8 AM). Or run every X hours/minutes if you want more frequent updates. This is the alarm clock of your automation ⏰. --- Step 2: Set Your Domain and Time Range Next, we define the site and the time window for the report. In the JSON, there’s a Set node with two important parameters: domain → your website (example: https://www.vvv.fr/). days → how many days back you want the data (default: 30). 👉 Changing these two values updates the whole workflow. Super handy if you want 7-day reports instead of 30. Step 3: Fetch Data from Google Search Console This is where the workflow talks to the API. There are 3 HTTP Request nodes: Get Query Report Pulls data grouped by search queries (keywords). Parameters in the JSON: startDate = today - 30 days endDate = today dimensions = "query" rowLimit = 25000 (maximum rows the API can return) Get Page Report Same idea, but grouped by page URLs. Parameters: dimensions = "page" Same dates and row limit. Get Date Report This one groups performance by date. Parameters: dimensions = "date" You get a day-by-day performance view. Each request returns rows like this: { "keys": ["example keyword"], "clicks": 42, "impressions": 1000, "ctr": 0.042, "position": 8.5 } Step 4: Split the Data The API sends results in a big array (rows). That’s not very usable directly. So we add a Split Out node for each report. What it does: breaks the array into single items → 1 item per keyword, per page, or per date. This way, each line can be saved individually into Airtable. 👉 Think of it like opening a bag of candy and laying each one neatly on the table 🍬. --- Step 5: Clean and Rename Fields After splitting, we use Edit Fields nodes to make the data human-friendly. For example: In the Query report → rename keys[0] into Keyword. In the Page report → rename keys[0] into page. In the Date report → rename keys[0] into date. This is also where we keep only the useful fields: Keyword / page / date clicks impressions ctr position --- Step 6: Save Everything into Airtable Finally, the polished data is sent into Airtable. In the JSON, there are 3 Airtable nodes: Queries table → stores all the keywords. Pages table → stores all the URLs. Dates table → stores day-by-day metrics. Each node is set to: Operation = Create → adds a new record. Base = Search Console Reports. Table = Queries, Pages, or Dates. Field Mapping For Queries: Keyword → {{ $json.Keyword }} clicks → {{ $json.clicks }} impressions → {{ $json.impressions }} ctr → {{ $json.ctr }} position → {{ $json.position }} 👉 Same logic for Pages and Dates, just replace Keyword with page or date. --- Expected Output Every time this workflow runs: Queries table fills with fresh keyword performance data. Pages table shows how your URLs performed. Dates table tracks the evolution day by day. In Airtable, you now have a complete SEO database with no manual exports. --- Why This Is Awesome 🚫 No more messy CSV exports. 📈 Data is always up-to-date. 🎛 You can build Airtable dashboards, filters, and interfaces. ⚙️ Easy to adapt → just change domain or days to customize. And the best part? You can spend the time you saved on actual SEO improvements instead of spreadsheet gymnastics 💃. Need Help Automating Your Data Workflows? This n8n workflow is perfect for automating SEO reporting and data collection. If you want to go further with document automation, file processing, and data synchronization across your tools, our agency specializes in building custom automation systems. 👉 Explore our document automation services: Vision IA – Document Automation Agency We help businesses automate their data workflows—from collecting reports to organizing files and syncing information across CRMs, spreadsheets, and databases—all running automatically. Questions about this workflow or other automation solutions? Visit Vision IA or reach out for a free consultation.

Baptiste FortBy Baptiste Fort
146
All templates loaded