ActorStack.dev
JobsLead generationv0.1.9updated 2 October 2026

LinkedIn LATAM Tech Jobs Scraper + Company Domain

Eighteen Latin American countries, no login, and the filters LinkedIn ignores applied anyway.

LinkedIn tech job postings in Brazil, Mexico, Argentina, Colombia, Chile and thirteen more Latin American countries, read from the public job pages LinkedIn shows signed-out visitors. Each job carries the hiring company's website and domain, the tech stack extracted from the description, workplace type, English level and, optionally, the company's LinkedIn profile.

oswaldocarabano/linkedin-latam-tech-jobs-scraper

input.json
{
  "outputType": "jobs",
  "keywords": ["react"],
  "countries": ["LATAM"],
  "workplaceTypes": ["remote"],
  "inferEmailPattern": true,
  "maxItems": 30
}
Version
v0.1.9
Memory
512 MB
Browser
none
Proxy
Built-in residential connection

Short answer

The LinkedIn LATAM Tech Jobs Scraper reads LinkedIn's public job pages for 18 Latin American countries without an account or cookies, and adds the hiring company's website and domain — filled on 97.6% of 639 jobs measured on 1 October 2026 across 8 countries and 4 role searches. The tech stack was found on 99.4% of those jobs, workplace type on 64.5% and a LinkedIn salary range on 2.7%. LinkedIn ignores workplace, seniority and job-type filters for signed-out visitors, so the Actor applies them itself from each job page. LinkedIn's robots.txt disallows all paths for unnamed crawlers. Pricing is $2 per 1,000 jobs, plus $0.003 per distinct company profile.

Key points

  • The LinkedIn LATAM Tech Jobs Scraper covers 18 Latin American countries plus the Latin America region, reading public job pages with no account or cookies.
  • Company website and domain were filled on 97.6% of 639 jobs measured on 1 October 2026 across 8 countries and 4 role searches.
  • A salary range published on LinkedIn appeared on 2.7% of 639 jobs, from 0% in Brazil and Argentina to 7.5% in Chile.
  • LinkedIn ignores workplace type, experience level and job type for signed-out visitors — 13 of 13 tested variants returned the same jobs — so the Actor filters those itself.
  • One LinkedIn search stops at 1,000 jobs; each keyword and country pair is a separate search, so adding pairs is how a run goes further.
  • LinkedIn's robots.txt, fetched on 10 October 2026, disallows every path for crawlers it has not named, and its User Agreement prohibits scraping.
On this page11 sections

What it does

LinkedIn tech job postings in Brazil, Mexico, Argentina, Colombia, Chile and thirteen more Latin American countries, read from the public job pages LinkedIn shows signed-out visitors. Each job carries the hiring company's website and domain, the tech stack extracted from the description, workplace type, English level and, optionally, the company's LinkedIn profile.

output — one row
{
  "jobId": "4443434628",
  "jobUrl": "https://www.linkedin.com/jobs/view/4443434628/",
  "title": "Staff Frontend Software Engineer",
  "companyName": "Tractian",
  "location": "São Paulo, São Paulo, Brazil",
  "countryCode": "BR",
  "postedDate": "2026-09-26",
  "applicants": 200,
  "employmentType": "Full-time",
  "roleCategory": "frontend",
  "workplaceType": "remote",
  "latamEligible": true,
  "englishLevel": "fluent",
  "stack": ["React"],
  "applyType": "external",
  "website": "http://www.tractian.com",
  "domain": "tractian.com",
  "companySize": "501-1,000 employees",
  "companyHeadquarters": "Atlanta, Georgia",
  "emailPattern": "first.last",
  "emailPatternConfidence": 0.1,
  "emailPatternInferred": true,
  "mxValid": true,
  "catchAll": null
}

Why this one

Filters LinkedIn drops, applied from the job page

For a visitor without an account LinkedIn honours only keyword, location and posted-within; workplace type, experience level and job type returned exactly the same jobs in 13 of 13 tested variants. The LinkedIn LATAM Tech Jobs Scraper reads each job page and applies those three filters itself, and skipped jobs are never charged.

Padding is filtered out

