<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: alex</title>
    <description>The latest articles on Forem by alex (@alexkraft).</description>
    <link>https://forem.com/alexkraft</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3776051%2F0653d4f6-9657-42fd-b707-8d09e1b2144f.jpeg</url>
      <title>Forem: alex</title>
      <link>https://forem.com/alexkraft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alexkraft"/>
    <language>en</language>
    <item>
      <title>I built a LinkedIn job scraper that sends daily digests to Discord (no login, no code)</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Sat, 28 Feb 2026 21:13:58 +0000</pubDate>
      <link>https://forem.com/alexkraft/i-built-a-linkedin-job-scraper-that-sends-daily-digests-to-discord-no-login-no-code-32p4</link>
      <guid>https://forem.com/alexkraft/i-built-a-linkedin-job-scraper-that-sends-daily-digests-to-discord-no-login-no-code-32p4</guid>
      <description>&lt;p&gt;I got tired of manually checking LinkedIn every day, so I automated it.&lt;/p&gt;

&lt;p&gt;Built a Make.com scenario that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrapes LinkedIn jobs via Apify (no login required)&lt;/li&gt;
&lt;li&gt;Filters for Easy Apply + remote + entry level&lt;/li&gt;
&lt;li&gt;Sends a clean daily digest to Discord&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example output:&lt;br&gt;
🔷 Automation Engineer — Acme Ltd&lt;br&gt;
📍 United Kingdom | 💼 Full-time | ⏰ 2 hours ago&lt;br&gt;
🔗 &lt;a href="https://linkedin.com/jobs/view/" rel="noopener noreferrer"&gt;https://linkedin.com/jobs/view/&lt;/a&gt;...&lt;br&gt;
－－－&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;HTTP POST → Start Apify actor (worldunboxer/rapid-linkedin-scraper)&lt;/li&gt;
&lt;li&gt;Sleep 90s → Wait for scrape to finish&lt;/li&gt;
&lt;li&gt;HTTP GET → Fetch results from Apify dataset&lt;/li&gt;
&lt;li&gt;Iterator → Loop through jobs&lt;/li&gt;
&lt;li&gt;Filter → Easy Apply only&lt;/li&gt;
&lt;li&gt;Set Variable → Format each job entry&lt;/li&gt;
&lt;li&gt;Text Aggregator → Combine into one message&lt;/li&gt;
&lt;li&gt;HTTP POST → Send to Discord webhook&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key lessons learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The JSON escaping problem&lt;/strong&gt; — Line breaks in aggregated text break Discord's JSON. Fix: use Make.com's "Data structure" input method instead of raw JSON string. It escapes everything automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apify actor quirks&lt;/strong&gt; — The actor sometimes ignores keyword parameters and returns random jobs. Workaround: add a local filter on job_title contains "keyword" after the iterator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running cost&lt;/strong&gt; — Apify charges $0.001 per result. Daily runs with 5 results = ~$0.15/month.  But you get 5 dollars a month for free to use however you want from apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The template
&lt;/h2&gt;

&lt;p&gt;Packaged it as a &lt;a href="https://alexkraft.gumroad.com/l/rlcggz" rel="noopener noreferrer"&gt;Gumroad &lt;/a&gt;product with the blueprint + setup guide.&lt;br&gt;
&lt;a href="https://alexkraft.gumroad.com/l/rlcggz" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the build in the comments.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>nocode</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Instagram Hashtag Research Bot with Make.com + Apify</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Fri, 27 Feb 2026 12:30:06 +0000</pubDate>
      <link>https://forem.com/alexkraft/instagram-hashtag-research-bot-with-makecom-apify-n3p</link>
      <guid>https://forem.com/alexkraft/instagram-hashtag-research-bot-with-makecom-apify-n3p</guid>
      <description>&lt;p&gt;Today's build: automated Instagram hashtag research that delivers to Discord.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Stack&lt;/strong&gt;&lt;br&gt;
