Catho Jobs Scraper - Brazil Vagas, Salaries & Details avatar

Catho Jobs Scraper - Brazil Vagas, Salaries & Details

Pricing

from $1.34 / 1,000 jobs

Go to Apify Store
Catho Jobs Scraper - Brazil Vagas, Salaries & Details

Catho Jobs Scraper - Brazil Vagas, Salaries & Details

Scrape Catho jobs in Brazil by search words, city, state or work model. Each row has the title, company, city and state, the salary line and band Catho shows, contract, benefits, the full description and posting date. No Catho account or cookies. $1.40 per 1,000 jobs.

Pricing

from $1.34 / 1,000 jobs

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 days ago

Last modified

Share

Scrape Catho jobs in Brazil, with the salary, contract, benefits and the full description: type what you would type into Catho's own search box, analista de dados or motorista, add a city or a state if you want one, and the matching jobs come back as rows. No Catho account and no cookies.

Two things catch people out. Most employers publish a salary band rather than a number. And Catho only reveals a job's work model through its own filter, so workModel and homeOffice stay empty unless you filter on one.

InputSearch words, up to 10, with an optional city, state or work model
OutputOne row per job: title, company, place, salary line and band, contract, benefits, description, dates
Ceiling20,000 per run, though one search usually runs dry somewhere between 300 and 900 jobs
Account neededNone
Price$1.40 per 1,000 jobs on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 3,500

🔍 What Catho Jobs Scraper does

Each line of search words is its own Catho search, and a job found by two of them is kept once. With Full job details on, the default, it opens each job's own record for the description, contract, benefits, salary band and dates. Off, you get only what the search card shows, which reads about six times less.

A city needs its two-letter state: São Paulo, SP. Catho has more than one city of most names and picks a small one if the state is missing, so a bare city is refused before anything is searched. Catho also answers a place it does not recognise with jobs from the whole of Brazil, so the run checks which place Catho actually applied, and if it was not yours, that search stops with a free row instead of a nationwide crawl you did not ask for.

The home office point, plainly: Catho does not put a work model on the job card, in the job's own record or in the page markup. The only place it exists is Catho's own Modalidade filter. Set workModel to remote and every row is a job Catho files as home office, with homeOffice: true on it. Leave it on any and both fields come back null, because guessing from the description would be making it up.

Salary is mostly a band. Across 120 jobs from a broad nursing search, salaryBand was filled on every row and salaryMin, an actual figure, on 26%. Catho shows a signed-out visitor the same salary it shows everyone else; often there is just no number to show.

📋 What data you get from each Catho job

What you getField
Catho's job id and the listingjobId, url
Title and company, and whether the employer chose to stay unnamedtitle, company, confidentialCompany
Where the job iscity, state, stateName, country, otherLocations
Seniority read off the titleseniority
Home office or not, when you filter on a work modelworkModel, homeOffice
The salary line, the figure when published, and Catho's bandsalaryText, salaryMin, salaryMax, salaryBand, salaryCurrency
Contract, hours and benefitscontractType, contractTypes, workSchedule, benefits
Where Catho files it, and how many openingscategory, subCategory, roles, openings
A paid listing, and whether applying means answering questionssponsored, hasScreeningQuestions, screeningQuestionCount
The full text and the datesdescription, postedAt, updatedAt, expiresAt, postedText
Which search found it, whether its record loaded, when it was readsearchTerm, detailsLoaded, scrapedAt

▶️ How to scrape Catho jobs

  1. Open Catho Jobs Scraper and click Try for free.
  2. Type one search per line into Search words.
  3. Add a City with its state, a State, or a Work model if you want one.
  4. Set Maximum jobs, and pick Order if you want the newest first.
  5. Click Start, then download the dataset as JSON, CSV or Excel.

The form arrives with analista de dados filled in and a cap of 100, so a run started without editing it is a real search.

💰 How much does it cost to scrape Catho jobs?

$1.40 per 1,000 jobs on the Free plan, which is $0.0014 a job. Paid plans pay a little less: $1.38 on Starter, $1.36 on Scale and $1.34 on Business. On the free plan, the $5 Apify gives you each month covers about 3,500 jobs.

Not charged: the sample job, a search that finds nothing, a job an earlier search in the same run already delivered, a job whose full record did not load when you asked for details, and a search stopped because Catho did not recognise the place. If you set a maximum charge on the run, it is read before the first request and the run stops at it.

📥 What you give it

{
"searches": ["analista de dados", "cientista de dados"],
"city": "São Paulo, SP",
"workModel": "remote",
"sortBy": "recent",
"maxResults": 200,
"includeDescription": true
}

With no search words at all, the run returns one sample job from Catho's own list, labelled and free.

FieldWhen left outWhat it is
searchesnoneJob titles, roles or skills, one per line, up to 10. Accents are optional, and English works where employers use it.
citynoneA city with its two-letter state, such as São Paulo, SP.
stateANYA state such as SP or RJ, for the whole state, or alongside a city written without one.
workModelANYremote, hybrid or presential, through Catho's own Modalidade filter.
sortByrelevancerelevance, or recent for newest first.
maxResults1001 to 20,000 jobs across all your searches.
includeDescriptiontrueOpens each job's record for the full details. Off returns the card only: title, company, city, the salary line and a rough posting tag.
proxyConfigurationnot neededOptional. Servers of your own.

