Nodes:
name: When clicking ‘Test workflow’
type: n8n-nodes-base.manualTrigger
name: Call Rapid API
type: n8n-nodes-base.httpRequest
parameters: url: https://fresh-linkedin-profile-data.p.rapidapi.com/get-linkedin-profile
sendQuery: yes
sendHeaders: yes
queryParameters: parameters: name: linkedin_url
value: ={{ $json["Linkedin Profile"] }}
headerParameters: parameters: x-rapidapi-key
x-rapidapi-host
name: Filter already enriched
type: n8n-nodes-base.filter
parameters: conditions: options: version: 2
caseSensitive: yes
typeValidation: strict
combinator: and
conditions: operator: type: string
operation: empty
singleValue: yes
leftValue: ={{ $json.about }}
operator: type: string
operation: notEmpty
singleValue: yes
leftValue: ={{ $json.linkedin_url }}
name: Encode URI
type: n8n-nodes-base.set
parameters: assignments: assignments: name: Linkedin Profile
type: string
value: ={{ encodeURI($json.linkedin_url) }}
name: FiIter out all arrays
type: n8n-nodes-base.code
parameters: mode: runOnceForEachItem
jsCode: // Initialize an empty object to store filtered items
let filteredData = {};

// Loop through each item in $input.item.json.data
for (const item in $input.item.json.data) {
  // Check if the item is not an array
  if (!Array.isArray($input.item.json.data[item])) {
    // Add the item to the filteredData object
    filteredData[item] = $input.item.json.data[item];
  }
}
filteredData['row_number'] = $('Pull linkedin profiles').first().json.row_number
// Return the filteredData array
return filteredData;
name: Update the profile
type: n8n-nodes-base.googleSheets
parameters: columns: schema: type: string
display: yes
removed: no
required: no
displayName: linkedin_url
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
required: no
displayName: about
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
required: no
displayName: city
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
required: no
displayName: company
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
required: no
displayName: company_description
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_domain
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_employee_range
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_industry
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_linkedin_url
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_logo_url
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_website
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: company_year_founded
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: connection_count
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: country
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: current_company_join_month
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: current_company_join_year
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: current_job_duration
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: email
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: first_name
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: follower_count
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: full_name
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: headline
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: hq_city
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: hq_country
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: hq_region
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: job_title
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: languages
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: last_name
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: location
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: phone
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: profile_id
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: profile_image_url
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: public_id
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: school
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: state
defaultMatch: no
canBeUsedToMatch: yes
type: string
display: yes
removed: no
required: no
displayName: urn
defaultMatch: no
canBeUsedToMatch: yes
mappingMode: autoMapInputData
matchingColumns: linkedin_url
operation: appendOrUpdate
sheetName: __rl: yes
mode: list
value: gid=0
cachedResultUrl: https://docs.google.com/spreadsheets/d/10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM/edit#gid=0
cachedResultName: Sheet1
documentId: __rl: yes
mode: list
value: 10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM
cachedResultUrl: https://docs.google.com/spreadsheets/d/10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM/edit?usp=drivesdk
cachedResultName: Linkedin contact info
name: Sticky Note
type: n8n-nodes-base.stickyNote
parameters: color: 4
width: 220
height: 380
content: ## Create a Google sheet
With just one column named "linkedin_url" and fill it with the profiles you want to enrich
name: Sticky Note1
type: n8n-nodes-base.stickyNote
parameters: color: 4
width: 300
height: 480
content: ## Call RapidAPI Fresh Linkedin Profile Data
You have to create an account in [RapidAPI](https://rapidapi.com) and subscribe to Fresh LinkedIn Profile Data. With a free account you will be able to scrape 100 profile / month.
After your subscription you will have to replace the header values: "x-rapidapi-key" and "x-rapidapi-host" with the values given in the RapidAPI interface

name: Pull linkedin profiles
type: n8n-nodes-base.googleSheets
parameters: sheetName: __rl: yes
mode: list
value: gid=0
cachedResultUrl: https://docs.google.com/spreadsheets/d/10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM/edit#gid=0
cachedResultName: Sheet1
documentId: __rl: yes
mode: list
value: 10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM
cachedResultUrl: https://docs.google.com/spreadsheets/d/10cSUaj-YZhrgwXLIGpJzLjv6RMN6cYiw9EK-rNw0-AM/edit?usp=drivesdk
cachedResultName: Linkedin contact info
name: Sticky Note2
type: n8n-nodes-base.stickyNote
parameters: color: 7
width: 460
height: 1160
content: ### LinkedIn Profile Enrichment Workflow

#### Who is this for?

This workflow is ideal for recruiters, sales professionals, and marketing teams who need to enrich LinkedIn profiles with additional data for lead generation, talent sourcing, or market research.

#### What problem is this workflow solving?

Manually gathering detailed LinkedIn profile information can be time-consuming and prone to errors. This workflow automates the process of enriching profile data from LinkedIn, saving time and ensuring accuracy.

#### What this workflow does

1.  **Input**: Reads LinkedIn profile URLs from a Google Sheet.
2.  **Validation**: Filters out already enriched profiles to avoid redundant processing.
3.  **Data Enrichment**: Uses RapidAPI's Fresh LinkedIn Profile Data API to retrieve detailed profile information.
4.  **Output**: Updates the Google Sheet with enriched profile data, appending new information efficiently.

#### Setup

1.  **Google Sheet**: Create a sheet with a column named `linkedin_url` and populate it with the profile URLs to enrich.
2.  **RapidAPI Account**: Sign up at [RapidAPI](https://rapidapi.com) and subscribe to the Fresh LinkedIn Profile Data API.
3.  **API Integration**: Replace the `x-rapidapi-key` and `x-rapidapi-host` values with your credentials from RapidAPI.
4.  **Run the Workflow**: Trigger the workflow and monitor the updates to your Google Sheet.

#### How to customize this workflow

*   **Filter Criteria**: Modify the filter step to include additional conditions for processing profiles.
*   **API Configuration**: Adjust API parameters to retrieve specific fields or extend usage.
*   **Output Format**: Customize how the enriched data is appended to the Google Sheet (e.g., format, column mappings).
*   **Error Handling**: Add steps to handle API rate limits or missing data for smoother automation.

This workflow streamlines LinkedIn profile enrichment, making it faster and more effective for data-driven decision-making.

Connections:
Encode URI: main: node: Call Rapid API
type: main
Call Rapid API: main: node: FiIter out all arrays
type: main
FiIter out all arrays: main: node: Update the profile
type: main
Pull linkedin profiles: main: node: Filter already enriched
type: main
Filter already enriched: main: node: Encode URI
type: main
When clicking ‘Test workflow’: main: node: Pull linkedin profiles
type: main