PagesJaunes Scraper [$0.90/1K💰] | French B2B Leads & Phones avatar

PagesJaunes Scraper [$0.90/1K💰] | French B2B Leads & Phones

Pricing

from $0.88 / 1,000 results

Go to Apify Store
PagesJaunes Scraper [$0.90/1K💰] | French B2B Leads & Phones

PagesJaunes Scraper [$0.90/1K💰] | French B2B Leads & Phones

Scrape PagesJaunes.fr French business data: name, category, address, phone, website, hours and reviews. Build B2B lead lists and a French company database by profession and city, without the restricted official API.

Pricing

from $0.88 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

2 days ago

Last modified

Categories

Share

PagesJaunes Scraper: French Business Directory & B2B Lead Data

Scrape PagesJaunes.fr (Yellow Pages France) by profession and location and export 34 fields per business: name, category, full address, phone numbers, opening hours, services, ratings, reviews, website and quote/booking availability as structured JSON. It reads the public directory with a Chrome-compatible TLS fingerprint, so no API key is needed. From $0.90 per 1,000 businesses, with a 10-row free preview.

Main use cases

  • Prospection B2B / lead generation: build targeted outreach lists of French businesses by profession and city or department.
  • Base de données entreprises: assemble a structured French company directory with phone, address, website and activity.
  • Market research and competitor analysis: measure how many businesses of a given category operate in an area and how they are rated.
  • Review and reputation monitoring: track ratings and review counts for businesses and categories over time.
  • Directory and enrichment datasets: fill in missing phone, website or opening-hours data for existing records.
  • Local-services research: compare service availability (quote/booking) across cities and regions.

How It Works

How the PagesJaunes Scraper works: a profession and location search becomes 34-field French business leads.

This actor queries PagesJaunes search-result pages for a profession plus location, then visits each business profile page and maps it into one dataset row. It uses no browser: requests are made with an impers (curl-impersonate) HTTP client that reproduces a real Chrome browser's TLS handshake byte-for-byte (exact JA3/JA4 fingerprint, cipher order, extension order and HTTP/2 settings), because PagesJaunes is protected by Cloudflare Bot Management, whose plain HTTP requests get a 403 challenge.

The actor warms up the homepage to obtain Cloudflare clearance cookies, reuses the session (cookies plus keep-alive connection pool) for the crawl, and retires the session and retries with a fresh proxy when a challenge appears (up to 3 retries per URL). HTML is parsed with Cheerio.

Extract French Business Data For B2B Prospecting

For every business found on the search results, the actor visits the profile page and returns a full record: business id, name, primary category plus all activities, schema.org type, street/postal code/city/address/country, phone number(s), public email, website and other external links, quote ("devis") and booking links with availability flags, average rating and review count, recent reviews, services/prestations, description, price range, opening hours by day (French day names), GPS coordinates, photo URLs, the profile URL, the query/location that produced the result, and a scrape timestamp.

Scrape PagesJaunes Without The Official API

PagesJaunes does publish an official API (developer.pagesjaunes.fr: Reviews API, Business Infos API, Find Businesses API), but it is restricted: it is reserved for consumer-facing local-search services and is explicitly not available for commercial prospecting, database enrichment or academic research. This actor instead reads the public directory pages directly, so it works for exactly those lead-generation and data-assembly use cases the official API excludes.

Why residential proxies help: Cloudflare also fingerprints IP addresses. While Chrome TLS impersonation can sometimes work from datacenter IPs, residential French proxies significantly improve success rates. The Console prefills a residential-FR proxy, but the API default is no proxy, so enable one explicitly for production runs.

Known limitations

  • latitude/longitude are only present when the profile page embeds them in the JSON-LD geo node; not all profiles do.
  • Reviews are limited to what the profile page embeds (typically the most recent ones).
  • The site is French-only; queries and locations should be in French.

Input Parameters

