AI Job Search Agent with n8n
Build an AI agent that scrapes job boards and scores them against your resume.
Introduction
30 Second Summary
Job hunting is exhausting. You spend hours scrolling through multiple job boards, copy-pasting descriptions, and trying to figure out which roles actually match your skills.
In this project, you will build an AI-powered job search agent that automatically scrapes listings from five Indian job boards, scores each one against your resume, and tells you exactly how to tailor your application for the best matches.
What You'll Build
An end-to-end automated job search pipeline in n8n that scrapes jobs, scores them with AI, and logs results to a Google Sheets tracker.
By the end of this project, you'll have:
- A complete n8n workflow that scrapes job listings from LinkedIn, Indeed, Naukri, Google Jobs, and Glassdoor in a single API call via Apify.
- An AI agent powered by OpenRouter that scores each job against your resume and generates tailored resume suggestions.
- A Google Sheet automatically populated with job titles, companies, match scores, and specific resume tweaks for high-scoring roles.
- Secret Mission: Add scheduled automation so the workflow runs every 6 hours and notifies you of new high-match jobs.
Are there any prerequisites?
You need n8n running locally on Docker and an OpenRouter API key. Both of these should already be set up from previous projects in this series.
You will also need a Google account for Google Sheets integration. No credit card is required for any service used in this project.
Set Up Accounts and Credentials
Before your workflow can scrape jobs and score them with AI, it needs permission to talk to each service.
In this step, you will create an Apify account for web scraping, then wire up all three credentials inside n8n so your workflow can authenticate with Apify, OpenRouter, and Google Sheets.
In this step, get ready to:
- Create an Apify account and grab your API token.
- Set up OpenRouter, Apify, and Google Sheets credentials in n8n.
- Create a Google Sheet to store your matched jobs.
Create an Apify account
Apify is a cloud platform that runs web scrapers for you. You will use it to pull job listings from multiple boards without building your own scraper.
- Open your browser and go to apify.com.
- Click Sign up and create a free account using your email, Google, or GitHub. No credit card is required.
- Once signed in, click Settings in the left sidebar.
- Select the API & Integrations tab.
- Under Personal API tokens, click the copy icon next to your token to copy it to your clipboard.
- Paste this token somewhere safe (a temporary text file works). You will need it in the next substep.
What is an Apify token?
Your Personal API Token lets external tools (like n8n) run scrapers on your behalf. It acts like a password for the Apify API.
Keep it private. Anyone with this token can use your Apify account credits.
How much does Apify cost?
The free plan includes $5/month in platform usage credits at $0.20 per Compute Unit. Running 20 job listings across 5 boards costs well under $1 per run, so you can experiment several times without spending anything.
Can't find the API & Integrations tab?
Make sure you click Settings in the left sidebar first. The tab appears along the top of the Settings page, not in the main navigation.
help me find my Apify API token
Set up credentials in n8n
n8n stores authentication details as credentials, separate from your workflow. This keeps secrets out of your node configurations.
You will create three credentials: one for OpenRouter, one for Apify, and one for Google Sheets.
Add the OpenRouter credential
- In your n8n browser tab, click the Create button in the upper-left corner of the side menu.
- Select Credential.
- Search for OpenRouter and select it.
- Paste your OpenRouter API key into the API Key field.
- Click Save. n8n will test the credential automatically.
What does saving do?
When you save a credential, n8n tests it against the service to confirm it works. If you see a green success message, you are good to go.
Add the Apify Header Auth credential
n8n does not have a dedicated Apify node. You will call the Apify API with an HTTP Request node, using a Header Auth credential to pass your token.
- Click the Create button again and select Credential.
- Search for Header Auth and select it.
- In the Name field, enter Authorization.
- In the Value field, enter Bearer followed by a space and your Apify token (e.g. Bearer apify_api_abc123...).
- Click Save.
Why Header Auth instead of a built-in node?
Apify authenticates via a Bearer token in the Authorization header. The Header Auth credential tells n8n to attach this header to every HTTP request that uses the credential.
Credential test fails?
Header Auth credentials cannot be auto-tested because n8n does not know which URL to call. You may see a note that the test was skipped. This is normal.
Double-check that the Name field is exactly Authorization (capital A) and the Value starts with Bearer (capital B, followed by a space).
help me fix my Apify Header Auth credential in n8n
Add the Google Sheets credential
- Click Create and select Credential once more.
- Search for Google Sheets OAuth2 and select it.
- Click Sign in with Google (or the equivalent authorization button).
- A browser pop-up will ask you to choose a Google account and grant permissions. Select your account and click Allow.
- Once redirected back to n8n, click Save. You should see a green success confirmation.
What is OAuth2?
OAuth2 is a standard that lets n8n access your Google account without ever seeing your Google password. You authorize n8n through Google's own consent screen.
Google sign-in pop-up blocked?
Your browser may block the OAuth pop-up. Look for a pop-up blocker icon in your address bar and allow pop-ups from your n8n URL.
help me connect Google Sheets to n8n
Create the Job Search Tracker spreadsheet
Your workflow needs somewhere to log scored job results. You will create a Google Sheet with the columns your workflow expects.
- Open Google Sheets in a new browser tab.
- Click Blank spreadsheet to create a new sheet.
- Rename the spreadsheet to Job Search Tracker by clicking the title in the top-left corner and typing the new name.
- In row 1, enter the following column headers (one per cell, starting in A1):
- A1: Job Title
- B1: Company
- C1: Location
- D1: Salary
- E1: Source
- F1: Match Score
- G1: Resume Suggestions
- H1: Apply URL
- I1: Date Found
Why these specific columns?
Later in the project, your n8n workflow will map AI-generated output to these exact column names. Spelling and casing matter. If a column name does not match, n8n will skip that field when appending rows.
Seeing a different Google Sheets layout?
Make sure you are creating a brand new spreadsheet, not editing an existing one. The column headers must start in row 1 with no blank rows above them.
help me set up my Google Sheet for n8n
Your accounts and credentials are ready. Next up, you will build the workflow that uses them to scrape live job listings from multiple boards in a single API call.
Build the Job Scraping Pipeline
Your credentials are configured and your Google Sheet is ready to receive data.
Now you need a way to collect job listings from multiple boards at once. Manually checking LinkedIn, Indeed, Naukri, Google Jobs, and Glassdoor every day takes hours. In this step, you will build a pipeline that scrapes all five in a single API call.
In this step, get ready to:
- Create a workflow with a Form Trigger that accepts your resume and target role.
- Configure an HTTP Request node to launch the Apify job board scraper.
- Add a second HTTP Request node to fetch the scraped job results.
Create a workflow and add the Form Trigger
Every n8n automation starts with a trigger. A Form Trigger creates a simple web form where you can submit your resume and search criteria to kick off the workflow.
- In n8n, click the + button in the top right to create a new workflow.
- Double-click the workflow name at the top and rename it to AI Job Search Agent.
- Click the + button on the canvas to add your first node.
- Search for Form Trigger and select it.
The Form Trigger node needs three fields so you can submit your details each time the workflow runs.
- In the Form Trigger settings panel, click Add Field.
- Set the first field's Field Label to Resume and Field Type to Textarea.
- Click Add Field again.
- Set the second field's Field Label to Target Role and Field Type to Text.
- Click Add Field one more time.
- Set the third field's Field Label to Location and Field Type to Text.
What does this form do?
When you trigger this workflow, n8n generates a web form with these three fields. You paste your resume text, type a role like "Full Stack Developer", and a location like "Bangalore". The form data flows into the next nodes as variables you can reference.
- Close the Form Trigger panel by clicking Back to canvas or pressing Escape.
You should see a Form Trigger node on your canvas with a green checkmark indicating it is configured.
Don't see the Form Trigger node?
Make sure you searched for Form Trigger (two words) in the node search panel. If you selected a regular Form node instead, delete it and search again for the trigger variant.
help me find the Form Trigger node in n8n
Add the HTTP Request node to run the Apify scraper
Instead of writing your own scraper for each job board, you will call Apify's job board scraper actor. This single API call searches LinkedIn, Indeed, Naukri, Google Jobs, and Glassdoor simultaneously.
- Click the + connector on the right side of your Form Trigger node.
- Search for HTTP Request and select it.
- Rename this node to Run Apify Scraper by double-clicking its title.
Now configure the request to call the Apify actor API.
- Set Method to POST.
- In the URL field, paste:
https://api.apify.com/v2/acts/openclawai~job-board-scraper/runs?waitForFinish=120
- Under Authentication, select Generic Credential Type.
- Set Generic Auth Type to Header Auth.
- In the Credential for Header Auth dropdown, select the Apify credential you created in Step 1.
Next, add the JSON body that tells Apify which jobs to search for.
- Under Body, set Body Content Type to JSON.
- In the JSON field, paste the following body:
{
"searchTerm": "{{ $json.targetRole }}",
"location": "{{ $json.location }}",
"countryIndeed": "india",
"sites": ["linkedin", "indeed", "naukri", "google", "glassdoor"],
"maxResults": 20,
"hoursOld": 72
}
What does this JSON body do?
The {{ $json.targetRole }} and {{ $json.location }} expressions pull the values the learner typed in the form. These are n8n expressions that reference the Form Trigger's output.
The sites array tells Apify to search all five job boards in parallel. The hoursOld filter ensures you only get listings posted within the last 72 hours. The waitForFinish=120 query parameter tells the API to wait up to 120 seconds for results before responding.
The maxResults cap of 20 keeps you well within Apify's free tier credits.
- Close the node panel to return to the canvas.
You should see the Run Apify Scraper node connected to your Form Trigger with an arrow between them.
Not sure if your JSON body is correct?
Make sure you selected JSON as the Body Content Type (not Form-Data or Raw). Also confirm the double curly braces around $json.targetRole and $json.location are present. These are n8n expressions, not plain text.
help me configure the HTTP Request node JSON body in n8n
Add the HTTP Request node to fetch dataset results
When Apify finishes scraping, it stores all the job listings in a dataset. The run response includes a defaultDatasetId that points to where the results live. You need a second HTTP Request node to fetch those results.
- Click the + connector on the right side of your Run Apify Scraper node.
- Search for HTTP Request and select it.
- Rename this node to Fetch Dataset Items.
Configure this node to pull the scraped job data from the Apify dataset.
- Leave Method set to GET (the default).
- In the URL field, paste this expression:
https://api.apify.com/v2/datasets/{{ $json.data.defaultDatasetId }}/items?format=json
- Under Authentication, select Generic Credential Type.
- Set Generic Auth Type to Header Auth.
- Select your Apify Header Auth credential again.
What is this URL doing?
The expression {{ $json.data.defaultDatasetId }} grabs the dataset ID from the previous node's response. When Apify runs the scraper, it returns a JSON object with a data.defaultDatasetId field. This node uses that ID to fetch the actual job listings stored in that dataset.
The ?format=json parameter ensures you get structured JSON back instead of another format.
- Close the node panel.
- Press Ctrl+S (Windows) or Cmd+S (macOS) to save your workflow.
Your canvas should now show three connected nodes: Form Trigger, Run Apify Scraper, and Fetch Dataset Items, each linked by arrows flowing left to right.
Nodes not connected?
If a node is floating separately on the canvas, drag from the small circle on the right edge of the source node to the left edge of the target node. The arrow should snap into place. Make sure the order is Form Trigger, then Run Apify Scraper, then Fetch Dataset Items.
help me connect nodes in my n8n workflow
Your scraping pipeline is ready. Next up, you will connect an AI model that analyzes each job listing against your resume and scores the match.
Add AI-Powered Job Scoring
Your scraping pipeline pulls in up to 20 job listings from five boards at once. Raw listings alone are not much help though.
In this step, you will add an AI Agent that reads each job description alongside your resume and produces a structured match score. The agent will tell you exactly which skills align, which are missing, and how to rewrite your resume for each role.
In this step, get ready to:
- Add a Loop Over Items node to process each job listing individually.
- Connect an AI Agent node with an OpenRouter Chat Model sub-node.
- Configure a system prompt that scores jobs and suggests resume edits.
Add a Loop Over Items node
The Apify dataset returns all 20 job listings as a single batch. To score each listing with the AI model, you need to feed them one at a time.
- In your n8n workflow, click the + connector on the right side of the Fetch Dataset Items HTTP Request node.
- Search for Loop Over Items in the node panel and select it.
- In the node settings, set Batch Size to 1.
Why batch size 1?
Setting the batch size to 1 means the Loop Over Items node passes exactly one job listing per iteration to the AI Agent. This ensures the model focuses on a single job description at a time and returns a clean, per-job JSON response.
The node automatically stops once every item has been processed. You do not need an IF node to end the loop.
- Verify the node appears on the canvas labeled Loop Over Items and is connected to Fetch Dataset Items.
Don't see the node on your canvas?
Make sure you are clicking the + connector on the Fetch Dataset Items node specifically. If you accidentally added the node elsewhere, drag the connection line from the correct node output to the Loop Over Items input.
Help me fix my Loop Over Items node connection in n8n.
Add an AI Agent node with OpenRouter
The AI Agent node is the brain of your scoring system. It connects to a chat model via OpenRouter and uses your system prompt to evaluate each job.
- Click the + connector on the Loop Over Items node's second output (the loop body output, not the "done" output).
- Search for AI Agent and select it.
- In the AI Agent node, click the + button under the Chat Model connector at the bottom of the node.
- Select OpenRouter Chat Model from the list of language models.
- In the OpenRouter Chat Model sub-node, select your OpenRouter credential from the Credential dropdown.
- Choose a model from the Model dropdown. For free usage, select a model like Qwen 3. For higher quality, select a paid model like Claude.
- Close the sub-node to return to the AI Agent node.
What is OpenRouter?
OpenRouter is a unified API gateway that gives you access to many different LLM providers through a single API key. Free models like Qwen 3 allow up to 50 free requests per day, which is more than enough for scoring 20 job listings.
Now configure the AI Agent's prompt settings and output format.
- In the AI Agent node, set the Prompt dropdown to Define below.
- In the Text field that appears, enter the following expression to pass the job data and resume into the prompt:
Job Description:
{{ $json.description || $json.title + ' at ' + $json.company }}
Candidate Resume:
{{ $('Form Trigger').item.json.resume }}
What does this expression do?
The expression pulls the job description from the current Loop Over Items iteration. It also reaches back to the Form Trigger node to grab the resume the user submitted at the start of the workflow.
The $json reference accesses the current item's fields. The $('Form Trigger').item.json.resume expression reaches a specific earlier node by name.
- Scroll down and toggle Require Specific Output Format to on.
- When the output parser connector appears, click it and add a Structured Output Parser sub-node.
Why use a Structured Output Parser?
The Structured Output Parser enforces a JSON schema on the model's response. This ensures downstream nodes can reliably access fields like match_score and resume_suggestions without worrying about inconsistent formatting.
For best results with agents, n8n recommends including the response structure in the System Message as well. You will do that in the next substep.
AI Agent not showing the Chat Model connector?
Make sure you added the AI Agent node (not a regular HTTP Request or OpenAI node). The AI Agent has sub-node connectors along the bottom for Chat Model, Memory, Tools, and Output Parser.
Help me find the Chat Model connector on my AI Agent node.
Configure the system prompt for job scoring
The system prompt tells the AI exactly how to analyze each job and what format to return. This is the most important piece of your scoring agent.
- In the AI Agent node, click Add Option at the bottom of the panel.
- Select System Message.
- Paste the following system prompt into the System Message field:
You are a job matching and resume optimization assistant. You will receive a job description and a candidate's resume.
Analyze the job against the resume and respond with ONLY a valid JSON object (no markdown, no explanation) in this exact format:
{
"match_score": <number 1-10>,
"matching_skills": ["skill1", "skill2"],
"missing_skills": ["skill1", "skill2"],
"resume_suggestions": [
"Add a bullet point under Experience: 'Built REST APIs serving 10K+ requests/day using Node.js and Express'",
"Include 'Docker' and 'Kubernetes' in your Skills section"
]
}
Scoring criteria:
- 9-10: Perfect match, candidate exceeds requirements
- 7-8: Strong match, candidate meets most requirements
- 5-6: Partial match, significant skill gaps exist
- 1-4: Weak match, major requirements unmet
For resume_suggestions, provide specific, actionable bullet points the candidate should add or modify. Reference the exact job requirements they should address.
What does this system prompt do?
The prompt defines the AI's entire behaviour. It enforces a strict JSON-only response (no markdown wrapping) so n8n can parse the output as structured data.
The scoring criteria give the model a consistent rubric. Without this, scores would be subjective and vary wildly between runs. The resume_suggestions field asks for specific, copy-paste-ready bullet points rather than vague advice.
- Close the AI Agent node panel.
- Connect the AI Agent node's output back to the Loop Over Items node's input to complete the loop. Drag a connection from the AI Agent output to the Loop Over Items node.
- Save your workflow by pressing Cmd+S (macOS) or Ctrl+S (Windows).
Your canvas should now show five nodes in sequence: Form Trigger, Run Apify Scraper, Fetch Dataset Items, Loop Over Items, and AI Agent (with a loop-back connection).
Workflow not saving?
Check that the AI Agent node has a Chat Model sub-node connected. n8n shows a warning icon on the AI Agent if a required connection is missing. Hover over the warning to see the specific issue.
Help me fix the warning on my AI Agent node.
✔️ Awesome, I've got everything!
Great. Make sure you have saved your workflow before moving on.
ⓧ I'd like to double check the full setup
Your workflow should have these 5 nodes connected in order:
- Form Trigger (Resume, Target Role, Location fields).
- HTTP Request: Run Apify Scraper (POST to Apify actor run endpoint).
- HTTP Request: Fetch Dataset Items (GET dataset items).
- Loop Over Items (Batch Size: 1).
- AI Agent (OpenRouter Chat Model sub-node, System Message with the scoring prompt, Prompt set to Define below with the job description and resume expression).
The AI Agent's output connects back to Loop Over Items to complete the loop. Here is the full system prompt for reference:
You are a job matching and resume optimization assistant. You will receive a job description and a candidate's resume.
Analyze the job against the resume and respond with ONLY a valid JSON object (no markdown, no explanation) in this exact format:
{
"match_score": <number 1-10>,
"matching_skills": ["skill1", "skill2"],
"missing_skills": ["skill1", "skill2"],
"resume_suggestions": [
"Add a bullet point under Experience: 'Built REST APIs serving 10K+ requests/day using Node.js and Express'",
"Include 'Docker' and 'Kubernetes' in your Skills section"
]
}
Scoring criteria:
- 9-10: Perfect match, candidate exceeds requirements
- 7-8: Strong match, candidate meets most requirements
- 5-6: Partial match, significant skill gaps exist
- 1-4: Weak match, major requirements unmet
For resume_suggestions, provide specific, actionable bullet points the candidate should add or modify. Reference the exact job requirements they should address.
Your AI scoring engine is wired up. Next, you will filter for high-match jobs and log the results to your Google Sheet so you have a clean application tracker.
Log Results to Google Sheets
Your AI Agent is now scoring jobs and generating resume suggestions. The next challenge is making sure only the best matches reach your attention.
In this step, you will filter out low-scoring jobs and automatically log the high-match results into your Google Sheets tracker. This turns raw AI output into an organized job application dashboard.
In this step, get ready to:
- Add an IF node to filter jobs scoring 7 or higher.
- Connect a Google Sheets node to log high-match jobs with all relevant details.
- Test the full workflow end-to-end with your real resume.
Add an IF node to filter high-match jobs
Not every job the scraper finds will be a good fit. You only want jobs that score 7 or above to land in your tracker. The IF node splits your workflow into two paths based on a condition.
- Click the + button on the right side of your AI Agent node to add a new node.
- Search for If and select it from the results.
- In the IF node's Conditions section, click Add condition.
- Select Number as the data type from the dropdown.
- In the first value field, click the Expression tab and enter {{ $json.match_score }} to reference the score from the AI Agent's output.
- Set the comparison to is greater than or equal to.
- Enter 7 as the value to compare against.
What does this node do?
The IF node evaluates each job's match_score from the AI Agent's JSON response. Jobs scoring 7 or higher flow out of the true output. Jobs below 7 exit through the false output and are discarded.
This keeps your Google Sheet focused on strong opportunities instead of cluttered with weak matches.
Not seeing match_score in the expression editor?
Make sure the AI Agent node has been executed at least once. The IF node needs upstream data to populate the expression editor's suggestions.
If you still don't see it, type the expression {{ $json.match_score }} manually. It will resolve when the workflow runs.
help me configure the IF node condition for match_score
Connect a Google Sheets node to log results
Now you will send every job that passes the filter into your Google Sheet. The Google Sheets node appends a new row for each high-match job with all the details you need.
- Click the + button on the true output (right side) of the IF node.
- Search for Google Sheets and select it.
- Set Operation to Append Row.
- Under Credential to connect with, select your Google Sheets OAuth2 credential from earlier.
- In the Document field, select By URL or From list and choose your Job Search Tracker spreadsheet.
- In the Sheet field, select Sheet1 (or whatever your sheet tab is named).
- Set Mapping Column Mode to Map Each Column Manually.
Now map each column to the correct data from your workflow:
- Set Job Title to the job title field from the scraped data (use an expression like {{ $json.title }}).
- Set Company to {{ $json.company }}.
- Set Location to {{ $json.location }}.
- Set Salary to {{ $json.salary }}.
- Set Source to {{ $json.source }} (e.g. linkedin, indeed, naukri).
- Set Match Score to {{ $json.match_score }}.
- Set Resume Suggestions to {{ $json.resume_suggestions }}.
- Set Apply URL to {{ $json.url }}.
- Set Date Found to the expression {{ $now.toFormat("yyyy-MM-dd") }} to stamp today's date on each row.
What does this configuration do?
The Append Row operation adds a new row to your spreadsheet for every job that passes the IF node's filter. Map Each Column Manually gives you full control over which workflow data maps to which spreadsheet column.
The {{ $now.toFormat("yyyy-MM-dd") }} expression uses n8n's built-in Luxon date library to format the current date. This stamps each row with when the job was found.
Field names may vary by source
The exact field names in your scraped data (like title, company, url) depend on what the Apify actor returns. Check the output of your Fetch Dataset Items node to see the exact field names available. You can drag fields from the expression editor's left panel.
Google Sheets node showing an error?
Make sure you selected the correct credential and that your Google account has edit access to the spreadsheet.
Check that the column names in your spreadsheet exactly match what you typed in the mapping. Column names are case-sensitive.
help me fix my Google Sheets Append Row configuration in n8n
Test the complete workflow
The entire pipeline is now connected. Time to run it end-to-end with your actual resume to see real results flow into your Google Sheet.
- Click Test workflow in the top right corner of the n8n canvas.
- n8n will open your Form Trigger's URL in a new tab. If it doesn't, click the Test URL link shown in the Form Trigger node.
- Paste your actual resume text into the Resume field.
- Enter your target role in the Target Role field (e.g. Full Stack Developer).
- Enter your preferred location in the Location field (e.g. Bangalore).
- Click Submit and wait for the workflow to complete. This may take 2-3 minutes as Apify scrapes the job boards and the AI scores each result.
- Once the workflow finishes, open your Job Search Tracker spreadsheet in Google Sheets.
- You should see rows populated with job titles, companies, match scores of 7 or higher, and tailored resume suggestions for each position.
What should I see?
Your Google Sheet should have new rows with data across all 9 columns. Each row represents a job that scored 7 or above. The Resume Suggestions column contains specific advice on how to tailor your resume for that particular position.
If fewer than expected rows appear, that means most scraped jobs scored below 7 against your resume. This is normal and shows the filtering is working correctly.
No rows appearing in your spreadsheet?
Click on each node in sequence and check the OUTPUT panel to find where data stops flowing. The most common issues are:
- The Apify scraper returned zero results. Check the HTTP Request nodes for error responses.
- All jobs scored below 7. Click the IF node and check its false output to see if all items ended up there. Try lowering the threshold to 5 temporarily to confirm data flows through.
- The AI Agent returned malformed JSON. Check the AI Agent's output to ensure it matches the expected format with match_score as a number.
help me debug why no data is reaching my Google Sheets node
Your automated job search agent is fully operational. You now have a pipeline that scrapes five job boards, scores each listing against your resume with AI, and logs only the best opportunities to your Google Sheet. Next up, you can extend this with scheduled automation in the Secret Mission.
Secret mission
Add Scheduled Automation with Notifications
Your workflow works great when you trigger it manually. But what if it could run on its own every 6 hours, skip jobs you've already seen, and ping you when it finds a great match?
Clean Up Your Resources
Clean Up Your Resources
Decide whether to keep your resources running, pause them to come back later, or delete them entirely.
Your n8n workflow is scheduled to run every 6 hours, which consumes Apify credits from your free tier. If you completed the Secret Mission, the workflow is currently active and using resources automatically.
Cost warning
Your active scheduled workflow consumes Apify compute units on each run. The Apify free plan includes $5/month in credits at $0.20 per Compute Unit.
If you leave the workflow active, it will run 4 times per day and gradually consume your monthly credits. Pause or delete the workflow if you are not actively using the results.
Resources you used:
- n8n workflow: "AI Job Search Agent" (active, scheduled every 6 hours).
- n8n credentials: Apify Header Auth, Google Sheets OAuth2, OpenRouter.
- Google Sheet: "Job Search Tracker" with job match data.
Keep everything running
No action needed. Choose this if you are still actively job searching and want the workflow to continue finding and scoring new listings.
- Your workflow will continue running every 6 hours, consuming Apify credits from your $5/month free tier.
- New high-match jobs will be appended to your Google Sheet and you will receive notifications.
- Your Apify account remains active with its free tier credits replenishing monthly.
- Your OpenRouter API key and n8n credentials remain configured for future workflows.
Pause - I'll come back to this later
Shut down the scheduled workflow to stop consuming Apify credits, but keep everything configured so you can reactivate later.
- In n8n, open the "AI Job Search Agent" workflow.
- Click the Active toggle in the top-right corner to deactivate the workflow.
- The toggle should switch from green to grey, confirming the schedule is paused.
- Your credentials, Google Sheet, and workflow configuration remain intact for when you return.
Delete - I don't want to use this again
Remove all project resources and start fresh. Follow each step below to fully clean up.
- In n8n, open the "AI Job Search Agent" workflow.
- Click the three-dot menu in the top-right corner and select Delete.
- Go to Credentials in the n8n left sidebar.
- Delete the following credentials: Apify Header Auth, Google Sheets OAuth2, and OpenRouter. Click the three-dot menu on each and select Delete.
- Open Google Drive in your browser, find the "Job Search Tracker" spreadsheet, right-click it, and select Move to trash.
That's a Wrap!
That's a Wrap!
Nice work! You just built a fully automated job search agent that scrapes multiple job boards, scores listings against your resume, and tells you exactly how to tailor your application for each opportunity.
You've learned how to:
- Built a multi-board job scraping pipeline using Apify that hits LinkedIn, Indeed, Naukri, Google Jobs, and Glassdoor in a single API call.
- Connected an AI model via OpenRouter to score job matches against your resume and generate structured resume tailoring suggestions using LLM-powered analysis.
- Automated results logging to a Google Sheet for organized job application tracking with match scores, missing skills, and actionable resume edits.
- Secret Mission: Added scheduled automation with deduplication and notifications so the workflow runs every 6 hours and alerts you to new high-match jobs.
Ready to quiz yourself?