Naukri Automation Bot
- 100% automated profile updates
- Zero cold starts on Render free tier
- Bypasses OTP with session reuse

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.
Before / after
Profile Refreshing
Before: Manual daily logins and PDF uploads
After: Fully automated 2x daily uploads
Session Handling
Before: Failing due to unexpected OTP challenges
After: Reliable bypassing using B64-encoded saved cookies
Stack
Decisions
Key trade-offs and design calls that shaped the final delivery.
Running on Render Free Tier
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
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.
Python Headless Browser
Automation Engine
Navigates Naukri.com, handles authentication via restored base64 cookies to bypass OTPs, and executes file uploads.
Background HTTP Daemon
Always-on Mechanism
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 visualize 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.
Deploy
Docker & RenderContainerized application deployed seamlessly on push to repository
Execution
Python ThreadsMain thread polls for scheduled time windows, handling retries on transient errors via exponential backoff
Keep-alive
cron-job.orgExternal monitor pings the HTTP thread every 5 minutes to prevent cold starts
Incidents
Operational failures, rehearsals, or recovery moments that changed how the system was run.
Chrome WebDriver crashing with Out-Of-Memory (OOM)
P2Resolution: 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
Job uploads failing due to unexpected OTP prompts
P2Resolution: 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