Skip to content
FlowHubFluxonLab
C
AI Automationfree

Score job listings and generate tailored cover letters with Apify, OpenAI and Google Sheets

by theworkflowdevadapted from n8n official workflow galleryUpdated Aug 2026
RequiresCCodeGmailGmailGoogle DocsGoogle DocsGoogle SheetsGoogle SheetsHTTP RequestHTTP RequestOpenAI
Share Post Share
MaManual triggerSeSet: Google Jobs configSet: Google Job…ApApify: run Google Jobs actorApify: run Goog…ApApify: get Google Jobs datasetApify: get Goog…CoCode: normalise Google JobsCode: normalise…MeMerge: platform resultsMerge: platform…SeSet: Career Site API configSet: Career Sit…ApApify: run Career Site API actorApify: run Care…ApApify: get Career Site datasetApify: get Care…CoCode: normalise Career Site APICode: normalise…ScSchedule triggerSeSet: batch completeSet: batch comp…Google Sheets: check if job existsGoogle Sheets: …SeSet: restore job dataSet: restore jo…IfIF: already in sheet?IF: already in …SILoop: process batchLoop: process b…IfIF: apply URL present?IF: apply URL p…IfIF: description >= 200 chars?IF: description…IfIF: mid-level or senior?IF: mid-level o…Google Docs: GET base resumeGoogle Docs: GE…OpenAI: score job relevanceOpenAI: score j…CoCode: parse + validate score JSONCode: parse + v…FiFilter: valid score onlyFilter: valid s…IfIF: score >= 7?OpenAI: write cover letterOpenAI: write c…SeSet: store cover letterSet: store cove…IfIF: score >= 8?OpenAI: write tailored resumeOpenAI: write t…Google Docs: create resume docGoogle Docs: cr…Google Docs: update doc contentGoogle Docs: up…HRHTTP: make resume doc publicHTTP: make resu…SeSet: resume URLSeSet: no resume URLSet: no resume …Google Sheets: append or update rowGoogle Sheets: …ErError: catch allSeSet: format error messageSet: format err…MeMerge: error outputsMerge: error ou…Gmail: send error notificationGmail: send err…SeConfigure Workflow VariablesConfigure Workf…
1/5
FLOWS
STEPS · 41
Run manually by an operator

Quick overview This workflow runs on a schedule to scrape job listings via Apify (Google Jobs and Career Site API), scores each role against your base resume using OpenAI, generates tailored cover letter and optionally a tailored resume in Google Docs, and logs the results to Google Sheets with Gmail error alerts. How it works Runs on a schedule (with an optional manual test trigger) and loads your search query and Google IDs from the configured variables. Uses Apify actors to scrape jobs from Google Jobs and the Career Site API, then normalizes and merges both result sets into a single list. Processes jobs in batches and skips listings that already exist in Google Sheets (matched by Apply URL), have no apply link, have short descriptions, or don’t meet the seniority criteria. Fetches your base resume from Google Docs and sends the resume plus job details to OpenAI to score relevance from 1–10 with a one-sentence rationale. For jobs scoring 7+, uses OpenAI to generate a personalized cover letter from the job description and your resume.

Tags

n8nreference-onlygmailgoogle-docsgoogle-sheetsopen-ai
Connects
CCodegmailGmailgoogledocsGoogle DocssheetsGoogle SheetsWHTTP RequestOpenAI
CategoryAI Automation
Triggermanual
Complexityadvanced
Nodes39
AddedJun 23, 2026

Related workflows

See all AI Automation
ACgmailsheets
free

Screen LinkedIn jobs and send tailored applications with Apify and OpenAI

Quick overview This workflow collects your job preferences via an n8n form, uses Apify to scrape LinkedIn job listings, and has OpenAI screen and rank them. After you approve a shortlist by Gmail, it generates tailored resume and cover-letter PDFs with DocRaptor, emails them to you, and logs matches to Sheets How it works Receives your job preferences and resume text through an n8n form submission. Sends the preferences to Apify to scrape recent LinkedIn jobs, then removes duplicates and obvious mismatches (seniority, years of experience, and location). Uses OpenAI to score each job’s relevance and eligibility and returns a JSON verdict with a fit score and short reason. Keeps the top matches above the configured threshold and emails you a shortlist in Gmail with approve/decline buttons. If you approve, uses OpenAI to draft a job-specific resume and cover letter from only the provided profile text and generates HTML interview prep questions. Converts the resume and cover letter HTML into PDFs via DocRaptor, emails the tailored application package to you in Gmail, and appends the match details to a Google Sheets tracker. Setup Add credentials for OpenAI, Gmail OAuth2, Google Sheets

by Dr. Firas
BCgmail
free

Verify Japanese invoice registration numbers from Gmail using Gemini, NTA API, Sheets and Slack

Quick Overview This workflow monitors Gmail for unread invoice emails with PDF attachments, extracts invoice details with Google Gemini, verifies Japanese qualified invoice registration numbers against the National Tax Agency (NTA) Invoice Web-API, logs results to Google Sheets, and sends Slack alerts for invalid, missing, or inconclusive checks. How it works Polls Gmail hourly for unread emails matching “has:attachment invoice” and downloads the first attachment. Extracts text from the attached invoice PDF. Uses Google Gemini to parse the invoice text into structured fields such as the T-registration number, issuer name, invoice date, and amounts. Normalizes and validates the registration number to ensure it matches the required “T + 13 digits” format. If the format is valid, calls the NTA Invoice Web-API to verify the registration number and interprets the response as valid, invalid, or not found. Appends the invoice details and verification status to a Google Sheets worksheet. Routes the outcome by sending the appropriate Slack alert for invalid/not found/inconclusive results or marking the invoice email as read when the number is valid. Setup Connect your Gmail OAuth2 credentia

by Oka Hironobu
BCgmail
free

Check Japanese ad copy compliance with Google Gemini, Sheets, Slack and Gmail

Quick Overview This workflow runs daily to review Japanese ad copy in Google Sheets using Google Gemini, writes compliance risk results back to the sheet, and alerts the right team in Slack (and drafts a Gmail revision request) based on high/medium/low risk. How it works Runs every day at 9:00 on a schedule. Reads ad copy rows from Google Sheets to find items that still need a compliance check. Sends each copy item to Google Gemini with the configured product category, target laws, and extra rules to generate a risk level, violations, and a compliant rewrite. Parses and normalizes the Gemini output into fields like risk level, violation count, and safe rewrite, and posts a Slack alert if the AI check fails. Updates the corresponding Google Sheets row with the compliance results to keep a record of the review. Routes the item by risk level and posts to Slack for legal blocking (high), marketing review (medium), publish-ready notification (low), or manual review when the result is inconclusive. For high-risk copy, also creates a Gmail draft requesting the author to revise the copy using the suggested compliant rewrite. Setup Add credentials for Google Sheets, Google Gemini (PaLM) API

by Oka Hironobu