This workflow corresponds to n8n.io template #12838 — we link there as the canonical source.
This workflow follows the Apifyn8N Nodes Apify → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "35Ynqn7VKpxFCUkF",
"meta": {
"templateId": "ready-to-run-ai-workflow-v5",
"templateCredsSetupCompleted": true
},
"name": "Linkedin Job Scraper",
"tags": [],
"nodes": [
{
"id": "293e2ff4-6082-40a9-a8bf-b4c648804fd3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
-112
],
"parameters": {
"height": 352,
"content": "## Paste job Linkedin URL\n\nIn this node you can add up to 10 URLs to be scraped from linkedin jobs\n\nBy default the item count set to 100 you can change it to whatever number of jobs you want to extract\n"
},
"typeVersion": 1
},
{
"id": "4eea4916-03ef-4c92-9d11-cc7ed9bf27c3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
16
],
"parameters": {
"width": 400,
"content": "## De-Duplication\nThis branch to ensure no duplicates will go over the same rows"
},
"typeVersion": 1
},
{
"id": "e83dbe60-c785-4cc9-b40e-4dfd7b11bf12",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
992,
-416
],
"parameters": {
"width": 528,
"height": 352,
"content": "## [Video Tutorial](https://youtu.be/tXvcCoM5igQ)\n@[youtube](tXvcCoM5igQ)\n"
},
"typeVersion": 1
},
{
"id": "1c21518d-18cf-4060-8615-9c2be275b351",
"name": "Manual trigger (can be replaces to cron trigger)",
"type": "n8n-nodes-base.manualTrigger",
"position": [
0,
224
],
"parameters": {},
"typeVersion": 1
},
{
"id": "39052b83-506e-4c9b-9265-3ac33498f7b6",
"name": "Extract linkedin data using Apify",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
224,
224
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "list",
"value": "hKByXkMQaC5Qt9UMN",
"cachedResultUrl": "https://console.apify.com/actors/hKByXkMQaC5Qt9UMN/input",
"cachedResultName": "Linkedin Jobs Scraper - PPR (curious_coder/linkedin-jobs-scraper)"
},
"timeout": {},
"operation": "Run actor and get dataset",
"customBody": "{\n \"count\": 100,\n \"scrapeCompany\": true,\n \"urls\": [\n \"https://www.linkedin.com/jobs/search/?currentJobId=4360741749&geoId=103644278&keywords=Data%20Analyst\"\n ]\n}",
"actorSource": "store",
"authentication": "apifyOAuth2Api"
},
"credentials": {
"apifyOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7e2855f6-eae4-4492-a26e-8caaa7926e73",
"name": "Looping",
"type": "n8n-nodes-base.splitInBatches",
"position": [
672,
224
],
"parameters": {
"options": {},
"batchSize": 5
},
"typeVersion": 3
},
{
"id": "bf54eb9e-92ad-40a1-85d9-a17927118be1",
"name": "Append new rows to Gsheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
896,
160
],
"parameters": {
"columns": {
"value": {
"Id": "={{ $json.id }}",
"title": "={{ $json.title }}",
"linkJob": "={{ $json.linkJob }}",
"location": "={{ $json.location }}",
"postedAt": "={{ $json.postedAt }}",
"compnayName": "={{ $json.companyName }}",
"How many days that was posted?": "={{ $json['How many days that was posted?'] }}"
},
"schema": [
{
"id": "Id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkJob",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "linkJob",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "compnayName",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "compnayName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "location",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postedAt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "postedAt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "How many days that was posted?",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "How many days that was posted?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg/edit?usp=drivesdk",
"cachedResultName": "Linedin Job Post"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "b8e500b2-e6ef-45ff-972b-406c07680e22",
"name": "Search for existing records in Gsheet",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
1120,
160
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1qrn3p5mzx1-muAhMNj0xty8M73vOM_WWnOkUFpNuItg/edit?usp=drivesdk",
"cachedResultName": "Linedin Job Post"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "85f36a91-5b8c-4daf-b296-65e53e45f7c3",
"name": "Condition to remove dup in gsheet",
"type": "n8n-nodes-base.if",
"position": [
1344,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b4fd269b-1500-4bad-9ef8-a430ce63b24f",
"operator": {
"type": "number",
"operation": "notExists",
"singleValue": true
},
"leftValue": "={{ $json.row_number }}",
"rightValue": "="
}
]
}
},
"typeVersion": 2.3
},
{
"id": "8e7dfcb6-eeaa-4f37-b6ac-4c478f6f9931",
"name": "Choose data field that are relevant",
"type": "n8n-nodes-base.set",
"position": [
448,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1b1fef61-4179-4109-937e-e245c9a83317",
"name": "id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "6515d16e-0194-4226-a7e3-6ce7b367928d",
"name": "linkJob",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "a7a1ace9-f907-400a-beea-ffd1de8a7679",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "501e4a50-babe-4a35-9bf2-fdf4238333c8",
"name": "companyName",
"type": "string",
"value": "={{ $json.companyName }}"
},
{
"id": "7ad8f2f1-11d0-43e7-984f-99724184b7fb",
"name": "location",
"type": "string",
"value": "={{ $json.location }}"
},
{
"id": "aaba05db-3d55-47ee-9094-c645b5357f2a",
"name": "postedAt",
"type": "string",
"value": "={{ $json.postedAt }}"
},
{
"id": "bac5d622-f3c3-4348-9877-7c841270f6e3",
"name": "How many days that was posted?",
"type": "string",
"value": "={{\n Math.floor(\n (\n new Date($now).getTime() -\n new Date($json.postedAt).getTime()\n ) / (1000 * 60 * 60 * 24)\n )\n}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "82c9de06-8905-4384-94bd-24b12765d20e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
-320
],
"parameters": {
"color": 4,
"width": 576,
"height": 1072,
"content": "# LinkedIn job intelligence workflow\n\n### This workflow automatically collects LinkedIn job postings and turns them into structured hiring intelligence. It is designed for users who may be new to n8n and want a reliable way to track hiring activity without manual searches or scraping scripts.\n\n### The workflow uses a LinkedIn job search URL as input, extracts job details through Apify, enriches each job with useful context, and stores only new results in Google Sheets. Over time, this creates a clean and growing dataset that can be used for lead generation, recruitment, market analysis, or downstream automations.\n\n### Hiring activity is often an early signal of growth, budget allocation, or operational needs. By tracking job posts continuously, this workflow helps you spot those signals early and act on them.\n\n---\n\n## How it works\n\n1. The workflow starts with a manual trigger, which can later be replaced with a Cron trigger for automation.\n2. An Apify actor scrapes LinkedIn job postings from one or more job search URLs.\n3. The job data is cleaned and standardized so all records follow the same structure.\n4. A calculated field determines how many days ago each job was posted.\n5. Jobs are processed in batches to keep the workflow stable.\n6. Google Sheets is checked to see if a job already exists.\n7. Only new jobs are added to the sheet, preventing duplicates.\n\n---\n\n## Setup steps\n\n1. Connect your Apify account and select the LinkedIn Jobs Scraper actor.\n2. Paste at least one LinkedIn job search URL into the Apify input.\n3. Create a Google Sheet with columns for job ID, title, company, location, posting date, and days since posted.\n4. Connect your Google Sheets account in n8n.\n5. Run the workflow once to confirm data is written correctly.\n6. Optional: replace the manual trigger with a Cron trigger to run automatically.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "d1aa7ab8-cec4-4104-8c88-a6afb7db7b44",
"connections": {
"Looping": {
"main": [
[],
[
{
"node": "Append new rows to Gsheet",
"type": "main",
"index": 0
}
]
]
},
"Append new rows to Gsheet": {
"main": [
[
{
"node": "Search for existing records in Gsheet",
"type": "main",
"index": 0
}
]
]
},
"Condition to remove dup in gsheet": {
"main": [
[],
[
{
"node": "Looping",
"type": "main",
"index": 0
}
]
]
},
"Extract linkedin data using Apify": {
"main": [
[
{
"node": "Choose data field that are relevant",
"type": "main",
"index": 0
}
]
]
},
"Choose data field that are relevant": {
"main": [
[
{
"node": "Looping",
"type": "main",
"index": 0
}
]
]
},
"Search for existing records in Gsheet": {
"main": [
[
{
"node": "Condition to remove dup in gsheet",
"type": "main",
"index": 0
}
]
]
},
"Manual trigger (can be replaces to cron trigger)": {
"main": [
[
{
"node": "Extract linkedin data using Apify",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
apifyOAuth2ApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Lead Generation, Market Intelligence, Recruitment Automation, Business Intelligence
Source: https://n8n.io/workflows/12838/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n template shows how to populate a Google Spreadsheet with LinkedIn company URLs automatically using the Apify LinkedIn Company URL Finder actor from Anchor. It will create a new sheet with the
This workflow transforms new YouTube videos from any channel into high-quality, ready-to-publish LinkedIn posts and saves them directly to a Google Sheet, creating a powerful, automated content repurp
Disclaimer: this workflow only works on self-hosted instances due to the file system usage.
More workflow: https://aitool.wiki/
⚠️ Important — Start Here Before importing this template, make a personal copy of the provided Google Sheets template. This workflow is designed to work out of the box with that sheet.