Naukri Automation Bot

Problem:
Keeping a Naukri profile active requires daily manual resume uploads, taking time and easily forgotten.
Solution:
Developed an automated Python bot that runs 24/7 on Render's free tier, performing headless browser automation to update the resume on a scheduled basis.
Impact:
Zero-touch profile refreshing ensures continuous recruiter visibility with 100% automation and bypasses OTPs via session persistence.
Overview
A reliable automation tool running on Render's free tier that ensures a job seeker's Naukri profile remains consistently active by uploading a timestamped resume twice a day.
Results & metrics
- Automated daily profile updates on Naukri, keeping candidate visibility in top search tiers
- Zero-cost hosting on Render Free Tier via 5-minute external keepalive pinging
- 100% bypass of frequent MFA prompts through secure persistent session cookies
- Reduced manual daily profile management time to 0 minutes
Before / after
Profile Refreshing
Before: Manual daily logins and PDF uploads
Session Handling
Before: Failing due to unexpected OTP challenges
Profile Search Rank
Before: Stale profile timestamp dropping search ranking across recruiters
What I built
Session-reuse upload
A headless browser restores saved cookies to skip OTP, then uploads a timestamped resume.
Always-on free tier
cron-job.org pings an HTTP thread every 5 minutes so the Render instance never sleeps.
Stack
- Python 3.11+
- Headless Web Automation
- Render Free Tier
- Docker Containerization
- cron-job.org Integrations
Decisions
Key trade-offs and design calls that shaped the final delivery.
Running on Render Free Tier
Why
- Context
- Needed a consistently running script without incurring recurring cloud computing costs
- Decision
- Combined a background HTTP server and an external cron-job.org ping to prevent the free instance from sleeping
Cookie-based Session Persistence
Why
- Context
- Naukri frequently prompts automated browsers with OTP challenges block the pipeline
- Decision
- Exported established session cookies to an environment variable, bypassing future login screens entirely
Architecture
The primary system boundaries, runtime pieces, and how the project was structured in production.
- cron-job.org → HTTP Daemon (Ping every 5m)
- HTTP Daemon → Render Free Tier
- Main Poller → Headless Browser (Scheduled Time)
- Headless Browser → Restore Session Cookies
- Restore Session Cookies → Upload Resume to Naukri
- Python Headless Browser
Automation Engine
How
Navigates Naukri.com, handles authentication via restored base64 cookies to bypass OTPs, and executes file uploads.
- Background HTTP Daemon
Always-on Mechanism
How
Runs a secondary HTTP thread alongside the main polling thread to receive external pings, defeating Render's idle spin-down.
Mermaid source
Paste into mermaid.live to edit the diagram.
flowchart TD C[cron-job.org] -->|Ping every 5m| H[HTTP Daemon] H --> R[Render Free Tier] P[Main Poller] -->|Scheduled Time| A[Headless Browser] A --> L[Restore Session Cookies] L --> U[Upload Resume to Naukri]
Pipeline
How changes moved from development through validation and deployment.
Containerized application deployed seamlessly on push to repository
Main thread polls for scheduled time windows, handling retries on transient errors via exponential backoff
External monitor pings the HTTP thread every 5 minutes to prevent cold starts
Select a step for its detail
Incidents
Operational failures, rehearsals, or recovery moments that changed how the system was run.
- P2
Chrome WebDriver crashing with Out-Of-Memory (OOM)
Resolution
Configured memory-saving Chrome flags and added exponential backoff on transient failures to respect Render's 512MB RAM cap
Lesson: Headless browsers are highly memory-intensive—catch driver exceptions gracefully and optimize flags in constrained cloud instances
- P2
Job uploads failing due to unexpected OTP prompts
Resolution
Engineered session extraction via export_cookies.py and added base64 cookie injection to bypass authentication flows smoothly
Lesson: Repeated automated logins inevitably face bot detection—session persistence is mandatory for reliable long-term headless tasks