The **LinkedIn Job Post Extractor** is an [automation template](/content/automations/index.html) that extracts information from LinkedIn job posting pages and saves it to Google Sheets. Instead of manually copying job titles, company names, salaries, and descriptions, the template captures all the data automatically.

This post explains what the template does, what data it extracts, how to set it up, and what it’s useful for.

## What Data Gets Extracted

When you run this automation on a LinkedIn job posting page (linkedin.com/jobs/view/…), it extracts these fields:

| Field | What It Captures | Notes |
| --- | --- | --- |
| **Job Title** | The position title | e.g., “Senior Software Engineer” |
| **Company Name** | The hiring company | Extracted as a clickable link text |
| **Location** | Job location | City, state, country, or “Remote” |
| **Salary Range** | Compensation information | Only if displayed on the posting |
| **Posted Date** | When the job was posted | e.g., “2 weeks ago”, “3 days ago” |
| **Job Description** | Full description text | Includes requirements, responsibilities, etc. |
| **Job URL** | The LinkedIn posting URL | Automatically added using `{{page_url}}` |
| **Extraction Date** | When you extracted the data | Automatically added using `=TODAY()` |

## How the Automation Works

The automation workflow showing how job data is extracted and saved

The template uses 11 automation blocks:

### Input Block

- **Page Content**: Extracts the full HTML from the LinkedIn job posting page

### Extraction Blocks (Find Blocks)

These use CSS selectors to locate specific information on the page:

- **Job Title**: `.job-details-jobs-unified-top-card__job-title h1`
- **Company Name**: `.job-details-jobs-unified-top-card__company-name a`
- **Location**: `.job-details-jobs-unified-top-card__primary-description-container span > span.tvm__text--low-emphasis:first-child`
- **Salary Range**: `.job-details-fit-level-preferences > button:first-child`
- **Posted Date**: `.job-details-jobs-unified-top-card__primary-description-container span > span.tvm__text--low-emphasis:nth-child(3)`
- **Job Description**: `#job-details`

**Note:** Sites occasionally update their page structure, which may require updating these CSS selectors. The template provides these as a starting point that you can adjust if the HTML changes.

### Processing Block

- **Job Description Clean**: Removes extra whitespace and line breaks from the description text

### Metadata Blocks

- **Add Job URL**: Inserts the current page URL using `{{page_url}}`
- **Add Date**: Inserts today’s date using the Google Sheets `=TODAY()` formula

### Output Block

- **Save to Sheets**: Maps all extracted fields to your spreadsheet columns

## Setting Up the Template

### Step 1: Prepare Your Spreadsheet

Create a Google Sheet with these column headers (or customize as needed):

| Job Title | Company Name | Location | Salary Range | Posted Date | Job Description | Job URL | Extraction Date |
| --- | --- | --- | --- | --- | --- | --- | --- |

You can add additional columns for your own tracking purposes (Status, Notes, Priority, etc.).

### Step 2: Import the Template

1. Open the Add to Sheets extension  
2. Go to the **Automations** page  
3. Click **Import Template**  
4. Select **LinkedIn Job Post Extractor** from the template library  
5. The workflow will load in the automation builder

### Step 3: Configure the Save to Sheets Block

1. Click on the **Save to Sheets** block in the workflow  
2. Select your Google Sheet  
3. Choose the sheet tab within the spreadsheet  
4. Map each field to the corresponding column:

| Field | Column |
| --- | --- |
| Job Title | A |
| Company Name | B |
| Location | C |
| Salary Range | D |
| Posted Date | E |
| Job Description | F |
| Job URL | G |
| Extraction Date | H |

### Step 4: Save the Automation

1. Click **Save** in the automation builder  
2. Give it a name (e.g., “LinkedIn Job Extract”)  
3. Optionally, set up a keyboard shortcut for faster access

## How to Use It

### Running the Automation

Once configured, you can extract job posting data in two ways:

**Option 1: Keyboard Shortcut**

1. Navigate to a LinkedIn job posting page  
2. Press your configured keyboard shortcut  
3. The data is extracted and saved to your sheet

**Option 2: Extension Panel**

1. Navigate to a LinkedIn job posting page  
2. Open the Add to Sheets extension  
3. Go to the **Automations** tab  
4. Click your saved automation  
5. Click **Run**

### Extracting Multiple Jobs

To build a database of multiple job postings:

1. Search LinkedIn for jobs you’re interested in  
2. Open job postings in new tabs (Cmd/Ctrl + Click)  
3. Go through each tab and run the automation  
4. Each job gets saved as a new row in your spreadsheet

## What This Speeds Up

The main time savings comes from eliminating repetitive copy-paste actions.

### Manual Process vs. Automation

| Task | Manual Method | With Template |
| --- | --- | --- |
| **Extract one job posting** | Copy/paste 8 fields individually (~2-3 min) | Press keyboard shortcut (~5-10 sec) |
| **Extract 10 job postings** | 20-30 minutes | Under 2 minutes |
| **Build a dataset of 50 jobs** | 2+ hours | 10-15 minutes |

### Common Use Cases

**Job Application Tracking:** Extract jobs you’re interested in, then add custom columns for Application Status (Applied, Interview, Offer, Rejected), Applied Date, Follow-up Date, Contact Person, and Notes.

**Salary Research:** Extract multiple postings for similar roles to compare salary ranges across companies and understand compensation by location.

**Competitive Analysis:** Recruiters can track what competitors are offering, monitor their hiring activity, and benchmark their own postings.

**Market Research:** Career coaches and analysts can identify trending skills and qualifications by building datasets of job postings.

## Customizing the Template

The template is fully customizable and serves as a starting point that you can modify to fit your specific needs.

### Adding or Removing Fields

You can add Find blocks to extract additional information like job type or experience level. Conversely, you can delete blocks for data you don’t need.

### Changing Data Cleaning

The Text Transform block that cleans the job description can be modified to change how text is formatted.

### Adjusting for Layout Changes

When LinkedIn updates their page structure, you’ll need to update the CSS selectors in the Find blocks. The template provides guidance on finding the right selectors when the page layout changes.

## Notes

**Data Availability:** The automation can only extract what’s visible on the page. Some information is optional on LinkedIn.

**Extraction:** The automation works one job posting at a time, and you need to manually navigate to each posting.

**Layout Changes:** LinkedIn occasionally updates their HTML structure. When this happens, you may need to update the CSS selectors in the Find blocks.

## Technical Details

### Block Configuration

| Block Name | Block Type | Configuration |
| --- | --- | --- |
| Page Content | Input | Extracts full HTML from current page |
| Job Title | Find | CSS Selector, extracts text |
| Company Name | Find | CSS Selector, extracts text |
| Location | Find | CSS Selector, extracts text |
| Salary Range | Find | CSS Selector, extracts text |
| Posted Date | Find | CSS Selector, extracts text |
| Job Description | Find | CSS Selector, extracts text |
| Job Description Clean | Text Transform | Clean Whitespace transformation |
| Add Job URL | Custom Value | Value: `{{page_url}}` |
| Add Date | Custom Value | Value: `=TODAY()` |
| Save to Sheets | Output | Maps fields to spreadsheet columns |

### Data Flow

1. Page Content block extracts HTML
2. Find blocks locate specific data using CSS selectors
3. Text Transform cleans the job description
4. Custom Value blocks add metadata
5. Save to Sheets writes everything to your spreadsheet