FieldTypeRequiredDefaultNotes
searchQuerystringNoplombierBusiness type or profession to search for, e.g. plombier, restaurant, dentiste, electricien.
locationstringNoParisCity, department, region or postal code, e.g. Paris, Lyon, 75011, Bordeaux.
maxResultsintegerNo20Maximum businesses to return (PagesJaunes lists 20 per page). Hard cap 2,000; free users are capped at 10.
maxPagesintegerNo0Maximum search pages to crawl (hard max 100). 0 derives it automatically from maxResults at 20 businesses per page.
scrapeDetailsbooleanNotrueVisit each business's profile page to extract phone number, opening hours, website, GPS coordinates and reviews. Required for phone/hours, so it is on by default.
startUrlsarray (requestListSources)No[]Optional PagesJaunes search-result URLs to scrape directly. When provided, searchQuery and location are ignored.
proxyobject (proxy)NoNo proxy (Console prefill: RESIDENTIAL, FR)Standard Apify proxy picker. Residential French proxies are strongly recommended because of Cloudflare Bot Management; enable one explicitly for production.

Output Fields

One dataset item per business. The default overview view shows Name, Category, Phone, City, Postal code, Rating, Reviews, Website and URL.

FieldTypeDescription
businessIdstringPagesJaunes business id (from /pros/{id}).
namestring / nullBusiness name.
categorystring / nullPrimary business category/activity.
categoriesarrayAll activities listed for the business.
typestring / nullschema.org business type, e.g. Restaurant, LocalBusiness.
streetstring / nullStreet address.
postalCodestring / nullPostal code.
citystring / nullCity.
addressstring / nullFull formatted address.
countrystring / nullCountry.
phonestring / nullPrimary phone number.
phonesarrayAll phone numbers found for the business.
emailstring / nullContact email when publicly listed.
websitestring / nullBusiness website URL.
websitesarrayAll external website/social links for the business.
quoteUrlstring / nullQuote (devis) link.
bookingUrlstring / nullOnline booking/appointment request URL.
hasOnlineQuotebooleanWhether the business offers online quotes.
hasOnlineBookingbooleanWhether the business offers online booking.
ratingnumber / nullAverage rating (0-5).
reviewCountinteger / nullNumber of reviews.
servicesarrayServices/prestations offered.
descriptionstring / nullBusiness description.
priceRangestring / nullPrice range when listed.
openingHoursobject / nullOpening hours by day (French day names).
latitudenumber / nullLatitude.
longitudenumber / nullLongitude.
imagestring / nullPrimary image URL.
imagesarrayAll image URLs for the business.
reviewsarrayReviews (author, date, rating, text).
urlstringPagesJaunes profile URL.
searchQuerystring / nullSearch query used (when applicable).
searchLocationstring / nullSearch location used (when applicable).
scrapedAtstringISO timestamp of extraction.

Example Input And Output

Input

{
"searchQuery": "plombier",
"location": "Paris",
"maxResults": 100,
"scrapeDetails": true
}

Output (one dataset row)

{
"businessId": "123456789",
"name": "Plomberie Dupont",
"category": "Plombier",
"categories": ["Plombier", "Chauffagiste"],
"type": "LocalBusiness",
"street": "12 Rue de la Roquette",
"postalCode": "75011",
"city": "Paris",
"address": "12 Rue de la Roquette, 75011 Paris",
"country": "France",
"phone": "01 23 45 67 89",
"phones": ["01 23 45 67 89"],
"email": null,
"website": "https://plomberie-dupont.fr",
"websites": ["https://plomberie-dupont.fr"],
"quoteUrl": "https://www.pagesjaunes.fr/pros/123456789/devis",
"bookingUrl": null,
"hasOnlineQuote": true,
"hasOnlineBooking": false,
"rating": 4.6,
"reviewCount": 38,
"services": ["Dépannage", "Installation chaudière"],
"description": "Plombier chauffagiste à Paris 11e ...",
"priceRange": null,
"openingHours": { "lundi": "08:00-19:00", "mardi": "08:00-19:00" },
"latitude": 48.85561,
"longitude": 2.37201,
"image": "https://.../image.jpg",
"images": ["https://.../image.jpg"],
"reviews": [{ "author": "Marie L.", "date": "2026-08-12", "rating": 5, "text": "Travail soigné ..." }],
"url": "https://www.pagesjaunes.fr/pros/123456789",
"searchQuery": "plombier",
"searchLocation": "Paris",
"scrapedAt": "2026-10-11T09:00:00.000Z"
}

Pricing

Pay-per-event, charged only for rows written:

EventPrice
Actor start$0.00005 per started GB (minimum one event)
Business row$0.00090

