Marktplaats New Listing Alerts avatar

Marktplaats New Listing Alerts

Pricing

from $1.59 / 1,000 results

Go to Apify Store
Marktplaats New Listing Alerts

Marktplaats New Listing Alerts

Watch one saved Marktplaats search - query, category, postcode radius, price band - and get only the NEW listings each run. Built for hourly schedules with email or Slack. No seller identity, ever. Quiet runs cost nothing.

Pricing

from $1.59 / 1,000 results

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Marktplaats New Listing Alerts — only what's new, GDPR-safe

Watch one saved search on Marktplaats.nl and get only the listings posted since your last run — as clean, structured JSON you can send anywhere: email, Slack, a spreadsheet, your own code. Pair it with an hourly Schedule and you have a Marktplaats alert service that you control, at a fraction of what Dutch alert subscriptions charge.

Built on the Marktplaats.nl Scraper, with the same GDPR-first output: no seller personal data, ever. Seller names, IDs, phone numbers and profile links never appear — the only seller signal is business vs private.

Quick start (30 seconds)

  1. Put your saved search into searchQuery — e.g. gazelle elektrische fiets. Add a postcode and radiusKm if you only care about listings near you.
  2. Click Start. The first run delivers the current snapshot as a baseline — its status reads N listings (baseline run - future runs deliver only new ones).
  3. Create an hourly Schedule in the Apify Console with the same input, and add an email or Slack integration on the runs. From now on, every run delivers only what is new — status N new listings since the last run — and a run that finds nothing delivers nothing.

That's the whole product: one watched search, new listings only, on your schedule.

What you can build with it

  • Beat other buyers to underpriced finds. Flippers live or die by speed. An hourly watch on racefiets under €400 puts every fresh listing in your inbox with the price already parsed, minutes after it posts — while the marketplace's own browsers are still scrolling.
  • Wait for the exact thing you want, near you. Looking for a specific dresser, a bakfiets, a boat trailer within cycling distance? Set your search, your postcode and a radiusKm, and stop checking the site every day — the actor checks for you and only speaks when there is news.
  • Watch your stock sources. Small dealers restock from private sellers. One watch per supply category — hifi, tools, vintage furniture — turns Marktplaats into a feed of incoming inventory instead of a tab you keep forgetting to refresh.
  • Feed alerts into anything. Each new listing is a structured dataset item, free of personal data. Route it to Make, Zapier, n8n, a Google Sheet or your own webhook without a compliance review.

What you get

Only new listings reach the dataset. Each one has the same shape as the parent Marktplaats.nl Scraper, so anything built on one works on the other:

{
"listingId": "m2420174899",
"title": "Gazelle fiets 57 cm met Nexusnaaf",
"description": "Degelijke gazelle fiets met een framehoogte van 57 cm...",
"priceCents": 9000,
"priceType": "MIN_BID",
"city": "Utrecht",
"country": "Nederland",
"latitude": 52.0908,
"longitude": 5.1222,
"postedAt": "Vandaag",
"imageUrls": ["//images.marktplaats.com/api/v1/..."],
"categoryId": 447,
"url": "https://www.marktplaats.nl/v/fietsen-en-brommers/...",
"attributes": { "condition": "Gebruikt", "frameHeight": "57 cm", "color": "Zwart" },
"reserved": false,
"sellerType": "private"
}

Field notes:

  • priceCents is the asking price in euro cents; listings without a price omit it. priceType says how to read it: FIXED (asking price), MIN_BID (minimum bid), or the marketplace's other kinds when they occur.
  • attributes is the whitelisted, non-personal spec set for the listing's category — condition and delivery on anything, car specs, property size or phone storage where they apply.
  • latitude/longitude are the marketplace's municipality-level coordinates, not a seller address. description is the search snippet, not the full page text. imageUrls are protocol-relative — prepend https:.
  • sellerType (business or private) is the only seller-related field. Seller identity is never collected.

The run's status message always tells you what happened: how many listings the baseline captured, or how many new ones this run found.

What do Marktplaats alerts cost?

$1.99 per 1,000 new listings delivered — you pay for news, not for checking. A run that finds nothing new costs nothing beyond the actor start, and runs finish in seconds, so an hourly schedule stays cheap:

  • A quiet niche watch — a few new listings a day — costs cents per month.
  • A busy category watch delivering ~50 new listings a day ≈ $3/month.

For comparison: Dutch alert subscriptions charge €4–11/month per user for exactly this, without giving you the data. The per-listing price here is all-inclusive — platform usage and proxies are covered, no subscription, no charge for failed runs. Free-plan runs are capped at 25 items, enough to test the baseline and the output shape.

Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:

Help me set up the "Marktplaats New Listing Alerts" actor on Apify
(https://apify.com/lowlanddata/marktplaats-new-listing-alerts). Guide me one step at a time.
What I want to be alerted about: [E.G. "electric cargo bikes under 1500 EUR
within 25 km of Utrecht"]
Guide me to:
1. Propose my input values: searchQuery (what I'd type in the Marktplaats search
box, Dutch terms work best), optional categoryId, optional postcode + radiusKm
if I only want listings near me, optional priceMinEur/priceMaxEur.
2. Create a free Apify account (apify.com), open the actor page, paste the values
into the Input form, and start a run. Explain that this first run is the
baseline — future runs deliver only new listings.
3. Create an hourly Schedule in the Apify Console with the same input, and add an
email integration on the runs so new listings land in my inbox automatically.
4. If I want to watch a second search later: duplicate the Schedule with the new
search AND a different stateStoreName, so the two watches don't mix.
5. Show me how to export results as CSV/Excel, or read them from the API if I code.
6. If the alerts work for me, remind me at the end to leave a quick rating on the
actor page, and to report anything broken on its Issues tab.

Input

FieldDescription
searchQueryThe saved search to watch, exactly as you'd type it on marktplaats.nl. A query, a category, or both.
categoryIdNumeric Marktplaats category ID to watch. Every parent-scraper result carries one you can reuse.
postcode / radiusKmOnly alert on listings within this radius: Dutch postcode (e.g. 3511AA) plus a radius in km (1–300). radiusKm needs a postcode.
priceMinEur / priceMaxEurOnly alert on listings within this price band, in EUR.
maxItemsCap on new listings per run. Default 200; free-plan runs are capped at 25.
stateStoreNameNamed store remembering which listings were already delivered. Default marktplaats-alerts-state. Give each watched search its own name to run several.
resetStateForget everything seen so far and deliver the current snapshot as a fresh baseline.

A run needs at least a search query or a category. One run watches one search — for several searches, create several Schedules, each with its own stateStoreName.

How "new" is decided

The actor reads the search newest-first and stops as soon as it hits a streak of listings it has already seen, which is why runs take seconds. Delivered listing IDs are remembered for two months, so paid "bumped" ads that resurface at the top of the results do not alert again. If the marketplace response ever comes back with every item missing both title and price — a sign the data is broken, not empty — the run fails loudly instead of pretending there was nothing new.

Use it from your code

One HTTP call runs the watch and returns any new listings:

curl "https://api.apify.com/v2/acts/lowlanddata~marktplaats-new-listing-alerts/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-X POST -H "Content-Type: application/json" \
-d '{"searchQuery": "gazelle elektrische fiets", "priceMaxEur": 800}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/marktplaats-new-listing-alerts').call({
searchQuery: 'gazelle elektrische fiets',
postcode: '3511AA',
radiusKm: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lowlanddata/marktplaats-new-listing-alerts").call(
run_input={"searchQuery": "gazelle elektrische fiets", "priceMaxEur": 800})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Because output is empty on quiet runs and small otherwise, the synchronous call is the natural fit — poll it from a cron job and act only when items come back. Schedules, webhooks and the Make/Zapier/n8n integrations all work out of the box; this is a standard Apify actor.

Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this watch as a tool through Apify's hosted MCP server — the agent checks your search and reads back only what is new.

Claude Code:

$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/marktplaats-new-listing-alerts"

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

https://mcp.apify.com?actors=lowlanddata/marktplaats-new-listing-alerts

Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs.

Prompts that work once connected:

  • "Check my Marktplaats watch for new racefiets listings and summarize anything under €500."
  • "Any new camper listings since you last checked? Flag ones within 50 km of 3511AA."
  • "Watch 'vintage eiken kast' and tell me when something new shows up under €200."

Public listing data — prices, descriptions, categories, locations — is public commercial information, and this actor is built so the hard part of the question never arises: no personal data enters your dataset in the first place. The mapper whitelists fields in rather than filtering fields out, so seller identity is structurally unreachable — the only seller signal is business vs private. Requests are paced, load on the marketplace is negligible, and no anti-bot protections are bypassed.

One honest limit: titles and descriptions are the seller's own words, delivered as-is. If a seller types contact details into their listing text, that text is not rewritten.

Is there a Marktplaats alerts API?

No. Marktplaats offers saved-search notifications inside its own apps, but no API for them — you cannot pipe those alerts into email rules, Slack, a spreadsheet or code. This actor is the API-first version of the same feature: one endpoint that returns only the new listings for your search, as structured JSON, on whatever schedule you choose.

Does Marktplaats block this?

The marketplace serves search results openly, and this actor stays well inside that welcome: it reads newest-first, stops at the first streak of already-seen listings, and uses standard datacenter proxies. A typical run touches a page or two and finishes in seconds — the lightest possible footprint, which is also why hourly schedules are reliable.

How do I set up Marktplaats alerts?

This actor is the alert engine — no sortBy tricks or deduplication on your side:

  1. Run it once with your search. That's the baseline.
  2. Add an hourly (or daily) Schedule in the Apify Console with the same input.
  3. Attach an email or Slack integration to the runs. Quiet runs deliver nothing; runs with news deliver exactly the new listings.

The AI-assistant prompt above walks a non-technical user through these three steps.

FAQ

How do I get alerts for new Marktplaats listings? Run this actor on a Schedule with your search as input and attach an email or Slack integration. After the first baseline run, every run delivers only listings posted since the previous one.

Can Marktplaats email me new listings? Marktplaats has in-app saved-search notifications, but they stay locked in its apps. This actor turns the same idea into data: new listings as JSON, routed to email, Slack or anything else via Apify integrations.

What is a baseline run? The very first run (or any run after resetState) has nothing to compare against, so it delivers the current snapshot of your search and reports N listings (baseline run - future runs deliver only new ones). Everything after that is news only.

What counts as a new listing? One whose ID has not been delivered for this watch in the past two months. The actor reads the search newest-first and stops once it hits a streak of listings it already knows.

Will a bumped ad alert me twice? No. Paid "Omhoog plaatsen" bumps push old listings back to the top of the results, but the actor remembers delivered IDs for two months, so a bump does not re-alert.

Can I get alerts only for listings near me? Yes — set a Dutch postcode (e.g. 3511AA) and a radiusKm up to 300, and only listings inside that circle are watched. This is the input that beats scrolling the site.

Can I limit alerts to a price range? Yes — priceMinEur and priceMaxEur bound the watch in EUR. Handy for flip-hunting: watch a category only below your buy price.

How often should I schedule it? Hourly is the sweet spot for deal hunting; daily is fine for slow niches. Runs take seconds and quiet runs cost nothing beyond the actor start, so frequency is cheap.

What does a run with no new listings cost? Nothing beyond the actor start event. You pay $1.99 per 1,000 new listings delivered — checking is effectively free, news is what's billed.

Can I watch several searches at once? One run watches one search. For more, create one Schedule per search and give each its own stateStoreName so the watches track independently.

What does resetState do? It wipes the memory of delivered listings for that state store. The next run behaves like a first run: full snapshot, fresh baseline. Use it after changing the search meaningfully.

What happens if I change my search query? The state store keys on listing IDs, not the query, so a changed query mixes histories. Better: point the changed watch at a new stateStoreName (or set resetState once) to start a clean baseline.

How is this different from the Marktplaats Scraper? The parent scraper returns everything matching a search — snapshots, market research, bulk pulls. This satellite returns only the delta since last run, with the memory managed for you. Same output shape, same GDPR guarantee.

Does it include seller names or phone numbers? No, by design — the output whitelist makes seller identity structurally unreachable. The only seller field is sellerType: business or private.

Can I export the alerts to Excel or CSV? Yes — every run's dataset exports as CSV, Excel, JSON or XML from the Apify Console or API.

Does it work with Make, Zapier or n8n? Yes — it's a standard Apify actor, so all platform integrations, webhooks and schedules apply. A common setup: Schedule hourly, webhook on finished runs, route new items to Slack or a sheet.

Why did a run fail with a data-quality error? If every item in the marketplace response is missing both title and price, the actor treats the data as broken and fails loudly rather than silently recording a wrong baseline. Re-run; if it persists, open an issue.

Why does the free plan stop at 25 items? That's Apify's free-tier cap for this actor — enough to run a baseline on a scoped search and judge the output before paying anything.

Is monitoring Marktplaats legal? Prices, descriptions and categories are public commercial information, and no personal data enters your dataset — the whitelist mapper keeps seller identity out structurally, not as an option.

Can an AI agent watch Marktplaats for me? Yes — connect the actor through Apify's hosted MCP server and agents like Claude or Cursor can check your search and report only what's new.

Same GDPR-clean guarantee, same output shape:

Troubleshooting

The actor fails fast with the reason in the run's status message:

  • "Provide a search query, a category id, or both." — the input was empty; fill in searchQuery and/or categoryId.
  • "radiusKm needs a postcode to be the center of the radius." — a radius without a center; add the Dutch postcode.
  • "Use a Dutch postcode like "3511AA"." — the postcode didn't parse; four digits plus two letters.
  • "priceMinEur must not be higher than priceMaxEur." — inverted price range.
  • A huge first result — that's the baseline capturing the current snapshot; cap it with maxItems if you don't need it, future runs are delta-only either way.
  • Old listings showing up as new — usually a second watch sharing the default stateStoreName; give each watch its own name.
  • Fewer items than expected on a free plan — the 25-item free cap; run on a paid Apify plan for full results.

Support

Found an issue or missing a field you need? Open an issue on the actor's Issues tab — reports get fixed, this actor is actively maintained.

Getting good alerts from it? A rating on this page takes ten seconds and helps other buyers find an alert option that respects both their time and GDPR.