Expat-Dakar Scraper - Senegal Property Listings & Prices avatar

Expat-Dakar Scraper - Senegal Property Listings & Prices

Pricing

from $1.76 / 1,000 property listings

Go to Apify Store
Expat-Dakar Scraper - Senegal Property Listings & Prices

Expat-Dakar Scraper - Senegal Property Listings & Prices

Senegalese property adverts from Expat-Dakar: asking price in CFA francs, bedrooms, floor area, neighbourhood and region, photos, and the advertiser's phone and WhatsApp number on every row. Search nine categories across seven regions, or open single adverts for the full seller text, bathroom count

Pricing

from $1.76 / 1,000 property listings

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Expat-Dakar Scraper — Senegal Property Listings, Prices & Contacts 🚀

Store-SIÁN Agency Store-AngoCasa Scraper Store-Mubawab Scraper Store-Property24 Scraper

🎉 Senegal's whole online property market — 3,762 live adverts, each with a phone number

Built for agencies, investors and diaspora buyers who need Dakar prices as data, not browser tabs

🔎 What is the Expat-Dakar Property Scraper — and when should you use it?

The Expat-Dakar Property Scraper turns public Expat-Dakar property adverts from anywhere in Senegal into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: Senegalese sale and rental adverts as rows: asking price or monthly rent in CFA francs, bedrooms, floor or plot area, neighbourhood and region, the date the advert was posted, the advertiser's name and their direct phone number and WhatsApp link. Every row also names the property type and whether it is for sale or to rent, so an export splits by either after the fact. Open an advert in full and you also get the complete seller text, the bathroom count, every photo at original resolution, the advertiser's join date and the exact update timestamp.

Use something else when: the property is not in Senegal. Use AngoCasa Scraper for Angola, with the same sale-and-rent row shape across 18 provinces and 39 Luanda zones. Use Mubawab Scraper for Morocco and Tunisia, including GPS coordinates and the full advert text. Use Property24 Scraper for Southern and East Africa: South Africa, Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya. This actor covers the nine property categories Expat-Dakar files under Immobilier: apartments, furnished apartments, houses, land, rooms and commercial premises, each already split into sale or rent by the portal. Hotels and estate-agency service adverts sit outside that tree and are not in scope, and Senegal publishes no sold-price register, so asking prices are the only prices there are.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/expat-dakar-property-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want property adverts, asking prices and seller phone numbers from Expat-Dakar using the Apify Actor `sian.agency/expat-dakar-property-scraper`.
Use it when I need: Senegalese sale and rental adverts as rows: asking price or monthly rent in CFA francs, bedrooms, floor or plot area, neighbourhood and region, the date the advert was posted, the advertiser's name and their direct phone number and WhatsApp link. Every row also names the property type and whether it is for sale or to rent, so an export splits by either after the fact. Open an advert in full and you also get the complete seller text, the bathroom count, every photo at original resolution, the advertiser's join date and the exact update timestamp.
Don't use it when: the property is not in Senegal — use angocasa-property-scraper or mubawab-property-scraper or property24-property-scraper instead.
How to call it: set `category` to one of the nine property categories (`appartements-a-louer`, `terrains-a-vendre`, `maisons-a-vendre` …) or leave it at `immobilier` for all of them at once. The category already says whether the adverts are for sale or to rent, so there is no separate deal-type field. Set `region` to `dakar`, `thies` or any of the other eight places that hold stock, or `all` for the whole country. Narrow with `minPrice` and `maxPrice` in CFA francs; the bounds go to the portal's own filter, so anything they exclude is never saved and never billed. Use `keyword` to reach a neighbourhood such as almadies or mermoz, which the portal has no address for. Set `sortBy` to `latest` when you want the newest adverts first for monitoring. To expand adverts you already have, set `operation` to `detail` and pass `propertyUrls`.
Start with this input:
{
"operation": "search",
"category": "appartements-a-louer",
"region": "dakar",
"sortBy": "latest",
"maxItems": 200
}
Ask me which property category they want and whether Dakar alone is enough or they need the whole country, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull apartments to rent in Dakar under 800,000 F CFA a month and rank neighbourhoods by median rent per square metre.
  • Find every land plot for sale in Thiès over 1,000 m² and give me a phone number for each.
  • Give me this week's new furnished apartments in Dakar with the advertiser's name and WhatsApp link.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/expat-dakar-property-scraper.md.

