# Pages Jaunes Scraper (`junipr/pagesjaunes`) Actor

Scrape PagesJaunes.fr for French business listings — phone, address, hours, reviews, SIREN numbers. Search by category and location across France.

- **URL**: https://apify.com/junipr/pagesjaunes.md
- **Developed by:** [junipr](https://apify.com/junipr) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.20 / 1,000 listing scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Pages Jaunes Scraper

The only Apify actor for Pages Jaunes (pagesjaunes.fr), France's dominant local business directory with 28+ million businesses. Extract business listings, contact details, opening hours, ratings, and SIREN numbers for any business type across all French cities and regions.

### What Data Can You Extract?

| Field | Description |
|-------|-------------|
| Business name | Full official name |
| Address | Street, city, postal code, GPS coordinates |
| Phone number | Primary + all listed numbers, French format + normalized |
| Website | Business website URL |
| Email | Contact email if listed |
| Opening hours | Full schedule by day in French + English |
| Rating | Average rating + review count |
| SIREN number | French business registration number (9 digits) |
| SIRET number | Establishment number (14 digits) |
| Categories | Business categories in French + English equivalents |
| Reviews | Up to 50 most recent reviews (optional) |
| Photos | Photo URLs (optional) |
| Social links | Facebook, Instagram, Twitter, LinkedIn |

### How to Use

**Basic search:**
```json
{
  "searchTerms": ["plombier"],
  "locations": ["Paris 75001"]
}
````

**Multi-city, multi-category:**

```json
{
  "searchTerms": ["restaurant", "brasserie"],
  "locations": ["Lyon", "Bordeaux", "Marseille"],
  "maxResultsPerSearch": 50
}
```

**With full profile data:**

```json
{
  "searchTerms": ["dentiste"],
  "locations": ["Nice"],
  "visitProfile": true,
  "includeReviews": true,
  "includeOpeningHours": true
}
```

**Direct URLs:**

```json
{
  "businessUrls": [
    "https://www.pagesjaunes.fr/pros/12345678"
  ]
}
```

### Input Configuration

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerms` | string\[] | `["boulangerie"]` | Business type or keyword in French |
| `locations` | string\[] | `["Paris"]` | City, arrondissement, or department |
| `maxResultsPerSearch` | integer | `20` | Results per search (max 500) |
| `paginate` | boolean | `false` | Paginate through all results pages |
| `sortBy` | string | `"relevance"` | `relevance`, `distance`, `rating` |
| `withWebsite` | boolean | `false` | Filter: only businesses with websites |
| `withReviews` | boolean | `false` | Filter: only businesses with reviews |
| `minRating` | number | null | Minimum rating (1-5) |
| `includeOpeningHours` | boolean | `true` | Extract opening hours |
| `includeReviews` | boolean | `false` | Extract reviews (requires profile visit) |
| `visitProfile` | boolean | `false` | Visit each business profile for full data |

### Output Format

```json
{
  "businessId": "12345678",
  "name": "Boulangerie Martin",
  "url": "https://www.pagesjaunes.fr/pros/12345678",
  "address": {
    "street": "12 Rue de Rivoli",
    "city": "Paris",
    "postalCode": "75001",
    "coordinates": { "lat": 48.8566, "lng": 2.3522 }
  },
  "phone": "+33123456789",
  "website": "https://boulangeriemartin.fr",
  "categories": ["Boulangerie-pâtisserie"],
  "categoriesNormalized": ["Bakery"],
  "siren": "123456789",
  "rating": { "value": 4.5, "count": 127 },
  "openingHours": {
    "isOpenNow": true,
    "schedule": [
      { "day": "lundi", "dayEnglish": "Monday", "slots": [{"open": "07:00", "close": "20:00"}], "isClosed": false }
    ]
  },
  "isPremiumListing": false,
  "scrapedAt": "2026-03-11T12:00:00.000Z"
}
```

### Use Cases

- **B2B lead generation in France** — Build prospect lists for French SMEs
- **Local competitor analysis** — Map competitors in any French city
- **Market research** — Density analysis of business types across France
- **Vendor sourcing** — Find suppliers by region and category
- **Restaurant / hospitality research** — Menu, hours, ratings for any area

### Pricing

**Pay-Per-Event:** $0.0026 per listing scraped ($2.60 per 1,000 listings)

Pricing includes all platform compute costs — no hidden fees.

| Scenario | Listings | Cost |
|----------|----------|------|
| One city, one category (20 results) | 20 | $0.05 |
| 5 cities, 5 categories | 500 | $1.00 |
| National search (50 × 100 searches) | 5,000 | $10.00 |
| Lead database build (50K listings) | 50,000 | $100.00 |

### Related Actors

- [Yellow Pages Scraper](https://apify.com/junipr/yellow-pages-scraper) — US Yellow Pages equivalent
- [Google Maps Scraper](https://apify.com/junipr/google-maps-scraper) — Global local business data

### FAQ

#### What is Pages Jaunes?

Pages Jaunes (pagesjaunes.fr) is France's national business directory — the French equivalent of Yellow Pages. It lists 28+ million businesses across all sectors and regions of France.

#### Does it work for all regions of France?

Yes — all French departments, DOM-TOM overseas territories, cities, and arrondissements (Paris 1er-20ème).

#### What is a SIREN number and why is it useful?

SIREN is the French business registration number (9 digits, issued by INSEE). It uniquely identifies every business entity in France and is required for official communications, credit checks, and B2B verification.

#### What's the best way to search for businesses in Paris arrondissements?

Use the postal code format: `"Paris 75001"` for the 1st arrondissement, `"Paris 75015"` for the 15th, etc.

#### Can I extract phone numbers for cold calling campaigns?

Yes — phone numbers are extracted in both French format and normalized `+33` international format. Check RGPD compliance requirements before cold outreach.

#### Is scraping Pages Jaunes legal?

Pages Jaunes is a public business directory. Business contact information is intentionally public. Under French RGPD (Article 6), legitimate business interests support B2B prospecting use cases. Users are responsible for compliance with applicable data protection regulations.

# Actor input Schema

## `searchTerms` (type: `array`):

Business type or keyword to search. E.g. \["plombier", "restaurant japonais", "avocat"].

## `locations` (type: `array`):

Location(s) to search. E.g. \["Paris 75001", "Lyon", "Marseille"]. Accepts city, arrondissement, or department.

## `urls` (type: `array`):

Direct pagesjaunes.fr search result URLs.

## `businessUrls` (type: `array`):

Direct pagesjaunes.fr business profile URLs for detailed extraction.

## `maxResultsPerSearch` (type: `integer`):

Maximum listings per search combination. Min: 1, Max: 500.

## `paginate` (type: `boolean`):

Paginate through all results pages.

## `sortBy` (type: `string`):

Sort order: relevance, distance, rating.

## `radius` (type: `integer`):

Search radius in km. Leave empty for pagesjaunes default. 1-50 km.

## `openNow` (type: `boolean`):

Filter to businesses currently open.

## `withWebsite` (type: `boolean`):

Filter to businesses that have a website listed.

## `withReviews` (type: `boolean`):

Filter to businesses that have at least one review.

## `minRating` (type: `number`):

Minimum rating filter (1-5).

## `includeOpeningHours` (type: `boolean`):

Extract full opening hours schedule.

## `includeReviews` (type: `boolean`):

Extract up to 5 most recent reviews. Requires visiting profile page.

## `maxReviews` (type: `integer`):

Max reviews per business when includeReviews is true.

## `includePhotos` (type: `boolean`):

Extract photo URLs from business profiles.

## `visitProfile` (type: `boolean`):

Visit each business's individual profile page for complete data. Slower but more comprehensive.

## `proxyConfiguration` (type: `object`):

Proxy settings for requests.

## Actor input object example

```json
{
  "searchTerms": [
    "boulangerie"
  ],
  "locations": [
    "Paris"
  ],
  "maxResultsPerSearch": 1,
  "paginate": false,
  "sortBy": "relevance",
  "openNow": false,
  "withWebsite": false,
  "withReviews": false,
  "includeOpeningHours": false,
  "includeReviews": false,
  "maxReviews": 0,
  "includePhotos": false,
  "visitProfile": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Individual business listing records scraped from pagesjaunes.fr.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/pagesjaunes").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("junipr/pagesjaunes").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call junipr/pagesjaunes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=junipr/pagesjaunes",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pages Jaunes Scraper",
        "description": "Scrape PagesJaunes.fr for French business listings — phone, address, hours, reviews, SIREN numbers. Search by category and location across France.",
        "version": "1.0",
        "x-build-id": "m2v7IPgX2EezFieqY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/junipr~pagesjaunes/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-junipr-pagesjaunes",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/junipr~pagesjaunes/runs": {
            "post": {
                "operationId": "runs-sync-junipr-pagesjaunes",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/junipr~pagesjaunes/run-sync": {
            "post": {
                "operationId": "run-sync-junipr-pagesjaunes",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "Business type or keyword to search. E.g. [\"plombier\", \"restaurant japonais\", \"avocat\"].",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "boulangerie"
                        ]
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Location(s) to search. E.g. [\"Paris 75001\", \"Lyon\", \"Marseille\"]. Accepts city, arrondissement, or department.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "Paris"
                        ]
                    },
                    "urls": {
                        "title": "Search Result URLs",
                        "type": "array",
                        "description": "Direct pagesjaunes.fr search result URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "businessUrls": {
                        "title": "Business Profile URLs",
                        "type": "array",
                        "description": "Direct pagesjaunes.fr business profile URLs for detailed extraction.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerSearch": {
                        "title": "Max Results Per Search",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum listings per search combination. Min: 1, Max: 500.",
                        "default": 1
                    },
                    "paginate": {
                        "title": "Paginate Results",
                        "type": "boolean",
                        "description": "Paginate through all results pages.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "relevance",
                            "distance",
                            "rating"
                        ],
                        "type": "string",
                        "description": "Sort order: relevance, distance, rating.",
                        "default": "relevance"
                    },
                    "radius": {
                        "title": "Search Radius (km)",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Search radius in km. Leave empty for pagesjaunes default. 1-50 km."
                    },
                    "openNow": {
                        "title": "Open Now Only",
                        "type": "boolean",
                        "description": "Filter to businesses currently open.",
                        "default": false
                    },
                    "withWebsite": {
                        "title": "With Website Only",
                        "type": "boolean",
                        "description": "Filter to businesses that have a website listed.",
                        "default": false
                    },
                    "withReviews": {
                        "title": "With Reviews Only",
                        "type": "boolean",
                        "description": "Filter to businesses that have at least one review.",
                        "default": false
                    },
                    "minRating": {
                        "title": "Minimum Rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "number",
                        "description": "Minimum rating filter (1-5)."
                    },
                    "includeOpeningHours": {
                        "title": "Include Opening Hours",
                        "type": "boolean",
                        "description": "Extract full opening hours schedule.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Include Reviews",
                        "type": "boolean",
                        "description": "Extract up to 5 most recent reviews. Requires visiting profile page.",
                        "default": false
                    },
                    "maxReviews": {
                        "title": "Max Reviews Per Business",
                        "minimum": 0,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Max reviews per business when includeReviews is true.",
                        "default": 0
                    },
                    "includePhotos": {
                        "title": "Include Photos",
                        "type": "boolean",
                        "description": "Extract photo URLs from business profiles.",
                        "default": false
                    },
                    "visitProfile": {
                        "title": "Visit Profile Pages",
                        "type": "boolean",
                        "description": "Visit each business's individual profile page for complete data. Slower but more comprehensive.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for requests.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
