LinkedIn to Google Docs, tailored resumes ready
Applying for jobs shouldn’t feel like running a small factory. But it usually does: find a role, copy the description somewhere, tweak your resume, hunt down a contact, then write yet another “just checking in” email.
Job seekers feel it first. A career coach supporting multiple clients gets buried in it too. Even a busy founder quietly looking for the next move runs into the same wall. This LinkedIn resume automation turns one manual, error-prone process into a repeatable system that produces tailored resumes and ready-to-send drafts.
Below you’ll see how the workflow works, what it replaces, and what you can tweak so the output still sounds like you (not a robot).
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: LinkedIn to Google Docs, tailored resumes ready
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Get a document", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Message a model", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Message a model1", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Limit1", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/markdown.dark.svg' width='40' height='40' /></div><br/>Markdown"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request1"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Create a document", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request2"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter1", pos: "b", h: 48 }
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Create a draft", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Share file", pos: "b", h: 48 }
n4 --> n3
n5 --> n7
n7 --> n6
n12 --> n13
n8 --> n10
n14 --> n9
n2 --> n4
n9 --> n11
n11 --> n12
n1 --> n2
n3 --> n5
n6 --> n8
n10 --> n14
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3,n6 ai
class n5,n12 decision
class n2,n9,n11 api
classDef customIcon fill:none,stroke:none
class n2,n8,n9,n11 customIcon
The Problem: Tailoring Applications Takes Forever
Most people don’t lose opportunities because they’re unqualified. They lose them because the application process is a grind. You read a LinkedIn post, open three tabs, try to match your resume bullets to the job description, then second-guess every line because it all starts sounding the same. After that comes the hardest part: finding a real decision-maker email and writing outreach that doesn’t feel like spam. Do this a few times and you either burn your evenings, or you stop tailoring and start spraying.
It adds up fast. And the work is repetitive in the worst way.
- You end up rewriting the same resume sections over and over, which steals time from actually preparing for interviews.
- Manual copy-paste creates sloppy mistakes like the wrong company name or an outdated project line.
- Finding a CEO or hiring manager email can take 15 minutes per role, then you still don’t know if it’s valid.
- Your outreach emails drift in tone and structure, so your “personal brand” looks inconsistent across applications.
The Solution: LinkedIn → Tailored Docs → Gmail Drafts
This n8n workflow runs like a personal AI recruiter, but you stay in control. You launch it manually, it reads your “Master Resume” from Google Docs, then pulls live job listings from LinkedIn via an external scraping actor (Apify) based on the keywords you choose. Next, it uses an OpenAI model to screen the job description against your skills and discards roles that aren’t a fit, so you’re not wasting energy on long shots you’d never accept. For the roles that pass, the workflow rewrites your resume specifically for that job, generates a fresh Google Doc, and sets the right sharing permissions. Finally, it looks up a verified decision-maker email and creates a personalized Gmail draft with the resume link ready to send.
The workflow starts with your resume as the source of truth in Google Docs. Then it narrows LinkedIn roles down to a shortlist, tailors a version of your resume for each, and drops a draft email into Gmail so you can review and hit send. Nothing gets sent automatically, which honestly is the right call for job hunting.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you target 10 LinkedIn roles each week. Manually, you might spend about 20 minutes reading and deciding, 45 minutes tailoring your resume, and 15 minutes finding a contact and writing outreach. That’s roughly 80 minutes per role, or around 13 hours a week. With this workflow: you kick it off once, let it screen and shortlist, and you review the Google Docs and Gmail drafts at the end. Most people get that weekly batch down to about 1–2 hours of review time, depending on how picky you are.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Docs / Google Drive to read and create resume files
- Gmail to generate drafts in your Drafts folder
- Apify account to run the LinkedIn Job Scraper actor
- OpenAI API key (get it from the OpenAI API dashboard)
- Anymail Finder API key (get it from your Anymail Finder account)
Skill level: Intermediate. You’ll connect accounts, paste in your master resume, and adjust one LinkedIn search input without breaking the workflow.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You launch the workflow manually. That trigger is intentional, because job applications are high-stakes and you’ll want control over when it runs.
Your master resume is pulled from Google Docs. The workflow grabs a single source document, so every tailored version starts from the same baseline instead of whatever file you edited last week.
LinkedIn roles are fetched, then screened by AI. An external job API call pulls listings (via Apify), a limit node keeps volume sane, then an OpenAI model checks fit and filters out roles that don’t match your skills and preferences.
It generates the outputs you actually need. A second OpenAI step rewrites the resume for the shortlisted role, converts it to clean HTML, creates a new Google Doc, shares it, and then prepares a Gmail draft after enriching a decision-maker email.
You can easily modify the search keywords and screening criteria to match your niche, so you’re not stuck chasing generic roles. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow manually so you can validate the end-to-end job outreach process before automating further.
- Add the Manual Launch Trigger node as the starting trigger.
- Click Execute Workflow to run a test once configuration is complete.
- Keep Flowpast Branding as an optional sticky note for documentation and team context.
Step 2: Connect Google Docs and Pull Source Resume
Fetch the base resume content that will be tailored for each shortlisted job.
- Open Fetch Source Document and set Operation to
get. - Set Document URL to
[PASTE_YOUR_GOOGLE_DOC_ID_HERE]. - Credential Required: Connect your Google Docs OAuth2 API credentials in Fetch Source Document.
⚠️ Common Pitfall: Ensure the document ID is valid and accessible to the connected Google account, otherwise downstream resume tailoring will fail.
Step 3: Set Up Job Intake, Filtering, and Shortlisting
Pull job listings, limit the batch size, and filter to only roles that match your criteria.
- Configure External Job API Call with Method set to
POSTand URL set tohttps://api.apify.com/v2/acts/hKByXkMQaC5Qt9UMN/run-sync-get-dataset-items. - Set JSON Body in External Job API Call to the provided payload, including
"count": 100and the LinkedIn URL. - Set Header Parameters in External Job API Call to include
Authorization: Bearer [CONFIGURE_YOUR_TOKEN]andAccept: application/json. - Open Restrict Items and set Max Items to
10. - In AI Fit Screening, keep JSON Output enabled and verify the prompt includes
{{ $json.toJsonString() }}. - Credential Required: Connect your OpenAI credentials in AI Fit Screening.
- Configure Filter Suitable Roles with conditions:
{{ $json.message.content.verdict }}equalstrueand{{ $('Restrict Items').item.json.companyWebsite }}is not empty. - Set Cap Shortlist to Max Items
4.
⚠️ Common Pitfall: The filter uses {{ $json.message.content.verdict }}. If your AI response format changes, the filter will stop passing items.
Step 4: Set Up AI Resume Tailoring and Document Generation
Generate a tailored resume in Markdown, convert it to HTML, then create and share the Google Doc.
- In AI Resume Tailoring, confirm the prompt references
{{ $('Restrict Items').item.json.toJsonString() }}and{{ $('Fetch Source Document').item.json.content }}. - Credential Required: Connect your OpenAI credentials in AI Resume Tailoring.
- Set Convert to HTML to Mode
markdownToHtmlwith Markdown set to{{ $json.message.content }}. - Configure Generate Resume Doc with Title
Tailored Resume - [Candidate Name]and Folder IDdefault. - Credential Required: Connect your Google Docs OAuth2 API credentials in Generate Resume Doc.
- In Share Drive File, set Operation to
shareand confirm File ID is{{ $json.id }}. - Credential Required: Connect your Google Drive OAuth2 credentials in Share Drive File.
- Configure Upload HTML Content with Method
PATCH, URL{{ 'https://www.googleapis.com/upload/drive/v3/files/' + $('Generate Resume Doc').item.json.id + '?uploadType=media' }}, and Body{{ $('Convert to HTML').item.json.data }}. - Credential Required: Connect your Google Docs OAuth2 API credentials in Upload HTML Content.
Step 5: Configure Email Lookup and Draft Creation
Find a decision maker’s email, validate it, and draft a Gmail outreach message.
- In Lookup Decision Maker Email, set URL to
https://api.anymailfinder.com/v5.1/find-email/decision-makerand Method toPOST. - Set body parameters: domain to
{{ $('Restrict Items').item.json.companyWebsite }}and decision_maker_category toceo. - Set header parameter Authorization to
[CONFIGURE_YOUR_API_KEY]. - Configure Validate Email Result to pass when
{{ $json.email }}is not empty. - In Compose Gmail Draft, set Resource to
draftand confirm the Subject uses{{ $('Restrict Items').item.json.title }}. - Verify the Message body uses
{{ $json.person_full_name.split(" ").first() }},{{ $('Restrict Items').item.json.companyName }}, and{{ $('Fetch Source Document').item.json.documentId }}. - Credential Required: Connect your Gmail OAuth2 credentials in Compose Gmail Draft.
Step 6: Test and Activate Your Workflow
Validate each node and then enable the workflow for production use.
- Click Execute Workflow on Manual Launch Trigger to run a full test.
- Confirm the flow progresses in order: Fetch Source Document → External Job API Call → Restrict Items → AI Fit Screening → Filter Suitable Roles → Cap Shortlist → AI Resume Tailoring → Convert to HTML → Generate Resume Doc → Share Drive File → Upload HTML Content → Lookup Decision Maker Email → Validate Email Result → Compose Gmail Draft.
- Verify that a new Google Doc is created, shared, and updated with the tailored resume content.
- Check Gmail drafts for the personalized outreach message and subject.
- Toggle the workflow Active when you’re ready to use it in production.
Common Gotchas
- Google Drive/Docs credentials can expire or need the right scopes. If docs aren’t being created or shared, check the n8n credential connection and Google account permissions first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- OpenAI prompts default to “polite generic resume voice.” Add a few lines that describe your tone and target role seniority early, or you will keep editing every version.
Frequently Asked Questions
About 45 minutes if you already have the accounts and API keys.
No. You’ll connect services in n8n and paste in your LinkedIn search input. The only “technical” part is checking that your credentials are set correctly.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI usage plus Apify and Anymail Finder fees, depending on how many roles you process.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Update the job search input in the “External Job API Call” request (your LinkedIn search URL/criteria), then adjust the “AI Fit Screening” and “AI Resume Tailoring” prompts to reflect your target titles and preferred structure. Common tweaks include stricter filters (remote only, salary floor), a shorter one-page output, and a punchier email tone in “Compose Gmail Draft.”
Usually it’s an expired OAuth connection or missing permissions for Docs/Drive. Reconnect the Google credential in n8n, then confirm the same Google account can create and share files in Drive. If it still fails, check that the workflow is pointing at the right document ID for your master resume.
A lot, but you’ll want to keep it practical. The workflow already uses limit steps (“Restrict Items” and “Cap Shortlist”), which is a good sign because it avoids burning credits on junk roles. On n8n Cloud your limit is mostly executions per month based on plan, while self-hosting has no execution cap (it depends on your server). In real life, most people aim for a shortlist of 5–20 solid matches per run so review stays quick.
For this use case, n8n tends to fit better because you’re doing multi-step filtering, document generation, and enrichment in one flow. You also get a self-hosting option, which matters when you run lots of iterations and don’t want every step billed separately. Zapier and Make can work, but the logic usually ends up split across scenarios with more limitations around branching and data shaping. Another factor is AI control: n8n makes it easier to keep prompts, memory, and formatting in one place. If you’re unsure, Talk to an automation expert and you’ll get a straight recommendation.
Set it up once and your applications stop feeling like a second job. You review the shortlist, make quick edits if needed, then send drafts that actually match the role.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.