📋 Overview

Senegal has one deep property board, and until now nobody had put it on the Apify Store. This actor reads Expat-Dakar's own result pages and hands you every advert as a row: asking price in CFA francs, bedrooms, floor area, neighbourhood, region, the date it was posted, and the advertiser's phone number and WhatsApp link.

What you get:

  • The whole vertical: nine property categories, 3,762 live adverts when this actor was built, and no page ceiling to stop a full sweep
  • Ten adverts per request: a complete national index is 377 requests, so a whole-country run finishes in minutes
  • 🎯 Contact data on the cheap row: phone and WhatsApp arrive with the search result, not behind a second paid call
  • 💰 Pay per advert returned: nothing is charged for a category that matched nothing or an address we could not read
  • 💎 Two operations, one dataset: the search rows and the detail rows share a field layout, so they merge without a mapping step
  • French content, typed columns: prices, areas and room counts come out as numbers, not strings you have to clean

✨ Features

  • 🏠 Nine property categories: apartments, furnished apartments, houses, land, rooms and commercial premises, each split into sale and rent by the portal itself
  • 📍 Region picker from the portal's own index: Dakar, Thiès, Saint-Louis, Diourbel, Kaolack, Sine-Saloum, Ziguinchor, Fatick, Kaffrine, plus a catch-all
  • 🔎 Keyword narrowing: reach a neighbourhood — Almadies, Mermoz, Ngor, Point E — that the portal has no URL for
  • 💰 Price bounds in CFA francs: floor, ceiling or both, applied by the portal before anything is returned or billed
  • 🆕 Newest-first ordering: run it on a schedule and diff the advert IDs to see what arrived
  • 📞 Phone and WhatsApp on every row: the portal prints both in the result page, so a lead list needs one call per ten adverts
  • 📷 Full photo sets on detail rows: every image at its original resolution, not the 224px grid thumbnail
  • 🏢 Advertiser record: name, business profile, join date and which contact details the portal has verified
  • 📊 Typed output: 39 fields, nullable where a real advert can leave them empty, exportable as JSON, CSV or Excel

🎬 Quick Start

Pick a category, pick a region, press Start. The default input sweeps the whole Immobilier section across all of Senegal and returns the first 100 adverts. No key, no login, no proxy to configure.

curl -X POST "https://api.apify.com/v2/acts/sian.agency~expat-dakar-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"operation":"search","category":"appartements-a-louer","region":"dakar","maxItems":100}'

🚀 Getting Started (3 Simple Steps)

Set Category to the kind of property you want. The category is the deal type as well, so "Apartments to rent" and "Apartments for sale" are separate values and no impossible combination exists.

Step 2: Choose where

Set Region. Dakar holds roughly nine adverts in ten, so "All of Senegal" and "Dakar" return nearly the same thing; the smaller regions are there for when you specifically want them.

Step 3: Run it and export

Press Start. Rows land in the dataset as they arrive. Download JSON, CSV or Excel from the Storage tab, or read them straight from the API.

That's it! In about a minute, you'll have:

  • Every matching advert with its asking price in CFA francs
  • Bedrooms, floor area, neighbourhood and region as separate columns
  • A phone number and a WhatsApp link for each one

📥 Input Configuration

FieldTypeRequiredDescription
operationstringNosearch walks the result pages; detail opens adverts you already have
categorystringNoOne of nine property categories, or immobilier for all of them
regionstringNoall, or one of the ten regions that hold property stock
keywordstringNoNarrows the category to adverts whose text matches — the way to reach a neighbourhood
minPriceintegerNoFloor in CFA francs; 0 means no floor
maxPriceintegerNoCeiling in CFA francs; 0 means no ceiling
sortBystringNopriority, latest, lowest-price or highest-price
maxItemsintegerNoStops the sweep once this many adverts have been returned
propertyUrlstringNoOne advert address, for the detail operation
propertyUrlsarrayNoSeveral advert addresses, one per line

