JobMatchAI is a Typescript application that can input a LinkedIn/ZipRecruiter/Indeed URL, read the jobs from that webpage, then remove irrelevant and unqualified jobs using ChatGPT. This saves your effort as a job seeker by only applying to the relevant jobs.
Output:
Tutorial: https://www.youtube.com/watch?v=eRQZALTfbp4
- Node.js (v16 or higher)
- NPM or Yarn
- Google Cloud Service Account credentials for accessing Google Sheets
- ChatGPT or Deep-seek API Key
- Apify API Key
-
Clone the repository:
git clone [email protected]:USERNAME_HERE/JobMatchAI.git cd JobMatchAI
-
Install dependencies:
npm install
-
Make a copy of this Google Spreadsheet and delete all the rows https://docs.google.com/spreadsheets/d/1x1e6GtfTl7LYh65MhVQtKApvwfsIdhXpFGPmXd57C8c/edit?gid=1330056534#gid=1330056534 In case the link is dead, the the columns in the spreadsheet are:
- Job Title
- Company
- Location
- Job URL
- Pay
- Full-time/Contract
- Source
- Candidate Meets Job Requirements
- Job Meets Candidate Requirements
- Previous Columns Multiplied
- Date Generated
- Reasons for score
-
Edit the sharing settings of the Google Sheet to allow the service account to read and write to the sheet. Or just allow everyone with the link to read and write to the sheet.
-
Set up environment variables: Rename the
.env.examplefile to.envand add your API keys:Note: The Deepseek part of the program is not finished. Start with OpenAI.
APIFY_API_KEY=[apify api key] SPREADSHEET_ID=[google sheet spreadsheet id] DEEPSEEK_API_KEY=[deep-seek ai api key] OPENAI_API_KEY=[open ai api key] USE_GPT=[true or false] USE_DEEPSEEK=[true or false] DEBUG_MODE=[true or false]
-
Sign up for Apify and start the Basic subscription.
-
Modify the Apify Job Scraper API Inputs
- For LinkedIn, go to https://console.apify.com/actors/hKByXkMQaC5Qt9UMN/input, fill in the form, then click "JSON" at the top of the page, and copy it into the local file "apify_inputs/hKByXkMQaC5Qt9UMN_production_assistant_US.json"
- For ZipRecruiter, go to https://console.apify.com/actors/vQO5g45mnm8jwognj/input, fill in the form, then click "JSON" at the top of the page, and copy it into the local file "apify_inputs/vQO5g45mnm8jwognj_video_producer_SF.json"
- For Indeed, go to https://console.apify.com/actors/qA8rz8tR61HdkfTBL/input, fill in the form, then click "JSON" at the top of the page, and copy it into the local file "apify_inputs/qA8rz8tR61HdkfTBL_videographer_SF.json"
- You can add add more json files in the apify_inputs directory. You can add multiple json files to run multiple Apify jobs in parallel. The file names have to start with the actor ID (e.g. hKByXkMQaC5Qt9UMN)
-
Rename "candidate_summary.example.txt" to "candidate_summary.txt" and add your resume and job preferences.
Work Experience: Education: Hobbies: Job Preferences: - Preferred Locations: Bay Area + 100 miles, Los Angeles area + 100 miles, San Diego area + 100 miles, New York area + 100 miles. Second choice is US west coast. - Not a student so ignore internships unless it says something like "school enrollment not required" - Not a manager so ignore supervisor/director positions - Languages: English -
Go to Google Cloud Console and create a service account and download the google_service_account_credentials.json file and put it in this directory.
Compile the Typescript:
npx tsc --watch
In another terminal, start the application:
node dist/index.jsContributions are welcome! Please fork this repository and submit a pull request for review.

