PagesJaunes Scraper icon

PagesJaunes Scraper

Scrape PagesJaunes.fr (French Yellow Pages) business listings across France. Extract business names, addresses, phone numbers, contact details,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

PagesJaunes Scraper at a glance

PagesJaunes Scraper is a ready-to-run Apify actor from abotapi for collecting lead generation data. Its documented output includes business name, phone, address, activities and rating, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.50 per 1,000 results on the Apify Free plan and from $0.12 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Lead Generation, Developer Tools, Automation
Region
Europe
Pricing
$1.50 per 1,000 results (Free plan), from $0.12 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
21 options

Scrape PagesJaunes.fr (French Yellow Pages) business listings across France. Extract business names, addresses, phone numbers, contact details, ratings, customer reviews, opening hours, payment methods and category hierarchies. Ideal for lead generation, local SEO and market research.

What PagesJaunes Scraper can do

  • Two ways to find listings. Search by business type and location the way you would on PagesJaunes.fr, or paste your own PagesJaunes search URLs and pick up from any page.
  • Detail pages on demand. Turn on detail scraping to add website, opening hours, description, payment methods, services, products, photos and reviews to every business, not just what the results list shows.
  • Address geocoding included. Business addresses are resolved to map coordinates in the same run. Weak or ambiguous matches are dropped rather than guessed, so coordinates you get are ones you can trust.
  • Built for schedules. Incremental mode tracks one search over time and classifies each business as new, updated, unchanged, reappeared or expired, so a recurring run reports only what actually changed.
  • Resume without duplicates. Point a fresh run at a previous run or dataset ID and it skips everything already collected there, so an interrupted run never gets billed twice.
  • Automatic retries on refused connections. A blocked or rate-limited request is retried automatically with a different connection instead of failing the whole run, and a run that genuinely could not reach the site fails loudly instead of quietly returning an empty dataset that looks like "no results".

Choose what to collect

These inputs let you configure PagesJaunes Scraper - France Businesses, Contacts & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose search mode to enter a keyword and location, or URL mode to paste PagesJaunes search URLs.

Choices: search, url