LinkedIn fills searches with unrelated jobs when few match — a nonsense keyword still returns 10 jobs per page. By default a job is kept only if it mentions every word of the keyword and is a tech role, and a search with 5 pages in a row of nothing relevant is treated as exhausted rather than read to 1,000.

The company domain is always there

Website and domain come from the job page itself and ship with every job at the job price, filled on 97.6% of 639 measured jobs. The company profile — industry, size, headquarters, specialties, recent posts — is a separate optional charge, once per company per run.

Per-country rates, not one average

Fill rates differ sharply by country in the 639-job sample: the job poster ranges from 5.0% in Brazil to 21.3% in Peru, and workplace type from 55.0% in Brazil to 71.3% in Peru and Costa Rica. Those ranges are published because a regional average would mislead anyone working one market.

Use cases

  • Find remote or hybrid tech jobs across Latin America filtered by stack, English level and seniority.
  • Map which companies are growing engineering teams in a country, with their domain and LinkedIn profile.
  • Measure tech-stack demand by country from the stack extracted from each description.
  • Build a hiring-company list with headquarters, size and recent post activity.

Input

Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.

FieldDefaultWhat it does
outputTypeenumjobsWhat to scrape`jobs` for one row per posting, or `companies` for one row per company hiring for your search.
keywordsstring[]["software engineer"]KeywordsTitles or skills, like the LinkedIn search box. Each keyword is a separate search in every country. Up to 10.
countriesstring[]["BR","MX","AR","CO","CL"]CountriesLatin American countries, or the whole region. The row budget is shared in turns between every keyword and country.
postedWithinenummonthPosted within`any`, `day`, `week` or `month`. Applied by LinkedIn itself.
workplaceTypesstring[][]Workplace typeRemote, hybrid or on-site, read from each posting because LinkedIn ignores the filter for visitors.
experienceLevelsstring[][]Experience levelApplied by the Actor from each job page.
employmentTypesstring[][]Employment typeApplied by the Actor from each job page.
techOnlybooleantrueTech jobs onlySkip postings that are not software, data, cloud, QA, security, product or IT roles.
requireKeywordMatchbooleantrueOnly jobs that mention your keywordDrops the unrelated jobs LinkedIn pads thin searches with.
includeCompanyDetailsbooleantrueCompany profileThe company's public LinkedIn profile, charged once per company per run. Website and domain are included without it.
inferEmailPatternbooleanfalseEmail patternpersonal dataDNS-only email format with MX check and provider, plus the poster's likely email when known. Charged only when backed by published emails.
includePersonalEmailsbooleanfalseInclude personal emailspersonal dataPersonal-provider addresses are withheld and only counted unless this is on.
maxItemsinteger100Max itemsRows to deliver, jobs or companies.
maxConcurrencyinteger3Parallel requestsEach on its own connection at about one request per second, the pace measured to stay clear of rate limits.

Output and fill rates

A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.

FieldFilledMeaning
titlestring100%With job id and URL, company, location, country, posted date and description.
senioritystring100%With `employmentType`, as LinkedIn labels them.
industriesstring[]99.7%As listed on the job page.
stackstring[]99.4%At least one of about 170 technologies extracted from the description.
applyTypestring98.7%Company site 73.7%, LinkedIn 25.0%.
domainstring97.6%With `website`. Always shipped, with or without the company profile.
companyHeadquartersstring97%Of 329 jobs whose company page was read.
applicantsinteger65.9%As a number; the rest say "Be among the first 25" and are kept as an upper bound.
workplaceTypestring64.5%Remote, hybrid or on-site; 55.0% in Brazil to 71.3% in Peru and Costa Rica.
englishLevelstring29.6%English mentioned on 47.6%; a level stated on 29.6%.
posterNamestring10.2%With `posterHeadline` and `posterProfileUrl`, when LinkedIn shows a poster; withheld for EU, EEA, UK and Swiss jobs. Personal data.
contactEmailsstring[]6.7%Emails in the description. All corporate in the sample; 0 personal-provider emails.
salaryMinnumber2.7%With `salaryMax`, `salaryCurrency` and `salaryPeriod`: LinkedIn's published pay range; 0% in Brazil and Argentina, 7.5% in Chile.

Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.

Datasets

