Mubawab Property Alerts: Real Estate Listing Monitor avatar

Mubawab Property Alerts: Real Estate Listing Monitor

Pricing

from $1.00 / 1,000 mubawab listing returneds

Go to Apify Store
Mubawab Property Alerts: Real Estate Listing Monitor

Mubawab Property Alerts: Real Estate Listing Monitor

Mubawab real estate monitor for Morocco: new sale listings and price drops by city, such as Casablanca, Marrakech, Agadir and Tanger. Mubawab listings for sale under a max price. Export Mubawab listings to Google Sheets or n8n. Morocco only.

Pricing

from $1.00 / 1,000 mubawab listing returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Mubawab Property Alerts: New Moroccan Listings and Price Drops by City

Give it a Moroccan city and it reads the first page of Mubawab's for-sale results for that city, one row per listing with price, area and a link. Switch on monitoring and later runs return only the listings that appeared since last time, plus any whose asking price fell.

Who it's for

A Moroccan living abroad who is hunting for an apartment back home. You are in Montreal or Lyon, you cannot refresh Mubawab at Casablanca business hours, and you worry that the good flats in a given neighbourhood will be gone before you see them. You want a message when a new one lists, with the price already in dirhams.

A small investor following price movement in Agadir or Marrakech. You are not after every listing, only the ones that get cheaper. A listing that drops 8% after three weeks on the market is a negotiation signal, and the price-drop alert exists for exactly that.

A relocation consultant with several clients in different cities. Each client has a city and a budget. You run one scheduled search per client, set a maxPrice, and send each client their own new listings.

Why this one

  • Prices in the row. Price and currency are separate fields, so you can sort and filter without parsing a string such as "1 825 000 DH".
  • Two kinds of alert. New listings, and price drops above a threshold you set (5% by default).
  • A budget filter. minPrice and maxPrice cut the page before anything is billed.
  • Billed per listing returned. An empty search costs nothing beyond the run start fee.

What you get

One row per listing on the city's first results page.

FieldMeaning
listingIdThe numeric id from the listing link.
titleThe listing headline, for example "Apartment for sale in Oasis. Area 70 m²".
price, currencyAsking price as a number, and its currency (MAD unless the page shows another).
areaFloor area in square metres, when the card shows it.
bedrooms, bathroomsCounts when the card states them.
urlThe listing page.
isNew, changeTypeIn monitoring mode: new, price_drop or seen.
previousPrice, priceDropPctFilled on a price drop.
firstSeen, lastSeenWhen this monitor first and last saw the listing.

What was filled in our tests. We saved the Casablanca results page on 2026-10-08 and parsed it: 31 listings, and every one had a price, an area, a location, an image and a description. Bedrooms and bathrooms were present on 30 of the 31. Live pages for other cities that day carried a few "price on request" cards, so expect price to be empty on roughly one listing in ten, and treat every other column as filled.

Which Moroccan cities work, and what happens in Tunisia

The city you type becomes the address www.mubawab.ma/en/ct/<city>/real-estate-for-sale, with spaces turned into hyphens. We tried it on 2026-10-08:

City you typeMubawab pageListings parsed
Casablancaloads31
Rabatloads32
Marrakechloads31
Agadirloads33
Tangerloads31
Meknesloads33
El Jadidaloads32
Essaouiraloads32
Oujdaloads33
Nadorloads33
Temaraloads32
Salé (typed with the accent)loads32
Fes, Kenitra, Mohammedia, Tetouan, Laayounenot found (404)0
Tangier (English spelling), Sale (no accent)not found (404)0

A results page holds about 32 listings. Two lessons follow. Use the spelling Mubawab uses in its own address: it is Tanger, not Tangier, and Salé with its accent. And do not combine a property type with a city, because "Apartment Marrakech" becomes the address apartment-marrakech, which does not exist. The counts above were measured against the live site on 2026-10-08. A city that Mubawab does not list under the spelling you typed still ends without an error: you get one row with listingCount: 0, and nothing is billed.

Tunisia. This actor covers Morocco only. It requests only www.mubawab.ma, and when we typed tunis and sousse there on 2026-10-08 both returned 404, so Tunisian cities do not work.

Only the first page of the for-sale section is read. Rentals are not covered.

Pricing

  • Mubawab listing returned: $2 per 1,000 listings

Plus a $0.003 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

A full first page of about 32 listings costs roughly six or seven cents. In monitoring mode a later run bills only the new or reduced listings it returns, so a quiet day costs close to nothing.

How to use

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~mubawab-property-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"searches":["Casablanca"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

For monitoring, switch on deltaMode and put the actor on a daily schedule. Add skipFirstRun if you want the first run to only record what is currently listed.

Input

{
"searches": [
"Casablanca"
]
}

One Moroccan city per line, spelled as in Mubawab addresses. E.g. "Casablanca", "Marrakech", "Agadir". Accepted formats: Casablanca, Marrakech, Agadir.

Other settings: city (overrides the address with an exact city name and is echoed into the city column), minPrice and maxPrice (in dirhams; listings with no price are dropped when either is set), alertOnNew, alertOnPriceDrop, minPriceDropPct, deltaMode, deltaName, skipFirstRun, includeKeywords and excludeKeywords (matched against the row text), and maxResults. The propertyType setting is written into the rows but does not change which page is read; put words such as "villa" in includeKeywords to narrow instead.

Sample output

queryfoundstatussearchQuerylistingCountnewCountpriceDropCountlistingslistingIdtitledescriptionpricecurrencycitylocationpropertyTypeareabedroomsbathroomsurlimageUrlisNewchangeTypepreviousPricepriceDropPctfirstSeenlastSeenscrapedAt
CasablancatrueOK <description><area (m²)><price drop %>1970-01-01T00:00:00.000Z

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~mubawab-property-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"searches":["Casablanca"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~mubawab-property-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["Casablanca"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~mubawab-property-alerts/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Mubawab Property Alerts | Apify" — the agent will find and run this actor.

Tips

  • Test the city first. Open mubawab.ma/en/ct/<city>/real-estate-for-sale in a browser. If that page is a 404, the actor returns a zero-listing row and charges nothing.
  • Pick a high-turnover city for alerts. Casablanca and Marrakech return a full page of recent listings; very small towns return one or two.
  • Run once a day. The first page shows the newest listings, so a daily run is enough to catch what is new without paying for the same rows repeatedly.
  • Sort on priceDropPct. The biggest reductions are the ones worth a call.
  • Prices are asking prices. They are what the seller listed, not what the flat sells for.

vs. alternatives

None of our other actors read Mubawab, so the comparison is with doing it by hand.

What it costsWhat you getTrade-off
This actor (mubawab-property-alerts)$0.002 per listing returned, $0.003 per runA scheduled, structured feed of new and reduced listings for the cities that workFirst page only, sale listings only, a city typed with the wrong spelling returns nothing, and a few listings show no price
Browsing Mubawab yourselfYour timeThe full site: every page, rentals, photos, agency contacts, saved searchesNothing arrives on a schedule or in a spreadsheet, and you cannot compare yesterday's price to today's

FAQ

Can I monitor rentals?

No. The actor reads the for-sale section only.

Are all prices in dirhams?

MAD is the default currency, and a different one is used only if the listing's price text shows it. Check the currency column before comparing across rows.

Does it open each listing page?

No. It reads the results page only, so the fields come from the listing cards.

Why do I get fewer rows than the website shows?

Because it reads one page, not the whole result set.