Example — apartments to rent in Dakar, newest first:

{
"operation": "search",
"category": "appartements-a-louer",
"region": "dakar",
"sortBy": "latest",
"maxItems": 200
}

Example — open specific adverts in full:

{
"operation": "detail",
"propertyUrls": [
"https://www.expat-dakar.com/annonce/4-chambres-f5-standing-neuf-jamais-habite-6754772",
"https://www.expat-dakar.com/annonce/chambre-meublee-aux-maristes-2725287"
]
}

📤 Output

Results are saved to the Apify dataset with 39 fields, including:

FieldTypeDescription
listingIdstringThe advert's own number, shared by search and detail rows
propertyUrlstringThe advert's address on the portal
propertyTitlestringThe headline the advertiser wrote
categoryLabelstringThe portal's own category name, in French
propertyTypestringApartment, Furnished apartment, House, Land, Room or Commercial
dealTypestringSale or Rent
pricenumberThe figure on the advert, as a number
currencystringRead from the advert rather than assumed; XOF in practice
bedroomsintegerRoom count, where the category carries one
bathroomsintegerDetail rows only
areaSqmnumberFloor area for buildings, plot area for land
localitystringNeighbourhood, as the advert was filed
regionstringSenegalese region
phonestringThe advertiser's number, in international format
whatsappstringThe same number as a WhatsApp contact
advertiserNamestringAgency or private seller
photosarrayEvery image at full resolution, on detail rows
updatedAtstringWhen the advertiser last touched the advert

Example row:

{
"listingId": "6754772",
"propertyUrl": "https://www.expat-dakar.com/annonce/4-chambres-f5-standing-neuf-jamais-habite-6754772",
"propertyTitle": "4 CHAMBRES (F5) - STANDING - NEUF & JAMAIS HABITÉ",
"categoryLabel": "Appartements à louer",
"propertyType": "Apartment",
"dealType": "Rent",
"price": 900000,
"currency": "XOF",
"priceText": "900 000 F Cfa",
"bedrooms": 4,
"areaSqm": 200,
"locality": "Almadies",
"region": "Dakar",
"advertiserName": "Nova Immobilier",
"advertiserId": "6649503",
"isBusinessAdvertiser": true,
"phone": "+221764146666",
"whatsapp": "+221764146666",
"listedAtText": "10. juin, 16:40",
"isFeatured": true,
"promotionTier": "gold",
"status": "success"
}

💼 Use Cases & Examples

1. Price the Dakar rental market by neighbourhood

A property analyst benchmarking asking rents across the city's districts.

Input: Category "Apartments to rent", region Dakar, maxItems above 1,400. Output: Every live rental advert with rent, bedrooms, floor area and neighbourhood as separate columns. Use: Median rent per square metre for Almadies against Mermoz, Ngor or Point E, from the same dataset and the same field layout.

2. Build a contactable agency list

An agency or CRM operator who needs to know who is actually transacting in Dakar.

Input: Any category, region Dakar. No detail calls needed. Output: Advertiser name, business profile link, phone number and WhatsApp link on every search row. Use: Group by advertiser to rank agencies by live stock, then reach each one directly.

3. Watch new stock arrive

An investor or relocation consultant tracking supply in a market with no sold-price register.

Input: Order set to "Newest first", run on a schedule. Output: Advert IDs you can diff between runs; detail rows carry the exact update timestamp. Use: Separate genuinely new listings from re-posted ones, and measure how long stock sits.

4. Track the Dakar and Petite Côte land market

A developer sourcing plots outside the built-up city.

Input: Category "Land for sale", region Dakar or Thiès. Output: 441 adverts with plot area parsed as a number, from a few hundred square metres to 30,000. Use: Derive price per square metre yourself, which the portal never publishes.

5. Research a diaspora purchase or return

A Senegalese buyer in France, Italy or the United States, or an agent serving them.

