Catho Jobs Scraper - Brazil Vagas, Salaries & Details avatar

Catho Jobs Scraper - Brazil Vagas, Salaries & Details

Pricing

from $1.40 / 1,000 job returneds

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

Catho Jobs Scraper - Brazil Vagas, Salaries & Details

Every Catho job for your search words, as rows: title, company, city and state, the salary Catho shows, contract type, benefits, the full description and the posting date. Narrow it to a city, a state or Catho’s own home-office filter. No Catho account and no cookies. You pay per job delivered.

Pricing

from $1.40 / 1,000 job returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Catho Jobs Scraper

Catho is where most of Brazil's hiring is posted, and its search box is not built for anyone who wants the whole list. You get twenty cards at a time, no export, and the description only after a click.

This actor gives you the list. Type what you would type into Catho: analista de dados, tecnico de enfermagem, motorista. Add a city or a state if you want one. Every matching job comes back as a row: title, company, where it is, what it pays, the contract, the benefits, the full description, and when it went up.

No Catho account. No cookies to paste. Nothing to log into.


What a row looks like

A real one, copied out of a run on 20 September 2026. Only the description is cut short. It runs to 822 characters:

{
"jobId": "38432753",
"title": "Enfermeiro para Cirurgia Plástica",
"company": "Cirurgia Plástica",
"confidentialCompany": false,
"city": "São Paulo",
"state": "SP",
"stateName": "São Paulo",
"country": "Brasil",
"otherLocations": [],
"seniority": "Pleno",
"workModel": null,
"homeOffice": null,
"salaryText": "R$ 6.500",
"salaryMin": 6500,
"salaryMax": null,
"salaryBand": "A partir de R$ 6.000,00",
"salaryCurrency": "BRL",
"contractType": "CLT (Efetivo)",
"contractTypes": ["CLT (Efetivo)"],
"workSchedule": "2a a sábado",
"benefits": ["Seguro saúde", "Assistência médica / Medicina em grupo", "Assistência odontológica", "Vale-transporte"],
"category": "Saúde",
"subCategory": "Enfermagem",
"roles": ["Enfermeiro de Centro Cirúrgico"],
"openings": 1,
"sponsored": true,
"hasScreeningQuestions": true,
"screeningQuestionCount": 4,
"description": "Orientar e preparar o paciente no pré-operatório\nConferir exames, documentos e protocolos cirúrgicos\nAuxiliar a equipe m…",
"postedAt": "2026-09-16T10:47:24",
"postedText": "Publicada em 16/09",
"updatedAt": "2026-09-16T10:47:24",
"expiresAt": "2026-12-15T10:47:24",
"url": "https://www.catho.com.br/vagas/enfermeiro-para-cirurgia-plastica/38432753",
"searchTerm": "enfermeiro",
"detailsLoaded": true,
"scrapedAt": "2026-09-20T00:33:14.368Z"
}

That is a well-filled row. Plenty are thinner. workSchedule, benefits and salaryMin are empty more often than not, and the table further down says how often.


Input

{
"searches": ["analista de dados", "cientista de dados"],
"city": "São Paulo, SP",
"workModel": "remote",
"sortBy": "recent",
"maxResults": 200,
"includeDescription": true
}
FieldWhat it does
searchesUp to 10 lines. Each is its own Catho search. Accents optional.
city"São Paulo, SP", with the two-letter state. Catho has more than one city of most names, and picks a small one if you leave the state off. This actor refuses a bare city name rather than quietly returning the wrong town.
stateUsed on its own for a whole state, or alongside a city written without one.
workModelremote, hybrid, presential, or any. This is Catho's own Modalidade filter. There is a note below on why it matters.
sortByrecent for newest first, or Catho's relevance order.
maxResultsAcross all your searches. Each job returned is charged once.
includeDescriptionOn by default. Off returns only what the search card shows and reads about six times less.

Run it with no searches at all and you get one example row, marked _sample, free, so you can see the shape before you commit to anything.


The one thing to know about "home office"

Catho does not put a work model on the job. Not on the card, not in the job's own record, not in the page markup. We looked in all three. The only place it exists is Catho's own Modalidade filter.

