Huashu Design
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
An n8n workflow for job hunting. A form takes a place, a job title and your CV as a PDF. Apify collects LinkedIn listings, and gpt-4o-mini rates each against your CV and writes a cover letter, all saved to Google Sheets.
LinkedIn job search with a cover letter for each role is an n8n workflow in the Productivity category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Job search form
It starts when someone sends the Job Search form with:
A sheet of open roles, each with its link, company, description and a cover letter to edit
What you need before you start.
Job scraping
Runs a LinkedIn jobs Actor with your place and title, and returns each listing with its link, company, description and date.
NeedsApify API token, typed into the node’s header, and credit for the run
Language model
Runs gpt-4o-mini twice for each job: once to rate the fit and once to write the letter.
NeedsOpenAI API key
Job sheet
Adds a row for each job, or updates the row that has the same link.
NeedsA Google account to sign in with, and a sheet with six headers
Checked by Mindket on 13 Nov 2026
This n8n workflow looks for open jobs on LinkedIn and drafts a cover letter for each one from your CV. A form takes a place, a job title and your CV as a PDF, and an Apify Actor collects the listings that match. For every job, gpt-4o-mini rates how well the CV fits, then writes a letter. Google Sheets keeps one row for each job, with its link, company, description, date and letter. Eight working nodes and one sticky note make it up.
People applying to many similar roles who want a first draft for each, and the coaches and recruiters who help them. Skip it if you only want letters for the best matches. The file rates every job, writes a letter for each one anyway and saves no rating.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Software and data | Job seekers | Search one title in one city each week and edit the new letters | A data analyst searches Berlin every Monday and sends the two letters worth sending. |
| Career coaching | Coaches | Run a client’s CV through the form and go over the drafts together | A coach shows a client how the same CV reads against five different roles. |
| University careers | Careers advisers | Run it for a graduate who is unsure where to apply | An adviser runs it for a graduate and picks three roles from the rows. |
| Recruitment | Agency recruiters | Search a title before calling a candidate | A recruiter lists the open roles in one city and keeps the sheet as a shortlist. |
You need some n8n and three accounts: Apify, OpenAI and Google. Its author puts setup at about 13 minutes, with the accounts ready.
Any n8n that can reach Apify, OpenAI and Google will run it. The jobs and their letters land in one Google Sheet.
Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Make the sheet first, since the last node writes to it.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| Apify | An account and its API token, with credit for the LinkedIn jobs Actor |
| OpenAI | An API key. Both model steps use gpt-4o-mini |
| An account that can edit the sheet, for a Google Sheets OAuth2 credential | |
| A sheet | A tab named Sheet1 with six headers in row 1: Link, Title, Job Description, Date, Company Name and Cover Letter |
workflow.json./d/ and /edit.Google Sheets1 and replace YOUR_SHEET_ID with the ID.OpenAI4 and OpenAI3.Linkedin Job Scrapper, replace <YOUR_APIFY_TOKEN> in the Authorization header with your token. The brackets go too, so the header reads Bearer, a space and the token.Open the form, type a place such as a city or a country, then the job title, and attach your CV as a PDF. The form confirms at once. Behind it, Apify has to finish the whole search before anything else happens, so the first row can take a few minutes. Each job then costs two model calls. A later run with the same search updates the rows that share a link and writes their letters again.
| To change | Where |
|---|---|
| What counts as a good fit | The system message of OpenAI4, which hands out points for skills, level, remote work and past roles |
| The letter’s tone and length | The system message of OpenAI3, a single line |
| What is searched | The JSON body of Linkedin Job Scrapper, which sends only the place and the title |
| Saved columns | The mapping of Google Sheets1. Benefits is kept in Edit Fields1 but never saved |
| Model | gpt-4o-mini in OpenAI4 and OpenAI3 |
You send the form with these answers.
Location: Manchester, United Kingdom Title: Marketing coordinator Your Resume: cv.pdf
Apify returns the marketing coordinator roles it finds around Manchester. For each one, OpenAI4 answers with a rating and OpenAI3 with a letter, in these two shapes:
{ "score": "…" }
{ "cover_letter": "…" }Each role becomes a row with its link, title, description, date posted, company and letter. The rating stays in the run’s data. No column takes it.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Here Loop Over Items sends one job at a time down the line and takes it back after the sheet. Try a narrow search first. Every node then shows what it got and sent, which is where a wrong token or a scanned CV turns up.
For experts. The two model steps are plain OpenAI calls with JSON output, not agents, so each job costs exactly two requests.
| Step | Model or service | What to know |
|---|---|---|
Linkedin Job Scrapper | An Apify Actor, called by its ID | A synchronous call through Apify’s residential proxies. Apify’s API reference gives such a call 300 seconds |
OpenAI4 | gpt-4o-mini | Reads the job as JSON beside the CV’s text. Its prompt asks for a score out of 5, while its points add up to 10 |
OpenAI3 | gpt-4o-mini | Reads the title, description, company, place and CV, and answers with cover_letter |
To keep the rating, add a Score header and map {{ $('OpenAI4').item.json.message.content.score }} to it in Google Sheets1. An If node after OpenAI4 can then skip the weak matches.
Every job costs two model calls, and two gaps in the file change what you get.
OpenAI4 rates each job, but nothing reads its answer, and a letter is written for every jobExtract from File reads the text layer of a PDF. A scanned CV gives the models nothing to readgpt-4o-mini-2024-07-18) for removal from the API on 14 January 2027, with gpt-6-luna as its replacementAn n8n workflow for job hunting. Send a form with a place, a job title and your CV as a PDF. An Apify Actor collects
matching LinkedIn listings, gpt-4o-mini rates each one against your CV and writes a cover letter, and every job lands
in a Google Sheet.
workflow.json: the workflow as n8n exports it, nine nodes, one of them a sticky note. It holds no credential.README.md: these notes.Linkedin Job Scrapper held a bare placeholder. It now reads <YOUR_APIFY_TOKEN>.Google Sheets1 asks for YOUR_SHEET_ID and finds its tab by the name Sheet1.BHzefUZlZRKWxkTck. Read its page in Apify Store first: some Actors there charge a monthly rental on top of usage.Sheet1 and these headers in row 1: Link, Title,Job Description, Date, Company Name, Cover Letter.workflow.json./d/ and /edit.Google Sheets1 and replace YOUR_SHEET_ID with the ID.OpenAI4 and OpenAI3.Linkedin Job Scrapper, replace <YOUR_APIFY_TOKEN> in the Authorization header with your token. TheOn form submission takes Location, Title and Your Resume. All three are required.Extract from File reads the PDF's text.Linkedin Job Scrapper posts the place and the title to the Apify Actor and waits for its listings.Loop Over Items sends one job at a time on. Edit Fields1 keeps its link, title, description, date posted,OpenAI4 rates the job against the CV's text and answers with score.OpenAI3 writes the letter from the job and the CV and answers with cover_letter.Google Sheets1 adds the row, or updates the one with the same Link. Then the loop takes the next job.OpenAI4 rates every job, but nothing reads its answer: the sheet has no column for it, and a letter is written
whatever the score. To keep it, add a Score header and map this to it in Google Sheets1:
{{ $('OpenAI4').item.json.message.content.score }}
To skip weak matches, put an If node between OpenAI4 and OpenAI3 and send the low scores back toLoop Over Items. The prompt asks for a score out of 5, while its points add up to 10, so settle on one scale in the
prompt before you filter on it.
OpenAI4. It hands out points for matching skills, the right level, aOpenAI3, a single line asking for a letter shaped to the job.Linkedin Job Scrapper, which sends the place and the title. The Actor's page listsGoogle Sheets1. Benefits is kept in Edit Fields1 and never saved.gpt-4o-mini.gpt-4o-mini calls, and Apify bills the Actor's run.Extract from File reads a PDF's text layer. A scanned CV gives the models no text.gpt-4o-mini-2024-07-18) for removal fromgpt-6-luna as its replacement. Change the model in both OpenAI nodes beforeREADME.md 5 KB workflow.json 12 KB
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
op7418 · Skill
Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…
alirezarezvani · Skill
Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…
zarazhangrui · Skill
Builds HTML presentations from scratch or from a PowerPoint file and shows visual style previews to pick from, for people who want web slides with no CSS or Ja…
iptv-org · Kit
Collects publicly available live TV channels from many countries into playlists that any video player with live streaming can open. Made for viewers and for de…
uwg · Kit
Holds a set of image upscaling models gathered from the OpenModelDB community, for people who want to enlarge low-resolution pictures with AI on their own comp…