A LinkedIn job posting that you open without signing in shows a fixed set of fields. You get the job title, the company name, the location, how long ago the job was posted, a rough applicant count, the full description and a small block of job criteria. That block usually contains seniority level, employment type, job function and industries. The one field most people look for, salary, is often not there for a visitor who is not signed in. It is missing because salary on LinkedIn is either entered by the employer or estimated by LinkedIn, and both versions are shown to members rather than to guests.
So the short answer is this. Seniority, employment type, job function and industries come from choices the poster made in a form, and they are available on the public page. The applicant count is a band, not a precise figure, and it comes from LinkedIn's own tracking of clicks on the apply button. Salary is a member feature. If you need it, you either sign in, go to the employer's own career page, or accept that the field will be empty for a share of the listings.
The rest of this article goes through each field, explains where it comes from, and is honest about where the data stops. It also covers the free ways to collect the same information and when those are the better choice.
Where the fields come from
Every LinkedIn job posting starts as a form. An employer or recruiter fills in a title, picks a company page, chooses a location and a workplace type, and pastes a description. Then there is a set of optional dropdowns. Those dropdowns are the source of the job criteria block you see on the public page. If the poster skipped a dropdown, LinkedIn either fills in a default or leaves the field out. That is the first thing to understand about this data. The structured fields are only as complete as the person who posted the job.
Jobs can also reach LinkedIn through a feed from an applicant tracking system instead of the manual form. In that case the structured fields are mapped from whatever the employer's system sent. LinkedIn documents the structure of those feeds and the related posting APIs for partners on Microsoft Learn, in the LinkedIn Talent Solutions job posting documentation. That documentation is useful even if you never post a job, because it lists the values LinkedIn accepts for fields like employment type and experience level.
Seniority level
Seniority level is a single value chosen by the poster. The usual options are Internship, Entry level, Associate, Mid-Senior level, Director and Executive. There is also a Not Applicable value that many postings carry.
Two warnings apply. First, the value is self reported. A recruiter who wants more applicants can label a senior role as Mid-Senior level, and a startup can label a founding engineer role as Entry level because it was the default. Second, the value is not derived from the description. A posting that says "8 plus years required" in the text can still be tagged Associate. If you build a dataset on this field, treat it as a hint and check it against the description when accuracy matters.
On the public page this field appears in the job criteria block when the poster set it. When it is absent, the posting has no seniority value at all, and a scraper should return null rather than a guess.
Employment type
Employment type is also a dropdown. The common values are Full-time, Part-time, Contract, Temporary, Volunteer, Internship and Other. This field is more reliable than seniority because posters have an interest in setting it correctly. A contract role tagged as Full-time attracts people who leave the process quickly.
Note that employment type says nothing about remote work. Remote, Hybrid and On-site are a separate workplace type field. On the public page the workplace type is often shown next to the location, for example "Amsterdam, North Holland, Netherlands (Hybrid)". Some postings do not set it, and then the location line has no suffix. Do not read the absence of a suffix as On-site.
Job function and industries
Job function is a category such as Engineering, Sales, Marketing or Finance. A posting can carry more than one. Industries is the industry classification of the company page the job is attached to, and it can also hold more than one value. Both fields are useful for filtering, but industries describes the company, not the job. A software engineer at a bank is tagged Banking, not Software Development.
Applicant count
The applicant count is the field that gets the most questions. On a public page it appears as text near the posting date. Typical forms are "Be among the first 25 applicants" or "Over 100 applicants". Signed-in members sometimes see a more specific number. Either way, the figure is a count of people who clicked apply through LinkedIn. It does not include people who applied directly on the company website after reading the posting, and it does not tell you how many of those applications were complete or relevant.
The count also stales. LinkedIn updates it on its own schedule, and the public page can lag behind the member view. If you collect this field, store the raw text as shown and parse it into a lower bound. "Over 100 applicants" means at least 100, nothing more. Never store it as an exact number.
Why salary is missing
Salary on LinkedIn comes from two places. The employer can enter a base salary or a range when posting. Separately, LinkedIn can show an estimated range built from its own data when the employer did not provide one. Both of these are presented inside the member experience. A visitor who is not signed in sees the public page, and that page usually omits both.
There is one exception. If the employer wrote the salary into the free text of the description, it is there for everyone, because the description is rendered in full on the public page. A good scraper looks for salary patterns in the description text and reports them as a separate, clearly labelled field, so you know it was extracted from prose rather than from a structured field.
Some countries and US states require pay ranges in job advertisements. Postings for those locations are more likely to carry salary in the description. Postings elsewhere often carry nothing. Any dataset built from public LinkedIn pages will therefore have a salary field that is empty for many rows, and the share of empty rows depends on the locations you query. That is a property of the source, not a bug in the tool.
What a visitor without an account cannot see
Beyond salary, the public page hides a few more things. You cannot see who posted the job, so the recruiter name and profile link are missing. You cannot see the "people you may know at this company" block or the insights about applicant seniority and skills. You cannot see whether the posting is marked as Easy Apply or routes to an external site in every case, although the apply button text often gives it away. And after a few page views in one session LinkedIn starts redirecting guests to a login wall, which limits how much any unauthenticated collection can fetch.
LinkedIn's rules matter here as well. The LinkedIn User Agreement prohibits using automated software to scrape the service without permission. Whether and how that applies to public pages is something you should consider for your own situation, and it is a reason to prefer official channels whenever they cover your need.
Free ways to get the same data
For many use cases you do not need a scraper at all.
If you are tracking jobs for yourself, saved searches and job alerts in a LinkedIn account send you new matches by email. They include the structured fields and, as a member, you see the salary where it exists. This is the better choice for a personal job hunt.
If you are an employer or a partner, the official job posting and job search APIs documented on Microsoft Learn give you structured data with a contract behind it. Access is gated, but if you qualify, this is the better choice for any volume.
If you want salary data specifically, the company's own career page or its applicant tracking system is often the better source. Many ATS platforms expose public job feeds, and the company page frequently carries the pay range that LinkedIn hides from guests. Reading a company page by hand for a dozen employers is quicker than cleaning scraped data.
A scraper earns its place when you need the public fields across hundreds of employers or many searches at once, when you need them on a schedule, and when the structured fields and description are enough. Treat salary as a bonus field that will be partly empty, and treat applicant count as a band.
If that matches your need, the LinkedIn jobs scraper on this site returns title, company, location, workplace type, posted date, applicant count text, seniority, employment type, job function, industries, the full description and any salary found in the text, as JSON or CSV, and you pay per result rather than per month. See the field list and run a small test on the LinkedIn jobs scraper page.
Want the signal instead of the raw filings? Get a free report preview. Prefer the tool to the write-up? Browse all data feeds or connect the free MCP server.