Make.com — workflow orchestration&lt;br&gt;
Apify (Instagram Hashtag Analytics actor) — scraping engine&lt;br&gt;
Discord — delivery channel&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Flow&lt;/strong&gt;&lt;br&gt;
HTTP POST (start Apify run)&lt;br&gt;
→ Sleep 30s&lt;br&gt;
→ HTTP GET (fetch results)&lt;br&gt;
→ Set Variables (format hashtag lists)&lt;br&gt;
→ HTTP POST (Discord webhook)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Make.com snippet&lt;/strong&gt;&lt;br&gt;
To extract all hashtags from the Apify response array and join them line by line:&lt;/p&gt;

&lt;p&gt;{{join(map(3.data[1].related; "hash"); "\n")}}&lt;/p&gt;

&lt;p&gt;map() pulls the hash field from each object in the array. join() puts them on separate lines. &lt;br&gt;
Simple but took me a minute to figure out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it returns&lt;/strong&gt;&lt;br&gt;
Three hashtag groups per niche: Related, Related Frequent, and Niche. &lt;/p&gt;

&lt;p&gt;This is hashtag research based on Instagram's public graph — useful for content planning, not real-time trending.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Get the blueprint&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
&lt;a href="https://alexkraft.gumroad.com/l/kfhel" rel="noopener noreferrer"&gt;Gumroad &lt;/a&gt;→ includes JSON blueprint + setup guide.&lt;br&gt;
Full writeup on Hashnode → &lt;a href="//alexkraft.hashnode.dev"&gt;alexkraft.hashnode.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>nocode</category>
      <category>makecom</category>
      <category>apify</category>
    </item>
    <item>
      <title>Real-time Gumroad sales tracker with Make.com + Google Sheets + Discord</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Mon, 23 Feb 2026 15:07:25 +0000</pubDate>
      <link>https://forem.com/alexkraft/real-time-gumroad-sales-tracker-with-makecom-google-sheets-discord-355p</link>
      <guid>https://forem.com/alexkraft/real-time-gumroad-sales-tracker-with-makecom-google-sheets-discord-355p</guid>
      <description>&lt;p&gt;The problem:&lt;/p&gt;

&lt;p&gt;Selling on Gumroad. Refreshing the dashboard too often. Classic. Automated it.&lt;/p&gt;

&lt;p&gt;The flow:&lt;/p&gt;

&lt;p&gt;Gumroad webhook&lt;br&gt;
  → Log sale to Google Sheets&lt;br&gt;
  → Update dashboard timestamp&lt;br&gt;
  → Read total sales count&lt;br&gt;
  → Discord: sale notification (always)&lt;br&gt;
  → [Filter: milestone + not a test sale]&lt;br&gt;
  → Discord: milestone alert (conditional)&lt;/p&gt;

&lt;p&gt;Test vs real sales&lt;/p&gt;

&lt;p&gt;Gumroad sends a test flag on every webhook. Both flow through the same scenario — just labelled differently in the sheet and in Discord. &lt;/p&gt;

&lt;p&gt;Milestone alerts are filtered to real sales only.&lt;/p&gt;

&lt;p&gt;What's in the package&lt;br&gt;
Blueprint (JSON), setup guide, README. $9 on Gumroad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://alexkraft.gumroad.com/l/kkysun" rel="noopener noreferrer"&gt;→ Get it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by Alex Kraft — automation developer. Follow the journey: alexkraft.hashnode.dev | linkedin.com/in/alexandru-bobo | dev.to/alexkraft&lt;/p&gt;

</description>
      <category>automation</category>
      <category>productivity</category>
      <category>nocode</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Automated Cold Outreach with Make.com + Apify + Google Sheets (No Code)</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Sat, 21 Feb 2026 11:46:14 +0000</pubDate>
      <link>https://forem.com/alexkraft/automated-cold-outreach-with-makecom-apify-google-sheets-no-code-2en3</link>
      <guid>https://forem.com/alexkraft/automated-cold-outreach-with-makecom-apify-google-sheets-no-code-2en3</guid>
      <description>&lt;p&gt;Built a no-code automation that handles the full cold outreach pipeline for local businesses.&lt;/p&gt;

