Recrutei to LinkedIn, job posts published and logged
Your jobs go live in the ATS, and then… nothing. Someone has to remember to turn that vacancy into a LinkedIn post, format it, double-check the details, and paste it into the right page. It’s easy to miss, and it’s honestly a little embarrassing when a great role sits unpublished.
This LinkedIn job posting automation hits recruiters first, but marketing leads and ops managers feel the ripple effects too. You get every new Recrutei vacancy published to LinkedIn automatically, with clean, on-brand copy, and a simple audit trail in Google Sheets.
Below, you’ll see exactly how the workflow behaves, what you need to connect, and what to tweak so the posts sound like your company (not a generic template).
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Recrutei to LinkedIn, job posts published and logged
flowchart LR
subgraph sg0["AI Content Generator Flow"]
direction LR
n0["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Recrutei Webhook Trigger"]
n1["<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/code.svg' width='40' height='40' /></div><br/>Clean and Standardize Job Data"]
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/linkedin.svg' width='40' height='40' /></div><br/>Publish LinkedIn Post"]
n3@{ icon: "mdi:database", form: "rounded", label: "Google Sheets Logging", pos: "b", h: 48 }
n4["<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/code.svg' width='40' height='40' /></div><br/>Transform Data to AI Prompt"]
n5@{ icon: "mdi:robot", form: "rounded", label: "AI Content Generator", pos: "b", h: 48 }
n5 --> n2
n2 --> n3
n0 --> n1
n4 --> n5
n1 --> n4
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 n5 ai
class n3 database
class n0 api
class n1,n4 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n4 customIcon
Why This Matters: Job posts slip through the cracks
Publishing roles on LinkedIn should be routine. In reality, it becomes a tiny project every time: open the ATS, copy the title and description, clean up messy formatting, rewrite it so it doesn’t read like an internal requisition, add a hook, add a CTA, choose the right company page, and then pray you didn’t forget salary/remote details. Do this a few times a week and the “quick post” quietly steals about 2 hours. Worse, inconsistency trains your team to stop trusting the process. People assume “someone else posted it.”
Individually, these are small annoyances. Together, they slow hiring and make your brand look disorganized.
- A new vacancy can sit in Recrutei for days before anyone remembers to publish it publicly.
- ATS descriptions often contain HTML or awkward formatting, so LinkedIn posts look messy unless someone cleans them.
- Copy-paste edits introduce little errors (wrong location, outdated salary line, missing “remote” detail) that create candidate confusion.
- Without a logging step, you can’t easily prove the post went live or track what was published when.
What You’ll Build: Recrutei → AI-written LinkedIn posts + a Sheets audit log
This workflow publishes the moment a vacancy is created in Recrutei. A webhook receives the job data as soon as the role is published in your ATS, then the workflow cleans and standardizes key fields so they read like human language (for example, turning “0/1” flags into “yes/no” and making remote details unambiguous). Next, it transforms the job description from HTML into readable text, builds a structured prompt, and asks an OpenAI model to write a LinkedIn-ready post in a “marketing copywriter” style. Finally, n8n posts the generated copy to your LinkedIn profile or Company Page, then appends a simple record in Google Sheets so you have a lightweight audit trail.
The workflow starts in Recrutei with a webhook trigger. From there, it normalizes fields and builds a clean prompt for the AI. LinkedIn publishing happens automatically, and Google Sheets keeps the “proof” in one place.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say your team publishes 5 new vacancies a week. Manually, a LinkedIn post often takes about 20 minutes: clean the description, rewrite it, format it, post it, then drop the link somewhere for tracking. That’s roughly 100 minutes weekly, plus the follow-ups when someone can’t find the post. With this workflow, the “work” becomes checking the Sheet row and scanning the post for tone, which is usually a couple minutes total per role.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Recrutei to send “new vacancy” webhook data.
- LinkedIn to publish to your profile or Company Page.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Beginner. You’ll paste a webhook URL into Recrutei and connect a few accounts inside n8n.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A new vacancy is published in Recrutei. Recrutei sends the job payload to your n8n webhook the instant the role goes live in the ATS.
The job data gets cleaned up. n8n normalizes the fields so they’re usable in public copy (like converting remote flags and other “0/1” values into plain English). It also prepares the description so it doesn’t carry over weird HTML formatting.
AI writes the LinkedIn post. A structured prompt is assembled from the cleaned job data, then OpenAI generates a marketing-ready LinkedIn post that’s actually readable, not a raw job spec.
LinkedIn publishes, then Sheets logs it. The post is created on your chosen LinkedIn destination, and a row is appended in Google Sheets with the job title and a confirmation-style status for auditing.
You can easily modify the writing prompt to match your brand voice, or change the logging fields to include the LinkedIn URL and posting timestamp. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the incoming webhook so external systems can send new job data into the workflow.
- Add the Incoming Job Webhook node as your trigger.
- Set HTTP Method to
POST. - Set Path to
new-job-created. - Copy the generated webhook URL and configure your job system to send job payloads to it.
⚠️ Common Pitfall: The webhook expects the job data in body. If your sender posts a different structure, Normalize Job Details will not find the fields.
Step 2: Connect Google Sheets
Log each published job in a Google Sheet for auditing and visibility.
- Add the Append Audit to Sheets node.
- Set Operation to
append. - Set Document to
[YOUR_ID](your Google Sheet ID). - Set Sheet Name to
gid=0. - Map Job Title to
{{ $('Normalize Job Details').item.json.title }}and set Published toYes. - Credential Required: Connect your Google Sheets credentials.
Step 3: Set Up Data Processing Nodes
Normalize incoming job fields and build the structured prompt text for AI generation.
- Add Normalize Job Details and paste the provided JavaScript into Code to convert 0/1 values into
yes/no. - Connect Incoming Job Webhook → Normalize Job Details.
- Add Build AI Prompt Text and paste the provided JavaScript to generate
detailedJobPromptwith formatted job details. - Connect Normalize Job Details → Build AI Prompt Text.
⚠️ Common Pitfall: The Build AI Prompt Text node reads from $input.item.json. Ensure the previous node outputs normalized fields at the top level.
Step 4: Set Up the AI Copy Generation
Generate a professional LinkedIn post based on the formatted job data.
- Add the Generate LinkedIn Copy node and set the model to
gpt-4o-mini. - Set the user message content to
{{ $json.detailedJobPrompt }}. - Keep the system message as:
You are a professional HR Marketing Copywriter. Your task is to receive detailed job information and transform it into an engaging, attractive LinkedIn post for candidate attraction. Focus on benefits, culture, and key responsibilities. Include relevant hashtags. - Connect Build AI Prompt Text → Generate LinkedIn Copy.
- Credential Required: Connect your OpenAI credentials.
Step 5: Configure Output Actions
Publish the generated post to LinkedIn and log the result to Google Sheets.
- Add the Post to LinkedIn Feed node.
- Set Text to
{{ $json.message.content }}. - Set Person to
[YOUR_ID](your LinkedIn profile ID). - Connect Generate LinkedIn Copy → Post to LinkedIn Feed.
- Connect Post to LinkedIn Feed → Append Audit to Sheets.
- Credential Required: Connect your LinkedIn credentials.
⚠️ Common Pitfall: Ensure your LinkedIn app permissions allow posting to the feed; otherwise, Post to LinkedIn Feed will fail.
Step 6: Test and Activate Your Workflow
Verify end-to-end behavior before turning the automation on.
- Click Execute Workflow and send a test payload to the Incoming Job Webhook URL.
- Confirm Generate LinkedIn Copy outputs a completed post in
$json.message.content. - Verify the LinkedIn post appears on your feed and a new row is appended in the Google Sheet.
- Once validated, toggle the workflow to Active to enable production use.
Troubleshooting Tips
- LinkedIn credentials can expire or need specific permissions. If things break, check the LinkedIn node account selection and page 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.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
About 30 minutes if you already have the accounts.
No. The workflow includes code nodes, but you won’t write code to use it. You’ll mainly connect credentials and paste the webhook URL into Recrutei.
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 API costs, which are usually a few cents per post.
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. Most teams start by editing the “Generate LinkedIn Copy” prompt so the tone matches their brand, then expand “Append Audit to Sheets” to store the LinkedIn post URL, location, and seniority. If your ATS fields differ, tweak “Normalize Job Details” and “Build AI Prompt Text” so the prompt still includes the details candidates care about.
Usually it’s expired permissions or the wrong page selected in the “Post to LinkedIn Feed” node. Reconnect your LinkedIn credential in n8n, then re-select the profile or Company Page. Also check that your LinkedIn user actually has permission to post as the company. If you’re posting a lot in a short window, rate limiting can show up too, so spacing posts out helps.
For most small teams, it will handle dozens of job posts a week without any changes.
Often, yes, because this workflow is doing more than “send text from A to B.” You’re normalizing fields, cleaning HTML, building a structured prompt, and then generating copy before posting and logging, which is the kind of multi-step logic that gets awkward (and pricey) in simpler tools. n8n also gives you the self-host option, which can matter when you start running lots of automations across HR and marketing. That said, Zapier or Make can be fine for a basic webhook-to-post flow if you don’t care about data cleanup or audit logs. If you want a quick recommendation based on your volume and team, Talk to an automation expert.
Once this is live, new roles stop waiting for someone to “get around to posting them.” The workflow handles the repetitive parts, and you get your consistency back.
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.