Espaces Atypiques · Full profiles infos (emails, phones) avatar

Espaces Atypiques · Full profiles infos (emails, phones)

Pricing

from $9.99 / 1,000 results

Go to Apify Store
Espaces Atypiques · Full profiles infos (emails, phones)

Espaces Atypiques · Full profiles infos (emails, phones)

Deprecated. Use https://apify.com/corent1robert/fr-realty-agents-hub with network=espaces_atypiques. Same public directory, one shared CRM schema. This standalone listing is no longer maintained.

Pricing

from $9.99 / 1,000 results

Rating

0.0

(0)

Developer

Corentin Robert

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Share

Espaces Atypiques — agency team export

Who it’s for: sales, recruiters, and analysts who need a single CRM-ready table of everyone published on Espaces Atypiques agency “team” pages — no login, no API key (public website only).

What you get per person: name, job title, director vs staff band, email, phone, photo URL, long biography text, office label, and the agency page URL you can cite or revisit. Rows without an email are not exported (dataset / CSV), so you only get contactable leads.

Why one Actor: the site lists many agencies; this scraper starts from the public agency sitemap (same kind of list search engines use), fetches each French agency page, and reads the team block. You can also paste a handful of agency URLs for a quick test or a sub-region.


How to run (Apify Console)

  1. Choose Sitemap (full France) or URLs (your list).
  2. Optional: in Input JSON, set maxResults to cap advisors (e.g. 20 for a smoke test), or maxAgencies to cap office pages. Defaults are no cap on agencies and on listing fiches in fallback mode.
  3. Start the run; open the Dataset or Run log when it finishes.

Input

KeyTypeDefaultPurpose
modesitemap | urlssitemapFull sitemap vs pasted agency pages
startUrlsarray of { "url": "…" }[]French agency page URLs (URLs mode)
maxAgenciesinteger0Cap office pages (0 = all). Independent of maxResults. URLs: 1+ also caps the pasted list.
maxResultsinteger0Cap advisors with email (0 = no cap). Does not limit how many office pages are opened.
maxListingPagesinteger0Listings fallback: max ventes/… pages per agency (0 = no cap; 1200 to limit)
listingConcurrencyinteger6Parallel ventes/… fetches per agency in fallback
concurrencyinteger25Parallel agency page fetches (bounded)
fetchTimeoutinteger60000Per-request timeout (ms)
proxyConfigurationobject(Apify)Optional proxy; same pattern as other Actors on the Apify platform

additionalProperties: true — you can pass extra keys from the API if you automate runs.

Example (quick test, Input JSON):

{
"mode": "sitemap",
"maxAgencies": 5,
"concurrency": 10
}

Example (specific agencies):

{
"mode": "urls",
"startUrls": [{ "url": "https://www.espaces-atypiques.com/paris-rive-gauche/" }],
"concurrency": 5
}

Output fields (main)

FieldMeaning
sourceKeyStable id (email-based, or path + name if email missing)
firstName / lastName / fullNameNormalized for export: prénom in title case (fr-FR), nom in MAJUSCULES; fullName is Prénom NOM
jobTitleRaw line under the name on the site
roleCategorydirector, associate_director, advisor, support, other, unknown (heuristic)
banddirector (management) vs employee (includes advisors and unknown titles)
isDirector / isEmployeeBooleans derived from band
email / phoneWhen shown on the card; phone is normalized to +33 X XX XX XX XX (French numbers, 0…+33 …)
agencyNameOffice label to use in exports: from the page h1 when specific; otherwise from the last URL segment (city slug) when the heading is generic (e.g. Nos collaborateurs)
agencyNameRawFirst h1 / header text used before resolution (for debugging)
agencyPathPath on the site, e.g. /grand-est/strasbourg/
agencyUrlRegionFirst path segment (area). On single-segment agency URLs (/blois/), it is the same slug as the city column so the field is never empty.
agencyUrlCitySlugLast path segment (city slug as on the site)
agencyLabelSub-label on the card (e.g. office name)
agencyPageUrlSitemap / input agency URL (stable office id)
dataFetchedFromSet when cards were read from …/collaborateurs/ instead of the home page
photoUrl / bioImage and biography text when present

Role detection uses French titles (normalized): e.g. Directeur d’agence → director band; Conseiller → staff. Titles the parser does not recognise are kept in jobTitle and classified as other.


Local development

cd espaces-atypiques-agents-scraper
npm install
echo '{"mode":"sitemap","maxAgencies":2,"concurrency":3}' > input.json
apify run --input-file=./input.json

If the CLI expects storage/key_value_stores/default/INPUT.json, use --input-file as above, or add a valid INPUT.json that matches the schema. After a run with a non-empty dataset, a semicolon CSV (UTF-8 BOM) is written to output.csv in the project root. Rows are sorted by agency path, then last name, first name, email. Columns are fixed (no dynamic Extra: fields); sourceKey is the last column; roleCategory remains on the dataset record but is omitted from the CSV to avoid overlap with band / jobTitle.


How it works (technical)

  1. Sitemap mode: GET /sitemap_index.xml → find agence-sitemap.xmlGET that file → keep <loc> URLs that are not under /en/ (French pages only).
  2. Fetch each agency home page (bounded concurrency, retries; redirects are followed).
  3. Parse the team from .preview-collaborateur (prefer #equipe-trombi) when a mailto is present.
  4. If the home page has no team block, do not call /collaborateurs/ (it often redirects to a national page). Instead, collect ventes/… URLs from the home grid (#annonces-localisations, #biens, .biens-localisation) and from the CTA that points to /ventes/?pl=… (hidden pl in the form): the Actor follows paginated search results (/ventes/page/2/?pl=…, etc.) until it has enough links or there is no next page. Then it opens each listing and parses the negotiator card (name, phone, email — including mailto in HTML comments). Total opened listings are capped by maxListingPages (default 0 = no cap; set 1200 to limit each office — useful for smoke tests). Large full runs use more time and Apify resources. Internal safety still stops after many WordPress list pages per pl filter. listingConcurrency controls parallel listing fetches per agency.
  5. Dedupe rows by sourceKey (email) and push to the default dataset. agencyPageUrl is always the sitemap office URL; dataFetchedFrom points at the listing URL when the row came from the listings fallback.

Compliance

Data is taken from public pages. You are responsible for using it in line with applicable law, the site’s terms, and GDPR (prospecting rules, contact preferences).


Also available — French real estate advisors

Need several French networks in one CRM file? French Real Estate Agents · Multi-network.

ActorWhat you get
French Real Estate Agents · Multi-networkSeveral French brands in one CRM table
Optimhome AdvisorsOptimhome — names, phones, emails, RSAC
IAD France AdvisorsIAD mandataires — names, phones, emails
eXp France ConsultantseXp roster — emails, phones
Keller Williams FranceKW advisors — emails, phones
SAFTISAFTI advisors — emails, phones
Sextant FranceSextant — emails, phones, GPS
Efficity ConsultantsEfficity — emails, phones
megAgencemegAgence — phones and GPS
BSK ImmobilierBSK — emails, phones
Les PorteclésNames and GPS

Browse all: apify.com/corent1robert

Support & custom work

corentin@outreacher.fr