<?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: Ahmed sayed sayed Madbouly</title>
    <description>The latest articles on DEV Community by Ahmed sayed sayed Madbouly (@ahmedmadbouly186).</description>
    <link>https://dev.to/ahmedmadbouly186</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%2F4079509%2Fbfc83133-ef01-49c6-a9f5-e893070f3824.png</url>
      <title>DEV Community: Ahmed sayed sayed Madbouly</title>
      <link>https://dev.to/ahmedmadbouly186</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmedmadbouly186"/>
    <language>en</language>
    <item>
      <title>I Built a Production Job Scraper in 4 Days — Here's What I Learned</title>
      <dc:creator>Ahmed sayed sayed Madbouly</dc:creator>
      <pubDate>Sat, 15 Aug 2026 22:06:30 +0000</pubDate>
      <link>https://dev.to/ahmedmadbouly186/i-built-a-production-job-scraper-in-4-days-heres-what-i-learned-561i</link>
      <guid>https://dev.to/ahmedmadbouly186/i-built-a-production-job-scraper-in-4-days-heres-what-i-learned-561i</guid>
      <description>&lt;p&gt;I spent the last 4 days building a multi-site job scraper. Not a toy project &lt;br&gt;
— an actual production tool that runs on Apify and works reliably.&lt;/p&gt;

&lt;p&gt;This is what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I was manually checking LinkedIn and government job portals every week for &lt;br&gt;
Singapore IT roles. 20-30 minutes each time. Repetitive, soul-crushing, easy &lt;br&gt;
to forget.&lt;/p&gt;

&lt;p&gt;I kept thinking: there has to be a better way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Built a scraper that just... does it automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The results:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1,939 IT jobs in a single run&lt;/li&gt;
&lt;li&gt;8 minutes end-to-end&lt;/li&gt;
&lt;li&gt;$0.13 per execution&lt;/li&gt;
&lt;li&gt;100% success rate (no silent failures)&lt;/li&gt;
&lt;li&gt;Zero code changes to search different keywords or locations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last part was the win. I didn't want fragile code that breaks every time &lt;br&gt;
I change a search. Just fill in the form and it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters (Beyond Just Saving Time)
&lt;/h2&gt;

&lt;p&gt;Most people ask: "Why would you spend 4 days building something that takes &lt;br&gt;
20 minutes to do manually?"&lt;/p&gt;

&lt;p&gt;They're missing the point.&lt;/p&gt;

&lt;p&gt;It's not about the 20 minutes. It's about never having to do it again. About &lt;br&gt;
my brain being free. About knowing it runs every Sunday without me thinking &lt;br&gt;
about it.&lt;/p&gt;

&lt;p&gt;Someone here put it perfectly: "I'd do it again even if the time saved never &lt;br&gt;
catches up to the time I spent building it."&lt;/p&gt;

&lt;p&gt;That's the real win.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Approach
&lt;/h2&gt;

&lt;p&gt;I chose &lt;strong&gt;Apify + Playwright + Node.js&lt;/strong&gt; for a reason — not because it's &lt;br&gt;
trendy, but because it's reliable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular handlers for each site (LinkedIn, MyCareersFuture, etc.)&lt;/li&gt;
&lt;li&gt;One orchestrator that iterates through sites × keywords × pages&lt;/li&gt;
&lt;li&gt;Graceful error handling (no silent failures)&lt;/li&gt;
&lt;li&gt;Proxy rotation (Apify handles it)&lt;/li&gt;
&lt;li&gt;Cloud-deployed (not local, not fragile)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why modular?&lt;/strong&gt;&lt;br&gt;
Because I want to add more sites later. The whole point of building this &lt;br&gt;
was to prove you could make a truly extensible scraper — not a one-off hack.&lt;/p&gt;

&lt;p&gt;Adding a new site takes ~50 lines of code. Same pattern every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Took The Most Time
&lt;/h2&gt;

&lt;p&gt;Not the coding. The debugging.&lt;/p&gt;

&lt;p&gt;Getting selectors right when websites change. Handling edge cases. Making sure &lt;br&gt;
it doesn't break on empty pages or network timeouts. Testing different proxy &lt;br&gt;
configurations.&lt;/p&gt;

&lt;p&gt;The actual "scrape a website" code? Maybe 30% of the work. The other 70%? &lt;br&gt;
Making sure it's production-grade.&lt;/p&gt;

&lt;p&gt;That's the difference between a script and a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Part
&lt;/h2&gt;

&lt;p&gt;I'm probably never going to "save" 4 days worth of manual work. I'd need to &lt;br&gt;
run this scraper 12+ times before the time investment pays for itself.&lt;/p&gt;

&lt;p&gt;But again — that's not the point. The point is I don't have to think about &lt;br&gt;
it anymore.&lt;/p&gt;

&lt;p&gt;My brain is free for better things.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Business Side
&lt;/h2&gt;

&lt;p&gt;I published this on Apify Marketplace. Free tier (1 run/month), paid tier &lt;br&gt;
for unlimited runs.&lt;/p&gt;

&lt;p&gt;Not because I'm expecting to get rich. But because I genuinely believe people &lt;br&gt;
would pay for reliability. And because building something and giving it away &lt;br&gt;
for free feels incomplete.&lt;br&gt;
**"It is totally free currently, but I may change to tiers in the future."&lt;br&gt;
**Open source code, paid hosted service. Both have their place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with the output format first.&lt;/strong&gt; I spent too much time on architecture &lt;br&gt;
before I knew what the output should look like. Lesson learned.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test with real proxies earlier.&lt;/strong&gt; Found issues with proxy rotation late. &lt;br&gt;
Would've caught sooner if I'd tested production-like conditions earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Document as you go.&lt;/strong&gt; Retroactive documentation is brutal. Do it live.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I Got Right
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular from day 1.&lt;/strong&gt; Not retrofitting structure later. Made everything &lt;br&gt;
cleaner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actual error handling.&lt;/strong&gt; Not just try/catch and hope. Real graceful &lt;br&gt;
fallbacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proof before polish.&lt;/strong&gt; Got 1,939 jobs working before I touched the README. &lt;br&gt;
Proof comes first.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  For Anyone Thinking About Building Automation
&lt;/h2&gt;

&lt;p&gt;A few thoughts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You don't need AI agents for everything.&lt;/strong&gt; Simple, reliable code beats &lt;br&gt;
fancy tech every time. Make the business money first. Fancy comes later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build for reliability, not speed.&lt;/strong&gt; A scraper that runs 100 times and &lt;br&gt;
fails once is worse than one that runs 10 times perfectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open source your code, charge for the service.&lt;/strong&gt; The code is the trust &lt;br&gt;
signal. The hosting is the value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't ask if the time investment "pays for itself."&lt;/strong&gt; If your brain gets &lt;br&gt;
freedom, it pays for itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Step
&lt;/h2&gt;

&lt;p&gt;GitHub repo is public (full code): &lt;br&gt;
&lt;a href="https://github.com/ahmedmadbouly186/multi-site-jobs-scraper" rel="noopener noreferrer"&gt;Multi-Site Jobs Scraper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it on Apify (no coding needed): &lt;br&gt;
&lt;a href="https://apify.com/ahmed_madbouly/multi-web-sites-jobs-scraper" rel="noopener noreferrer"&gt;Try on Apify Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Free right now. I'm collecting feedback, not revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Building something you'd actually use is wildly underrated. It forces you to &lt;br&gt;
solve real problems. Not theoretical ones. Real ones.&lt;/p&gt;

&lt;p&gt;Start there.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>webscraping</category>
      <category>node</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