&lt;p&gt;The flow:&lt;br&gt;
Google Maps scrape → filter leads with emails → deduplicate → add to sheet → send personalised email → mark as sent&lt;/p&gt;

&lt;p&gt;Tools used:&lt;br&gt;
Make.com (workflow automation)&lt;br&gt;
Apify (Google Maps scraper)&lt;br&gt;
Google Sheets (lead database)&lt;br&gt;
Gmail (email sending)&lt;/p&gt;

&lt;p&gt;The interesting part is the duplicate check — before adding any lead, it searches column B of the sheet for that email. If it already exists, the whole branch is skipped. Keeps the sheet clean across multiple runs.&lt;br&gt;
The email is personalised with the scraped business name using {{32.title}} from the Iterator module output.&lt;/p&gt;

&lt;p&gt;I released it as a ready-to-import blueprint with docs.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://alexkraft.gumroad.com/l/razxv" rel="noopener noreferrer"&gt;[Link here]&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>makecom</category>
      <category>nocode</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>How I Automated Employee Leave Requests with Make.com (Free Tools Only)</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Thu, 19 Feb 2026 23:18:28 +0000</pubDate>
      <link>https://forem.com/alexkraft/how-i-automated-employee-leave-requests-with-makecom-free-tools-only-5003</link>
      <guid>https://forem.com/alexkraft/how-i-automated-employee-leave-requests-with-makecom-free-tools-only-5003</guid>
      <description>&lt;p&gt;Leave requests are one of those things that seem simple but create endless friction — messages getting lost, statuses unknown, managers forgetting to reply.&lt;br&gt;
Here's an automation I built that handles the entire flow without any paid tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Employee fills Google Form&lt;br&gt;
        ↓&lt;br&gt;
Request saved to Google Sheet (Status: Pending)&lt;br&gt;
        ↓&lt;br&gt;
Manager receives email → clicks APPROVE or REJECT&lt;br&gt;
        ↓&lt;br&gt;
Sheet updates automatically&lt;br&gt;
        ↓&lt;br&gt;
Employee receives confirmation email&lt;/p&gt;

&lt;p&gt;Two Make.com scenarios&lt;/p&gt;

&lt;p&gt;The system uses two separate scenarios connected via a webhook.&lt;/p&gt;

&lt;p&gt;Scenario A — Registration&lt;/p&gt;

&lt;p&gt;Watches Google Forms for new responses → adds a row to Google Sheets → sends the manager an email with approve/reject links.&lt;br&gt;
Scenario B — Approval&lt;/p&gt;

&lt;p&gt;Triggered when the manager clicks a link → finds the correct row in the sheet → updates the status → emails the employee with the decision.&lt;br&gt;
The key piece is the webhook URL embedded in the manager's email buttons. Each button passes the employee data as URL parameters (action, email, name, type, start, end), so Scenario B has everything it needs without touching the sheet first.&lt;/p&gt;

&lt;p&gt;Why this pattern is useful beyond leave requests&lt;br&gt;
The "submit → approve/reject → notify" loop is everywhere:&lt;/p&gt;

&lt;p&gt;Freelance project proposals&lt;br&gt;
Internal budget requests&lt;br&gt;
Content approval workflows&lt;br&gt;
Vendor or supplier onboarding&lt;/p&gt;

&lt;p&gt;If you understand how to wire this with a webhook, you can rebuild it for almost any use case in under an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Forms -&amp;gt; for employee input&lt;/li&gt;
&lt;li&gt;Google Sheets -&amp;gt; for data storage + status tracking&lt;/li&gt;
&lt;li&gt;Gmail -&amp;gt; for notifications&lt;/li&gt;
&lt;li&gt;Make.com -&amp;gt; for automation logic + webhook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ALL FREE!&lt;/p&gt;

