Get Moroccan and Tunisian property listings from Mubawab with one API
The Mubawab API returns Mubawab, the largest property portal in Morocco and also active in Tunisia, as clean JSON in two actions.
2 active endpoints. Every call is 3 credits.
- POST/mubawab/v1/search
- POST/mubawab/v1/detail
What Mubawab endpoints does ReefAPI ship?
2 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Mubawab API
2 of 2 endpoints, ready to run
Filter Mubawab by market, deal, property type, city and neighbourhood, price, surface, bedrooms, bathrooms, keyword and 13 amenities. Up to 32 listings a page, Mubawab's own total on every response, and rows that do not match your query are removed rather than passed through.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the Mubawab API works
Mubawab is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 438 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Build a price-per-m2 table for Casablanca neighbourhoods, with the agency behind each listing
Two calls per neighbourhood give you supply, asking prices and surfaces; a third, on a sample, gives you who is selling. Mubawab's own totals come back on every page, so you know when a neighbourhood is fully read.
Read total and last_page. Maârif holds 191 apartments for sale - six pages.
Every row carries price.amount and area_m2, so price per m2 is one division. Skip rows with price.on_request true.
Re-run the same district with price_min/price_max or area_min to see where the stock sits; each band's total is Mubawab's own count.
Adds the advertiser - agency, developer or private owner - GPS coordinates, building age, floor and condition, plus structured_data to double-check the price.
A neighbourhood table of listing count, median asking price per m2 and the share of stock held by agencies, developers and private owners - refreshed whenever you re-run it.
curl -X POST https://api.reefapi.com/mubawab/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"ma","deal":"sale","property_type":"apartment","city":"casablanca","price_min":1000000,"price_max":2000000}'{
"ok": true,
"data": { … },
"meta": {
"api": "mubawab",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What is on Mubawab right now, by market and property type
Mubawab's own result counts on 2026-10-07, country-wide. These are the numbers the total field returns for the same query.
| Slice | Morocco (mubawab.ma) | Tunisia (mubawab.tn) |
|---|---|---|
| Apartments for sale | 16,201 | 5,133 |
| Apartments for rent | 15,425 | 4,811 |
| Villas and luxury houses for sale | 6,637 | 2,606 |
| Land for sale | 7,262 | 3,617 |
| Houses for sale | 2,109 | not measured |
| Riads for sale | 1,198 | not measured |
| Offices and business premises for rent | 3,156 | not measured |
| Shops and commercial premises for rent | 2,221 | not measured |
| Farms for sale | 641 | not measured |
| Holiday apartments | 1,050 | not measured |
| Rooms for rent | 109 | not measured |
| Casablanca apartments for sale | 5,301 | - |
| Rabat apartments for rent | 1,543 | - |
| Tunis apartments for sale | - | 802 |
Pages hold 32 listings, or 31 when Mubawab places a promoted project box on the page. Paging reaches the end of the result set: the 16,199-apartment national query served exactly 522 pages of 31 and a last page of 17.
What was measured on 2026-10-07
Two full live runs, each with 38 searches across nine property-type and deal combinations in both markets and 14 listing details, recomputed from the raw responses. The lines that go against us are here too.
Morocco (mubawab.ma) and Tunisia (mubawab.tn). Mubawab's hub site links to these two only
16,201 apartments for sale and 15,425 for rent in Morocco; 5,133 and 4,811 in Tunisia - see the table above for every category
MAD in Morocco, TND in Tunisia, read from each listing: 1 of 31 Marrakech villas was priced in EUR and is returned as EUR
38 of 38 searches and 14 of 14 details in each of two runs
32, or 31 when a promoted project box takes a slot; paging reaches the last page of the result set
A 3-result neighbourhood rendered 33 cards and a page past the end rendered 32; the API returned 3 and 0 rows and reported the rest as dropped_padding
Card, listing page and the page's structured data agreed on price, area and bedrooms for 12 of 12 listings in each run
Across 392 rows from 13 searches: price 370 (the other 22 are price on request), area 385, neighbourhood 386, photos 392, bathrooms 354, amenities 341, rooms 311, bedrooms 296 - land and offices print no rooms or bedrooms
On detail only - agency, developer or private owner, with profile link for agencies and developers. Not on search rows, and no phone numbers
Rent period (monthly or nightly is not stated), a publication date on the listing pages read, and the advertiser on the search card
Search cards state no deal, so the deal of a search row comes from your query and Mubawab can show a mis-filed ad - a 27,000,000 MAD villa for sale appeared in Rabat rent results. detail returns the deal of the page's own category plus deal_conflict when the title disagrees: checked on that listing and four normal ones, 5 of 5 correct
Every filter narrowed the Casablanca control of 5,301 in the same run, from 194 (keyword piscine) to 4,836 (resale)
What people build with Mubawab
The jobs this data is most often used for.
endpoints
credits per call
Moroccan property analysts call search per city and neighbourhood with price and surface bands to size supply - Casablanca apartments for sale counted 5,301, of which 1,873 were priced at 2 million MAD or more.
Rental-market trackers page search with deal rent and sort newest for Rabat, Casablanca or Tunis, and read price, m2 and bedrooms off every row for a price-per-m2 series.
Agency and developer prospecting teams call detail on listings to collect the advertising agency or developer name, its kind and profile link - the card itself does not name the advertiser.
New-build researchers filter search with amenities new_development (465 Casablanca apartments for sale) and read each unit's delivery date and developer from detail.
What Mubawab data costs
The cheapest call here is 3 credits, so $15/mo (Pro) buys 3,333 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 438 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/mubawab/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"ma","deal":"sale","property_type":"apartment","city":"casablanca","price_min":1000000,"price_max":2000000}'import requests
r = requests.post(
"https://api.reefapi.com/mubawab/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"country": "ma",
"deal": "sale",
"property_type": "apartment",
"city": "casablanca",
"price_min": 1000000,
"price_max": 2000000
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Mubawab.
Get a free key →Which countries does the Mubawab API cover?▾
Morocco and Tunisia - the two country sites Mubawab runs, mubawab.ma and mubawab.tn. Pass country ma (the default) or tn. Both use the same page layout, so every field comes back the same way. Moroccan prices are in MAD and Tunisian prices in TND, and the currency is read from each listing rather than assumed: one Marrakech villa in a sample of 31 was priced in euros, and the API says EUR for it.
Why does a search sometimes return fewer rows than a page holds?▾
Because that is all that matches. When a query has fewer results than a page, Mubawab fills the page with other listings from the surrounding area without marking them - a neighbourhood with 3 apartments for sale rendered 33 cards. The API keeps only as many rows as Mubawab's own count says exist and reports the rest in dropped_padding. The same applies to a page past the end: it returns no rows and has_more false instead of 32 unrelated listings.
Does the API return the agency or seller?▾
Yes, on detail. Mubawab does not show the advertiser on the search card, so search rows have no seller. detail returns the advertiser block the listing page shows: the name, whether it is an estate agency (Agence), a property developer (Promoteur) or a private owner (Particulier), and for agencies and developers their Mubawab id, profile link and logo. Phone numbers sit behind a click-to-reveal button on Mubawab and are not returned.
Is the rent price monthly?▾
Mubawab does not say, and the API does not guess. Neither the card, the listing page nor its structured data states a rent period, and the rent results mix monthly rentals with nightly ones - a studio advertised per night at 300 MAD sat in the same Rabat rent results as 10,000 MAD monthly flats. price.period is therefore null; read the title and description when the period matters.
How do I search a neighbourhood?▾
Pass city and district as Mubawab spells them, for example city casablanca and district Maârif - Casablanca apartments for sale go from 5,301 to 191. Accents matter on this site: Fès, Salé and Maârif are spelled with them. For the cities Mubawab links from its home page an unaccented spelling also works, so Fes finds Fès's 333 apartments for sale. You can also copy any result-page address from mubawab.ma or mubawab.tn into search_url.
Are the prices accurate?▾
They are the figures Mubawab prints. On 12 listings per run across seven categories and both markets, the price, area and bedroom count on the search card, on the listing page and in the page's own structured data were identical, 12 of 12 in each of two runs. detail returns the structured-data copy as structured_data and lists any disagreement in witness_mismatch. Listings marked Prix à consulter come back with amount null and on_request true - 22 of 392 rows in a 13-search sample.
Do the filters really narrow the results?▾
Each one was measured against the unfiltered count in the same run. On Casablanca apartments for sale (5,301): 2 million MAD and up 1,873, up to 800,000 MAD 597, 150 m2 and up 1,427, up to 60 m2 743, four bedrooms and up 354, three bathrooms and up 926, keyword piscine 194, pool 260, garden 783, terrace 2,636, elevator 3,737, furnished 889, new development 465. Sorting by price leaves out listings without a price - 5,301 becomes 5,027.
Can a rent search return a property that is for sale?▾
Yes, because Mubawab itself files some ads under the wrong deal. A premium row in the Rabat apartments-for-rent results on 2026-10-07 was a villa titled for sale at 27,000,000 MAD, and its own listing page files it under apartments for rent too. Search cards do not state a deal, so search rows return deal as null - the deal of a result comes from your query, not from the card - and add title_deal, the deal the advertiser's title names. detail returns deal from the category the listing page files the ad under, and sets deal_conflict to true when the title says otherwise. Filter on deal_conflict, or compare title_deal with your query, before averaging rents.
What is the difference between rooms and bedrooms?▾
rooms is Mubawab's pieces count and bedrooms its chambres count, exactly as the listing prints them. They do not always add up the way you expect: one Rabat flat prints 1 piece and 2 bedrooms, and its own structured data agrees. The bedrooms_min filter counts bedrooms - every row it returned had at least that many bedrooms, while some printed fewer pieces.
What is the Mubawab API?▾
Mubawab API is a ReefAPI endpoint group for morocco's and tunisia's main property portal as json: apartments, villas, riads, land and offices for sale or rent, with the advertising agency on every listing. It returns live JSON through POST requests under /mubawab/v1.
Is the Mubawab API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Mubawab calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Mubawab login or account?▾
No login to Mubawab is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Mubawab data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Mubawab API use?▾
Mubawab actions currently cost 3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
21 Real Estate APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Mubawab, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 437 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-07.