Catho Jobs Scraper - Brazil Vagas, Salaries & Details
Pricing
from $1.40 / 1,000 job returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
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}
| Field | What it does |
|---|---|
searches | Up 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. |
state | Used on its own for a whole state, or alongside a city written without one. |
workModel | remote, hybrid, presential, or any. This is Catho's own Modalidade filter. There is a note below on why it matters. |
sortBy | recent for newest first, or Catho's relevance order. |
maxResults | Across all your searches. Each job returned is charged once. |
includeDescription | On 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
| Field | Broad search (120 jobs) | Filtered search (39 jobs) |
|---|---|---|
| title, city, state, description, postedAt, url, salaryBand | 100% | 100% |
| company named | 85% | 90% |
| contractType | 97% | 100% |
| category | 98% | 97% |
| benefits | 51% | 62% |
| salaryMin (a real figure) | 26% | 10% |
| seniority | 20% | 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.
nullwhere Catho says nothing. seniorityis read off the job title, because Catho has no seniority field.Júnior,Pleno,Sênior,Estágio,Trainee,Coordenação,Gerênciaand so on, when the employer put one there. About a fifth of jobs on a broad search, half on developer searches. It isnullotherwise, 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:enfermeirowas 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
contractTypeandpostedAton 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
_samplerow 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
| Run | Jobs | Time |
|---|---|---|
| one search, one city, newest first | 12 | 3.0 s |
| three searches, one city, home office only | 39 | 5.7 s |
| one search, nationwide | 120 | 8.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.