&lt;p&gt;Get the template&lt;br&gt;
I packaged this as a ready-to-import Make.com template with both blueprints, a sheet template, and a setup guide.&lt;br&gt;
[Download on Gumroad →] &lt;a href="https://alexkraft.gumroad.com/l/aafvwb" rel="noopener noreferrer"&gt;https://alexkraft.gumroad.com/l/aafvwb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by Alex Kraft — automation developer.&lt;br&gt;
Follow the journey: &lt;a href="//alexkraft.hashnode.dev"&gt;alexkraft.hashnode.dev&lt;/a&gt; | &lt;a href="//linkedin.com/in/alexandru-bobo"&gt;linkedin.com/in/alexandru-bobo&lt;/a&gt; | &lt;a href="//dev.to/alexkraft"&gt;dev.to/alexkraft&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>nocode</category>
      <category>makecom</category>
      <category>productivity</category>
    </item>
    <item>
      <title>day 3 : No-code invoice follow-up automation: Make.com + Google Sheets + Gmail</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Thu, 19 Feb 2026 12:52:42 +0000</pubDate>
      <link>https://forem.com/alexkraft/day-3-no-code-invoice-follow-up-automation-makecom-google-sheets-gmail-17kg</link>
      <guid>https://forem.com/alexkraft/day-3-no-code-invoice-follow-up-automation-makecom-google-sheets-gmail-17kg</guid>
      <description>&lt;p&gt;Chasing unpaid invoices is the worst part of freelancing.&lt;br&gt;
Here's a simple automation I built to handle it:&lt;/p&gt;

&lt;p&gt;Invoice overdue 7 days  → polite reminder&lt;br&gt;
Invoice overdue 14 days → firm follow-up&lt;br&gt;
Invoice overdue 21 days → final notice&lt;/p&gt;

&lt;p&gt;How it works:&lt;br&gt;
A Make.com scenario runs daily. It reads a Google Sheet filtered by Status = Pending, calculates days overdue, and routes each invoice through the right branch.&lt;br&gt;
Each branch sends two emails — one to the client, one to you — then updates the Follow Up Level in the sheet so the same email never fires twice.&lt;/p&gt;

