Gupy Jobs Scraper (Vagas de Emprego) - Keyword, City & Company avatar

Gupy Jobs Scraper (Vagas de Emprego) - Keyword, City & Company

Pricing

$1.99 / 1,000 jobs

Go to Apify Store
Gupy Jobs Scraper (Vagas de Emprego) - Keyword, City & Company

Gupy Jobs Scraper (Vagas de Emprego) - Keyword, City & Company

Search Gupy, Brazil's jobs platform, by keyword, city or company subdomain: title, company, city and state, workplace type, contract type, publish time, application deadline and job URL. No login or cookies. Deduplicated across searches; empty or cut-short searches are free and marked.

Pricing

$1.99 / 1,000 jobs

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

Gupy Jobs Scraper (Vagas de Emprego)

A Lantern Lab Actor. Give it keywords, a Brazilian city, or Gupy company subdomains and get Gupy's public job listings (vagas de emprego) back: title, company, city and state, workplace type, contract type, publish time, application deadline, and the job URL. No Gupy login, no cookies, no account of your own.

Pay per job row: USD 1.99 per 1,000 jobs. Search-status rows, the run summary and empty results are free, and there is no run-start fee.

What it does

  • Searches each keyword separately and labels every row with the keyword that produced it, so one run can cover many keywords. The city filter, when given, applies to every search in the run.
  • Collects a whole company's listings from its Gupy subdomain (the part before .gupy.io, for example ambev for ambev.gupy.io): the Actor resolves the subdomain to the company's exact name on Gupy and searches that board. Keywords and companies mix freely in one run.
  • Deduplicates across the whole run: a job that matches several of your keywords, or that a company unit and a keyword unit both found, is written once and charged once.
  • Keeps the source identifier (jobId), the platform's own times (publishedAt, applicationDeadline) and our collection time (collectedAt) as separate fields.
  • Carries Gupy's own enums through untranslated: workplaceType is hybrid, on-site or remote, and type is a raw Gupy value such as vacancy_type_effective (effective/CLT role) or vacancy_legal_entity (legal-entity contract).
  • Writes country as the constant "Brazil" on every row: Gupy is a Brazilian jobs platform and serves no other country, so this is a fact of the platform rather than a per-row field.
  • Says what happened per search unit. A keyword Gupy answered with nothing is recorded as an empty result; a unit cut short by a limit, a refusal or an error is marked partial: true with the reason. The two are different records and are never confused.
  • Caps itself: maxUpstreamRequests is a hard ceiling on requests to Gupy for the whole run, derived from your input when you leave it empty, so a run is never unbounded.
  • Charges only job rows. Empty results, per-unit status rows and the run summary are free.

What it does not do

  • No job detail pages beyond the search listing: everything except the description comes from the search itself. The description is included in the listing and written only when you ask for it (includeDescription, off by default — descriptions are several kilobytes each).
  • No salary data (Gupy does not publish it on listings) and no applicant or personal data of any kind.
  • No other jobs platform, no translation, no login-only content.
  • No scheduling or monitoring built in; use Apify schedules.

Input

FieldDefaultMeaning
searchQueriesrequired*One keyword per line, in Portuguese or any language Gupy matches: analista de dados, dev jr, vendedor.
companiesoptional*Gupy company subdomains, the part before .gupy.io of a company's careers page: ambev, afinz. *At least one keyword or one company is required.
cityemptyFilter every search to one city, as Gupy writes it: São Paulo, Rio de Janeiro. A misspelled city returns an empty result, not an error.
maxJobs100Upper bound on rows per keyword or per company, counting only fresh jobs. Capped at 1000.
includeDescriptionfalseWrite the full description text on every row. Several kilobytes per job; the price per job does not change.
maxUpstreamRequestsderivedHard ceiling on requests to Gupy for the whole run. Leave empty and the Actor works one out from your input.
proxyConfigurationApify ProxyThe proxy the requests go through. The datacenter default is what this Actor is measured on.
{
"searchQueries": ["analista de dados", "cientista de dados"],
"companies": ["ambev"],
"city": "São Paulo",
"maxJobs": 100
}

Output

One row per job, recordType: "job":

FieldMeaning
jobIdGupy's own numeric identifier for the listing; the dedupe key.
titleThe job title as Gupy publishes it.
companyThe company as Gupy names it on its career page.
city, stateThe listing's location as Gupy writes it, or null when the listing names none.
countryThe constant "Brazil" — Gupy operates in Brazil only.
workplaceTypeGupy's own enum: hybrid, on-site, remote.
typeGupy's own contract-type enum, for example vacancy_type_effective or vacancy_legal_entity.
publishedAtWhen Gupy published the listing, as an ISO 8601 instant.
applicationDeadlineGupy's application deadline, or null while the listing is open-ended.
descriptionThe full description text when includeDescription is on, null otherwise.
urlThe listing's URL on the company's board.
searchQuery / companyBoardWhich unit produced this row: the keyword, or the company subdomain. Exactly one is set.
rankPosition in that unit's results, counting from 1.
partial, partialReasonAlways false / null on a job row: the row exists because the job was collected.
collectedAtOur own collection time, separate from publishedAt.

One row per search unit, recordType: "search_status", never charged:

FieldMeaning
jobsReturned / jobsChargedRows this unit wrote and charged.
duplicatesSkippedJobs an earlier unit in the run had already collected.
pagesFetchedJob-search pages fetched for this unit.
reportedAvailableGupy's own total for the search, which Gupy itself caps at 100 — read it as "at least", not as an exact count.
companyFor a company unit, the exact board name the subdomain resolved to.
partial / partialReasontrue with upstream_request_cap, charge_limit_reached, blocked, upstream_error or not_collected when the unit's results are incomplete.
statusTextThe same thing in a sentence, so the dataset explains itself.

The last row is recordType: "RUN_SUMMARY" — jobs collected and charged, empty units, partial units by reason, company boards resolved, requests sent by endpoint, bytes moved, and why collection stopped. The same object is also in the run's key-value store under RUN_SUMMARY.

Partial is not empty

jobsReturned: 0 with partial: false means Gupy has no job for that keyword or company. partial: true means the unit's results are incomplete and there may well be more. A run that collected nothing and had partial units fails rather than reporting an empty success.

Limits and boundaries

  • Only Gupy's public job search and public company boards. No login, no cookies, no account, no personal or applicant data.
  • Gupy serves 12 jobs per page and reports total capped at 100, so reportedAvailable above 100 is a floor rather than a count; collection pages until your maxJobs, the end of the list, or the request ceiling.
  • A company must be addressed by its exact Gupy subdomain. The name filter behind it is exact-match on Gupy's side; the Actor resolves the subdomain to the exact name for you, and a subdomain that is not a Gupy career board is reported on its status row rather than searched blindly.
  • city is matched exactly as Gupy writes the city name.
  • publishedAt and applicationDeadline are Gupy's own values and are not re-derived from the page.