LinkedIn serves job search and job pages to people who are not logged in. That signed-out surface is the only one a LinkedIn job scraper without an account can read, and for Latin American tech roles it turns out to be rich in company data, poor in salary data, and quietly selective about which filters it honours.
What a signed-out visitor can see
A signed-out visitor gets a paged search by keyword, location and posting date, and a job page per posting with the title, company, location, seniority, employment type, industries, applicant count, apply type and the full description. The LinkedIn LATAM Tech Jobs Scraper reads both for 18 Latin American countries plus the Latin America region, each mapped to the LinkedIn location id it uses; 8 to 10 of 10 jobs landed in the right country in the Actor's check, the rest being metro areas.
It never logs in: login, signup and personal profile paths are blocked in the code, and on a refusal it switches connection rather than interpreting a challenge.
Filters LinkedIn ignores
For a signed-out visitor, LinkedIn applies keyword, location and “posted within”. The workplace type, experience level and job type filters return exactly the same jobs as no filter — 13 of 13 tested variants were identical. A scraper that passes those parameters and reports success is delivering an unfiltered result labelled as a filtered one.
The Actor applies the three filters itself, from each job page. Seniority and employment type are on 100% of 639 measured job pages, so those filters are exact. Workplace type is stated on 64.5%, detected from the title, location and description, so with a workplace filter set, jobs that do not state one are skipped — and skipped jobs are never charged.
Padding and the 1,000 ceiling
When few jobs match, LinkedIn fills the search with unrelated ones: a nonsense keyword still returned 10 jobs per page. By default the Actor keeps a job only if its title or description contains every word of the keyword and it is a tech role, and treats a search as exhausted after 5 consecutive pages of nothing relevant instead of reading all the way down.
That bottom is 1,000 jobs per search, LinkedIn's own limit. Each keyword and country pair is its own search, and a run shares its row budget between them in turns, so going further means adding pairs rather than asking one search for more.
What arrives, measured
639 jobs on 1 October 2026: Brazil, Mexico, Argentina, Colombia, Chile, Peru, Uruguay and Costa Rica, about 80 each, across four searches — software engineer, data engineer, frontend developer and devops.
| Field | Filled | Range by country |
|---|---|---|
| Tech stack (at least one) | 99.4% | — |
| Company website and domain | 97.6% | — |
| Applicant count as a number | 65.9% | — |
| Workplace type | 64.5% | 55.0% Brazil to 71.3% Peru, Costa Rica |
| Job poster | 10.2% | 5.0% Brazil to 21.3% Peru |
| Emails in the description | 6.7% | 2.5% Brazil, Colombia to 13.8% Costa Rica |
| LinkedIn salary range | 2.7% | 0% Brazil, Argentina to 7.5% Chile |
Company profile fields — headquarters 97.0%, specialties 87.5%, founded year 70.8% — are rates within the 329 jobs whose company page was read, not within all 639. The domain needs no company page: it comes from the job page and ships at the job price.
Job posters and emails
The job poster — name, headline and profile link — is the one named person in the output, shown on 10.2% of jobs. For jobs located in the EU, EEA, UK or Switzerland the poster is always withheld. Company pages show employee names and photos on every page read; the parser does not read them.
The 45 emails found in descriptions were all corporate, 0 at personal providers. Personal-provider addresses are withheld by default and masked inside the description and company texts. The email pattern is DNS-only: in a test of 29 domains, 1 had published evidence and 28 were inferred at confidence 0.10, and only the evidenced one was charged.
What LinkedIn says about crawling
linkedin.com/robots.txt names dozens of crawlers individually and then closes with a group for everyone else: User-agent: *, Disallow: /. Its comment says that automated access without LinkedIn's express permission is prohibited, points to the User Agreement, and gives an address to apply for crawling permission. Even the named search-engine groups disallow /jobs-guest/. The User Agreement, read the same day, prohibits developing or using software, scripts or robots to scrape or copy the services.
The Actor reads public job pages regardless, and says so on its page. That is a different position from the one argued in reading robots.txt as a specification, and the difference is stated rather than blurred. Torre's /api/ paths are the other explicit disallow in this cluster — Torre's data and rules — and the cluster overview compares all five.
What a run costs
A job is $0.002 with the full page, website and domain, so 1,000 jobs are $2.00. Company profiles add $0.003 per distinct company per run; two 100-job runs on 2 October 2026 found 63 and 70 distinct companies, which puts 1,000 jobs with profiles at about $3.90 to $4.10. Across 42 runs and 4,039 requests none was blocked; 1.5% were rate-limited and retried, with no page lost.
{
"outputType": "jobs",
"keywords": ["react"],
"countries": ["LATAM"],
"workplaceTypes": ["remote"],
"inferEmailPattern": true,
"maxItems": 30
}