Mubawab API

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Mubawab endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
M
/mubawab/v1

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.

2 endpoints

search

3 cr

Search Mubawab listings in Morocco (default) or Tunisia.

required
—
optional
country, deal, property_type, city, district, price_min, price_max, area_min, area_max, bedrooms_min, bathrooms_min, keyword, amenities, sort, page, search_url

detail

3 cr

The full record of one Mubawab listing.

required
id
optional
country

Every parameter, every allowed value →

Mubawab API

2 of 2 endpoints, ready to run

View docs ↗

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.

3 credits0 required · 16 optional
POST/mubawab/v1/search
idle
// 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.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 438 engines.

02
Call
POST /mubawab/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
3 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01search with city casablanca and a district
POSTsearch with city casablanca and a district

Read total and last_page. Maârif holds 191 apartments for sale - six pages.

02search page 2 … last_page
POSTsearch page 2 … last_page

Every row carries price.amount and area_m2, so price per m2 is one division. Skip rows with price.on_request true.

03search with price or area bands
POSTsearch with price or area bands

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.

04detail on a sample of row ids
POSTdetail on a sample of row ids

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.

request
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}'
response envelope
{
  "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.

SliceMorocco (mubawab.ma)Tunisia (mubawab.tn)
Apartments for sale16,2015,133
Apartments for rent15,4254,811
Villas and luxury houses for sale6,6372,606
Land for sale7,2623,617
Houses for sale2,109not measured
Riads for sale1,198not measured
Offices and business premises for rent3,156not measured
Shops and commercial premises for rent2,221not measured
Farms for sale641not measured
Holiday apartments1,050not measured
Rooms for rent109not measured
Casablanca apartments for sale5,301-
Rabat apartments for rent1,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.

Markets

Morocco (mubawab.ma) and Tunisia (mubawab.tn). Mubawab's hub site links to these two only

Listings

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

Currency

MAD in Morocco, TND in Tunisia, read from each listing: 1 of 31 Marrakech villas was priced in EUR and is returned as EUR

Success

38 of 38 searches and 14 of 14 details in each of two runs

Rows per page

32, or 31 when a promoted project box takes a slot; paging reaches the last page of the result set

Padding removed

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

Price check

Card, listing page and the page's structured data agreed on price, area and bedrooms for 12 of 12 listings in each run

Fields filled

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

Advertiser

On detail only - agency, developer or private owner, with profile link for agencies and developers. Not on search rows, and no phone numbers

Not published by Mubawab

Rent period (monthly or nightly is not stated), a publication date on the listing pages read, and the advertiser on the search card

Sale or rent

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

Filters

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.

2

endpoints

3

credits per call

01

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.

02

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.

03

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.

04

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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}'
python
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"])
FAQ

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.

Already paying for something else?Mubawab vs Bright Data

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.

0/4000

No account needed · we reply from [email protected]

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.