Block 1 - On form submission
- Type / Role
- n8n-nodes-base.formTrigger - formTrigger
- Config choices
- Version 2.5
What This Workflow Does Upload a job posting (PDF, image, or screenshot) and instantly get a tailored CV section and a matching cover letter – both written in the posting's language and tone, both ...
n8n-nodes-base.formtrigger, n8n-nodes-base.googlesheets, n8n-nodes-base.code, @easybits/n8n-nodes-extractor.easybitsextractor, @n8n/n8n-nodes-langchain.googlegemini, n8n-nodes-base.form, n8n-nodes-base.googledocs, n8n-nodes-base.aggregate
This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by Felix.
Original n8n.io sourceUpload a job posting (PDF, image, or screenshot) and instantly get a tailored CV section and a matching cover letter – both written in the posting's language and tone, both honest about what you actually have. The workflow scores how well your stored CV matches the posting before and after AI rewriting, so you can see exactly how much keyword surfacing happened. Anything you don't actually have lands in a gaps array – never invented into bullets.
This workflow assumes a populated Master CV Google Sheet. If you haven't run the CV Onboarding (easybits) workflow yet, do that first – it'll extract your CV into the right structure.
On n8n Cloud the easybits Extractor is available out of the box. On self-hosted n8n, install it via Settings → Community Nodes → enter @easybits/n8n-nodes-extractor.
Sign up at easybits.tech for a free API key. Open the easybits: Extract Job Posting node and connect your credential.
The Extractor uses 10 fields to pull structured data from the job posting. Paste each description into the corresponding field's description box:
job_title (string)
The exact job title as written in the posting. If multiple titles are mentioned, return the primary one. Return null if not stated.
company (string)
The hiring company's name. Return null if not stated or if the posting is from a recruiter without naming the company.
seniority (string)
One of: intern, junior, mid, senior, lead, principal, executive. Infer from title and years-of-experience requirements. Return null only if there is no signal at all.
must_have_skills (array)
Skills, tools, or specific qualifications the posting explicitly lists as required, must-have, mandatory, or essential. Return as SHORT noun phrases (1-3 words each). Examples: "Python", "PostgreSQL", "Kafka", "5 years experience", "fluent German". DO NOT return full sentences or full requirements. Break compound requirements into individual atoms – e.g., "Solid understanding of testing, monitoring, and profiling" must be returned as three separate items: "testing", "monitoring", "profiling". DO NOT include soft skills like "problem-solving" or "attention to detail". Return empty array if none are explicitly required.
nice_to_have_skills (array)
Skills listed as preferred, bonus, plus, nice-to-have, or "ideally". Same format as must_have_skills. Return empty array if none.
responsibilities (array)
Concrete duties or tasks the role involves, as short action phrases. Maximum 8 items. Empty array if the posting is purely qualifications-focused.
keywords (array)
Domain-specific terms, technologies, methodologies, or industry vocabulary worth mirroring in a CV. Exclude generic words like "team player". Maximum 15 items.
tone (string)
Writing style of the posting. One of: formal, professional, casual, technical.
language (string)
ISO 639-1 code of the posting's primary language (e.g., "en", "de", "nl").
location (string)
Work location as stated. Include "remote", "hybrid", or city/country. Null if not stated.
The 10-field cap matches the easybits free plan, so anyone can run this workflow as-is.
Open the Load Master CV node and connect your Google Sheets credential. Replace the placeholder document ID with your Master CV sheet's ID and select the Master CV tab.
Open both Gemini nodes (Gemini: Tailor Bullets and Gemini: Cover Letter) and connect your Google AI / Gemini credential. Default model: gemini-2.5-pro.
Open both Create Google Doc and Write to Google Doc nodes, connect your Google Docs credential. In Create Google Doc, pick a Drive and Folder where tailored applications should be saved (a dedicated folder is recommended).
Set the workflow to active, copy the form URL, and upload a real job posting. The completion screen returns the score delta and a link to the generated Google Doc.
Honesty guardrail. Both Gemini prompts forbid inventing experience. Skills the CV genuinely lacks land in a gaps array, surfaced on the completion screen – never faked into bullets or claimed in the cover letter.
Deterministic scoring. The before/after match score is calculated in JavaScript, not by an LLM. The same formula runs against the original CV and the tailored bullets, so the delta reflects real keyword surfacing – not AI claiming it improved things. Must-haves count double in the formula; keywords count single.
Defensive parsing. The toArray() helper in the Score nodes handles three shapes the Extractor may return for array fields: actual arrays, JSON strings, and comma-separated strings. This makes the workflow robust across different Extractor response shapes.
Language and tone. Both come from the Extractor as structured fields, so a German posting yields a German CV section AND a German cover letter – automatically.
This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.
Showing the first 24 of 27 workflow blocks. Download the JSON for the full node graph.
| Workflow | Tailor your CV and cover letter to each job with easybits and Gemini |
|---|---|
| Complexity | advanced |
| Nodes | 27 |
| Categories | Personal Productivity, Multimodal AI |
| Author | Felix |
| Published | 07 May 2026 |
Use the JSON export at /data/workflows/15526/15526.json as the source template for this automation.
Open n8n, import the downloaded JSON, and review each node before activating the workflow.
Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.
Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.
Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.
Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.
Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.
What This Workflow Does Upload a job posting (PDF, image, or screenshot) and instantly get a tailored CV section and a matching cover letter – both written in the posting's language and tone, both ...
Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.
Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your Personal Productivity, Multimodal AI use case.