searchTermsstringBusiness type or keyword to search for. Used in search mode.
locationstringCity, department number, or region. Used in search mode.
urlsarrayPaste one or more PagesJaunes search URLs with quoiqui and ou parameters (a &page=N value starts from that page; extra parameters such as univers and idOu are ignored). Used only in URL mode.
minRatingintegerKeep only businesses rated at least this many stars (0 = no filter). Businesses without a rating are dropped when set. Rows that fail a filter are neither saved nor charged.
minReviewCountintegerKeep only businesses with at least this many reviews (0 = no filter).
hasWebsitebooleanKeep only businesses that list a website. Needs detail scraping, because the website comes from the detail page.
Show 14 more inputs
More input fields
InputWhat it controls
hasPhonebooleanKeep only businesses that list a phone number.
maxPagesintegerMaximum number of search result pages to scrape per query (20 results per page). Leave empty or 0 to walk every result page. Sponsored cards may repeat across pages and are deduped by clientId. A hard cap of 200 pages per query always applies.
maxListingsintegerStop after this many business listings across all searches/URLs. 0 = the maximum of 1,000,000 listings (still bounded by maxPages and the site's own page count).
scrapeDetailsbooleanFetch each business's detail page for rich data: full address, opening hours, reviews, payment methods, description. Slower but much more comprehensive. Each delivered business whose detail page is read is charged as one detail-page event on top of the per-result charge; businesses whose page is refused, and businesses incremental mode suppresses as unchanged, are not charged.
maxReviewsintegerDetail scraping only. Maximum number of reviews returned for each business (0 = none). Reviews are part of the result row and add no separate charge.
resumeFromRunIdstringOptional: paste a previous run ID (or dataset ID) from this actor to continue ONE interrupted run. Listings already collected there (matched by clientId) are skipped, so this run only returns new ones. Do not combine with Incremental mode once that search already has saved state, use Incremental mode's own State key instead for recurring runs. Leave empty for a normal run.
incrementalModebooleanTrack this exact search across scheduled runs. The actor remembers what it found last time (keyed on search terms/location or URLs, plus whether detail scraping is on) and classifies each business as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. UNCHANGED rows are not pushed (and not billed) unless 'Emit unchanged' is on. Distinct from 'Resume from run ID', which continues one specific interrupted run rather than remembering state itself. Default off.
stateKeystringOptional label for the Incremental mode baseline. Leave empty to derive one automatically from the search terms/location (or URLs) and the detail-scraping setting, the same search always reuses the same baseline. Set an explicit key only if you want two different searches to deliberately share one baseline, or to isolate two schedules that would otherwise resolve to the same automatic key.
emitUnchangedbooleanWhen Incremental mode is on, also return businesses with no detected change (changeType: UNCHANGED). Off by default so a quiet recurring run returns (and bills for) only what actually changed. Turning this on returns, and bills for, every tracked business on every run.
emitExpiredbooleanWhen Incremental mode is on, also return businesses that were tracked before but are no longer found (changeType: EXPIRED), so you can detect closures/delistings. Only fires after a COMPLETE scan of every tracked search this run, a run using 'Resume from run ID', a maxListings cap, or a platform migration resume never marks anything expired, since it did not prove those businesses are actually gone. Off by default; turning this on returns, and bills for, extra rows.
ignoreFieldsForChangesarrayIncremental mode only. Field names (for example rating, reviewCount, photos; use a dotted path such as reviews.date for nested fields) that never count as a change: a business whose only differences are in these fields stays UNCHANGED and is not pushed or billed, and they are left out of changedFields. The fields are still returned on every row that is pushed. imageUrl, latitude and longitude are always ignored. Changing this list never re-bills tracked businesses.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

nameBusiness Name (text)
phonePhone (text)
addressAddress (text)
activitiesActivities (text)
ratingRating (number)
reviewCountReviews (number)
detailUrlPagesJaunes Page (link)
detailFetcheddetailFetched
clientIdPJ ID (text)
fullAddressFull Address (object)
latitudeLatitude (number)
longitudeLongitude (number)
Show 14 more fields
websiteWebsite (link)
facebookFacebook (link)
instagramInstagram (link)
linkedinLinkedIn (link)
openingHoursOpening Hours (array)
paymentAcceptedPayment (text)
businessTypeBusiness Type (text)
servicesServices (array)
descriptionDescription (text)
reviewsReviews (array)
changeTypeChange (text)
changedFieldsChanged Fields (array)
firstSeenAtFirst Seen (text)
lastSeenAtLast Seen (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "clientId": "12345678",
  "name": "Sample Plumbing Co",
  "activities": [
    "plombiers"
  ],
  "phone": "01 23 45 67 89",
  "address": "10 rue Example 75001 Paris",
  "rating": 4.8,
  "reviewCount": 42,
  "detailUrl": "https://www.pagesjaunes.fr/pros/12345678",
  "searchTerms": "plombier",
  "searchLocation": "Paris",
  "latitude": 48.852,
  "longitude": 2.35,
  "website": "https://example-business.fr",
  "description": "Plombier professionnel depuis 1998, interventions rapides.",
  "openingHours": [
    "Mo-Fr 09:00-18:00"
  ],
  "paymentAccepted": "Espèces, CB, Visa",
  "fullAddress": {
    "street": "10 rue Example",
    "locality": "Paris",
    "postalCode": "75001",
    "country": "FR"
  },
  "photos": [
    "https://www.pagesjaunes.fr/media/example.jpg"
  ]
}

Ways to use this data

  • Lead generation and sales prospecting: build contact lists of plumbers, restaurants, dentists or any trade in a city, department or region.
  • Local SEO and reputation monitoring: track ratings, review counts and profile details for a portfolio of listings over time.
  • Directory and marketplace enrichment: pull structured business data, address, hours, services, payment methods, to populate your own directory or app.
  • Competitive and market research: map how many businesses of a given type operate in a location, and where they cluster.
  • Data journalism and public research: analyze the density and distribution of local services across France.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does PagesJaunes Scraper return?

The documented output for PagesJaunes Scraper includes business name, phone, address, activities, rating, reviews, pagesjaunes page and detailfetched. Availability of each field depends on the source page and the selected mode.

How much does PagesJaunes Scraper cost?

It costs $1.50 per 1,000 results on the Apify Free plan and from $0.12 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed businesses on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new or updated businesses for that same search by default; unchanged businesses are not returned or billed unless you turn on Emit unchanged. Expired businesses are returned only when Emit expired is on, and even then only after a run that scans the tracked search completely; reappeared only appears for a business that a previous complete scan already marked expired that way.

What's the difference between Resume and Incremental mode?

Resume from run ID continues ONE specific interrupted run: paste that run or dataset ID and this run returns only what wasn't collected yet. Incremental mode is for scheduling the SAME search repeatedly; it remembers state itself, so you never need to paste an ID. Don't combine the two once Incremental mode already has saved state for that search; the run stops with a clear error pointing you to use a different State key instead.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the "Pipe results into your apps" field to send a summary of each business straight into Notion, Linear or Airtable.

Ready to collect with PagesJaunes Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.