&lt;p&gt;(Make.com's now returns milliseconds, not seconds — divide by 1000 first or you get results like "20,000 days overdue".)&lt;br&gt;
Stack: Make.com free tier · Google Sheets · Gmail&lt;br&gt;
Setup time: ~20 minutes&lt;br&gt;
I packaged the full thing — blueprint, sheet template, setup guide — for anyone who wants to skip the build: &lt;a href="https://alexkraft.gumroad.com/l/ktufg" rel="noopener noreferrer"&gt;https://alexkraft.gumroad.com/l/ktufg&lt;/a&gt;&lt;br&gt;
Or just take the formula and build your own version.&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>automation</category>
      <category>productivity</category>
      <category>freelance</category>
    </item>
    <item>
      <title>day 2: I Built a Universal Client Onboarding Automation (Works with Gumroad, Stripe, PayPal) — Here's the Complete Architecture</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Wed, 18 Feb 2026 14:36:37 +0000</pubDate>
      <link>https://forem.com/alexkraft/day-2-i-built-a-universal-client-onboarding-automation-works-with-gumroad-stripe-paypal--2ahk</link>
      <guid>https://forem.com/alexkraft/day-2-i-built-a-universal-client-onboarding-automation-works-with-gumroad-stripe-paypal--2ahk</guid>
      <description>&lt;p&gt;From webhook trigger to 6 automated actions in under 1 second. Platform-agnostic design using Make.com, Google Sheets, Notion, and zero monthly costs.&lt;/p&gt;

&lt;p&gt;Every time someone bought my digital product, I had to:&lt;/p&gt;

&lt;p&gt;Check my email for the sale notification&lt;/p&gt;

&lt;p&gt;Copy their details to a spreadsheet&lt;/p&gt;

&lt;p&gt;Write a welcome email&lt;/p&gt;

&lt;p&gt;Create a task in Notion&lt;/p&gt;

&lt;p&gt;Tell my team on Discord&lt;/p&gt;

&lt;p&gt;Set a reminder to follow up&lt;/p&gt;

&lt;p&gt;This took 10-15 minutes per client. And I'd forget steps.&lt;/p&gt;

&lt;p&gt;So I built an automation that does all 6 actions in under 1 second. No manual work. 100% consistent.&lt;/p&gt;

&lt;p&gt;Here's how it works, the architecture decisions I made, and why it's platform-agnostic (works with Gumroad, Stripe, PayPal, or any webhook platform).&lt;/p&gt;

&lt;p&gt;The Problem: Manual Onboarding Is Painful&lt;/p&gt;

&lt;p&gt;When you're selling digital products — templates, courses, SaaS trials — every sale should be a celebration. Instead, it's a chore:&lt;/p&gt;

&lt;p&gt;Check email for Gumroad/Stripe notification&lt;/p&gt;

&lt;p&gt;Open spreadsheet, copy customer email, product name, price&lt;/p&gt;

&lt;p&gt;Write welcome email with download instructions&lt;/p&gt;

&lt;p&gt;Create Notion page to track the client&lt;/p&gt;

&lt;p&gt;Post to Discord so your team knows&lt;/p&gt;

&lt;p&gt;Set calendar reminder to follow up in 3 days&lt;/p&gt;

&lt;p&gt;This is tedious. And when you get 5 sales in a day, it's overwhelming.&lt;/p&gt;

&lt;p&gt;Worse: you'll forget steps. You'll send the welcome email but forget the Notion page. You'll log the spreadsheet but forget to tell your team.&lt;/p&gt;

&lt;p&gt;Solution: Automate everything.&lt;/p&gt;

&lt;p&gt;The Goal: Zero Manual Work&lt;/p&gt;

&lt;p&gt;I wanted every sale to trigger:&lt;/p&gt;

&lt;p&gt;✅ Google Sheets log (my client database)&lt;/p&gt;

&lt;p&gt;✅ Welcome email to customer&lt;/p&gt;

&lt;p&gt;✅ Notification email to me&lt;/p&gt;

&lt;p&gt;✅ Notion page creation (CRM)&lt;/p&gt;

&lt;p&gt;✅ Discord team notification&lt;/p&gt;

&lt;p&gt;✅ Calendar follow-up reminder&lt;/p&gt;

&lt;p&gt;The Architecture: 7 Modules, 1 Second&lt;/p&gt;

&lt;p&gt;I built this with Make.com (formerly Integromat), a no-code automation platform similar to Zapier but more powerful.&lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;/p&gt;

&lt;p&gt;[Webhook] → [Google Sheets] → [Gmail x2] → [Notion] → [Discord] → [Calendar]&lt;/p&gt;

&lt;p&gt;Template + setup guide available: &lt;a href="https://alexkraft.gumroad.com/l/jtrmot" rel="noopener noreferrer"&gt;https://alexkraft.gumroad.com/l/jtrmot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>nocode</category>
      <category>webhook</category>
      <category>architecture</category>
    </item>
    <item>
      <title># Day 1: I Built My First Automation Template — And Almost Gave Up Three Times</title>
      <dc:creator>alex</dc:creator>
      <pubDate>Tue, 17 Feb 2026 10:03:11 +0000</pubDate>
      <link>https://forem.com/alexkraft/-day-1-i-built-my-first-automation-template-and-almost-gave-up-three-times-1ng8</link>
      <guid>https://forem.com/alexkraft/-day-1-i-built-my-first-automation-template-and-almost-gave-up-three-times-1ng8</guid>
      <description>&lt;p&gt;This is Day 1 of my 30 templates in 30 days challenge. I'm an automation developer building a library of plug-and-play Make.com, n8n, and Zapier templates. Today I shipped the first one.*&lt;/p&gt;




&lt;p&gt;I almost didn't post this.&lt;/p&gt;

&lt;p&gt;The template broke four times. The error messages were cryptic. I spent two hours on something that should have taken thirty minutes. And at one point I genuinely considered just going to bed.&lt;/p&gt;

&lt;p&gt;But it works now. And I think the messy story is more useful than a polished tutorial.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A simple invoice automation in Make.com:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Form submission → Auto-generate invoice number → Send HTML invoice email to client&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's it. Client fills a form, they get a professional invoice in their inbox. No manual work.&lt;/p&gt;

&lt;p&gt;Sounds simple. Here's what actually happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The First Problem: Module IDs
&lt;/h2&gt;

&lt;p&gt;Make.com uses module IDs to reference data between steps. My first blueprint referenced &lt;code&gt;{{1.FieldName}}&lt;/code&gt; throughout — but the Google Forms trigger was Module 2, not Module 1.&lt;/p&gt;

&lt;p&gt;Every single data reference was broken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Find and replace every &lt;code&gt;{{1.&lt;/code&gt; with &lt;code&gt;{{2.&lt;/code&gt; in the blueprint JSON. Obvious in hindsight. Took me longer than I'd like to admit.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Second Problem: The Form ID
&lt;/h2&gt;

&lt;p&gt;The Google Forms module needs a Form ID. I pasted the full URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://docs.google.com/forms/d/e/1FAIpQLSf.../viewform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make threw a 404. The field wants &lt;em&gt;just&lt;/em&gt; the ID — the string between &lt;code&gt;/d/e/&lt;/code&gt; and &lt;code&gt;/viewform&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1FAIpQLSf...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again: obvious once you know. Zero indication of this in the UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Third Problem: Nested Data
&lt;/h2&gt;

&lt;p&gt;This one took the longest.&lt;/p&gt;

&lt;p&gt;Google Forms returns data in a nested structure. I was trying to access &lt;code&gt;{{2.Client Email}}&lt;/code&gt; directly. That doesn't exist.&lt;/p&gt;

&lt;p&gt;The actual path is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{2.answers.`30b18069`.textAnswers.answers[1].value}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where &lt;code&gt;30b18069&lt;/code&gt; is the question ID Google assigns internally. You have to find that ID from the module's output structure, map it to your field name, then build the path manually.&lt;/p&gt;

&lt;p&gt;Once I understood this, the email started populating correctly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Final Workflow Looks Like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Module 2: Google Forms (Watch Responses)
   ↓
Module 5: Set Variable (Invoice Number = INV-{{date}}-{{timestamp}})
   ↓
Module 8: Gmail (Send HTML invoice email)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three modules. The email arrives within 30 seconds of form submission with a properly formatted invoice table, unique invoice number, and all client details filled in correctly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned Today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Make's error messages don't tell you what's wrong.&lt;/strong&gt; "Module references non-existing module '1'" sounds scary. It just means your data path is wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Read the actual data structure, don't guess.&lt;/strong&gt; After connecting Google Forms, run the module once to see what it actually outputs. The panel shows you the full nested structure — use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Start with a hardcoded test.&lt;/strong&gt; I wasted an hour debugging dynamic email mapping when I should have first confirmed the workflow ran at all by hardcoding my own email in the TO field. Test the pipeline first, then add dynamic data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Shipping something imperfect beats perfecting something unshipped.&lt;/strong&gt; This template will have a v2 with Google Sheets logging and better invoice numbers. But v1 works and it's out today.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Template
&lt;/h2&gt;

&lt;p&gt;I've packaged this up as a ready-to-import Make.com blueprint with a setup guide and FAQ.&lt;/p&gt;

&lt;p&gt;If you spend more than 10 minutes per invoice, this gets you back ~10 hours a year. At minimum.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://alexkraft.gumroad.com" rel="noopener noreferrer"&gt;→ Get the Invoice Generator template on Gumroad&lt;/a&gt;&lt;/strong&gt; (£20)&lt;/p&gt;




&lt;h2&gt;
  
  
  Tomorrow
&lt;/h2&gt;

&lt;p&gt;Day 2. Building a lead capture automation — contact form submission → save to Airtable → send welcome email sequence. More modules, similar principles.&lt;/p&gt;

&lt;p&gt;Following along? Subscribe to the newsletter (top of page) — I send one update per week, not per day.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Alex Kraft is an automation developer based in the UK, building 30 Make.com/n8n templates in 30 days and documenting the process publicly. Find the full template library at alexkraft.gumroad.com&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>buildinpublic</category>
      <category>devchallenge</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
