# Gupy.io Scraper — Brazil Job Board (`unfenced-group/gupy-scraper`) Actor

Extract job listings from any Gupy.io company career page. No proxy, no API key. 64 fields per job including hiring pipeline stages, benefits, company social links and full structured address.

- **URL**: https://apify.com/unfenced-group/gupy-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Gupy Scraper — Brazil Job Board

Extract job listings from any company career page on Gupy.io — Brazil's #1 HR and recruitment platform. **No proxy, no browser, no API key required.**

### Why this scraper?

#### 🚀 Complete data — 61 fields per job
Title, department, city, workplace type, full hiring pipeline stages, company social links, benefits, salary range, PCD/disability flag, video URLs and more.

#### ⚡ Fast listing mode — no detail fetches
Toggle `fetchDetails` off to retrieve all jobs in a single request per company — ideal for monitoring job counts, filtering by location or department, and building pipelines that don't need full descriptions.

#### 🌎 Multi-company in one run
Scrape Itaú, Ambev, Sicredi and any other Gupy-powered company simultaneously by listing their subdomains.

#### 🔒 Zero bot detection
Public career pages, no authentication, no proxy required. Fully reliable for scheduled runs.

---

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `subdomains` | `string[]` | — | Company subdomains to scrape, e.g. `["vempra", "ambev", "sicredi"]`. Full URLs are also accepted. |
| `startUrls` | `RequestSource[]` | — | Alternative: full Gupy career URLs, e.g. `https://vempra.gupy.io`. |
| `fetchDetails` | `boolean` | `true` | When `true`, fetches each job's full detail page for description, prerequisites, responsibilities, benefits, salary, hiring pipeline, and all dates. When `false`, returns listing-level data only (faster and cheaper for large companies). |
| `maxJobsPerCompany` | `integer` | `0` | Cap results per company. `0` = unlimited. |
| `requestDelay` | `integer` | `200` | Mean delay in milliseconds between requests (Gaussian randomised). |
| `proxyConfiguration` | `Proxy` | — | Optional. Not required for Gupy — leave empty. |

---

### Output schema

```json
{
  "id": 11122229,
  "code": "G_CS_36",
  "jobUrl": "https://vempra.gupy.io/jobs/11122229",
  "applicationUrl": "https://vempra.gupy.io/jobs/11122229/apply",

  "companySubdomain": "vempra",
  "companyId": 2,
  "companyName": "Gupy",
  "companyCareerPageUrl": "https://vempra.gupy.io",
  "companyLogoUrl": "https://attachments.gupy.io/...",
  "companyBannerUrl": null,
  "companyWebsite": null,
  "companyAbout": "Somos uma empresa de tecnologia...",
  "companyAboutHtml": "<p>Somos uma empresa de tecnologia...</p>",
  "companyLinkedin": null,
  "companyFacebook": null,
  "companyInstagram": null,
  "companyGlassdoor": null,
  "companyTimezone": "America/Sao_Paulo",
  "companyLanguage": "pt",

  "title": "Consultor de Customer Success",
  "type": "vacancy_type_effective",
  "workplaceType": "hybrid",
  "isRemote": false,
  "publicationType": "external",
  "isInternalMobility": false,
  "quickApply": false,
  "department": null,
  "role": null,
  "jobLanguage": null,
  "skills": null,
  "reason": "staff_replacement",
  "isDisabilityJob": true,

  "fullAddress": "Av. Paulista, 1079, São Paulo, SP, 01311200",
  "city": "São Paulo",
  "state": "São Paulo",
  "stateCode": "SP",
  "country": "Brasil",
  "countryCode": "BR",

  "publishedAt": "2026-04-10T17:35:23.160Z",
  "expiresAt": "2026-05-04",
  "registerEndDate": "2026-06-09",

  "description": "Somos uma empresa de tecnologia...",
  "descriptionHtml": "<p>Somos uma empresa...</p>",
  "prerequisites": "Experiência prévia em Customer Success...",
  "prerequisitesHtml": "<ul><li>...</li></ul>",
  "responsibilities": "A área de Operações reúne...",
  "responsibilitiesHtml": "<p>A área de Operações...</p>",
  "benefits": "Vale-refeição no cartão Caju; Plano médico...",
  "benefitsHtml": "<ul><li>...</li></ul>",

  "jobSteps": [
    { "id": 65670466, "name": "Cadastro", "order": 0, "type": "register", "category": "registration" },
    { "id": 65670463, "name": "Entrevista", "order": 1, "type": "offline", "category": "interview" }
  ],
  "jobStepsCount": 7,

  "salaryRange": null,
  "journey": null,
  "contractType": null,

  "jobImageUrl": "https://attachments.gupy.io/...",
  "jobSocialImageUrl": "https://attachments.gupy.io/...",
  "videoUrl": null,
  "videoTitle": null,

  "isPostedOnGoogle": true,
  "status": "published",

  "scrapedAt": "2026-05-06T10:00:00.000Z"
}
````

***

### Examples

**Single company — full details**

```json
{
  "subdomains": ["vempra"],
  "fetchDetails": true
}
```

**Large company — listing only (fast mode)**

```json
{
  "subdomains": ["sicredi"],
  "fetchDetails": false
}
```

**Multi-company run**

```json
{
  "subdomains": ["vempra", "ambev", "suzano", "usiminas"],
  "fetchDetails": true,
  "maxJobsPerCompany": 100
}
```

**Finding a company's subdomain**

Visit the company's Gupy career page. The subdomain is the part before `.gupy.io`:

- `https://vempra.gupy.io` → `vempra`
- `https://ambev.gupy.io` → `ambev`
- `https://sicredi.gupy.io` → `sicredi`

