# BODACC Business Sale Prices France – by Activity & Department (`replay/bodacc-prix-cession`) Actor

Official French business-sale prices from BODACC open data: median, P25–P75, min/max and recent comparable deals for any activity (bakery, restaurant, hair salon…) and département. For buyers, sellers, accountants and lenders.

- **URL**: https://apify.com/replay/bodacc-prix-cession.md
- **Developed by:** [A D](https://apify.com/replay) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 ligne de rapport prix de cessions

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## BODACC — prix de cession de fonds de commerce par activité et département

🇫🇷 **Combien se vend vraiment une boulangerie dans le Finistère ? Un salon de coiffure à Lyon ? Un bar-tabac en Gironde ?**
Cet actor interroge l'open data officiel du **BODACC** (annonces « Ventes et cessions », DILA, Licence Ouverte 2.0). Il en extrait le **prix stipulé** de chaque vente de fonds de commerce, puis calcule pour chaque **activité × département** : nombre de ventes, **médiane**, P25–P75, min/max, moyenne, et les dernières transactions comparables avec leur lien officiel.

**Pour qui ?** Repreneurs, cédants, experts-comptables, notaires, avocats, banquiers, cabinets de transmission, agents immobiliers d'entreprise, CCI et CMA.

> ⚠️ **Avertissement.** Les montants sont des **prix de cession de fonds de commerce** tels que publiés au BODACC (prix stipulé dans l'annonce). Ils **ne constituent pas une valorisation de titres de société** (parts, actions) ni une **expertise ou évaluation d'entreprise**, et ne remplacent pas l'avis d'un expert-comptable, d'un notaire ou d'un évaluateur. Les ventes ne sont pas strictement comparables entre elles : stock, matériel, droit au bail, éléments inclus ou exclus varient d'une annonce à l'autre.

**Entrée**

```json
{ "activities": ["boulangerie", "coiffure"], "departments": ["29", "35"], "monthsBack": 24, "comparables": 3, "minPriceEur": 1000 }
```

**Sortie, une ligne par activité et département** : `activity`, `departmentCode`, `departmentName`, `region`, `count`, `medianEur`, `p25Eur`, `p75Eur`, `minEur`, `maxEur`, `meanEur`, `since`, `recentComparables[]` (date, ville, activité, catégorie de vente, prix, lien BODACC, source), `truncated`, plus la traçabilité : `source`, `sourceUrl` (jeu BODACC), `consultedAt` (date de consultation), `latestPublicationDate`, `disclaimer`.

**Petits échantillons** : quand une ligne repose sur **moins de 3 ventes avec prix**, la médiane, les quartiles, le min/max et la moyenne sont **masqués** (`null`). La ligne porte alors `lowSample: true` et une explication dans `statsNote`. Seuls le nombre de ventes et les annonces sources restent affichés. **Ces lignes ne sont pas facturées** (pas d'événement `price-report-row`). Les comparables qu'elles contiennent restent facturés au tarif normal.

**Tarif (paiement à l'événement)** : 0,05 $ par ligne de statistiques, 0,002 $ par transaction comparable.

**Limites honnêtes**

- La recherche se fait en plein texte sur l'activité déclarée : précisez le mot-clé (« boulangerie » plutôt que « commerce »).
- Toutes les annonces n'indiquent pas de prix : seules celles qui en ont un sont comptées.
- Ce sont des prix de **fonds de commerce**, pas de titres de société.
- Aucune donnée nominative de personne physique n'est rendue.

***

🇬🇧 **Official French business-sale prices by activity and department.** This actor aggregates BODACC "ventes et cessions" open data (Licence Ouverte 2.0) and returns, per activity × department, the sale count, median, P25/P75, min/max, mean, and recent comparable deals with official links. It is built for business buyers and sellers, accountants, notaries, lenders and brokers. Pricing is pay-per-event: $0.05 per statistics row and $0.002 per comparable. Prices are asset (*fonds de commerce*) sale prices, **not share valuations and not an appraisal**. Statistics based on fewer than 3 priced sales are withheld (`lowSample: true`) and such rows are not charged (comparables still are). Every row carries the source, the source dataset URL and the consultation date. No personal names are returned.

*Source : BODACC — Direction de l'information légale et administrative (DILA), Licence Ouverte / Etalab 2.0. Actor indépendant, non affilié à la DILA.*

***

### 🤖 Mode `price-stats` pour agents IA (MCP Apify)

Ce mode donne une réponse courte, sans comparables : pour chaque activité × département, le nombre de ventes, la médiane, P25/P75, `lowSample`, la source et la date de consultation. Sous **3 ventes**, les statistiques sont masquées et la ligne **n'est pas facturée**. Sinon, 1 événement `price-report-row` (0,05 $) par ligne. Le mode par défaut reste `report`.

Exemple d'appel via le serveur MCP d'Apify (`https://mcp.apify.com`, outil `call-actor`) :

```json
{ "actor": "replay/bodacc-prix-cession",
  "input": { "mode": "price-stats", "activities": ["boulangerie"], "departments": ["29"], "monthsBack": 24 } }
```

Réponse :

```json
{ "mode": "price-stats", "activity": "boulangerie", "departmentCode": "29", "departmentName": "Finistère", "count": 61,
  "lowSample": false, "medianEur": 220200, "p25Eur": 155000, "p75Eur": 330000, "statsNote": null, "since": "2024-10-12",
  "source": "BODACC - annonces commerciales (ventes et cessions), DILA, Licence Ouverte / Etalab 2.0", "consultedAt": "2026-10-12",
  "disclaimer": "Prix de fonds de commerce publiés au BODACC ; ne vaut ni valorisation de titres ni expertise." }
```

# Actor input Schema

## `mode` (type: `string`):

'report' (default): one row per activity x department with statistics and recent comparable sales. 'price-stats' (for AI agents): compact answer with only count, median, P25/P75, sample flag and source; no comparables. In both modes, statistics based on fewer than 3 priced sales are hidden (lowSample=true) and such rows are not charged; each other row = 1 'price-report-row' event.

## `activities` (type: `array`):

Activity keywords searched in the sold business's declared activity, e.g. boulangerie, restaurant, coiffure, pharmacie, tabac. For agents: use simple French trade words (e.g. 'boulangerie', 'pharmacie', 'bar', 'coiffure').

## `departments` (type: `array`):

Department codes, e.g. 29, 35, 69, 2A. Empty = all of France. French department codes as strings ('75', '2A', '974').

## `monthsBack` (type: `integer`):

Publication window.

## `groupByDepartment` (type: `boolean`):

If false, one row per activity across the selected departments.

## `comparables` (type: `integer`):

Most recent transactions attached (date, city, activity, price, BODACC link). No personal names.

## `minPriceEur` (type: `integer`):

Outlier filter (e.g. 1000).

## `maxPriceEur` (type: `integer`):

Outlier filter.

## `maxRecordsPerActivity` (type: `integer`):

Safety cap. Rows are flagged 'truncated' when reached.

## Actor input object example

```json
{
  "mode": "report",
  "activities": [
    "boulangerie",
    "coiffure"
  ],
  "departments": [
    "29",
    "35"
  ],
  "monthsBack": 24,
  "groupByDepartment": true,
  "comparables": 5,
  "maxRecordsPerActivity": 1000
}
```

# Actor output Schema

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

Items of the default dataset (see dataset schema for fields).

## `priceStats` (type: `string`):

Compact statistics for AI agents.

# 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 = {
    "activities": [
        "boulangerie",
        "coiffure"
    ],
    "departments": [
        "29",
        "35"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("replay/bodacc-prix-cession").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 = {
    "activities": [
        "boulangerie",
        "coiffure",
    ],
    "departments": [
        "29",
        "35",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("replay/bodacc-prix-cession").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "activities": [
    "boulangerie",
    "coiffure"
  ],
  "departments": [
    "29",
    "35"
  ]
}' |
apify call replay/bodacc-prix-cession --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,replay/bodacc-prix-cession"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WNCKOqWcsBK4UnjoH/builds/jRxl0isgdxIkxGuRW/openapi.json
