<?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>DEV Community: WorkflowStash</title>
    <description>The latest articles on DEV Community by WorkflowStash (@chong_newbee_c74302531d2e).</description>
    <link>https://dev.to/chong_newbee_c74302531d2e</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4233099%2F29e5edc9-4104-444d-bd56-33a6a89cdb9c.png</url>
      <title>DEV Community: WorkflowStash</title>
      <link>https://dev.to/chong_newbee_c74302531d2e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chong_newbee_c74302531d2e"/>
    <language>en</language>
    <item>
      <title>I automated the invoice-chasing emails I kept putting off (n8n + Google Sheets)</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sun, 15 Nov 2026 02:13:57 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/i-automated-the-invoice-chasing-emails-i-kept-putting-off-n8n-google-sheets-3785</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/i-automated-the-invoice-chasing-emails-i-kept-putting-off-n8n-google-sheets-3785</guid>
      <description>&lt;h1&gt;
  
  
  I automated the invoice-chasing emails I kept putting off
&lt;/h1&gt;

&lt;p&gt;The worst email in my week was never the angry one. It was the polite one: "Hi, just following up on invoice 1042…" I would draft it at 11pm, decide it sounded either too soft or too desperate, and send it three days later than I should have. Multiply that by every open invoice and I was basically running an accounts-receivable department out of guilt and browser tabs.&lt;/p&gt;

&lt;p&gt;So I built the thing I actually needed: a workflow that reads a spreadsheet of invoices once a day, works out which ones are due for a nudge, and sends the nudge — friendly early, firmer later, and it stops the second an invoice is marked paid. That last part is the whole point, and it's where my first version nearly went wrong. More on that below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup: a boring spreadsheet, on purpose
&lt;/h2&gt;

&lt;p&gt;No invoicing platform, no API keys from an accounting tool. Just a Google Sheet with nine columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csvs"&gt;&lt;code&gt;&lt;span class="nc"&gt;Invoice&lt;/span&gt; &lt;span class="no"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Currency&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Due&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Reminders&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Last&lt;/span&gt; &lt;span class="n"&gt;reminded&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My daily habit shrank to two things: add a row when I send an invoice, flip &lt;code&gt;Status&lt;/code&gt; to &lt;code&gt;Paid&lt;/code&gt; when the money lands. Everything else is the workflow's job. You can also park a row as &lt;code&gt;On hold&lt;/code&gt; or &lt;code&gt;Disputed&lt;/code&gt;, and it will never be chased — useful when a client emails you saying the amount looks wrong and you need the robot to shut up while you talk it through like a person.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow, node by node
&lt;/h2&gt;

&lt;p&gt;Nine nodes total. Nothing exotic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Daily Check (Schedule Trigger)&lt;/strong&gt; — fires at 09:00. Chasing email at 9am on a weekday looks like business. Chasing email at 11pm looks like me, panicking, which is what we're replacing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Read Invoices Sheet (Google Sheets)&lt;/strong&gt; — pulls every row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Filter &amp;amp; Stage (Code)&lt;/strong&gt; — this is where all the judgement lives. For each row it computes the days between today and the due date, and only lets a row through if it lands in one of four buckets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pre&lt;/code&gt; — due in exactly 3 days&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;due&lt;/code&gt; — due today&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;overdue7&lt;/code&gt; — exactly 7 days overdue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;final&lt;/code&gt; — 14 or more days overdue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Route by Stage (Switch)&lt;/strong&gt; — sends each invoice down one of four paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5a–5d. Four Gmail nodes&lt;/strong&gt;, one per stage, each with its own template. The tone escalates on purpose. The pre-due note is basically a favour ("if it's already in your payment run, ignore this"). The day-7 note stops being cute and asks a direct question: pay this week, or tell me the date you will. The final notice says what happens next — and I had to edit that one carefully, because a template should never promise consequences (pausing work, collection, late fees) that your actual contract doesn't allow. A robot sending threats you can't back up is worse than no robot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Update Invoice Row (Google Sheets)&lt;/strong&gt; — writes back &lt;code&gt;Reminders sent&lt;/code&gt; +1 and &lt;code&gt;Last reminded&lt;/code&gt; = today, matched by Invoice ID. This node looks like bookkeeping. It is actually the safety system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The edge case that broke version one
&lt;/h2&gt;

&lt;p&gt;My first version matched stages by exact day for &lt;em&gt;all four&lt;/em&gt; buckets — including the final notice, which only fired on day 14 precisely. Then I added a test invoice that was already 20 days overdue (the way real invoices actually arrive in a sheet: late, imported from somewhere else, found in a drawer). It sailed through the workflow and got… nothing. It wasn't 3 days early, wasn't due, wasn't day 7, wasn't day 14. It was day 20, and day 20 didn't exist.&lt;/p&gt;