So: set workModel to remote and every row you get back is a job Catho itself files as home office, with workModel: "remote" and homeOffice: true on it. Leave it on Any and those two fields come back null, because guessing from the description would be making it up. A job whose text says "Home Office" in the middle of a paragraph is not the same thing as a job Catho has flagged, and we are not going to pretend it is.

If you want a home-office feed, filter for it. That is the honest way to get one here.


What the salary field actually contains

Brazilian employers on Catho mostly publish a band, not a number. Measured across 120 jobs from a broad nursing search and 39 from filtered developer searches:

  • salaryBand, filled on 100% of rows. Catho's own wording: "A Combinar", "A partir de R$ 2.000,00", "Até R$ 2.000,00".
  • salaryMin, an actual figure on 26% of rows. When the employer published one, it is there.

Nothing is hidden behind a login. Catho shows the same salary to a signed-out visitor as to a signed-in one, and that is what you get. There just often isn't a number to show.


Coverage, measured

FieldBroad search (120 jobs)Filtered search (39 jobs)
title, city, state, description, postedAt, url, salaryBand100%100%
company named85%90%
contractType97%100%
category98%97%
benefits51%62%
salaryMin (a real figure)26%10%
seniority20%54%

Where company is empty, confidentialCompany is true. That is Catho's "Empresa Confidencial", where the employer chose not to be named. The row is still complete in every other way.


What this does not do

  • It does not invent a work model. See above. null where Catho says nothing.
  • seniority is read off the job title, because Catho has no seniority field. Júnior, Pleno, Sênior, Estágio, Trainee, Coordenação, Gerência and so on, when the employer put one there. About a fifth of jobs on a broad search, half on developer searches. It is null otherwise, not defaulted to something.
  • Catho's results count is not the number of jobs you can get. Its page says "8.782 resultados" for desenvolvedor; paging through it end to end gives 763 distinct jobs. That is Catho's limit, not this actor's, and the actor stops when Catho stops rather than paying for a page of repeats. Depth varies by term: enfermeiro was still going past 880.
  • No filters beyond the ones listed. Catho's contract, salary-band and posting-date filters have no working URL form. We tried fourteen shapes and Catho ignored every one. Rather than ship a control that silently does nothing, they are not here. Filter contractType and postedAt on the rows instead.
  • No résumés, no candidates, no employer contact details. Job listings only.
  • No Catho account, so nothing that needs one.

Pricing

You pay per job delivered, flat, with no volume tiers. The price on this page is the price at every size.

Free, always:

  • the _sample row an empty run returns;
  • a search that finds nothing;
  • a job already delivered by an earlier search in the same run. Repeats are dropped, not billed;
  • a job whose full record did not load when you asked for details;
  • a search where Catho did not recognise the city you gave (you get a row saying so, free, instead of a nationwide crawl you did not ask for).

If you set a maximum charge on the run, the actor reads it before its first request and stops at it.


Speed, from real runs

RunJobsTime
one search, one city, newest first123.0 s
three searches, one city, home office only395.7 s
one search, nationwide1208.6 s

Questions people actually ask

Can I scrape Catho without logging in? Yes. This actor never signs in and never handles a cookie. Everything it returns is what Catho shows a signed-out visitor.

Can I get the salary from Catho jobs? You get whatever Catho publishes: the band on every job, and a figure on about a quarter of them. Nothing is withheld from signed-out visitors that signing in would reveal.

How do I get only home-office jobs from Catho? Set workModel to remote. That is Catho's own Modalidade filter, and it is the only place Catho records a job's work model.

How many jobs can I pull for one search term? As many as Catho will page. Measured: 763 for desenvolvedor, over 880 for enfermeiro. The number Catho prints above the list is much larger than what it will actually serve.

Can I run this every morning for new postings? Yes. Set sortBy to recent and a modest maxResults. Each row carries postedAt and jobId, so de-duplicating against yesterday's pull is a one-line join.

What comes back if a term has no jobs? Nothing, and nothing is charged. The run still finishes green and the status message says which search came up empty.

Does it work for terms in English? Where Brazilian employers post in English, yes. software engineer returns real listings. Portuguese terms return far more.


The run report

Every run writes a RUN_REPORT record next to the data: per search, how many jobs Catho claimed, how many pages were read, how many came back, how many repeats were skipped, how many had no details, and why the search stopped. Worth a look when a number surprises you.