# Freelancermap Profile Scraper (`alkausari_mujahid/freelancermap-profile-scraper`) Actor

Scrapes freelancer profiles from freelancermap search results. Extracts name, title, location, hourly/daily rates, skills, languages, project history, certificates, and optionally email and phone number (requires a freelancermap.de account)

- **URL**: https://apify.com/alkausari\_mujahid/freelancermap-profile-scraper.md
- **Developed by:** [Alkausari M](https://apify.com/alkausari_mujahid) (community)
- **Categories:** Automation, Lead generation, Integrations
- **Stats:** 8 total users, 2 monthly users, 60.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 profiles

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

## Freelancermap Freelancer Profile Scraper

Scrapes freelancer profiles from [freelancermap.de](https://www.freelancermap.de) search result pages. For each profile the actor extracts publicly available data (name, title, location, rates, skills, languages, project history, certificates) and — when a valid account is provided — the contact details (email and phone number).

### What data is extracted

| Field | Description |
|---|---|
| `url` | Profile URL |
| `name` | Full name |
| `title` | Professional title / job role |
| `headline` | Short profile headline |
| `verified` | Verification status badge |
| `premiumCustomer` | Premium membership badge |
| `availability` | Availability status |
| `city` | City |
| `country` | Country |
| `travel` | Willingness to travel |
| `education` | Highest education level |
| `hourlyRate` | Hourly rate |
| `dailyRate` | Daily rate |
| `aboutMe` | About Me / bio text |
| `skillBadges` | Top matching skill badges (array) |
| `skills` | Full skill list (array) |
| `languages` | Languages and proficiency levels (object) |
| `projects` | Project history (array of objects) |
| `certificates` | Certifications (array of objects) |
| `email` | Email address *(requires account)* |
| `phone` | Phone number *(requires account)* |

### How to use

#### 1. Basic scrape (no login required)

Provide a freelancermap.de search URL and set the page range to scrape.

**Input:**
```json
{
    "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html?group=informatik",
    "startPage": 1,
    "endPage": 5
}
````

#### 2. Scrape with contact details (login required)

To extract email addresses and phone numbers, provide your freelancermap.de account credentials and enable the relevant toggles.

**Input:**

```json
{
    "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html?group=informatik",
    "startPage": 1,
    "endPage": 3,
    "includeEmail": true,
    "includePhone": true,
    "email": "your@email.com",
    "password": "yourpassword"
}
```

> **Note:** Contact details are gated by freelancermap.de's account plan. The actor respects the platform's daily view limits. If the limit is reached, the contact button will be disabled and those fields will be left empty.

#### 3. Limit total results

Use `maxItems` to cap the number of profiles scraped — useful for testing or cost control.

```json
{
    "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html",
    "startPage": 1,
    "endPage": 10,
    "maxItems": 50
}
```

### Sample output

```json
{
    "url": "https://www.freelancermap.de/profil/123456-max-mustermann.html",
    "name": "Max Mustermann",
    "title": "Senior Java Developer",
    "headline": "10+ years building enterprise backend systems",
    "verified": "Verified",
    "premiumCustomer": "Premium",
    "availability": "Available",
    "city": "Munich",
    "country": "Germany",
    "travel": "Germany-wide",
    "education": "Master of Science",
    "hourlyRate": "95 €/h",
    "dailyRate": "760 €/day",
    "aboutMe": "Passionate backend engineer specialising in Java and Spring Boot...",
    "skillBadges": ["Java", "Spring Boot", "Kubernetes"],
    "skills": ["Java", "Spring Boot", "Kubernetes", "Docker", "PostgreSQL", "REST APIs"],
    "languages": {
        "German": "Native",
        "English": "Fluent"
    },
    "projects": [
        {
            "date": "01/2022 – 12/2023",
            "title": "Microservices Migration",
            "company": "Acme GmbH",
            "industry": "Finance",
            "companySize": "500–1000 employees",
            "projectDetails": ["Led migration of monolithic app to microservices..."],
            "technologies": ["Java 17", "Spring Boot", "Kafka", "Kubernetes"]
        }
    ],
    "certificates": [
        {
            "title": "AWS Certified Solutions Architect",
            "issuer": "Amazon Web Services",
            "date": "March 2023"
        }
    ],
    "email": "",
    "phone": ""
}
```

### Input reference

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `startUrl` | String | Yes | — | Freelancermap.de search results URL |
| `startPage` | Integer | No | `1` | First page to scrape |
| `endPage` | Integer | No | `1` | Last page to scrape |
| `maxItems` | Integer | No | — | Cap total profiles scraped |
| `includeEmail` | Boolean | No | `false` | Extract email (account required) |
| `includePhone` | Boolean | No | `false` | Extract phone (account required) |
| `email` | String | Conditional | — | Account email (needed if includeEmail/includePhone) |
| `password` | String | Conditional | — | Account password (stored securely, never logged) |
| `maxConcurrency` | Integer | No | `1` | Parallel browser tabs (keep at 1 with login) |
| `proxyConfiguration` | Object | No | Apify proxy | Proxy settings |

### Tips

- **Proxy:** Use Apify Residential proxies with `countryCode: "DE"` for the best reliability.
- **Concurrency:** Keep `maxConcurrency` at `1` when using login-based scraping to prevent session conflicts across browser instances.
- **Pagination:** Each results page contains up to 20 profiles. To scrape 100 profiles set `startPage: 1`, `endPage: 5`.
- **Rate limits:** freelancermap.de limits how many contact profiles you can view per day based on your subscription tier. The actor handles disabled contact buttons gracefully and continues scraping the remaining data.

### Legal & ethical usage

This actor is intended for legitimate business use cases such as HR research, market analysis, and lead generation. Always respect freelancermap.de's [Terms of Service](https://www.freelancermap.de/nutzungsbedingungen.html) and applicable data protection regulations (GDPR). Do not use scraped personal data for unsolicited outreach or in violation of applicable law.

# Actor input Schema

## `startUrl` (type: `string`):

A freelancermap.de freelancer search URL. The scraper will paginate it from Start Page to End Page and extract every profile found. Example: https://www.freelancermap.de/freelancer-verzeichnis.html

## `startPage` (type: `integer`):

First page of search results to scrape (1-based).

## `endPage` (type: `integer`):

Last page of search results to scrape. Each results page contains up to 20 profiles.

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

Maximum total number of profiles to scrape. Useful for quick tests or cost control. Leave empty to scrape all profiles found.

## `includeEmail` (type: `boolean`):

Extract the freelancer's email address from their profile. Requires a valid freelancermap.de account (Account Email + Account Password below).

## `includePhone` (type: `boolean`):

Extract the freelancer's phone number from their profile. Requires a valid freelancermap.de account (Account Email + Account Password below).

## `email` (type: `string`):

Your freelancermap.de login email. Only required when Include Email or Include Phone is enabled.

## `password` (type: `string`):

Your freelancermap.de login password. Only required when Include Email or Include Phone is enabled. Stored securely and never logged.

## `pageDelay` (type: `integer`):

Delay in seconds to wait after loading each profile page. Increase this if the scraper is being blocked or if pages are not fully loading. Set to 0 for no extra delay.

## `maxConcurrency` (type: `integer`):

Maximum number of browser tabs to run in parallel. Keep at 1 when logged-in scraping is enabled to avoid session conflicts.

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

Proxy settings for the crawler. Using Apify Residential proxies with country code DE improves reliability and reduces the chance of being blocked.

## Actor input object example

```json
{
  "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html",
  "startPage": 1,
  "endPage": 1,
  "includeEmail": false,
  "includePhone": false,
  "pageDelay": 2,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/freelancermap-profile-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 = {
    "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("alkausari_mujahid/freelancermap-profile-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 '{
  "startUrl": "https://www.freelancermap.de/freelancer-verzeichnis.html",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call alkausari_mujahid/freelancermap-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Freelancermap Profile Scraper",
        "description": "Scrapes freelancer profiles from freelancermap search results. Extracts name, title, location, hourly/daily rates, skills, languages, project history, certificates, and optionally email and phone number (requires a freelancermap.de account)",
        "version": "0.0",
        "x-build-id": "j4NphDUE1yTpEuOPv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alkausari_mujahid~freelancermap-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alkausari_mujahid-freelancermap-profile-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/alkausari_mujahid~freelancermap-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alkausari_mujahid-freelancermap-profile-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/alkausari_mujahid~freelancermap-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alkausari_mujahid-freelancermap-profile-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",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "A freelancermap.de freelancer search URL. The scraper will paginate it from Start Page to End Page and extract every profile found. Example: https://www.freelancermap.de/freelancer-verzeichnis.html"
                    },
                    "startPage": {
                        "title": "Start Page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "First page of search results to scrape (1-based).",
                        "default": 1
                    },
                    "endPage": {
                        "title": "End Page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Last page of search results to scrape. Each results page contains up to 20 profiles.",
                        "default": 1
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum total number of profiles to scrape. Useful for quick tests or cost control. Leave empty to scrape all profiles found."
                    },
                    "includeEmail": {
                        "title": "Include Email Address",
                        "type": "boolean",
                        "description": "Extract the freelancer's email address from their profile. Requires a valid freelancermap.de account (Account Email + Account Password below).",
                        "default": false
                    },
                    "includePhone": {
                        "title": "Include Phone Number",
                        "type": "boolean",
                        "description": "Extract the freelancer's phone number from their profile. Requires a valid freelancermap.de account (Account Email + Account Password below).",
                        "default": false
                    },
                    "email": {
                        "title": "Account Email",
                        "type": "string",
                        "description": "Your freelancermap.de login email. Only required when Include Email or Include Phone is enabled."
                    },
                    "password": {
                        "title": "Account Password",
                        "type": "string",
                        "description": "Your freelancermap.de login password. Only required when Include Email or Include Phone is enabled. Stored securely and never logged."
                    },
                    "pageDelay": {
                        "title": "Page Delay (seconds)",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Delay in seconds to wait after loading each profile page. Increase this if the scraper is being blocked or if pages are not fully loading. Set to 0 for no extra delay.",
                        "default": 2
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Maximum number of browser tabs to run in parallel. Keep at 1 when logged-in scraping is enabled to avoid session conflicts.",
                        "default": 1
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for the crawler. Using Apify Residential proxies with country code DE improves reliability and reduces the chance of being blocked."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
