# Malt Freelancer Skill & Rate Finder (`dataspryva/malt-freelancer-skill-and-rate-finder`) Actor

Search Malt freelancers by skill and location or enrich specific profile URLs across all six Malt markets: headline, skills, daily rate, rating, review count, experience, location and languages.

- **URL**: https://apify.com/dataspryva/malt-freelancer-skill-and-rate-finder.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Malt Freelancer Skill & Rate Finder

Malt is Europe's largest freelancer marketplace, listing hundreds of thousands of independent professionals across France, Germany, Spain, Belgium, the Netherlands and its global platform. This actor searches Malt by skill or keyword and location, or enriches specific freelancer profile URLs you already have, returning headline, skills, daily rate, rating and more.

### What this actor does

- Searches freelancers by skill/keyword and city or region across six Malt marketplaces
- Enriches a list of specific Malt profile URLs instead of searching
- Filters results by minimum average rating and minimum review count
- Returns a verified-badge flag, spoken languages, and years of experience when the freelancer has listed them
- Fields a freelancer hasn't filled in on their profile are left out of the record entirely — no null values

### Output per freelancer

- `profileId` — the profile's Malt slug
- `name` — full name
- `profileUrl` — direct link to the Malt profile
- `headline` — professional title or short description
- `skills[]` — skills/tags listed on the profile, when available
- `location` — city or region, when listed
- `languages[]` — spoken languages, when listed
- `dailyRateEur` — daily rate in EUR, when publicly shown
- `avgRating` — average client rating (0–5), when available
- `reviewCount` — number of client reviews, when available
- `experienceYears` — years of experience, when listed
- `verified` — whether the freelancer holds Malt's verified badge
- `market` — which Malt marketplace the profile came from (`fr`, `de`, `es`, `be`, `nl`, `com`)
- `profilePhotoUrl` — profile photo, omitted when the freelancer has no custom photo
- `recordType: "freelancer"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `searchFreelancers` | `searchFreelancers` (keyword + location search) or `byProfileUrls` (enrich specific URLs) |
| `searchQuery` | string | `python developer` | Skill or keyword to search for (mode=searchFreelancers) |
| `location` | string | `Berlin` | City or region filter; leave empty for all locations |
| `profileUrls` | array | – | Malt profile URLs to enrich (mode=byProfileUrls) |
| `market` | string | `de` | Which Malt marketplace to use: `com`, `fr`, `de`, `es`, `be`, `nl` |
| `minRating` | number | – | Only include freelancers rated at or above this (0–5) |
| `minReviews` | integer | – | Only include freelancers with at least this many reviews |
| `maxItems` | integer | `20` | Maximum number of profiles to return (1–5000) |
| `proxyConfiguration` | object | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "DE"}` | Required European residential proxy — Malt blocks non-residential traffic |

#### Example: Python developers in Paris

```json
{
  "mode": "searchFreelancers",
  "searchQuery": "python developer",
  "location": "Paris",
  "market": "fr",
  "maxItems": 50
}
```

#### Example: well-reviewed React freelancers in Germany

```json
{
  "mode": "searchFreelancers",
  "searchQuery": "react developer",
  "market": "de",
  "minRating": 4.5,
  "minReviews": 3,
  "maxItems": 100
}
```

#### Example: enrich known profile URLs

```json
{
  "mode": "byProfileUrls",
  "profileUrls": [
    "https://www.malt.fr/profile/johndoe",
    "https://www.malt.de/profile/jane-smith"
  ]
}
```

### Use cases

- **Talent sourcing** — shortlist freelancers by skill, location and rating before reaching out
- **Market research** — compare freelancer availability and typical rates for a skill across European markets
- **Competitor benchmarking** — see who the top-rated freelancers are in your own niche
- **Lead generation** — build outreach lists from Malt search results
- **Directory building** — enrich an existing list of Malt profile URLs with current rate, rating and skill data

### FAQ

**Which Malt markets are covered?**
All six: `malt.com` (global/English), `malt.fr` (France), `malt.de` (Germany), `malt.es` (Spain), `malt.be` (Belgium), and `malt.nl` (Netherlands).

**Does this require a Malt account or login?**
No. Only publicly visible profile information is collected; no account or cookies are needed.

**How many profiles come back from one search?**
Typically around two dozen per search query, since that's what one page of Malt's search results surfaces. For broader coverage, run multiple searches with different keywords, locations, or markets.

**What does the `verified` field mean?**
Malt awards a verified badge to freelancers who meet its quality and activity thresholds (sometimes called "Supermalter" in some markets). The field reflects whether that badge is present on the profile.

**Will filtering by rating exclude freelancers with no reviews yet?**
No — `minRating` and `minReviews` only exclude freelancers who have a rating/review count below your threshold. Freelancers with no rating data at all are not excluded by these filters.

**Can I search by a Malt category URL instead of a keyword?**
Not directly — enter the skill or role as plain text in `searchQuery`; Malt's own search matches it against skills and headlines.

**Why is a residential proxy required?**
Malt blocks traffic that doesn't come from a normal residential connection, so a European residential proxy is applied by default and is required for the actor to reach the site reliably.

**Is this affiliated with Malt?**
No. This is an independent, third-party actor that reads Malt's publicly visible profile and search pages; it is not affiliated with or endorsed by Malt.

# Actor input Schema

## `mode` (type: `string`):

Choose what to scrape: search for freelancers by keyword/location, or enrich specific profile URLs.

## `searchQuery` (type: `string`):

Skill or keyword to search for, e.g. `python developer`, `react`, `data analyst`. Used in mode=searchFreelancers.

## `location` (type: `string`):

Filter results by city or region, e.g. `Paris`, `Berlin`, `Barcelona`. Leave empty for all locations.

## `profileUrls` (type: `array`):

List of Malt freelancer profile URLs to enrich, e.g. `https://www.malt.fr/profile/johndoe`. Used in mode=byProfileUrls.

## `market` (type: `string`):

Which Malt regional marketplace to scrape.

## `minRating` (type: `number`):

Only include freelancers with an average client rating at or above this value (0–5). Leave empty to include all.

## `minReviews` (type: `integer`):

Only include freelancers with at least this many client reviews. Leave empty to include all.

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

Maximum number of freelancer records to return.

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

Malt sits behind Cloudflare Bot Management, which blocks every Apify datacenter/AUTO IP outright (confirmed: 403 on 100% of requests, including via a headless browser). A European **Residential** proxy is required — datacenter proxies will not work. Residential proxy traffic is billed by Apify at $8/GB.

## Actor input object example

```json
{
  "mode": "searchFreelancers",
  "searchQuery": "python developer",
  "location": "Berlin",
  "profileUrls": [],
  "market": "de",
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `freelancers` (type: `string`):

Dataset containing all scraped Malt freelancer profiles.

# 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 = {
    "mode": "searchFreelancers",
    "searchQuery": "python developer",
    "location": "Berlin",
    "profileUrls": [],
    "market": "de",
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/malt-freelancer-skill-and-rate-finder").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 = {
    "mode": "searchFreelancers",
    "searchQuery": "python developer",
    "location": "Berlin",
    "profileUrls": [],
    "market": "de",
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/malt-freelancer-skill-and-rate-finder").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 '{
  "mode": "searchFreelancers",
  "searchQuery": "python developer",
  "location": "Berlin",
  "profileUrls": [],
  "market": "de",
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call dataspryva/malt-freelancer-skill-and-rate-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/malt-freelancer-skill-and-rate-finder"
        }
    }
}
```

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/PUnFYegFZHPFotZbg/builds/SlYIxHbpdjQurfWmr/openapi.json