You can also paste the full URL directly in `startUrls` and the subdomain is extracted automatically.

***

### 💰 Pricing

**$1.49 per 1,000 results** — you only pay for successfully retrieved listings.
Failed retries are never charged.

| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.49 |
| 10,000 | ~$14.90 |
| 100,000 | ~$149.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.
> At 10,000 results/month, this scraper costs significantly less with no commitment.

Use the **Max jobs per company** cap to control your spend exactly.

***

### Performance

| Company size | Jobs | Mode | Approx. time |
|---|---|---|---|
| Small (< 20 jobs) | 10 | `fetchDetails: true` | ~5 s |
| Medium (50 jobs) | 50 | `fetchDetails: true` | ~20 s |
| Large (300+ jobs) | 300 | `fetchDetails: true` | ~2 min |
| Large (300+ jobs) | 300 | `fetchDetails: false` | ~3 s |

Memory: 256 MB.

***

### Known limitations

- **Apply URL:** Always points to the Gupy application form. Gupy does not expose external ATS redirect URLs.
- **Salary:** Not published by all employers — will be `null` when unavailable. Gupy does not require salary disclosure.
- **Company scope:** Each run is scoped to the subdomains you provide. There is no built-in discovery of all companies on Gupy.
- **Internal vacancies:** Jobs with `publicationType: "internal"` are visible when the career page is public. Internal-only pages (requiring login) cannot be scraped.

***

### Technical details

- **Source:** gupy.io — Brazil's leading ATS and job board platform
- **Memory:** 256 MB
- **Repost storage:** KeyValueStore `gupy-scraper-job-dedup`, 90-day TTL
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?
Send an email to <info@unfencedgroup.nl> — we build on request.

***

*Built by [unfenced-group](https://apify.com/unfenced-group) · Issues? Open a ticket or send a message.*

# Actor input Schema

## `subdomains` (type: `array`):

List of Gupy company subdomains to scrape. Example: \["vempra", "itau", "bayer"]. You can also paste the full URL (https://vempra.gupy.io) and the subdomain will be extracted automatically.

## `startUrls` (type: `array`):

Alternative to 'subdomains'. Paste full Gupy career page URLs here (e.g. https://vempra.gupy.io). Subdomains will be extracted automatically.

## `fetchDetails` (type: `boolean`):

When enabled (default), each job page is fetched for the complete data set: description, prerequisites, responsibilities, benefits, salary, hiring pipeline, and all dates. When disabled, only listing-level data is returned (title, department, location, workplace type) — much faster and cheaper for large companies.

## `maxJobsPerCompany` (type: `integer`):

Maximum number of jobs to scrape per company. Set to 0 for unlimited.

## `requestDelay` (type: `integer`):

Mean delay in milliseconds between requests when fetching job detail pages. Actual delay uses Gaussian randomisation. Default: 200ms.

## `proxyConfiguration` (type: `object`):

Optional. Not required for Gupy — the career pages are publicly accessible. Leave empty to run without proxy.

## Actor input object example

```json
{
  "subdomains": [
    "vempra",
    "itau",
    "bayer"
  ],
  "startUrls": [
    {
      "url": "https://vempra.gupy.io"
    }
  ],
  "fetchDetails": true,
  "maxJobsPerCompany": 0,
  "requestDelay": 200
}
```

# Actor output Schema

## `results` (type: `string`):

Job listings scraped from Gupy-powered company career pages. Each item contains up to 57 fields including title, location, workplace type, hiring pipeline, company info, description, prerequisites, responsibilities, and benefits.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "subdomains": [
        "vempra"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/gupy-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "subdomains": ["vempra"] }

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/gupy-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "subdomains": [
    "vempra"
  ]
}' |
apify call unfenced-group/gupy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/gupy-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Gupy.io Scraper — Brazil Job Board",
        "description": "Extract job listings from any Gupy.io company career page. No proxy, no API key. 64 fields per job including hiring pipeline stages, benefits, company social links and full structured address.",
        "version": "0.1",
        "x-build-id": "3gKT4pricDddsyn1c"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~gupy-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-gupy-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/unfenced-group~gupy-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-gupy-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/unfenced-group~gupy-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-gupy-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "subdomains": {
                        "title": "Company subdomains",
                        "type": "array",
                        "description": "List of Gupy company subdomains to scrape. Example: [\"vempra\", \"itau\", \"bayer\"]. You can also paste the full URL (https://vempra.gupy.io) and the subdomain will be extracted automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Alternative to 'subdomains'. Paste full Gupy career page URLs here (e.g. https://vempra.gupy.io). Subdomains will be extracted automatically.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch full details",
                        "type": "boolean",
                        "description": "When enabled (default), each job page is fetched for the complete data set: description, prerequisites, responsibilities, benefits, salary, hiring pipeline, and all dates. When disabled, only listing-level data is returned (title, department, location, workplace type) — much faster and cheaper for large companies.",
                        "default": true
                    },
                    "maxJobsPerCompany": {
                        "title": "Max jobs per company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of jobs to scrape per company. Set to 0 for unlimited.",
                        "default": 0
                    },
                    "requestDelay": {
                        "title": "Request delay (ms)",
                        "minimum": 50,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Mean delay in milliseconds between requests when fetching job detail pages. Actual delay uses Gaussian randomisation. Default: 200ms.",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Not required for Gupy — the career pages are publicly accessible. Leave empty to run without proxy."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
