Propriétés Privées Scraper
Pricing
from $9.99 / 1,000 results
Propriétés Privées Scraper
Scrape Propriétés Privées real estate advisors — emails, phones, zones, LinkedIn. Full France directory. Export CSV, JSON, Excel. Lead gen, CRM, prospecting. One click.
Pricing
from $9.99 / 1,000 results
Rating
0.0
(0)
Developer
Corentin Robert
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Propriétés Privées - Real Estate Advisors Scraper
Bulk-extract advisor contact data from the Propriétés Privées directory. Input: List mode (full directory) or URLs (enrich specific profiles). Output: names, phones, emails, zones, portfolio stats, profile URLs. Ready for lead generation, CRM enrichment, O'Tome integration, and franchise recruitment.
Built for: Lead generation · CRM enrichment · O'Tome enrichment · Franchise recruitment · Market mapping by region
Custom setup or integration? corentin@outreacher.fr
What does it do?
Propriétés Privées is France's leading 100% online real estate network (founded 2006), with independent advisors across all regions. Advisors publish contact details on profile pages at proprietes-privees.com/negociateur. This Actor extracts the full directory via the site's API and profile pages, then exports a clean, normalized dataset.
| Mode | How it works | Best for |
|---|---|---|
list | Fetches full directory via API | Full France advisor list |
urls | Enriches specific advisor profile URLs you provide | CRM refresh, enriching existing lists |
Phase 1: List advisors via API. Phase 2: For each profile, fetch API (main data) + HTML (email, portfolio stats) in parallel. No proxy required. Failed requests retried with exponential backoff.
What data does it extract?
| Category | Fields |
|---|---|
| Identity | nom, firstName, lastName, companyName (Propriétés Privées) |
| Contact | telephones, phonePro, phonePerso, email |
| Profile | titre, zone, urlFiche, urlBiens, urlBusiness |
| Portfolio | listingsCount, listingValueTotal, listingValueAverage (€) |
| Activities | activities (Résidentiel, Entreprises et Commerces, Location, etc.) |
| Media | photoUrl, facebookUrl |
| Presentation | presentationExcerpt (~200 chars) |
linkedinUrl, linkedInCorrelationScore (when enrichment configured via env) |
All text fields (nom, firstName, lastName, zone) are normalized to Title Case (e.g. PARIS → Paris, HORNECKER → Hornecker). Emails and portfolio stats (listingsCount, listingValueTotal, listingValueAverage) are extracted from the HTML profile page. LinkedIn enrichment runs when OPENAI_API_KEY and AUTOM_DEV_API_KEY are set (no limit). Output includes firstName, lastName, companyName, linkedinUrl for O'Tome and similar tools.
Input
List mode (full directory, no limit):
{"mode": "list"}
List mode with limit:
{"mode": "list","maxResults": 100}
URLs mode (enrich specific profiles):
{"mode": "urls","startUrls": [{ "url": "https://www.proprietes-privees.com/negociateur/michel.hornecker" },{ "url": "https://www.proprietes-privees.com/negociateur/eric.pitoy" }]}
Note: With
requestListSources, use objects{ "url": "..." }. Plain strings also work in code but may fail Apify validation.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | String | "list" | "list" (full directory) or "urls" (enrich links) |
startUrls | Array | — | [mode=urls] Advisor profile URLs — one per line |
maxResults | Integer | 0 | Max advisors to extract. 0 = no limit (full directory) |
Output
Each advisor is one row. Results stream to the Dataset tab during the run.
{"nom": "Michel Hornecker","firstName": "Michel","lastName": "Hornecker","companyName": "Propriétés Privées","titre": "Conseiller","zone": "Serignan","telephones": ["0699405021"],"phonePerso": "0699405021","email": "m.hornecker@proprietes-privees.com","urlFiche": "https://www.proprietes-privees.com/negociateur/michel.hornecker","urlBiens": "https://www.proprietes-privees.com/negociateur/michel.hornecker","urlBusiness": "https://business.proprietes-privees.com/conseillers/michel.hornecker","photoUrl": "https://images.proprietes-privees.com/negociateur/HKM.png","presentationExcerpt": "Comme un médecin met son expertise au service de ses patients...","activities": ["Résidentiel", "Entreprises et Commerces", "Location", "Programmes neufs", "Chasseur immobilier"],"listingsCount": 100,"listingValueTotal": 42689556,"listingValueAverage": 426896,"linkedinUrl": "https://www.linkedin.com/in/michel-hornecker","linkedInCorrelationScore": 85}
Download in JSON, CSV, Excel, or HTML from the Dataset tab. LinkedIn fields appear when OPENAI_API_KEY and AUTOM_DEV_API_KEY are set in Actor env.
How to use
Step-by-step (List mode)
- Open the Actor Input tab
- Set Mode to List — All advisors (full directory)
- (Optional) Set
maxResultsto limit; leave at0for full directory - Click Start
- Download results from the Dataset tab (streams progressively)
Step-by-step (URLs mode)
- Go to proprietes-privees.com/negociateur and collect advisor profile URLs
- Set Mode to URLs — Enrich advisor profile URLs
- Paste the URLs into the Advisor URLs field (one per line)
- Click Start
- Download results from the Dataset tab
Local development
$npm install
Edit INPUT.json in storage/key_value_stores/default/ or create it at the project root, then run:
cp INPUT.json storage/key_value_stores/default/INPUT.json 2>/dev/null || trueapify run --purge-none
Example INPUT.json for List mode:
{"mode": "list"}
Example INPUT.json for URLs mode:
{"mode": "urls","startUrls": [{ "url": "https://www.proprietes-privees.com/negociateur/michel.hornecker" }]}
Output: storage/datasets/default/. Deploy with apify push.
Tests: Run npm test for parse unit tests.
Benchmark (fetch): Run npm run benchmark:fetch to measure API/HTML latency and find optimal concurrency (50 advisors, tests 40–60 concurrent). Local: ~1.3 adv/s with concurrency 40; ETA full directory ~45 min.
Performance and cost
Phase 1: API listing (fast). Phase 2: API + HTML per profile (email and portfolio stats from HTML).
| Advisors | Phase 1 | Phase 2 | Total time (est.) |
|---|---|---|---|
| 100 | ~4 s | ~30–60 s | ~1 min |
| 500 | ~5 s | ~2–4 min | ~5 min |
| Full directory | ~2 min | ~35–45 min | ~40–50 min |
Cost uses Apify consumption-based pricing (Compute Units). Check Apify pricing for current rates.
Typical run logs:
Mode: List (full directory)Listing...N advisors · M pagesListing M/M (100%) · N advisorsListing done. N advisors (4.2s)Enriching N profiles...[####################] N/N (100%)LinkedIn enrichment... N advisorsLinkedIn done. K foundDone. N advisors
Use cases
- Lead generation: Build lists of real estate advisors by region
- CRM enrichment: Add contact data to existing records (URLs mode)
- O'Tome / enrichment tools: Export
firstName,lastName,companyName,linkedinUrlfor downstream enrichment - Franchise recruitment: Export and filter by zone
- Market mapping: Analyze coverage by region or department
- Portfolio analysis: Filter advisors by
listingsCountorlistingValueAverage
FAQ
Why are some emails empty?
Emails are extracted from the profile HTML (mailto links) and API. Some profiles hide or omit their email. Generic addresses (commerces@, contact@, info@, etc.) are filtered out — only actionable professional emails are kept.
Why are listingsCount / listingValueTotal empty for some advisors?
These come from the HTML ("X biens disponibles" and price listings). Advisors with no published listings or an atypical page structure may return null.
Works outside France?
Propriétés Privées is France-only (mainland and overseas territories).
Proxy required?
No. The site does not block standard requests.
Can I run on a schedule?
Yes. Use Apify Scheduler for recurring runs (e.g. weekly refresh).
Dataset empty during run?
Results stream progressively. Refresh the Dataset tab to see new rows.
How to get only one region?
Run the full scrape, then filter by zone in Excel or your tool.
CSV separator?
Semicolon (;) for Excel compatibility when exporting from Apify.
Support
For questions, custom solutions, or feedback, use the Issues tab on the Actor page.
Ready? Set mode: List, pick your target, and click Start.