That is $0.90 per 1,000 businesses. Free Apify accounts receive a 10-business preview; paid runs are capped at 2,000 businesses by maxResults. The actor-start event is charged once per run.

Integrations & Automation

Every Apify actor is reachable through the Apify API, and this one plugs into webhooks, Zapier and Make so results can flow into a Google Sheet, Airtable base, CRM or data warehouse. For prospecting and review monitoring, run it on a schedule: a weekly snapshot of your target professions and cities is enough to find new businesses and track rating changes, and recurring runs also improve the actor's Store recommendation signals.

FAQ

Is there an official PagesJaunes API?

Yes, there is an official API (developer.pagesjaunes.fr: Reviews API, Business Infos API, Find Businesses API), but it is restricted: it is reserved for consumer-facing local-search services and is explicitly not available for commercial prospecting, database enrichment or academic research. This actor reads the public directory pages directly, so it works for the lead-generation and data-assembly use cases the official API excludes.

What are the alternatives to this actor / this data source?

For French business data you can combine this with Société.com, SIRENE or other directory scrapers. PagesJaunes is the strongest source for phone numbers, activity categories and customer reviews, so it is worth having alongside registry-based sources that cover SIRET/SIREN identifiers.

How do I build a French B2B lead list by profession and city?

Set searchQuery to the profession (e.g. electricien) and location to the city, department or postal code, keep scrapeDetails on, and set maxResults. The actor returns one row per business with phone, address, website and rating, ready for a spreadsheet or CRM.

Why are latitude and longitude sometimes empty?

GPS coordinates are only returned when the business profile page embeds them in the JSON-LD geo node. Not every profile does, so these fields can be null for some rows.

Does PagesJaunes block scrapers?

PagesJaunes uses Cloudflare Bot Management, which inspects TLS fingerprints and rejects plain HTTP clients. This actor reproduces a real Chrome TLS handshake and works best with residential French proxies; the Console prefills that proxy, but API runs must enable one explicitly.

How many businesses does a run return?

PagesJaunes lists 20 businesses per result page. Set maxResults to control the total; leave maxPages at 0 and the actor derives the page count automatically. Free-plan runs are capped at 10 businesses.

SEO Keywords

pagesjaunes, pages jaunes, scraper pagesjaunes, pagesjaunes scraper, annuaire entreprises, annuaire professionnel, données entreprises france, prospection b2b, base de données entreprises, extraction données entreprises, scraping pagesjaunes, api annuaire, leads b2b france, avis entreprises, telephone entreprises, entreprises france, pagesjaunes api, pagesjaunes alternative, annuaire des entreprises, donnees entreprises

For AI Agents & LLM Apps

Purpose: return one structured French business-directory row per PagesJaunes listing for a given profession and location.

Minimal working input:

{ "searchQuery": "plombier", "location": "Paris", "maxResults": 20 }

Output fields: businessId, name, category, categories, type, street, postalCode, city, address, country, phone, phones, email, website, websites, quoteUrl, bookingUrl, hasOnlineQuote, hasOnlineBooking, rating, reviewCount, services, description, priceRange, openingHours, latitude, longitude, image, images, reviews, url, searchQuery, searchLocation, scrapedAt.

Behaviors an agent should know:

  • searchQuery and location are the normal inputs; if startUrls is set, both are ignored and only those URLs are scraped.
  • scrapeDetails defaults to true and is what enables phone, openingHours, website and reviews; turning it off returns listing-only rows.
  • PagesJaunes lists 20 businesses per page; maxPages at 0 is derived automatically from maxResults.
  • Free-plan runs are capped at 10 businesses regardless of maxResults.
  • latitude/longitude may be null for some businesses (only present when the profile embeds a geo node).
  • Queries and locations are French; the site is French-only.

Billing: pay-per-event: $0.0009 per result ($0.90 / 1,000 businesses) plus a $0.00005 actor-start event.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Solocal or PagesJaunes. It accesses only publicly available PagesJaunes directory pages; it does not log in, bypass authentication, or solve CAPTCHAs on anyone's behalf. Users are responsible for ensuring their use complies with PagesJaunes' Terms of Service and with applicable data-protection law (including the GDPR, since the data concerns French/EU businesses). Where output includes business contact details such as phone numbers or emails, it must not be used for unsolicited commercial outreach in violation of applicable law.