<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ahmed's Automation & Engineering]]></title><description><![CDATA[Ahmed's Automation & Engineering]]></description><link>https://automation-engineering.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6a80e3a0686a51951e886713/f3f638af-553f-499a-a062-b6da786460e1.png</url><title>Ahmed&apos;s Automation &amp; Engineering</title><link>https://automation-engineering.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 22 Oct 2026 15:12:21 GMT</lastBuildDate><atom:link href="https://automation-engineering.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Built a Production Job Scraper in 4 Days — Here's What I Learned]]></title><description><![CDATA[Learn how I built a production-ready multi-site job scraper in 4 days using Node.js and Apify. Lessons on architecture, reliability, and automation.]]></description><link>https://automation-engineering.hashnode.dev/i-built-a-production-job-scraper-in-4-days-here-s-what-i-learned</link><guid isPermaLink="true">https://automation-engineering.hashnode.dev/i-built-a-production-job-scraper-in-4-days-here-s-what-i-learned</guid><category><![CDATA[automation]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[webscraping ]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[job search]]></category><category><![CDATA[Job Hunting]]></category><category><![CDATA[#JobSeekers]]></category><category><![CDATA[jobsearch]]></category><category><![CDATA[job-market]]></category><category><![CDATA[job-hunt]]></category><dc:creator><![CDATA[Ahmed sayed sayed Madbouly]]></dc:creator><pubDate>Sat, 15 Aug 2026 22:27:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a80e3a0686a51951e886713/fd1dfbc2-df39-4079-926d-7d34cc2021ee.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I spent the last 4 days building a multi-site job scraper. Not a toy project — a production tool that runs on Apify and works reliably.</p>
<p>This is what I learned about building systems, not just scripts.</p>
<h2>The Problem</h2>
<p>I was manually checking LinkedIn and government job portals every week for Singapore IT roles. 20-30 minutes each time. Repetitive, soul-crushing, easily forgotten.</p>
<p>There had to be a better way.</p>
<h2>The Solution</h2>
<p>Built a scraper that does it automatically.</p>
<p><strong>Real results:</strong></p>
<ul>
<li><p>1,939 IT jobs in a single run</p>
</li>
<li><p>8 minutes end-to-end</p>
</li>
<li><p>$0.13 per execution</p>
</li>
<li><p>100% success rate (no silent failures)</p>
</li>
<li><p>Zero code changes needed for different keywords or locations</p>
</li>
</ul>
<p>That last point was the real win. I didn't want fragile code that breaks every time I change a search parameter. Just fill in the form and it works.</p>
<h2>Why This Matters</h2>
<p>Most people ask: "Why spend 4 days building something that takes 20 minutes to do manually?"</p>
<p>They're missing the point entirely.</p>
<p>It's not about the 20 minutes saved. It's about never having to think about it again. About brain space freed up for real problems. About knowing it runs every Sunday without any intervention.</p>
<p>Someone in the automation community said it perfectly: "I'd do it again even if the time saved never catches up to the time I spent building it."</p>
<p>That's the actual win.</p>
<h2>The Technical Stack</h2>
<p>I chose <strong>Apify + Playwright + Node.js</strong> deliberately — not for hype, but for reliability.</p>
<p><strong>Architecture highlights:</strong></p>
<ul>
<li><p><strong>Modular handlers</strong> for each site (LinkedIn, MyCareersFuture, etc.)</p>
</li>
<li><p><strong>Single orchestrator</strong> that iterates sites × keywords × pages</p>
</li>
<li><p><strong>Graceful error handling</strong> (no silent failures, no mystery hangs)</p>
</li>
<li><p><strong>Cloud-deployed</strong> (not local, not fragile)</p>
</li>
<li><p><strong>Proxy rotation</strong> handled by Apify</p>
</li>
</ul>
<p><strong>Why modular from day 1?</strong></p>
<p>I knew I'd want to add more sites eventually. The whole point was proving you could build an extensible scraper — not a one-off hack.</p>
<p>Adding a new site takes ~50 lines of code. Same pattern every time. That's the difference between a tool and a platform.</p>
<h2>What Actually Took Time</h2>
<p>Not the scraping logic. That's maybe 30% of the work.</p>
<p>The other 70%? Debugging. Getting selectors right when websites change. Handling edge cases. Testing different proxy configurations. Making sure it doesn't fail silently on empty pages or network timeouts.</p>
<p>That's what separates a script from a production system.</p>
<h2>The Business Side</h2>
<p>I published this on Apify Marketplace. Free tier (1 run/month), unlimited runs for paid users.</p>
<p>Not because I'm expecting to get rich. But because I believe in charging for reliability. And because giving something away for free feels incomplete.</p>
<p>Open source the code, charge for the hosted service. Both have their place.</p>
<h2>What I'd Do Differently</h2>
<p><strong>1. Start with output format first.</strong> I spent too much time on architecture before I knew what the output should actually look like. Lesson learned.</p>
<p><strong>2. Test with production proxies earlier.</strong> Found proxy rotation issues late in development. Would've caught them sooner in production-like conditions.</p>
<p><strong>3. Document as you go.</strong> Retroactive documentation is brutal. Do it live.</p>
<h2>What I Got Right</h2>
<p><strong>1. Modular from day 1.</strong> Not retrofitting structure later saved hours of refactoring.</p>
<p><strong>2. Actual error handling.</strong> Not just try/catch and pray. Real graceful fallbacks for every failure mode I could think of.</p>
<p><strong>3. Proof before polish.</strong> Got 1,939 jobs working before I touched the README. Proof comes first.</p>
<h2>For Anyone Building Automation</h2>
<p>A few hard-won thoughts:</p>
<p><strong>You don't need AI agents for everything.</strong> Simple, reliable deterministic code beats fancy tech every single time. Make the business money first. Fancy comes later.</p>
<p><strong>Build for reliability over speed.</strong> A scraper that runs 100 times and fails once is worse than one that runs 10 times perfectly.</p>
<p><strong>Open source your code, charge for the service.</strong> The code is the trust signal. The hosting/reliability is the value.</p>
<p><strong>The time investment doesn't need to "pay for itself."</strong> If your brain gets freedom, it already paid for itself.</p>
<h2>The Result</h2>
<p>GitHub (full source code): <a href="https://github.com/ahmedmadbouly186/multi-site-jobs-scraper">Multi-Site Jobs Scraper</a></p>
<p>Try it (no coding needed): <a href="https://apify.com/ahmed_madbouly/multi-web-sites-jobs-scraper">Try on Apify Marketplace</a></p>
<p>Free tier available. I'm collecting feedback, not revenue.</p>
<h2>Final Thought</h2>
<p>Building something you'd actually use is wildly underrated. It forces you to solve <em>real</em> problems, not theoretical ones.</p>
<p>Start there.</p>
]]></content:encoded></item></channel></rss>