Input: Category "Furnished apartments", keyword for a neighbourhood. Output: 685 furnished lets with prices, photos and a number that reaches the landlord directly. Use: Shortlist and call from abroad without a portal lead form in between.

6. Feed a West African property index

A data team maintaining a multi-country series.

Input: Category "All property", region "All of Senegal". Output: The whole vertical in one dataset, in the same row shape as our Angola, Morocco and Southern Africa actors. Use: Append Dakar to an existing series without writing a translation layer.

🔗 Integration Examples

JavaScript/Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/expat-dakar-property-scraper').call({
operation: 'search',
category: 'appartements-a-louer',
region: 'dakar',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/expat-dakar-property-scraper').call(
run_input={
'operation': 'search',
'category': 'terrains-a-vendre',
'region': 'thies',
'maxItems': 100,
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['propertyTitle'], item['price'], item['phone'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~expat-dakar-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","category":"maisons-a-vendre","region":"dakar","maxItems":100}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: a daily schedule, or a webhook from your own system
  2. HTTP Request: call the actor's run endpoint with your category and region
  3. Process: filter the rows on price, area or advertiser
  4. Action: append to a sheet, upsert into a CRM, or send new stock to Slack

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 adverts per run, with the same fields and the same quality as a paid run
  • No credit card required
  • Enough to check the columns before you commit to a sweep
  • Unlimited adverts per run. A full national sweep is about 3,760
  • Pay per advert returned; a category that matched nothing costs nothing
  • Property Detail is priced separately, because it is a second request per advert

💰 Mid-band for African property data — and the phone number arrives on the cheap row, which most of the field charges a second event for.

🔗 View current pricing

❓ Frequently Asked Questions

Q: How many adverts can I get? A: FREE tier: 25 per run. PAID tier: unlimited. The whole Immobilier section held 3,762 adverts when this actor was built.

Q: Do I need an API key, a login or a proxy? A: No. Pick a category and press Start.

Q: What currency are the prices in? A: The CFA franc (XOF), which is what every advert quotes. The currency is read from each advert rather than assumed, so it travels on the row.

Q: Is the price a monthly rent or a sale price? A: Whichever the advert is. The category says which, and every row carries a plain Deal column so you never have to infer it.

Q: Can I filter by neighbourhood? A: Use the Keyword field. The portal files adverts by region, not by neighbourhood, so there is no Almadies or Mermoz address to point at. The neighbourhood is on every advert and comes back as a column either way.

Q: What does Property Detail add? A: The complete seller text instead of the grid teaser, the bathroom count, every photo at full resolution, the advertiser's join date and verification badges, and the exact update timestamp. Price, bedrooms, area, neighbourhood, phone and WhatsApp are already on the search row.

Q: What output formats are available? A: JSON, CSV and Excel, exported straight from the Apify dataset.

Q: Is this legal? A: We read only what the portal publishes to any visitor. See the legal section below.

🐛 Troubleshooting

A run returned one row that says no adverts are published

  • That category and region genuinely hold nothing right now. Outside Dakar and Thiès most categories are empty.
  • Set Region to "All of Senegal", or Category to "All property", and run it again. You were not charged for the empty result.

A keyword returned far fewer adverts than expected

  • The keyword is matched against the advert's own French wording, so a misspelling returns nothing rather than everything.
  • Try a shorter keyword — "almadies" rather than "almadies 2 villa" — or clear it and filter the rows yourself.

Fewer adverts came back than the category count suggested

  • A price floor or ceiling excludes adverts that carry no price at all: on the full vertical that is about 77 of 3,762.
  • Raise maxItems if you set it low; it stops the sweep, and the default is 100.

A detail run says the advert was sold, rented or withdrawn

  • The advert is off the board. Re-run a Property Search for the same category to pick up what replaced it.

A run says the site asked the request to verify itself

  • Occasional and transient; the run already retried five times. Wait a few minutes and start it again. Nothing was charged.

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Expat-Dakar is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Expat-Dakar.

🤝 Support

Join our active support community


Built by SIÁN Agency | More Tools