# Revelo LATAM Nearshore Developer Catalog Scraper (`maximedupre/revelo`) Actor

Collect public Revelo hiring-role pages and job-description templates. Get Latin America role details, monthly USD compensation bands, published cost and vetting text, and source URLs.

- **URL**: https://apify.com/maximedupre/revelo.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Jobs, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 catalog pages

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### 🔎 Explore the Revelo developer catalog

Recruiters, hiring researchers, and compensation analysts can collect public Revelo pages for Latin America developer roles. Each row gives the page family, technology or role, page title and description, monthly USD compensation bands, published cost and vetting information, region, and source URL. Use the structured data to review public nearshore role and pay information.

**Use cases**

- Browse **[Remote Developer Job Descriptions](https://apify.com/maximedupre/revelo/examples/remote-developer-job-descriptions)** from public Revelo job-description template pages.
- Review **[Hire Latin America Developers](https://apify.com/maximedupre/revelo/examples/hire-latin-america-developers)** with role details and published compensation bands.
- Compare **[Revelo Salaries](https://apify.com/maximedupre/revelo/examples/revelo-salaries)** across the monthly junior, mid-level, and senior bands that pages publish.
- Support **[Revelo Recruiting](https://apify.com/maximedupre/revelo/examples/revelo-recruiting)** research with structured public role pages and source links.
- Explore **[Is Revelo Legit](https://apify.com/maximedupre/revelo/examples/is-revelo-legit)** questions with public page descriptions, cost notes, and vetting text.
- Find **[Revelo Remote Jobs](https://apify.com/maximedupre/revelo/examples/revelo-remote-jobs)** pages by collecting hiring-role pages or job-description templates.
- Plan **[Hire a Software Development Team](https://apify.com/maximedupre/revelo/examples/hire-a-software-development-team)** research with public Revelo role and compensation pages.

#### 📚 What Revelo catalog rows contain

Each row describes either a public hiring-role page or a public job-description template. Both page families use the same fields. When a source page does not publish a compensation band, the matching value stays `null`.

#### ▶️ Run the Revelo catalog

Choose a page family in `target`. Use `hiringRolePages` for hiring-role pages, `jobDescriptionTemplates` for job-description templates, or `both` for both families. Set `maxItems` to a positive integer to stop after that many pages across the selected families. Leave it empty to return all available results until the source is exhausted.

**Quick start**

1. Choose the page family you want in `target`.
2. Leave `maxItems` at its prefilled value for a bounded run, or clear it to collect all available results until the source is exhausted.
3. Run the Actor and open the default dataset.

#### ⚙️ Input

Use the public input below to choose the page family and optional page limit.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Select `hiringRolePages`, `jobDescriptionTemplates`, or `both`. |
| `maxItems` | integer | Optional positive limit across the selected page families. Leave it empty to return all available results until the source is exhausted. |

**Example input**

This is a successful default-style input for a current run:

```json
{
  "target": "hiringRolePages",
  "maxItems": 10
}
```

#### 🧾 Output

**Output link**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Link to the default dataset and its `overview` view. |

**Dataset row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `sourceUrl` | string | Canonical public Revelo URL for the page. |
| `pageFamily` | string | Page family: `hiringRolePage` or `jobDescriptionTemplate`. |
| `technologyOrRole` | string | Technology or developer role named by the page. |
| `title` | string | Title published on the page. |
| `description` | string | Description published on the page. |
| `region` | string | Region covered by the page: `Latin America`. |
| `compensation` | object | Monthly all-in USD compensation bands for junior, mid-level, and senior developers. |
| `compensation.junior` | object or null | Junior monthly band, or `null` when the page does not publish one. |
| `compensation.junior.minUsd` | number | Minimum published monthly junior pay in USD. |
| `compensation.junior.maxUsd` | number | Maximum published monthly junior pay in USD. |
| `compensation.midLevel` | object or null | Mid-level monthly band, or `null` when the page does not publish one. |
| `compensation.midLevel.minUsd` | number | Minimum published monthly mid-level pay in USD. |
| `compensation.midLevel.maxUsd` | number | Maximum published monthly mid-level pay in USD. |
| `compensation.senior` | object or null | Senior monthly band, or `null` when the page does not publish one. |
| `compensation.senior.minUsd` | number | Minimum published monthly senior pay in USD. |
| `compensation.senior.maxUsd` | number | Maximum published monthly senior pay in USD. |
| `costInformation` | string or null | Published cost information from the page, or `null` when unavailable. |
| `vettingInformation` | string or null | Published developer-vetting information from the page, or `null` when unavailable. |

The following are complete rows from a successful current run. The first is a hiring-role page with published compensation. The second is a job-description template whose compensation and source notes are `null` because that page did not publish them.

**Hiring-role page example**

```json
{
  "sourceUrl": "https://www.revelo.com/hire/aws-developers",
  "pageFamily": "hiringRolePage",
  "technologyOrRole": "AWS",
  "title": "Hire AWS Developers Based in LatAm",
  "description": "Learn what AWS developers do, what they cost in the US vs. Latin America, and how Revelo's vetting process works before you hire.",
  "region": "Latin America",
  "compensation": {
    "junior": {
      "minUsd": 4600,
      "maxUsd": 5600
    },
    "midLevel": {
      "minUsd": 5800,
      "maxUsd": 7500
    },
    "senior": {
      "minUsd": 7200,
      "maxUsd": 10700
    }
  },
  "costInformation": "All-in monthly costs run roughly $4,600–$5,600 for junior, $5,800–$7,500 for mid-level, and $7,200–$10,700 for senior developers: engineer compensation, PEO coverage, and Revelo's margin combined. No placement fee, no surprise invoices.",
  "vettingInformation": "Every candidate is identity-checked, skills-tested, and human-screened: technical assessments matched to their stack, soft-skills and English-fluency interviews, and review by in-market recruiting experts before they ever reach your shortlist."
}
```

**Job-description template example**

```json
{
  "sourceUrl": "https://www.revelo.com/job-description/android-developer",
  "pageFamily": "jobDescriptionTemplate",
  "technologyOrRole": "Android Developer",
  "title": "Android Developer Job Description Template",
  "description": "This Android developer job description template provides a sample description of the role, its responsibilities, and the required qualifications and skills a top candidate should possess.",
  "region": "Latin America",
  "compensation": {
    "junior": null,
    "midLevel": null,
    "senior": null
  },
  "costInformation": null,
  "vettingInformation": null
}
```

#### 💳 Pricing

**How pricing works**

Pricing uses pay-per-event billing. The current event price is `$0.0009` for each public Revelo catalog page saved to the dataset. This Actor has one buyer-facing charge: `Catalog page`.

#### 🔌 Integrations

Use the default dataset link to export rows through the Apify API or built-in data formats. For a walkthrough of an Apify workflow, see:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Which public Revelo pages does this Actor collect?

It collects public hiring-role pages and job-description templates from Revelo. It does not search arbitrary websites or private Revelo pages.

##### Can I collect both page families in one run?

Yes. Set `target` to `both` to collect hiring-role pages and job-description templates together.

##### What happens when Revelo does not publish a salary band?

The matching compensation level is `null`. The Actor does not invent or estimate a band that the page does not publish.

##### What happens if I leave `maxItems` empty?

The Actor returns all available results until the source is exhausted. Set a positive integer when you want a bounded run.

##### Does this Actor need a Revelo login or API key?

No. It uses public Revelo pages and does not ask for customer source credentials.

##### Does this Actor collect developer profiles or candidates?

No. It collects the public page catalog described above, not private candidate profiles, individual developer records, hiring, outreach, or candidate matching.

##### Does this Actor collect Revelo reviews?

No. It collects public hiring-role pages and job-description templates, not review pages or general feedback.

##### Can this Actor answer “Is Revelo legit?”

It provides public page descriptions, published compensation, cost notes, vetting information, and source URLs for research. It does not make an independent legitimacy or quality decision.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~revelo/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Welcome to the Jungle Jobs Scraper](https://apify.com/maximedupre/welcometothejungle-jobs-extractor) — compare public job listings with salary, location, remote policy, and contract data.
- [Handshake Jobs Scraper](https://apify.com/maximedupre/handshake-jobs-scraper) — collect public jobs with employer, compensation, workplace, and date fields.
- [CutShort Scraper](https://apify.com/maximedupre/cutshort-scraper) — research public tech and startup roles with skills, salaries, remote type, and company tech stacks.
- [Rozee.pk Jobs Scraper](https://apify.com/maximedupre/rozee-pk-jobs-scraper) — map public Pakistan job listings by keyword, city, salary, skills, and company.
- [Freelancer Scraper](https://apify.com/maximedupre/freelancer-scraper) — explore public freelance projects and freelancer profiles with budgets, skills, and rates.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose the public Revelo page family to collect.

## `maxItems` (type: `integer`):

Optional positive whole number. The Actor stops after this many pages across the selected page families. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "hiringRolePages",
  "maxItems": 10
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row in the default dataset for each public Revelo catalog page saved by the Actor.

# 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 = {
    "target": "hiringRolePages",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/revelo").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 = {
    "target": "hiringRolePages",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/revelo").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "target": "hiringRolePages",
  "maxItems": 10
}' |
apify call maximedupre/revelo --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/revelo"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eZLP9WMNwkf3X5jzn/builds/3wTYlLUh6qcxxd8C9/openapi.json