A city without its state stops the run before anything is searched, with a message saying what to fix.

📤 What you get back

A real row from a run on 30 September 2026, with the description cut short:

{
"jobId": "38566637",
"title": "Analista de Dados",
"company": "RANDSTAD SP",
"confidentialCompany": false,
"city": "São Paulo",
"state": "SP",
"stateName": "São Paulo",
"country": "Brasil",
"otherLocations": [],
"seniority": null,
"workModel": null,
"homeOffice": null,
"salaryText": "R$ 4.000",
"salaryMin": 4000,
"salaryMax": null,
"salaryBand": "A partir de R$ 3.000,00",
"salaryCurrency": "BRL",
"contractType": "CLT (Efetivo)",
"contractTypes": ["CLT (Efetivo)"],
"workSchedule": "Período Integral",
"benefits": [],
"category": "Informática",
"subCategory": "Informática /TI / Engenharia da Computação",
"roles": ["Analista de Banco de Dados"],
"openings": 1,
"sponsored": false,
"hasScreeningQuestions": false,
"screeningQuestionCount": 0,
"description": "A Randstad é líder global em soluções de Recursos Humanos, atuando como um parceiro do talento em toda a sua jornada profissional...",
"postedAt": "2026-09-25T16:32:19",
"postedText": "Publicada em 25/09",
"updatedAt": "2026-09-25T16:32:19",
"expiresAt": "2026-12-24T16:32:19",
"url": "https://www.catho.com.br/vagas/analista-de-dados/38566637",
"searchTerm": "analista de dados",
"detailsLoaded": true,
"scrapedAt": "2026-09-30T02:24:49.966Z"
}
FieldHow to read it
jobIdThe key for joining today's pull onto yesterday's.
confidentialCompanytrue where company is empty: Catho's "Empresa Confidencial", an employer that chose not to be named.
seniorityRead off the job title, since Catho has no such field: Júnior, Pleno, Sênior, Estágio and so on. Null when the title carries none.
workModel, homeOfficeFilled only when you filter on a work model.
salaryMin, salaryBandThe figure when the employer published one, and Catho's band, which is nearly always there.
workSchedule, benefitsEmpty more often than not.
description, postedAt, updatedAt, expiresAtFrom the job's own record, with full details on. postedText is the card's own tag and is always there.

🧾 Reading the output

RowHow to spot itCharged
A jobno _sample and no _diagnostic fieldyes
The sample job_sample: true and charged: false, plus a note. Only when there were no search wordsno
A place Catho did not recognise_diagnostic: true, charged: false, the searchTerm, the place and a note saying what to fixno

Real jobs carry no charged field. The sample is a real job from Catho's list, so drop rows with _sample or _diagnostic rather than looking at the job itself.

A search with no jobs writes nothing to the dataset and is not charged; the status message names it. Every run also writes a RUN_REPORT record to its key-value store with, per search, the jobs Catho claimed, pages read, jobs returned, repeats skipped, jobs without details, and why it stopped.

💡 What people use it for

  • A morning feed of new postings: sortBy set to recent, a modest maxResults, and jobId to skip what you had yesterday.
  • A home-office job list, through workModel set to remote, which is the only honest way to get one from Catho.
  • Reading salary bands for a role across states, from salaryBand and salaryMin.
  • Seeing which employers in a field post as "Empresa Confidencial".

🚧 What it does not do

  • Catho's results count is not what you can get. Its page claimed 8,782 results for desenvolvedor; paging end to end gave 763 distinct jobs. The run stops after two pages with nothing new rather than paying for repeats.
  • No other filters. Catho's contract, salary-band and posting-date filters have no working form, so they are not offered. Filter contractType and postedAt on the rows.
  • seniority is only there when the title says so: about a fifth of jobs on a broad search, half on developer searches.
  • No résumés, candidates or employer contact details. Job listings only.
  • It is not an official Catho tool. Dami's Studio is independent and is not affiliated with or endorsed by Catho, or by any other company named on this page.

🧭 Which job scraper do you need?

If you wantUse
Catho jobs in Brazil, with the salary Catho showsThis one
Freelance projects on Workana's English, Spanish and Portuguese boardsWorkana Jobs Scraper
Public LinkedIn jobs by keyword and locationLinkedIn Jobs Scraper
Open jobs at companies you name, read from their own hiring systemCareer Site Jobs Scraper
Remote jobs, with the region the employer hires fromRemotive Jobs Scraper

❓ Questions people ask

Do I need a Catho account?

No. No account, no cookies, nothing to paste. The salary a signed-out visitor sees is the same one everyone sees.

How do I get only home-office jobs?

Set workModel to remote. That is Catho's own Modalidade filter.

How many jobs can I pull for one search term?

As many as Catho will page: 763 for desenvolvedor, over 880 for enfermeiro. The number Catho prints above its list is much bigger than what it serves.

Does it work for terms in English?

Where Brazilian employers post in English, yes. software engineer returns real listings, and Portuguese terms return far more.

Why did my run stop straight away?

A city was given without its state, or the maximum charge set for the run did not cover a single job. The run's message says which.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/catho-jobs-scraper. Either way the run happens on your Apify account at the same price.

It reads public job listings, the same ones any signed-out visitor sees. If a listing names a person, that is personal data under the LGPD and similar laws, so have a reason for keeping it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the input you used and the run ID, and the RUN_REPORT record if you can.