Quick overview
Enrich a Google Sheets list of LinkedIn profile URLs with EnvoAPI. The workflow groups duplicates, reuses stored results, retries eligible failures, and writes profile data back to the correct rows using permanent row IDs
How it works
- Start manually or with the optional daily schedule, which is disabled by default.
- Read the sheet, validate row IDs, normalize LinkedIn profile URLs, and group duplicates. Process only rows whose status is blank or pending; flag invalid URLs without calling the API.
- Reuse compatible profile data already stored in the sheet. Otherwise, send each unique normalized URL to the EnvoAPI Profile Details endpoint.
- Map 28 flat profile fields, including name, headline, company, current title, skills, location, and audience counts. Preserve nested profile data in three JSON cells when it fits within the storage limit.
- Retry eligible failures up to three attempts per unique URL per run, within a five-minute retry budget. Respect Retry-After when provided.
- Write results and processing metadata to each original row by matching row_id. Stop after recording an account or credit-blocking error; otherwise, wait before processing the next profile.
Setup
- Create a Google Sheet with a tab named Profiles. Use the 47 columns listed in the workflow’s Sheet headers note, or import the accompanying spreadsheet template.
- Give every input row a unique, permanent row_id and a full LinkedIn /in/ profile URL in linkedin_url. Set status to pending and leave the output cells empty.
- In Workflow settings, set spreadsheet_id, sheet_name, and seconds_between_profiles.
- Connect Google Sheets OAuth2 credentials with edit access to both Read profile rows and Update rows by row_id.
-
- Create an HTTP Header Auth credential for EnvoAPI: set Name to Authorization and Value to Bearer YOUR_ENVOAPI_KEY. Select it in EnvoAPI - Get Profile.
- Run a small batch manually and check the output. Enable the optional schedule after testing and configure execution controls to prevent runs from overlapping.
Requirements
- An n8n instance with outbound access to EnvoAPI and Google APIs.
- A Google account with edit access to the target spreadsheet and Google Sheets OAuth2 credentials configured in n8n.
- An EnvoAPI account, API key, and sufficient credits for your batch.
- LinkedIn profile URLs and a unique, permanent row_id for every input row.
Customization
- Adjust seconds_between_profiles to control pacing between profiles.
- Change sheet_name and spreadsheet_id to use another sheet.
- Adapt the field mapping and sheet columns together if your team needs different outputs.
- Add a cache-expiry rule if you need periodic profile refreshes; stored results do not expire automatically.
Additional info
The three JSON cells preserve profile objects up to 90,000 characters total. Concatenate profile_json_1, profile_json_2, and profile_json_3 before parsing. For larger responses, the workflow retains flat fields, leaves the JSON cells empty, and sets status to needs_review with profile_json_too_large.
A 404 produces not_found without retrying. Responses with 401, 402, or 403 record a blocking error and stop the batch. After resolving the cause, reset affected rows to pending to try again.
Completed rows are skipped on subsequent runs. Duplicate inputs can reuse compatible stored results without another EnvoAPI request.