Skip to main content
All projects
Automation & AI
/projects/naukri-bot

Naukri Automation Bot

  • 100% automated profile updates
  • Zero cold starts on Render free tier
  • Bypasses OTP with session reuse
project.naukri-bot.local
Naukri Automation Bot project screenshot

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

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

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.

1

Deploy

Docker & Render

Containerized application deployed seamlessly on push to repository

2

Execution

Python Threads

Main thread polls for scheduled time windows, handling retries on transient errors via exponential backoff

3

Keep-alive

cron-job.org

External 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)

P2

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

Job uploads failing due to unexpected OTP prompts

P2

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