# Malt Scraper: Freelancer Profiles, Rates & Skills (`dltik/malt-scraper`) Actor

Scrape Malt freelancers by keyword, location, daily rate range, skills. Coverage: France, Germany, Spain, UK, Belgium, Netherlands. Get name, headline, daily rate, city, rating, reviews count, skills, profile URL. For agencies, recruiters, talent platforms, B2B prospecting. $1/1K freelancers.

- **URL**: https://apify.com/dltik/malt-scraper.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Business, Lead generation, Marketing
- **Stats:** 18 total users, 8 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 freelancer scrapeds

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

## Malt Scraper — Freelancer Profiles, Daily Rates & Skills API

> Scrape **Malt freelancers** by keyword, location, daily rate range, skills. Coverage: France, Germany, Spain, UK, Belgium, Netherlands. Get name, headline, daily rate (TJM), city, rating, reviews count, skills, languages, recommendations, response rate, certifications. **HTTP-only, $0.001 per freelancer** ($1 per 1,000).

⭐ **Bookmark this Malt Scraper** — Apify ranks actors by bookmarks, so it directly helps the visibility of this scraper on the Apify Store.

### What is the Malt Scraper?

The **Malt Scraper** is an Apify actor that pulls freelancer profiles from [Malt](https://www.malt.com/) — Europe's #1 freelance platform with 700K+ freelancers across France, Germany, Spain, UK, Belgium, Netherlands. Filter by keyword (skill, role), location, daily rate range. Get profile name, headline, daily rate (TJM), city, rating, reviews count, skills tags, certifications, languages spoken, response rate.

The most efficient way to get a structured snapshot of the European freelance market without manually clicking through search pages.

### Use cases

- **Daily-rate benchmarking (TJM)** — aggregate `data engineer Paris` rates to set yours competitively.
- **Talent sourcing for agencies** — bulk-export profiles in your niche to your CRM, then outreach.
- **Recruiter intelligence** — track top freelancers in a sector and their availability.
- **Market research on freelance economy** — count active freelancers per skill per country over time.
- **Competitive analysis for freelance platforms** — measure Malt market share vs Comet, FreelanceRepublik, etc.
- **Custom freelance directories** — build a niche freelancer marketplace on top of Malt data.

### Input

```json
{
  "keyword": "developer python",
  "location": "Paris",
  "country": "FR",
  "minDailyRate": 400,
  "maxDailyRate": 800,
  "limit": 100
}
````

### Output

```json
{
  "name": "Jean Dupont",
  "headline": "Senior Python Engineer · Data & Backend",
  "city": "Paris",
  "country": "FR",
  "daily_rate_eur": 650,
  "rating": 4.9,
  "reviews_count": 23,
  "skills": ["Python", "Django", "PostgreSQL", "AWS"],
  "languages": ["French", "English"],
  "response_rate_pct": 95,
  "is_verified": true,
  "profile_url": "https://www.malt.fr/profile/example"
}
```

### Pricing

**PAY\_PER\_EVENT — $0.001 per freelancer profile** (= $1 per 1,000). Failed runs not charged.

### FAQ — Malt API alternatives

**Malt official API?** No public API for bulk profile search. This scraper is the way.

**Is Malt blocking scrapers?** Malt does have a Cloudflare 1015 rate limit at sustained 50 req/min. This scraper paces requests safely below that threshold and uses retries. Avoid running 10+ instances in parallel against Malt.

**Coverage outside FR/DE/ES/UK/BE/NL?** Malt only operates in those 6 countries (so far). Other regions return empty.

**Daily rate (TJM) accuracy?** Rates shown are what each freelancer publicly displays. Some freelancers list "rate on demand" — those return `daily_rate_eur: null`.

***

⭐ **Found this useful? Bookmark this Malt Scraper** — it's the strongest signal for Apify Store ranking.

#### Related actors

- [Welcome to the Jungle Scraper](https://apify.com/dltik/welcome-to-the-jungle-scraper) — tech employer-side jobs
- [HelloWork Scraper](https://apify.com/dltik/hellowork-scraper) — French job board (full-time)
- [France Travail Scraper](https://apify.com/dltik/francetravail-scraper) — French public job board

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

## `keywords` (type: `array`):

List of keywords to search freelancers (e.g. 'developpeur python', 'designer UI'). Each keyword runs a separate search. Note: Malt limits guest search to ~24 profiles per keyword — use multiple keywords to expand coverage (results are deduplicated by profile).

## `country` (type: `string`):

Malt country: fr (France), de (Germany), es (Spain), uk (United Kingdom), be (Belgium), nl (Netherlands).

## `city` (type: `string`):

Filter by city (e.g. 'Paris', 'Lyon', 'Berlin'). Leave empty for all cities.

## `locationType` (type: `string`):

Filter by work location preference.

## `minRate` (type: `integer`):

Filter freelancers with daily rate ≥ this amount (applied at API level when supported).

## `maxRate` (type: `integer`):

Filter freelancers with daily rate ≤ this amount (applied at API level when supported).

## `experienceLevel` (type: `string`):

Filter by minimum experience level.

## `availability` (type: `string`):

Filter by availability status.

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

Filter by minimum rating (0-5). Applied post-fetch.

## `enrichProfiles` (type: `boolean`):

For each freelancer found, fetch the public profile API to extract 30+ extra fields: answer rate, answer time, languages with level, portfolio items count, fee rates, geo coordinates, etc. Slower but no extra cost — enrichment is included in the per-freelancer price.

## `enrichConcurrency` (type: `integer`):

Parallel workers for profile enrichment. Higher = faster but may trigger rate-limits.

## `maxResults` (type: `integer`):

Maximum freelancers per keyword. Malt's guest search caps at ~24 per query — values above 24 only matter when combined with multiple keywords/filters. Aliases accepted: 'limit', 'max'. Each result charged at the per-event price — start small to validate output.

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

Proxy configuration. Malt blocks Apify datacenter IPs via Cloudflare — residential proxies are required. Defaults to Apify residential proxy group.

## Actor input object example

```json
{
  "keywords": [
    "developpeur python"
  ],
  "country": "fr",
  "locationType": "",
  "experienceLevel": "",
  "availability": "",
  "enrichProfiles": false,
  "enrichConcurrency": 10,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset of Malt freelancer profiles with name, title, daily rate, location, rating, reviews, skills.

# 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 = {
    "keywords": [
        "developpeur python"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/malt-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 = {
    "keywords": ["developpeur python"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("dltik/malt-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 '{
  "keywords": [
    "developpeur python"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call dltik/malt-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Malt Scraper: Freelancer Profiles, Rates & Skills",
        "description": "Scrape Malt freelancers by keyword, location, daily rate range, skills. Coverage: France, Germany, Spain, UK, Belgium, Netherlands. Get name, headline, daily rate, city, rating, reviews count, skills, profile URL. For agencies, recruiters, talent platforms, B2B prospecting. $1/1K freelancers.",
        "version": "1.0",
        "x-build-id": "v4lC0KWASBBTegr78"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~malt-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-malt-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/dltik~malt-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-malt-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/dltik~malt-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-malt-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": {
                    "keywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "List of keywords to search freelancers (e.g. 'developpeur python', 'designer UI'). Each keyword runs a separate search. Note: Malt limits guest search to ~24 profiles per keyword — use multiple keywords to expand coverage (results are deduplicated by profile).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "country": {
                        "title": "Malt country domain",
                        "enum": [
                            "fr",
                            "de",
                            "es",
                            "uk",
                            "be",
                            "nl"
                        ],
                        "type": "string",
                        "description": "Malt country: fr (France), de (Germany), es (Spain), uk (United Kingdom), be (Belgium), nl (Netherlands).",
                        "default": "fr"
                    },
                    "city": {
                        "title": "City filter",
                        "type": "string",
                        "description": "Filter by city (e.g. 'Paris', 'Lyon', 'Berlin'). Leave empty for all cities."
                    },
                    "locationType": {
                        "title": "Location type",
                        "enum": [
                            "",
                            "REMOTE",
                            "ON_SITE",
                            "HYBRID"
                        ],
                        "type": "string",
                        "description": "Filter by work location preference.",
                        "default": ""
                    },
                    "minRate": {
                        "title": "Minimum daily rate",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter freelancers with daily rate ≥ this amount (applied at API level when supported)."
                    },
                    "maxRate": {
                        "title": "Maximum daily rate",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter freelancers with daily rate ≤ this amount (applied at API level when supported)."
                    },
                    "experienceLevel": {
                        "title": "Minimum experience level",
                        "enum": [
                            "",
                            "BEGINNER",
                            "INTERMEDIATE",
                            "CONFIRMED",
                            "EXPERT"
                        ],
                        "type": "string",
                        "description": "Filter by minimum experience level.",
                        "default": ""
                    },
                    "availability": {
                        "title": "Availability filter",
                        "enum": [
                            "",
                            "AVAILABLE",
                            "AVAILABLE_AND_VERIFIED"
                        ],
                        "type": "string",
                        "description": "Filter by availability status.",
                        "default": ""
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Filter by minimum rating (0-5). Applied post-fetch."
                    },
                    "enrichProfiles": {
                        "title": "Enrich with full profile details",
                        "type": "boolean",
                        "description": "For each freelancer found, fetch the public profile API to extract 30+ extra fields: answer rate, answer time, languages with level, portfolio items count, fee rates, geo coordinates, etc. Slower but no extra cost — enrichment is included in the per-freelancer price.",
                        "default": false
                    },
                    "enrichConcurrency": {
                        "title": "Enrichment concurrency",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "Parallel workers for profile enrichment. Higher = faster but may trigger rate-limits.",
                        "default": 10
                    },
                    "maxResults": {
                        "title": "Max results per keyword",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum freelancers per keyword. Malt's guest search caps at ~24 per query — values above 24 only matter when combined with multiple keywords/filters. Aliases accepted: 'limit', 'max'. Each result charged at the per-event price — start small to validate output.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy configuration. Malt blocks Apify datacenter IPs via Cloudflare — residential proxies are required. Defaults to Apify residential proxy group.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
