Expat-Dakar Scraper - Senegal Property Listings & Prices
Pricing
from $1.76 / 1,000 property listings
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Ü
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Expat-Dakar Scraper — Senegal Property Listings, Prices & Contacts 🚀
🎉 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)
Step 1: Choose what to search
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
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search walks the result pages; detail opens adverts you already have |
category | string | No | One of nine property categories, or immobilier for all of them |
region | string | No | all, or one of the ten regions that hold property stock |
keyword | string | No | Narrows the category to adverts whose text matches — the way to reach a neighbourhood |
minPrice | integer | No | Floor in CFA francs; 0 means no floor |
maxPrice | integer | No | Ceiling in CFA francs; 0 means no ceiling |
sortBy | string | No | priority, latest, lowest-price or highest-price |
maxItems | integer | No | Stops the sweep once this many adverts have been returned |
propertyUrl | string | No | One advert address, for the detail operation |
propertyUrls | array | No | Several 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:
| Field | Type | Description |
|---|---|---|
listingId | string | The advert's own number, shared by search and detail rows |
propertyUrl | string | The advert's address on the portal |
propertyTitle | string | The headline the advertiser wrote |
categoryLabel | string | The portal's own category name, in French |
propertyType | string | Apartment, Furnished apartment, House, Land, Room or Commercial |
dealType | string | Sale or Rent |
price | number | The figure on the advert, as a number |
currency | string | Read from the advert rather than assumed; XOF in practice |
bedrooms | integer | Room count, where the category carries one |
bathrooms | integer | Detail rows only |
areaSqm | number | Floor area for buildings, plot area for land |
locality | string | Neighbourhood, as the advert was filed |
region | string | Senegalese region |
phone | string | The advertiser's number, in international format |
whatsapp | string | The same number as a WhatsApp contact |
advertiserName | string | Agency or private seller |
photos | array | Every image at full resolution, on detail rows |
updatedAt | string | When 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 ApifyClientclient = 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)
- Trigger: a daily schedule, or a webhook from your own system
- HTTP Request: call the actor's run endpoint with your category and region
- Process: filter the rows on price, area or advertiser
- 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
PAID Tier (Production Ready)
- 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.
❓ 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
maxItemsif 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.
⚖️ Is it legal to scrape data?
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
- For issues or questions, open an issue on the actor's page
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools