Malt Messages Scraper avatar

Malt Messages Scraper

Under maintenance

Pricing

$29.00/month + usage

Go to Apify Store
Malt Messages Scraper

Malt Messages Scraper

Under maintenance

Logs into Malt, navigates to messages, and automatically applies to pending project offers with a personalized pitch. Built for freelances receiving many Malt requests. Features: login with 2FA (IMAP), cookie fallback when form is rate-limited, template-based pitch, Google Sheets export.

Pricing

$29.00/month + usage

Rating

0.0

(0)

Developer

Corentin Robert

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Automatically apply to Malt project offers — Log in, find pending "Apply" requests, fill the application form with a personalized pitch, and submit. Export to Google Sheets and receive Telegram notifications. Built for freelances receiving many Malt project requests.

Why Use This Scraper?

Save Time

  • No more manual login and checking messages several times a day
  • Automatically detect project offers awaiting your response
  • One run = one application sent (or notification if none pending)

Consistent Applications

  • Template-based pitch personalized with project title and company
  • Fixed daily rate (min 600€), Calendly link, professional message
  • Service type auto-detected: scraping, automation, or prospection

Traceability & Alerts

  • Log every run to Google Sheets (candidatures + "no offer" runs)
  • Telegram notification for each application or when no offer is pending
  • Cookie fallback when Malt blocks the login form ("Duplication de formulaire")

Perfect For

  • Freelances on Malt — Automate first responses to project offers
  • Prospection / Growth consultants — Quick apply with tailored pitch
  • Automation specialists — Reduce manual repetitive tasks

How It Works

  1. Authenticate — Login via email/password (2FA via IMAP), or cookies if form is rate-limited
  2. Navigate to messages — Go to Malt /messages
  3. Find pending offer — Look for project offers with "En attente de votre réponse"
  4. Apply — Fill daily rate (600€+), personalized pitch, Calendly link, submit
  5. Output — Push result to Dataset, optionally append to Google Sheets, send Telegram

Quick Start

Minimal (credentials only)

{
"email": "your-email@example.com",
"password": "your-password",
"imapUser": "your-email@example.com",
"imapPassword": "gmail-app-password",
"headless": false
}

2FA code is fetched from Gmail (IMAP). Use a Gmail App Password for imapPassword.

If Malt blocks the login form, export your cookies (Cookie-Editor, EditThisCookie) and add:

{
"email": "...",
"password": "...",
"imapUser": "...",
"imapPassword": "...",
"maltCookies": [
{"domain": "www.malt.fr", "name": "SESSION", "value": "...", "path": "/"},
{"domain": "www.malt.fr", "name": "remember-me", "value": "...", "path": "/"}
]
}

Login is attempted first. If "Duplication de formulaire" is detected, cookies are used instead.

Full Setup (Google Sheets + Telegram)

{
"email": "...",
"password": "...",
"imapUser": "...",
"imapPassword": "...",
"dailyRate": 600,
"calendlyLink": "https://calendly.com/you/20min",
"googleSheetsEnabled": true,
"googleSheetsSpreadsheetId": "YOUR_SPREADSHEET_ID",
"googleSheetsCredentials": {"type": "service_account", "project_id": "...", "private_key": "...", "client_email": "..."},
"googleSheetsTab": "Feuille 1",
"telegramEnabled": true,
"telegramBotToken": "YOUR_BOT_TOKEN",
"telegramChatId": "YOUR_CHAT_ID"
}

Share the Google Sheet with the Service Account email (Editor). Create the sheet tab or leave it empty — headers are created automatically.

Input

ParameterDescription
emailMalt login email
passwordMalt password
imapUserGmail address (same as Malt) for 2FA code retrieval
imapPasswordGmail App Password (not normal password)
maltCookiesJSON array of cookies — fallback when login form is blocked
openaiApiKeyOptional — for direct conversations (not project offers)
dailyRateDaily rate in €/day. Min 600, default 600
calendlyLinkCalendly URL for the pitch
headlesstrue = headless, false = visible browser
googleSheetsEnabledLog runs to Google Sheets
googleSheetsSpreadsheetIdSheet ID from URL
googleSheetsCredentialsService Account JSON
googleSheetsTabTab name, e.g. "Feuille 1" or "Malt Candidatures"
telegramEnabledSend Telegram notifications
telegramBotTokenBot token from @BotFather
telegramChatIdChat/channel ID

Environment variables (Apify secrets): MALT_EMAIL, MALT_PASSWORD, MALT_IMAP_USER, MALT_IMAP_PASSWORD, MALT_COOKIES, OPENAI_API_KEY, GOOGLE_SHEETS_SPREADSHEET_ID, GOOGLE_SHEETS_CREDENTIALS, TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID

Output

FieldDescription
repliedtrue if application or message was sent
reasoncandidature_submitted, no_pending_reply, submit_button_not_found, etc.
pitchMessageContent of the application pitch
messageSentContent of direct reply (conversations only)
dailyRateDaily rate used in the application
accompagnementService type: scraping, automation, prospection
projectContext{ title, companyName, description }

Google Sheets Columns

Created automatically if the sheet is empty:

ColumnContent
DateRun timestamp (ISO)
EntrepriseCompany name
Titre projetProject title
Type accompagnementScraping, automation, prospection
Taux (€/jour)Daily rate
Message envoyéPitch sent
Statutsoumis, aucune_offre, or error reason

Telegram Messages

When application is sent:

Malt: candidature ✅ soumis
Entreprise: Joya
Projet: Déployer une acquisition B2B LinkedIn...

When no offer pending:

Malt: aucune offre en attente ✓

Limitations & ToS

  • Malt rate limiting — Login form may show "Duplication de formulaire" after many attempts. Use cookie fallback.
  • Selectors — Malt may change its UI; selectors might need updates.
  • Use responsibly — Run frequency: 1–2 times per day recommended. Automated actions may violate Malt ToS; use at your own risk.

Run Locally

cd apify/scrapers/malt-messages-scraper
npm install
# Create input.json (copy from input.json.example)
npm start

Deploy to Apify

$apify push