DEV Community

vika2210
vika2210

Posted on

AI Job Matching Agent That Reads Your Resume (n8n + Bright Data Challenge)

This is a submission for the AI Agents Challenge powered by n8n and Bright Data

I Built an AI Job Matching Agent That Understands You β€” Not Just Keywords

πŸ‘‹ Hey everyone!

This is my submission to the n8n + Bright Data AI Agent Challenge β€” and unlike most generic agents that just search jobs by title, mine does one thing differently:

πŸ’‘ It reads your actual resume, builds a smart profile (persona), and then finds matching jobs β€” automatically.

πŸš€ What I Built

Instead of asking users to type out their skills or filter jobs manually, my agent starts from your actual CV:

  1. Upload your resume to a monitored Google Drive folder.
  2. The agent converts it to text, chunks it, and creates OpenAI embeddings.
  3. It builds a personalized vector memory (in Pinecone) of your profile.
  4. When you message the agent (e.g., β€œFind backend jobs in Tel Aviv”) β€” it understands the context of your resume, extracts role + location, and builds job search filters.
  5. Using Bright Data, it fetches matching jobs from Indeed in seconds.
  6. Results are saved to Google Sheets and sent via email.

🧠 Demo

πŸŽ₯ Watch the demo on YouTube

πŸ“© Try It Yourself

If anyone is interested, I can share a direct link to the Agent so you can test it with your own resume.

Drop a comment or reach out β€” I’d be happy to send it over!


πŸ”§ n8n Workflow

The workflow is built with n8n and integrates multiple services:

  • Google Drive Trigger β†’ Detects a new resume in /Cv folder.
  • Download File β†’ Fetches the PDF for processing.
  • Text Splitter + Embeddings β†’ Splits text and generates embeddings with OpenAI.
  • Pinecone Vector Store β†’ Stores embeddings for semantic memory.
  • AI Agent β†’ Receives candidate profile + user query, outputs role & location JSON.
  • Code Node β†’ Formats JSON filter for Bright Data.
  • Bright Data Node β†’ Pulls live jobs from Indeed dataset.
  • Google Sheets Node β†’ Saves results.
  • Gmail Node β†’ Sends personalized job list to candidate.

πŸ‘‰ See the full workflow JSON on GitHub


πŸ–ΌοΈ Workflow in Action

Google Drive Trigger

Trigger when a new resume is uploaded

Resume Processing

Resume converted into embeddings and stored in Pinecone

Bright Data Integration

Dynamic filters built from Agent query

Results

Model Choice

OpenAI Embeddings β†’ Resume semantic representation.

OpenRouter LLM β†’ Agent reasoning & JSON intent extraction.

Google Gemini β†’ Summarization of job descriptions.

Memory / Data Handling

Pinecone Vector Store β†’ Stores resume embeddings for long-term memory.

Text Splitter β†’ Recursive chunking of resumes for embedding accuracy.

n8n pinData β†’ Holds intermediate results like candidate profile JSON.

Tools Used

🧠 n8n for orchestration

🌐 Bright Data for real-time Indeed job listings

πŸ“‚ Google Drive for resume intake

πŸ“Š Google Sheets for results storage

πŸ“§ Gmail for sending job matches

πŸ”Ž Pinecone for semantic search

πŸ€– OpenAI / Gemini for embeddings and summarization

πŸ” Bright Data Verified Node

The Bright Data Verified Node was key.
Instead of manually scraping job boards, handling proxies, or fighting CAPTCHAs, I could:

Trigger dataset snapshots

Monitor progress

Retrieve structured JSON results

This saved hours of maintenance and made the workflow production-ready.

πŸ›€οΈ Journey

This was my first time combining n8n, Bright Data, Pinecone, and OpenAI into one workflow.

Challenges I faced:

Getting the Agent to always output JSON instead of free text.

Handling resume embeddings and keeping context consistent.

Mapping Bright Data snapshot results into clean rows for Sheets.

By the end, I had a working pipeline that really felt like a personal AI recruiter β€” reading resumes, understanding context, and delivering jobs. πŸš€

https://portfolio-5qny.onrender.com/
https://www.linkedin.com/in/victoria-solomatin
https://github.com/victorias22

Final matching jobs in Google Sheets


πŸ› οΈ Technical Implementation

System Instructions

The AI Agent uses a strict system message to always output JSON in the format:


json
{
  "role": "backend",
  "location": "Χͺל אביב",
  "level": "junior"
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)