# MyHammer.de Scraper (`rainminer/my-hammer-de-scraper`) Actor

Extract Handwerker job listings from my-hammer.de: title, trade, budget, description, customer & images. Export JSON/CSV via Apify. | my-hammer.de Aufträge scrapen: Handwerk-Jobs, Gewerke, Budget & Kundendaten ohne Code.

- **URL**: https://apify.com/rainminer/my-hammer-de-scraper.md
- **Developed by:** [rainminer](https://apify.com/rainminer) (community)
- **Categories:** Jobs, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.33 / 1,000 job listings

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/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

### What does MyHammer.de Scraper do?

**MyHammer.de Scraper** extracts **Handwerker job listings (Aufträge)** from [my-hammer.de](https://www.my-hammer.de/) — Germany's leading marketplace connecting homeowners with tradespeople for painting, tiling, electrical, plumbing, moving, gardening, and dozens of other trades. Paste a trade category URL (for example `https://www.my-hammer.de/malerarbeiten-tapezieren`) or a single job URL and export structured job data without coding.

### Why scrape my-hammer.de?

- **Market & demand research** — See what jobs homeowners post, in which trades, and at what budgets across Germany.
- **Lead generation for tradespeople** — Discover the types of jobs customers request and the prices they pay.
- **Pricing intelligence** — Collect budget ranges per job type and trade to benchmark quotes.
- **Apify platform** — Schedule runs, export JSON/CSV/Excel, monitor failures, and integrate via API.

### What data can you extract from my-hammer.de?

| Field | Description |
| --- | --- |
| id / listingId | Unique job (service request) identifier |
| title | Job title, often including the location |
| description | Full job description and task specifications |
| trade | Trade / service (e.g. Malerarbeiten (innen)) |
| tradeCluster | Parent trade group (e.g. Malerarbeiten und Tapezieren) |
| category | Trade slug |
| location | Postal code and city parsed from the job title (when public) |
| budget | Budget hint as text (e.g. `350 - 450 €`) |
| budgetFrom / budgetTo | Numeric budget range in euros |
| currency | Currency code (EUR) |
| status | Job status (completed) |
| customerType | Customer type (private) |
| customerName | Customer name when not anonymized |
| executedBy | Company that carried out the job |
| ratingScore | Customer rating score |
| reviewText | Customer review text |
| images / attachments | Public job/review image URLs |
| url | Public job page URL |

### How to scrape my-hammer.de

1. Open the Actor in Apify Console.
2. Add one or more **my-hammer.de category or job URLs** under **Start URLs** (or set a **Trade**).
3. Set **Maximum items** (jobs per start URL).
4. Run the Actor and download results from the dataset tab.

### Input

MyHammer.de Scraper accepts **Start URLs**, an optional **Trade** and **City**, **maxItems** (per start URL), and **proxy configuration**. See the **Input** tab in Apify Console for details.

Supported start URLs:

- Category pages: `https://www.my-hammer.de/{trade}` (discovers many job listings)
- Job pages: `https://www.my-hammer.de/{trade}/jobs/{job-slug}`

### Output example

```json
{
  "id": "12775784",
  "listingId": "12775784",
  "title": "50 m² Decke lackieren, Material benötigt in 44339 Dortmund",
  "description": "Teilaufgaben: Decke lackieren\nGebäudeart: Altbau\nGesamtfläche: 50 m²...",
  "trade": "Lackierarbeiten",
  "tradeCluster": "Malerarbeiten und Tapezieren",
  "category": "lackierarbeiten",
  "location": "44339 Dortmund",
  "budget": "350 - 450 €",
  "budgetFrom": 350,
  "budgetTo": 450,
  "currency": "EUR",
  "status": "completed",
  "customerType": "private",
  "customerName": "Anja Aust",
  "executedBy": "Malermeister Stefan Seifert",
  "ratingScore": 10,
  "reviewText": "Sehr schnell und zuverlässig...",
  "images": ["https://www.my-hammer.de/images/sr/medium/fa321cd7-....jpg"],
  "attachments": ["https://www.my-hammer.de/images/sr/medium/fa321cd7-....jpg"],
  "url": "https://www.my-hammer.de/malerarbeiten-tapezieren/jobs/eine-decke-lackieren#job-12775784"
}
```

You can download the dataset in JSON, CSV, Excel, or HTML.

### How much does scraping my-hammer.de cost?

my-hammer.de is protected by Cloudflare, so this Actor runs a stealth browser through a German residential proxy for reliable access. A typical test run with 5 jobs per URL usually finishes in about a minute.

### FAQ

**Is scraping my-hammer.de legal?**\
This Actor collects only **public** job content shown on my-hammer.de. You are responsible for complying with applicable laws (including GDPR) when processing personal data.

**Which URLs are supported?**\
Public trade category pages (`/{trade}`) and public job pages (`/{trade}/jobs/{slug}`).

### Image Credit

Image credit: [my-hammer.de](https://www.my-hammer.de/)

***

### Was macht der MyHammer.de Scraper?

Der **MyHammer.de Scraper** extrahiert **Handwerker-Aufträge** von [my-hammer.de](https://www.my-hammer.de/) — Deutschlands führendem Marktplatz, der Auftraggeber mit Handwerkern für Malerarbeiten, Fliesenlegen, Elektrik, Sanitär, Umzüge, Gartenarbeit und viele weitere Gewerke verbindet. Fügen Sie eine Gewerke-URL (z. B. `https://www.my-hammer.de/malerarbeiten-tapezieren`) oder eine Auftrag-URL ein und exportieren Sie strukturierte Auftragsdaten **ohne Programmierung**.

### Warum my-hammer.de scrapen?

- **Markt- & Nachfrageanalyse** — Welche Aufträge werden gestellt, in welchen Gewerken und zu welchen Budgets?
- **Lead-Generierung für Handwerker** — Auftragstypen und gezahlte Preise entdecken
- **Preisintelligenz** — Budgetspannen je Auftragstyp und Gewerk erfassen
- **Apify-Plattform** — Läufe planen, JSON/CSV/Excel exportieren und per API integrieren

### Welche Daten lassen sich von my-hammer.de extrahieren?

| Feld | Beschreibung |
| --- | --- |
| id / listingId | Eindeutige Auftrags-ID |
| title | Auftragstitel, oft mit Ort |
| description | Vollständige Auftragsbeschreibung und Details |
| trade / tradeCluster | Gewerk und Gewerkegruppe |
| location | PLZ und Stadt (aus dem Titel, falls öffentlich) |
| budget / budgetFrom / budgetTo | Budgetspanne in Euro |
| status | Auftragsstatus (abgeschlossen) |
| customerType / customerName | Kundentyp und -name (falls nicht anonym) |
| executedBy | Ausführender Betrieb |
| ratingScore / reviewText | Bewertung und Bewertungstext |
| images / attachments | Öffentliche Bild-URLs |
| url | Öffentliche Auftrag-URL |

### Wie scrapt man my-hammer.de?

1. Actor in der Apify Console öffnen.
2. **my-hammer.de Gewerke- oder Auftrag-URLs** unter **Start URLs** hinzufügen (oder ein **Gewerk** angeben).
3. **Maximum items** (Aufträge pro Start-URL) festlegen.
4. Actor starten und Ergebnisse herunterladen.

### Unterstützte Start-URLs

- Gewerkeseiten: `https://www.my-hammer.de/{gewerk}`
- Auftragsseiten: `https://www.my-hammer.de/{gewerk}/jobs/{slug}`

### Was kostet das Scraping von my-hammer.de?

my-hammer.de ist durch Cloudflare geschützt; der Actor nutzt einen Stealth-Browser über einen deutschen Residential-Proxy für zuverlässigen Zugriff. Ein Testlauf mit 5 Aufträgen pro URL dauert meist etwa eine Minute.

### FAQ

**Ist das Scraping von my-hammer.de legal?**\
Dieser Actor erfasst nur **öffentliche** Auftragsinhalte auf my-hammer.de. Sie sind für die Einhaltung geltender Gesetze (einschließlich DSGVO) verantwortlich.

### Bildnachweis

Bildnachweis: [my-hammer.de](https://www.my-hammer.de/)

# Actor input Schema

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

my-hammer.de category URLs (e.g. https://www.my-hammer.de/malerarbeiten-tapezieren) or single job URLs (e.g. https://www.my-hammer.de/malerarbeiten-tapezieren/jobs/waende-streichen). Category URLs discover many job listings.

## `trade` (type: `string`):

Optional trade slug used to build a category URL when no start URLs are given, e.g. "malerarbeiten-tapezieren" or "fenster-tueren".

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

Optional city label. Stored on each scraped item for your own filtering (my-hammer.de public job pages are not city-filtered).

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

Maximum number of job listings to return per start URL.

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

Proxy settings. my-hammer.de is protected by Cloudflare, so a German residential proxy is enabled by default for reliable access.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.my-hammer.de/malerarbeiten-tapezieren"
    }
  ],
  "trade": "malerarbeiten-tapezieren",
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "DE"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.my-hammer.de/malerarbeiten-tapezieren"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "countryCode": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/my-hammer-de-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 = {
    "startUrls": [{ "url": "https://www.my-hammer.de/malerarbeiten-tapezieren" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "countryCode": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rainminer/my-hammer-de-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.my-hammer.de/malerarbeiten-tapezieren"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "DE"
  }
}' |
apify call rainminer/my-hammer-de-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rainminer/my-hammer-de-scraper"
        }
    }
}

```

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/gabqfPXxiz2pUpOoH/builds/ohkN2YTnDtEUtK09z/openapi.json
