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

Naukri Automation Bot

project.naukri-bot.local
Naukri Automation Bot project screenshot
  1. Problem:

    Keeping a Naukri profile active requires daily manual resume uploads, taking time and easily forgotten.

  2. 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.

  3. 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

    After: Fully automated 2x daily uploads

  • Session Handling

    Before: Failing due to unexpected OTP challenges

    After: Reliable bypassing using B64-encoded saved cookies

  • Profile Search Rank

    Before: Stale profile timestamp dropping search ranking across recruiters

    After: Continuously updated timestamp keeping profile active daily

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.

Diagram, 5 connections:
  1. cron-job.org → HTTP Daemon (Ping every 5m)
  2. HTTP Daemon → Render Free Tier
  3. Main Poller → Headless Browser (Scheduled Time)
  4. Headless Browser → Restore Session Cookies
  5. 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.

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