Different record types go to different datasets, so the main table never carries columns that are blank on most rows.

  • defaultOne row per job, or one row per hiring company with `outputType: companies`. Views: Jobs, Outreach, Salary, Hiring companies, Errors.billed
  • RUN_SUMMARYRows delivered and charged, jobs skipped by reason, network summary.never billed
  • ERRORSPages that could not be read. Never charged.never billed

Pricing

Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.

EventPriceNotes
apify-actor-startActor start$0.00001Platform minimum, one event per GB of memory.
jobJob$0.002One LinkedIn job with its full page, tech stack, workplace type, English level, salary when published, job poster when shown, and the company website and domain. $2 per 1,000.
companyCompany profile$0.003The hiring company's public LinkedIn profile. Charged once per company per run.
email-patternEmail pattern with evidence$0.01Once per domain per run, only when backed by emails the company published. Inferred patterns are free.

Measurements

Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.

Fill-rate sample

639 jobs, 8 countries × 4 searches

1 October 2026: Brazil, Mexico, Argentina, Colombia, Chile, Peru, Uruguay, Costa Rica × software engineer, data engineer, frontend developer, devops. About 80 jobs per country.

Company fields

329 jobs with a company page read

Company headquarters, specialties and founded year are rates within those 329 jobs, not within all 639.

Ignored filters

13 of 13 variants identical

Workplace, experience and job-type filters for a signed-out visitor returned exactly the same jobs as no filter.

Platform reliability

0 blocked in 4,039 requests

42 runs on Apify: 60 HTTP 429 (1.5%) and 13 network errors, all retried with no page lost.

Distinct companies per 100 jobs

63–70

Two 100-job runs on Apify on 2 October 2026, which sets the company-profile cost at about $3.90–4.10 per 1,000 jobs.

What it will not do

Stated plainly so you can judge fit before spending anything.

  • LinkedIn's robots.txt disallows all paths for unnamed crawlers and its User Agreement prohibits scraping; the Actor reads public job pages regardless, and that is a decision with legal risk for the operator.
  • One LinkedIn search reaches at most 1,000 jobs.
  • Salary is rare: 2.7% of 639 jobs carry a LinkedIn pay range and 3.0% mention a salary in the text.
  • Workplace type is stated on 64.5% of jobs; with a workplace filter set, jobs that do not state it are skipped.
  • The job poster is shown on 10.2% of jobs, between 5.0% and 21.3% by country.
  • Across 42 runs and 4,039 requests, 1.5% were rate-limited with HTTP 429 and retried; none were blocked.

Privacy

  • Job posters are delivered as LinkedIn shows them publicly — name, headline and profile on 10.2% of 639 jobs — except for jobs located in the EU, EEA, UK or Switzerland, where they are always withheld.
  • Corporate emails published in postings are included; addresses at personal providers are withheld and masked in the text unless `includePersonalEmails` is on.
  • Names and photos of a company's employees on its LinkedIn page are never read.
  • The email pattern is DNS-only: no email is sent and no mailbox is probed.
  • Removal requests: privacy@actorstack.dev

See also the data removal process.

Frequently asked questions

Does the LinkedIn LATAM scraper need a LinkedIn account?
No. The LinkedIn LATAM Tech Jobs Scraper reads the public job pages LinkedIn shows signed-out visitors and never logs in. Login, signup and personal profile paths are blocked in the code.
Is scraping LinkedIn jobs allowed?
LinkedIn says no. Its robots.txt, fetched on 10 October 2026, disallows every path for crawlers it has not named, and its User Agreement prohibits scraping. The Actor reads public job pages anyway, so whether a use is acceptable is a question for the operator and their lawyer.
Why is the salary empty so often?
Few Latin American postings publish one: 2.7% of 639 measured jobs carry a LinkedIn pay range and 3.0% mention a salary in the text. The text salary is only read next to a salary word, so funding rounds are not mistaken for pay.
How much do 1,000 LinkedIn jobs cost?
$2.00 for the jobs at $0.002 each, with description, stack, website and domain. Company profiles add $0.003 per distinct company; at 63 to 70 companies per 100 jobs that is about $3.90 to $4.10 per 1,000 jobs in total.
Can I get more than 1,000 jobs?
Not from one search, which LinkedIn stops at 1,000. Each keyword and country pair is its own search, and the row budget is shared between them in turns, so add keywords or countries.

Guides for this Actor