&lt;p&gt;Two fixes came out of that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The final bucket is now &lt;strong&gt;14 or more days&lt;/strong&gt;, not exactly 14.&lt;/li&gt;
&lt;li&gt;Every stage also checks the guards before sending: &lt;code&gt;Status&lt;/code&gt; must be exactly &lt;code&gt;Unpaid&lt;/code&gt;, &lt;code&gt;Reminders sent&lt;/code&gt; must be under 4, and the last reminder must be at least 3 days ago.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That third guard is the one I'd defend in an argument. Because the workflow writes &lt;code&gt;Last reminded&lt;/code&gt; back to the sheet, re-running it manually — say you fix a typo and hit Execute again — can't double-send. And the paid check is absolute: the filter only ever looks at &lt;code&gt;Unpaid&lt;/code&gt; rows. The scenario that kept me honest while building this was a client paying on day 6 and getting the firm day-7 email anyway because I'd forgotten to update something. With this design there's exactly one thing to update, the &lt;code&gt;Status&lt;/code&gt; cell, and it's the same cell I was already maintaining by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing it without embarrassing yourself
&lt;/h2&gt;

&lt;p&gt;Before this ever touched a real client, I ran it against myself: a test row with my own email, due date set to today + 3, so it hit the &lt;code&gt;pre&lt;/code&gt; stage. Got the friendly email. Ran it again immediately — nothing, the 3-day spacing guard blocked it. Then I changed the due date to 7 days ago, cleared &lt;code&gt;Last reminded&lt;/code&gt;, and got the firmer one. Only after all three behaved did I switch it on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;p&gt;A few, so nobody oversells this in either direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It only knows what the sheet knows. If you forget to flip a paid invoice to &lt;code&gt;Paid&lt;/code&gt;, it will chase a person who has paid. The automation removes the writing-and-remembering work, not the two-second status update.&lt;/li&gt;
&lt;li&gt;Gmail has daily sending caps (roughly 500/day on a consumer account). Fine for a freelancer's invoice volume, not fine for a 2,000-invoice billing run.&lt;/li&gt;
&lt;li&gt;The workflow file itself: I built it from standard n8n node types and structure-checked the JSON carefully, but I haven't run a live import test on a production n8n instance — which is exactly why the self-test routine above exists, and why you should do it with your own email first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steal the pattern
&lt;/h2&gt;

&lt;p&gt;The general shape — read a sheet, bucket rows by days-since-a-date, act per bucket, write back what you did — works for anything with a due date and an awkward follow-up attached: contract renewals, trial expiries, "you left this document unsigned" nudges.&lt;/p&gt;

&lt;p&gt;If you want to poke at working examples, I keep a few free n8n workflows here: &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;. And if you'd rather skip the building part, the packaged version of this one — workflow file, the sheet template, all four email templates written out, setup guide with the testing checklist — is the &lt;a href="https://ko-fi.com/s/528e2c4098" rel="noopener noreferrer"&gt;Invoice Chaser on my Ko-fi shop&lt;/a&gt; for $19.&lt;/p&gt;

&lt;p&gt;Either way, send the polite email on time. That's the entire trick.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>tutorial</category>
      <category>smallbusiness</category>
    </item>
    <item>
      <title>I built study and research kits for a few months. The systems part was the interesting bit.</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 08:56:10 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/i-built-study-and-research-kits-for-a-few-months-the-systems-part-was-the-interesting-bit-g21</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/i-built-study-and-research-kits-for-a-few-months-the-systems-part-was-the-interesting-bit-g21</guid>
      <description>&lt;p&gt;I've spent the last stretch building small workflow kits for students and researchers — planners, trackers, template packs. Not apps. PDFs and spreadsheets, mostly. I went in expecting the writing to be the job. It wasn't. The job was systems, and checking my own work.&lt;/p&gt;

&lt;p&gt;Three patterns kept showing up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review schedules are just queues with dates attached.&lt;/strong&gt; A study kit I built has a topic tracker: learn something on day 0, and the sheet works out your review dates — +1 day, +3 days, +7, +14, +30. Dead simple formula, &lt;code&gt;=A2+1&lt;/code&gt; style arithmetic. The hard part wasn't the math. It was deciding what counts as "learned." My rule in the kit: you haven't learned it until you've closed the book and written three lines about it from memory. If you can't do that, the topic stays at day 0 and the schedule doesn't start. A queue that starts on a lie produces very organized forgetting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citation checking has to run in both directions.&lt;/strong&gt; Every researcher I know has found, at 11 p.m. before a deadline, a reference in their bibliography that appears nowhere in the text. Or the opposite — a citation in chapter two pointing at a paper that never made it into the list. So the audit sheet I built has two columns that both have to be true: &lt;em&gt;cited in text&lt;/em&gt; and &lt;em&gt;in the reference list&lt;/em&gt;. A row only passes when both boxes are ticked. It takes maybe twenty minutes for a thesis chapter. It's boring. It also catches exactly the thing that makes examiners quietly lose faith in the whole document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group work fails in the dark, not in the open.&lt;/strong&gt; Nobody decides to free-ride in a meeting. It happens in silence, over weeks. The fix that kept coming up while I made the student kits was embarrassingly low-tech: a contribution log. Date, name, what got done, link to the file. Updated as you go, visible to everyone including the tutor if it comes to that. Once the log exists, most groups never need to argue — the record argues for them, politely, in advance.&lt;/p&gt;

&lt;p&gt;One more, smaller thing: students don't run on months, they run on semesters. A budget sheet built on monthly habits falls apart in week thirteen, when the money and the deadlines both run out at once. So the student money kit I made works in semester blocks — money in at the start, the twelve or fifteen weeks laid out, the expensive weeks (books, society fees, the train home) marked before they ambush you. Same spreadsheet skills, completely different shape. The calendar is part of the system.&lt;/p&gt;

&lt;p&gt;Then there's the verification part, which nobody sees and which ate a surprising amount of my time. Every spreadsheet formula in these kits got recalculated in LibreOffice and compared against hand totals — if the budget sheet says the semester adds up, I add it up myself first. Every count in a listing got checked against the finished file: if I claim 100 journal prompts, I count to 100. If the capsule wardrobe says 33 pieces, the categories have to sum to 33 (they do: 8+4+5+3+6+4+2+1). This sounds obvious. It is obvious. It's also where most digital products quietly lie to you, usually by accident, usually because someone edited the file after writing the description.&lt;/p&gt;

&lt;p&gt;What I didn't build: anything that promises grades, citations, or publications. A tracker can't make a thesis good. It can make the work visible early enough that you still have time to fix it, which turns out to be most of the battle.&lt;/p&gt;

&lt;p&gt;The finished kits live in my shop — Study System Kit, Literature Review System Kit and about sixty others at &lt;a href="https://ko-fi.com/workflowstash/shop" rel="noopener noreferrer"&gt;https://ko-fi.com/workflowstash/shop&lt;/a&gt; — and the automation side of what I make is free, as always, over at &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;. If you build study systems of your own, I'd genuinely like to hear what your review intervals look like. Mine are probably wrong in an interesting way.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
      <category>research</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The skills nobody teaches at work</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 08:08:54 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/the-skills-nobody-teaches-at-work-5eeo</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/the-skills-nobody-teaches-at-work-5eeo</guid>
      <description>&lt;p&gt;Nobody gets hired for them, nobody gets trained in them, and everybody is judged by them. Office life runs on a hidden curriculum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documenting your own work before review season turns it into an archaeology project.&lt;/li&gt;
&lt;li&gt;Running a meeting that ends with named owners instead of vibes.&lt;/li&gt;
&lt;li&gt;Writing the awkward email — the chase, the apology, the polite no — without spending 40 minutes on it.&lt;/li&gt;
&lt;li&gt;Answering "tell me about yourself" with a story instead of a ramble.&lt;/li&gt;
&lt;li&gt;Protecting two hours of actual focus from a calendar that wants them for status updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week I built a kit for each gap. They're the newest shelf in my little shop — &lt;strong&gt;Office &amp;amp; Career&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance Review &amp;amp; Promotion Kit&lt;/strong&gt; ($15) — a Brag Sheet tracker for logging wins all year, 3 self-evaluation templates (including the "recovery year" one nobody sells), 40 accomplishment phrases, and 8 salary negotiation scripts. No promises — just evidence, ready.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meeting Survival Kit&lt;/strong&gt; ($15) — 6 agenda templates, 3 minutes styles, an action tracker with one rule (no meeting ends without owners), 20 questions to ask your manager, and 10 follow-up emails, including two graceful ways to decline a meeting that has no agenda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional Email Template Pack&lt;/strong&gt; ($12) — exactly 60 templates in 8 categories, each with subject lines and a tone note. The three-level "waiting on your reply" sequence alone saves real pain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel Power Sheets&lt;/strong&gt; ($12) — 67 shortcuts for Windows and Mac, 23 formulas with worked examples, and a 22-exercise practice workbook whose answers are live formulas you can check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Interview Success Kit&lt;/strong&gt; ($15) — 40 questions with STAR worksheets and answer skeletons (not scripts — scripts collapse under follow-ups), the salary-question playbook, and 5 follow-up emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus &amp;amp; Energy Planner&lt;/strong&gt; ($12) — a printable system: daily Top 3 pages, a 2-week energy log to find your real peak hours, a meeting audit with the "could it be an email?" test, and scripts for defending a 90-minute focus block.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All six are on the &lt;a href="https://ko-fi.com/workflowstash" rel="noopener noreferrer"&gt;Ko-fi shop&lt;/a&gt; — 47 products now, next to the small-business kits and the big-print Senior Essentials shelf I built last week.&lt;/p&gt;

&lt;p&gt;The honest footnote stays the same: building is the easy part. My traffic is still small, distribution is still the bottleneck, and I'm writing into the void most days. But a shelf of genuinely useful things compounds better than a funnel, so I keep stocking it.&lt;/p&gt;

&lt;p&gt;The free starter workflows are still on GitHub if you'd rather tinker: &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which untaught office skill cost you the most to learn the hard way?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>I built a product line for customers who hate small print</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 07:04:13 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/i-built-a-product-line-for-customers-who-hate-small-print-1n9g</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/i-built-a-product-line-for-customers-who-hate-small-print-1n9g</guid>
      <description>&lt;p&gt;My shop sells automation templates to small businesses. This week I built something completely different: six printable kits for people over 65 — and it changed how I think about "good design."&lt;/p&gt;

&lt;h2&gt;
  
  
  The constraints I set myself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Type is a feature.&lt;/strong&gt; Body text at 14–15pt, headings at 20pt and up. If a line of text needs to be found fast by tired eyes, it earns its size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handwriting is the interface.&lt;/strong&gt; Most of these kits are filled in with a pen, so row height matters more than information density. Some of my table rows are 52pt tall. On screen that looks wasteful. On paper, at a kitchen table, it's the whole product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Print-first, not app-first.&lt;/strong&gt; The deliverable is a PDF in US Letter that goes in a binder. One product — a scam-protection handbook — has a page designed to be taped to a refrigerator. If it doesn't work on a fridge door, it doesn't work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plain language or a translation.&lt;/strong&gt; Every unavoidable tech word gets a plain-English explanation in brackets. And instead of advice like "be vigilant," the scam handbook gives word-for-word scripts: things you can actually say to end a call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimers are content, not fine print.&lt;/strong&gt; The emergency organizer is not a will. The medication organizer is not medical advice. Those sentences sit on page 2, in the same big type as everything else — not shrunk into a footer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In Case of Emergency: Family Information Organizer&lt;/strong&gt; ($19) — medications, doctors, insurance, where the legal documents live, final wishes, and a "first 48 hours" checklist for family. PDF + Excel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scam Shield&lt;/strong&gt; ($15) — how the 8 most common senior-targeted scams actually sound, red flags, phone scripts, and a family code-word system for verifying "emergencies."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big-Print Password &amp;amp; Account Logbook&lt;/strong&gt; ($12) — 60 account entries on paper, done properly, with honest safety guidance (including "a password manager is more secure — this is for people who won't use one").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medication &amp;amp; Doctor Visit Organizer&lt;/strong&gt; ($15) — 15-medication list, pill schedules, visit-prep sheets, blood pressure and vaccination logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Family Caregiver Daily Care Kit&lt;/strong&gt; ($17) — daily care logs, medication grids, and handover sheets for families sharing care.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smartphone Confidence Kit for Seniors&lt;/strong&gt; ($15) — iPhone and Android side by side: bigger text, video calls with the grandkids, silencing scam calls, one small step at a time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They're all on the &lt;a href="https://ko-fi.com/workflowstash" rel="noopener noreferrer"&gt;Ko-fi shop&lt;/a&gt; — the shelf is at 41 products now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable part
&lt;/h2&gt;

&lt;p&gt;The buyer often isn't the user. Adult children buy these for their parents, which means the listing has to speak to two people at once: the person who pays and the person who'll hold the pen. I don't think I've fully solved that yet.&lt;/p&gt;

&lt;p&gt;Distribution is still my bottleneck — the shop's traffic is tiny, and I'm publishing into the void most days. But I'd rather have a shelf I'd hand to my own family than a funnel I'm embarrassed by.&lt;/p&gt;

&lt;p&gt;If you want the free stuff instead: my three n8n starter workflows are on GitHub — &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you ever designed for the 65+ crowd? What did I miss?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>writing</category>
    </item>
    <item>
      <title>From 15 products to 35 in a day: the restock, and what I stocked</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 03:19:30 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/from-15-products-to-35-in-a-day-the-restock-and-what-i-stocked-4fg3</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/from-15-products-to-35-in-a-day-the-restock-and-what-i-stocked-4fg3</guid>
      <description>&lt;p&gt;Yesterday I wrote about switching from guessing to demand data, and shipped five products built that way. Today I restocked the whole shelf: twenty more products in one push, taking my little shop from 15 to 35 items. Here's the logic, because "more" is only a strategy if the more is aimed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six new automations
&lt;/h2&gt;

&lt;p&gt;The n8n side got depth in the places small businesses actually bleed time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meeting Notes to Tasks ($15)&lt;/strong&gt; — paste notes into a form; an AI summary, a task sheet with owners and due dates, and a recap email come out. &lt;a href="https://ko-fi.com/s/56f1a0d614" rel="noopener noreferrer"&gt;https://ko-fi.com/s/56f1a0d614&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order Alert &amp;amp; Daily Sales Digest ($15)&lt;/strong&gt; — big orders tap you instantly; the day's totals arrive at 20:00. &lt;a href="https://ko-fi.com/s/abef131d93" rel="noopener noreferrer"&gt;https://ko-fi.com/s/abef131d93&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Application Tracker ($15)&lt;/strong&gt; — application emails file themselves into a tracker sheet, deduplicated, with one digest a day instead of a buzzing phone. &lt;a href="https://ko-fi.com/s/ae6bb3cfd0" rel="noopener noreferrer"&gt;https://ko-fi.com/s/ae6bb3cfd0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price Watch ($15)&lt;/strong&gt; — checks rival product pages daily, emails only when a price actually moves. &lt;a href="https://ko-fi.com/s/b5881b0554" rel="noopener noreferrer"&gt;https://ko-fi.com/s/b5881b0554&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Inbox Digest ($15)&lt;/strong&gt; — twice a day, AI compresses your unread mail into one prioritised summary. &lt;a href="https://ko-fi.com/s/1a950b61c4" rel="noopener noreferrer"&gt;https://ko-fi.com/s/1a950b61c4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Monitor &amp;amp; Reply Assistant ($17)&lt;/strong&gt; — drafts replies for good reviews, alerts you fast on bad ones. It reads a sheet you control — no fake "we pull reviews from Google automatically" claims. &lt;a href="https://ko-fi.com/s/741d5af7e5" rel="noopener noreferrer"&gt;https://ko-fi.com/s/741d5af7e5&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The fourteen kits
&lt;/h2&gt;

&lt;p&gt;Kits are the other half of the store: the words businesses rewrite every week, written once, properly.&lt;/p&gt;

&lt;p&gt;Industry kits: Real Estate ($17), Shopify Sellers ($17), Restaurants ($15), Cleaning ($15), Trades ($15), Pets ($12), Coaching ($17). Career/business kits: Course Launch ($19), Pricing &amp;amp; Negotiation Scripts ($12), Newsletter Starter ($12), LinkedIn Content ($12), Year-End Bookkeeping ($15 — deliberately timed: everyone's books are a mess in November). And two vertical prompt packs at $9: 100 prompts each for real estate agents and for restaurants, because the generic prompt pack was always the weakest thing on the shelf.&lt;/p&gt;

&lt;p&gt;Every kit was count-verified before listing — if it says 30 scripts or 300 hooks, a script counted them. Links for all of them are in the shop: &lt;a href="https://ko-fi.com/workflowstash/shop" rel="noopener noreferrer"&gt;https://ko-fi.com/workflowstash/shop&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm not doing
&lt;/h2&gt;

&lt;p&gt;No fake discounts, no income screenshots, no "passive income" theatre. Prices stay $9–19, the flagship pack stays $29, the free shelf stays free: three import-ready workflows at &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt; and LAUNCH20 still takes 20% off the pack.&lt;/p&gt;

&lt;p&gt;A bigger shelf doesn't guarantee a single sale. What it does is remove my favourite excuse — "maybe the right product wasn't there." Now 35 products are there. The next variable to fix is traffic, and that's a different post.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>smallbusiness</category>
      <category>automation</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>I stopped guessing: 5 products I built from actual demand data</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 02:50:59 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/i-stopped-guessing-5-products-i-built-from-actual-demand-data-en3</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/i-stopped-guessing-5-products-i-built-from-actual-demand-data-en3</guid>
      <description>&lt;p&gt;My little template shop had 10 products and zero sales. The products weren't the problem I needed to solve first — the &lt;em&gt;guessing&lt;/em&gt; was. Everything on the shelf was something I thought people might want. So this week I did it the other way round: I went looking for evidence of pain that people already pay to fix, and built exactly five things.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the evidence said
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Late payments are a tax on small businesses.&lt;/strong&gt; A 2025 QuickBooks report put it bluntly: 56% of small businesses are owed money, with average outstanding invoices around $17,500. Meanwhile, of the 13,000+ templates in n8n's library, only a couple of hundred touch money at all. Obvious gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No-shows quietly drain appointment businesses.&lt;/strong&gt; Salons, clinics and home services run 15–30% no-show rates, and reminder sequences are one of the few fixes with measured effect. Nobody wakes up wanting "reminder copy" — they wake up wanting the 2pm client to actually arrive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosts, freelancers and video-shy owners share one problem:&lt;/strong&gt; the blank page at a high-stakes moment. The difficult guest message. The proposal. The first three seconds of a video. Templates sell when the moment matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five things I built
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Invoice Chaser for n8n ($19)&lt;/strong&gt; — an automation that reads your invoice sheet daily and chases for you: friendly heads-up 3 days before due, reminder on the day, firmer at 7 days overdue, final notice at 14+. It stops the moment an invoice is marked Paid, and never sends more than 4 reminders. &lt;a href="https://ko-fi.com/s/528e2c4098" rel="noopener noreferrer"&gt;https://ko-fi.com/s/528e2c4098&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client Onboarding Kit ($19)&lt;/strong&gt; — the whole freelancer client journey in one kit: welcome packet, discovery questionnaire, proposal template, an Excel invoice with live totals, 10 journey emails, and an offboarding checklist. (The agreement part is deliberately an &lt;em&gt;outline&lt;/em&gt; to brief a lawyer with — I'm not selling anyone a copy-paste contract.) &lt;a href="https://ko-fi.com/s/17d921cc7e" rel="noopener noreferrer"&gt;https://ko-fi.com/s/17d921cc7e&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Never Miss a Booking ($17)&lt;/strong&gt; — 24 reminder &amp;amp; recovery messages, missed-call text-back scripts, deposit/cancellation policy templates, plus an n8n workflow that emails the 24h and 2h reminders automatically. &lt;a href="https://ko-fi.com/s/eba8ae5955" rel="noopener noreferrer"&gt;https://ko-fi.com/s/eba8ae5955&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Airbnb Host Message System ($17)&lt;/strong&gt; — 64 guest messages, including the ones hosts dread: bad-review responses in three tones, noise complaints, damage, hagglers. Plus a welcome-book outline, cleaning checklist and an income tracker. &lt;a href="https://ko-fi.com/s/87679c51b4" rel="noopener noreferrer"&gt;https://ko-fi.com/s/87679c51b4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Short-Form Video Hook System ($12)&lt;/strong&gt; — 300 hooks, but written &lt;em&gt;by industry&lt;/em&gt; (real estate, salons, restaurants, coaches, home services, fitness — 50 each). Generic hook packs go for a dollar for a reason. &lt;a href="https://ko-fi.com/s/a78844adeb" rel="noopener noreferrer"&gt;https://ko-fi.com/s/a78844adeb&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The pricing logic
&lt;/h2&gt;

&lt;p&gt;Everything is $12–19 on purpose. The $29 flagship pack stays the premium anchor; these are "one saved appointment / one paid invoice pays for it" prices. First-purchase prices, not forever prices.&lt;/p&gt;

&lt;p&gt;The free starter shelf is unchanged: three import-ready n8n workflows on GitHub, no email wall — &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt; — and code LAUNCH20 still takes 20% off the full pack at &lt;a href="https://ko-fi.com/s/4b5ee09c2f" rel="noopener noreferrer"&gt;https://ko-fi.com/s/4b5ee09c2f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Will evidence-based products outsell my guesses? Ask me in a month. At least now, if they don't sell, I'll know the demand data lied — not that I never checked.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>smallbusiness</category>
      <category>automation</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>One blog post in, three social drafts out: my n8n Content Repurposer</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 00:36:39 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/one-blog-post-in-three-social-drafts-out-my-n8n-content-repurposer-h44</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/one-blog-post-in-three-social-drafts-out-my-n8n-content-repurposer-h44</guid>
      <description>&lt;p&gt;Every time I publish a blog post, I used to do the same manual dance: open the post, squint at it, write a tweet, rewrite it for LinkedIn, give up on the third platform. It took 30 minutes and I still forgot half the time.&lt;/p&gt;

&lt;p&gt;So the third workflow in my little automation pack is the one that fixed that: an RSS-to-social-drafts repurposer built in n8n.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;RSS trigger&lt;/strong&gt; — n8n watches the blog's RSS feed. A new item kicks the workflow off, no polling spreadsheets, no reminders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean the content&lt;/strong&gt; — an HTML-to-text step strips markup so the AI gets the actual words, not div soup. Title, link and a trimmed body excerpt go forward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI drafting node&lt;/strong&gt; — one call asks for three platform-shaped drafts in a single pass: a short punchy post for X, a slightly longer professional version for LinkedIn, and a casual one for Threads/Facebook. Same facts, three voices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-loop by design&lt;/strong&gt; — the drafts land in a Google Sheet (or an email) for review. Nothing auto-posts. AI drafts are 80% right; the last 20% is where your voice lives, and auto-posting the 80% version is how brands end up apologising.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status flag&lt;/strong&gt; — each feed item is marked drafted, so reruns never produce duplicate drafts of the same post.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The two mistakes I made first
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Feeding raw HTML to the model.&lt;/strong&gt; Token-hungry and the drafts kept referencing navigation text. Clean first, prompt second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One generic prompt for all platforms.&lt;/strong&gt; A LinkedIn post and a tweet are different animals. Asking for all three in one structured response, each with its own length and tone instruction, worked far better than three separate calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it free
&lt;/h2&gt;

&lt;p&gt;The workflow JSON is free in my GitHub repo — all three workflows from the pack are there now:&lt;br&gt;
&lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full pack with the step-by-step setup guide and worked examples, it's on Ko-fi — $29, and launch code &lt;strong&gt;LAUNCH20&lt;/strong&gt; takes 20% off:&lt;br&gt;
&lt;a href="https://ko-fi.com/s/4b5ee09c2f" rel="noopener noreferrer"&gt;https://ko-fi.com/s/4b5ee09c2f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other two free workflows: an Instant Lead Responder (new lead gets a reply in under a minute) and a Review Request Automator (asks happy customers for a review, never twice). I wrote up the lead responder here on DEV earlier if you want the full build notes.&lt;/p&gt;

&lt;p&gt;Repurposing is the least glamorous automation I own. It's also the one that quietly runs every single week.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>nocode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I stopped selling one product and built a shelf of 10 instead</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Sat, 14 Nov 2026 00:01:29 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/i-stopped-selling-one-product-and-built-a-shelf-of-10-instead-240c</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/i-stopped-selling-one-product-and-built-a-shelf-of-10-instead-240c</guid>
      <description>&lt;p&gt;Last week I launched a single $29 n8n pack and waited. Silence. One product, one price, one audience — if it wasn't exactly your problem, there was nothing else to buy.&lt;/p&gt;

&lt;p&gt;So I spent the week turning the tools I already use with clients into a small shelf:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The original 3-workflow n8n pack ($29, code LAUNCH20 takes another 20% off this week): &lt;a href="https://ko-fi.com/s/4b5ee09c2f" rel="noopener noreferrer"&gt;https://ko-fi.com/s/4b5ee09c2f&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Each workflow on its own ($12) for people who only need one — the lead responder is still free here: &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Spreadsheets &amp;amp; documents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small Business Spreadsheet Kit — CRM + invoice tracker (with automatic OVERDUE flags) + expenses + content calendar, $15: &lt;a href="https://ko-fi.com/s/7ffd9e0c04" rel="noopener noreferrer"&gt;https://ko-fi.com/s/7ffd9e0c04&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Resume &amp;amp; Cover Letter Template Pack — 3 ATS-friendly designs, $12: &lt;a href="https://ko-fi.com/s/5d1e3f680e" rel="noopener noreferrer"&gt;https://ko-fi.com/s/5d1e3f680e&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Marketing kits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30-Day Social Media Content Kit — a month of captions written out, $14: &lt;a href="https://ko-fi.com/s/8895a65c95" rel="noopener noreferrer"&gt;https://ko-fi.com/s/8895a65c95&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google Business Profile Booster Kit — audit checklist, post templates, review replies, $11: &lt;a href="https://ko-fi.com/s/a23dbbcd46" rel="noopener noreferrer"&gt;https://ko-fi.com/s/a23dbbcd46&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;100 AI Prompts for Local Business Marketing, $9: &lt;a href="https://ko-fi.com/s/848aeb3799" rel="noopener noreferrer"&gt;https://ko-fi.com/s/848aeb3799&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cold Outreach Script Pack — the emails and DMs I actually send, $12: &lt;a href="https://ko-fi.com/s/02f72021ca" rel="noopener noreferrer"&gt;https://ko-fi.com/s/02f72021ca&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything lives at &lt;a href="https://workflowstash.com" rel="noopener noreferrer"&gt;https://workflowstash.com&lt;/a&gt;. No idea yet which one sells first — that's the experiment. If you run a small shop (any kind), I'd genuinely like to know: which of these would you actually pay for, and what's missing?&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>automation</category>
      <category>n8n</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>The review-request automation that never asks twice (n8n)</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Fri, 13 Nov 2026 23:19:05 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/the-review-request-automation-that-never-asks-twice-n8n-58f3</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/the-review-request-automation-that-never-asks-twice-n8n-58f3</guid>
      <description>&lt;p&gt;Local businesses live on Google reviews, but asking is awkward — and asking the same happy customer twice is worse. This is the second workflow in my pack, and the design constraint that matters is one boolean flag.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;A schedule trigger checks your jobs sheet for work completed &lt;strong&gt;3–30 days ago&lt;/strong&gt; (early enough to remember you, late enough to have used the result).&lt;/li&gt;
&lt;li&gt;It filters to customers whose &lt;code&gt;review_asked&lt;/code&gt; cell is still empty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gmail&lt;/strong&gt; sends a short, personal-feeling request with your Google review link.&lt;/li&gt;
&lt;li&gt;The workflow writes &lt;code&gt;review_asked = yes&lt;/code&gt; with the date — so nobody ever gets asked twice. That flag is the whole trick; skip it and the automation becomes a spam machine.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The pack
&lt;/h2&gt;

&lt;p&gt;This one ships with two siblings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant Lead Responder&lt;/strong&gt; — form webhook → lead scored 0–100 → Sheets → HOT leads ping Slack in seconds. This one is &lt;strong&gt;free&lt;/strong&gt;: &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Repurposer&lt;/strong&gt; — RSS → AI drafts for LinkedIn/X → Sheets for approval. Nothing posts without a human.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three are import-ready JSON with plain-English setup guides (10–20 min each). Launch price &lt;strong&gt;$29&lt;/strong&gt; (list $59), and this week there's an extra 20% off with code &lt;strong&gt;LAUNCH20&lt;/strong&gt;: &lt;a href="https://ko-fi.com/s/4b5ee09c2f" rel="noopener noreferrer"&gt;https://ko-fi.com/s/4b5ee09c2f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More at &lt;a href="https://workflowstash.com" rel="noopener noreferrer"&gt;https://workflowstash.com&lt;/a&gt;. Which small-business chore should I automate next?&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>nocode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I built an Instant Lead Responder in n8n (free workflow included)</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Fri, 13 Nov 2026 16:26:59 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/how-i-built-an-instant-lead-responder-in-n8n-free-workflow-included-25ng</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/how-i-built-an-instant-lead-responder-in-n8n-free-workflow-included-25ng</guid>
      <description>&lt;p&gt;Every local business I talk to has the same leak: a lead fills in the form, and nobody replies for hours. So I built one n8n workflow that answers in under a minute — and I'm giving this one away free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A &lt;strong&gt;Webhook&lt;/strong&gt; node catches the form submission.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Code&lt;/strong&gt; node scores the lead 0–100 (company email? budget mentioned? phone provided?).&lt;/li&gt;
&lt;li&gt;Every lead lands in &lt;strong&gt;Google Sheets&lt;/strong&gt; — nothing gets lost.&lt;/li&gt;
&lt;li&gt;HOT leads (score ≥ 70) trigger an instant &lt;strong&gt;Slack&lt;/strong&gt; alert and a welcome email via &lt;strong&gt;Gmail&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Steal it
&lt;/h2&gt;

&lt;p&gt;The import-ready JSON is free on GitHub: &lt;a href="https://github.com/newbeechong-glitch/free-n8n-workflows" rel="noopener noreferrer"&gt;https://github.com/newbeechong-glitch/free-n8n-workflows&lt;/a&gt;&lt;br&gt;
Import it, connect your own Sheets/Slack/Gmail accounts, and you're live in about 15 minutes. Every node is annotated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other two I productized
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review Request Automator&lt;/strong&gt; — asks happy customers for a Google review 3–30 days after the job, and never asks anyone twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Repurposer&lt;/strong&gt; — RSS in, AI drafts out (LinkedIn + X + a video hook), saved to Sheets for approval. Nothing posts without a human.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are in the Lead &amp;amp; Content Automation Pack with plain-English setup guides — launch price $29 (list $59): &lt;a href="https://ko-fi.com/s/4b5ee09c2f" rel="noopener noreferrer"&gt;https://ko-fi.com/s/4b5ee09c2f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which automation would you want next? I'm picking the next template from the comments.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>nocode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to screenshot hundreds of websites without cookie banners, blank images or emoji boxes</title>
      <dc:creator>WorkflowStash</dc:creator>
      <pubDate>Tue, 10 Nov 2026 13:00:41 +0000</pubDate>
      <link>https://dev.to/chong_newbee_c74302531d2e/how-to-screenshot-hundreds-of-websites-without-cookie-banners-blank-images-or-emoji-boxes-ib3</link>
      <guid>https://dev.to/chong_newbee_c74302531d2e/how-to-screenshot-hundreds-of-websites-without-cookie-banners-blank-images-or-emoji-boxes-ib3</guid>
      <description>&lt;p&gt;Taking one screenshot of a web page is easy. Taking a few hundred that actually look right is not. When I tried it, most of the results had at least one of these problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a cookie consent pop-up covering half the page&lt;/li&gt;
&lt;li&gt;blank grey boxes where lazy-loaded images should be&lt;/li&gt;
&lt;li&gt;emoji and Chinese/Japanese text rendered as empty squares&lt;/li&gt;
&lt;li&gt;slow pages timing out, so the whole job failed&lt;/li&gt;
&lt;li&gt;a sticky header or chat bubble sitting on top of the content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what causes each one and how to fix it, with Playwright code you can reuse. At the end there's a ready-made tool if you'd rather not maintain this yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Cookie banners
&lt;/h2&gt;

&lt;p&gt;Almost every consent pop-up comes from one of about 20 consent management platforms (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast, Sourcepoint, Termly, Iubenda...). Each uses a stable container ID or class, so you can hide them with CSS instead of trying to click "Accept":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="no"&gt;CONSENT_SELECTORS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="s1"&gt;'#onetrust-consent-sdk'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'#CybotCookiebotDialog'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'#usercentrics-root'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'#didomi-host'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.qc-cmp2-container'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.fc-consent-root'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'[id^="sp_message_container"]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.osano-cm-window'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'#truste-consent-track'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addStyleTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`${CONSENT_SELECTORS.join(',')} { display: none !important; }`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many of these tools also lock scrolling on &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, so unlock it too, or a full-page shot ends at the first screen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'overflow'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'auto'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'important'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Blank lazy-loaded images
&lt;/h2&gt;

&lt;p&gt;Images below the fold only load when they scroll into view. A full-page screenshot doesn't scroll, so they stay empty. Scroll through the page first, but with a time cap, or infinite feeds will hang forever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxMs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;maxMs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scrollBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;innerHeight&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;innerHeight&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scrollY&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scrollHeight&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scrollTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForLoadState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'networkidle'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Emoji and CJK text as empty boxes
&lt;/h2&gt;

&lt;p&gt;This one isn't your code: the server (or Docker image) running the browser simply has no fonts for those characters. On Debian/Ubuntu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y fonts-noto-color-emoji fonts-noto-cjk &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fc-cache -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Slow pages failing the whole job
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;page.goto&lt;/code&gt; throws on timeout, but by then the page has usually rendered most of its content. Catch the timeout and take the screenshot anyway, and record that it's partial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'load'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60_000&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!/&lt;/span&gt;&lt;span class="nc"&gt;Timeout&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Image wider than the screen
&lt;/h2&gt;

&lt;p&gt;One stray wide element makes the full-page image wider than your viewport. &lt;code&gt;overflow-x: hidden&lt;/code&gt; fixes the width but turns &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; into a scroll container and breaks height measurement. Use &lt;code&gt;clip&lt;/code&gt; instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;overflow-x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clip&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Don't treat error pages as success
&lt;/h2&gt;

&lt;p&gt;A 429 "Too many requests" or 404 page still produces a perfectly valid screenshot of the error. Check the HTTP status and flag those instead of counting them as results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ready-made version
&lt;/h2&gt;

&lt;p&gt;I packaged all of the above (plus device presets, retina, dark mode, element-only shots, PDF output and bulk URLs) as &lt;strong&gt;Website Screenshot Pro&lt;/strong&gt; on Apify. You pass a list of URLs and get back screenshot links plus a table with status, title and errors. It's pay-per-screenshot, and failed pages and HTTP errors aren't charged.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://apify.com/newbeeer/website-screenshot-pro" rel="noopener noreferrer"&gt;https://apify.com/newbeeer/website-screenshot-pro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find a site that doesn't come out right, open an issue on the Actor page with the URL. I'd like to collect the weird cases.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>automation</category>
      <category>playwright</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
