# Transentreprise Scraper - Businesses for Sale France (`pshivam/transentreprise-scraper`) Actor

Scrape businesses for sale in France from Transentreprise, the CCI and CMA chambers' marketplace (~7,000 offers): asking price, revenue and staff bands, sector, department, region and full description. Filter by region, department, price or keyword. Export to Excel, CSV or API.

- **URL**: https://apify.com/pshivam/transentreprise-scraper.md
- **Developed by:** [Shivam Prajapati](https://apify.com/pshivam) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 offers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Transentreprise Scraper - Businesses for Sale in France

Get **businesses for sale in France** from [Transentreprise](https://www.transentreprise.com), the business-transfer marketplace of the French chambers of commerce (CCI) and of trades and crafts (CMA), with **about 7,000 offers** (entreprises à reprendre, fonds de commerce): asking price, revenue and staff bands, sector, town, department, region, who published it and the full description. Filter by region, department, price or keyword, and export to Excel, CSV, JSON or the API.

**Actively maintained.** Last update: 2026-11-04. Every release passes 290+ automated tests on saved Transentreprise pages plus a check against the live site, and Apify test-runs it every day.

### What can you use it for?

- **Find a business to buy in France.** Screen every bakery, restaurant, hair salon, garage or craft business in your department by price instead of paging through the site.
- **Deal flow for buyers, brokers and advisers.** Schedule a daily run and send new offers to Google Sheets, Slack or your CRM; most sellers are retiring owners (succession / transmission).
- **Market research.** Count offers, prices and revenue bands by sector, department or region, and see which trades come to market where.
- **Commercial premises.** Turn on premises to also get shops, offices and workshops to rent or buy published by the chambers.

### What data do you get?

Fields marked *details* are filled when **Open each offer for full details** is on (the default).

| Field | What it is |
|---|---|
| `listingId` | Transentreprise reference, e.g. GDE267371A |
| `url` | Link to the offer |
| `title` | Activity (business) or type of property (premises), as published |
| `offerType` | `business` or `premises` (in fast mode only premises are recognised, by their title) |
| `sectors` | Sector(s) of activity, e.g. "Coiffure, esthétique" (*details*) |
| `price` | Asking price in EUR (empty when not disclosed, "NC") |
| `priceText` | The price as shown, e.g. "100 000 €" |
| `revenueMin` / `revenueMax` | Yearly revenue band in EUR, e.g. 100000 and 200000 for "de 100 à 200 k€" |
| `revenueText` | Revenue band as shown |
| `employeesMin` / `employeesMax` | Staff band, e.g. 6 and 9 for "6 à 9" |
| `employeesText` | Staff as shown |
| `annualRent` | Yearly rent of the premises in EUR, when given |
| `salesAreaM2` / `totalAreaM2` | Sales and total area in m² for premises (*details*) |
| `location` | Town or area, e.g. "THIERS (63)" |
| `departmentCode` | Department number, e.g. 67, 2A, 971 |
| `department` | Department name |
| `territory` | Former region (before 2016), e.g. Alsace (*details*) |
| `region` | Region, e.g. Grand Est |
| `advertiser` | Who published it: `CCI`, `CMA`, `owner` or `partner` (*details*) |
| `description` | Full description in French (*details*) |
| `imageUrl` | First photo |
| `hasDetails` | `true` if the offer page was opened |
| `foundOn` | The list page where the offer was found |
| `scrapedAt` | When it was scraped (UTC) |

#### Privacy

Offers are anonymous: the business's name is not published. The scraper never reads the contact form or the advisers' pages, and it **removes any e-mail address, phone number or web link** from the description (replaced with `[removed]`).

#### Example result

```json
{
  "listingId": "GDE242041A",
  "title": "TRAITEUR",
  "offerType": "business",
  "sectors": ["Boucherie, charcuterie, traiteur…"],
  "price": 299000,
  "priceText": "299 000 €",
  "revenueMin": 1500000,
  "revenueMax": 3000000,
  "revenueText": "de 1,5 à 3 M€",
  "employeesMin": 6,
  "employeesMax": 9,
  "location": "Arrond. Saverne (67)",
  "departmentCode": "67",
  "department": "Bas-Rhin",
  "territory": "Alsace",
  "region": "Grand Est",
  "advertiser": "CMA",
  "hasDetails": true
}
```

### How to use it

1. Pick one or more **Regions / departments** (or leave it empty for all of France).
2. Optionally add a **Keyword** (e.g. boulangerie, restaurant, garage) and a price range.
3. Set **Maximum offers**, click **Start**, and download the results.

With several places, *Maximum offers* is shared fairly between them.

#### Input options

| Option | What it does |
|---|---|
| `locations` | Regions or departments by name or number, e.g. "Grand Est", "Bas-Rhin" or "67". Empty = all of France |
| `keyword` | Only offers that mention this word (title, sector and description; title only in fast mode) |
| `minPrice` / `maxPrice` | Asking price range in EUR (offers without a price are kept) |
| `includePremises` | Also return premises to rent or buy (off by default) |
| `startUrls` | A Transentreprise offer list or single offer URLs, scraped as given |
| `includeDetails` | Open each offer for the full set of fields (default on). Turn off for a fast, cheaper run |
| `onlyNew` | Skip offers that earlier runs of the same search returned: you get and pay only for ones you haven't had (the first run works as usual) |
| `maxItems` | Stop after this many offers |
| `maxConcurrency` | Pages loaded at the same time (keep low to be polite) |

#### Fast mode vs. full details

- **Full details (default):** opens every offer for sector, region, advertiser, surface and the full description.
- **Fast mode (`includeDetails` off):** reads only the list pages, about 20x fewer requests: title, price, revenue and staff bands, rent, town, department, region and photo.

### How much does it cost?

You pay **$3.00 per 1,000 offers** returned (plus a tiny $0.00005 per run start). Platform usage is included.

| Offers | Cost |
|---|---|
| 100 | $0.30 |
| One department (e.g. Bas-Rhin, ~150) | about $0.45 |
| All of France (~7,000) | about $21 |

Apify's free plan gives you $5 of credit every month. Set a spending limit on any run and the scraper stops exactly there.

### Use it via API, on a schedule, or with your tools

- **Schedule it** daily or weekly to catch every new offer (newest come first).
- **Only new offers:** turn it on in a scheduled run or task and each run returns only offers you haven't had yet, so you never pay twice for the same offer.
- **Integrations:** send results to Google Sheets, Slack, e-mail, Zapier, Make or a webhook.
- **API:** run it from your own code and download results as JSON, CSV or Excel.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("pshivam/transentreprise-scraper").call(run_input={"locations": ["Bas-Rhin"], "keyword": "boulangerie", "maxItems": 100})
for offer in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(offer["title"], offer["price"], offer["location"])
```

#### Use it in Clay, n8n, Make or Zapier

Actor: `pshivam/transentreprise-scraper`. Paste this input and change the filters to yours:

```json
{"locations": ["Grand Est"], "onlyNew": true, "maxItems": 1000}
```

- **Clay:** create a table from an **Apify** source to pull in the results of a scheduled run of this Actor (it refreshes every 24 hours by default), or use the **Run Apify Actor** enrichment and paste the input.
- **n8n:** add the **Apify** node, choose **Run Actor and get dataset items**, pick this Actor and paste the input.
- **Make:** use **Run an Actor** with *Run synchronously* on, then **Get Dataset Items** with the run's dataset ID.
- **Zapier:** schedule this Actor in Apify, then use the **Finished Actor Run** trigger and **Fetch Dataset Items**. (Zapier stops waiting for **Run Actor** after 30 seconds, and a run usually takes about a minute.)

### Good to know

- **Region and department filters are the site's own**, so you only pay for offers there. Price, keyword and premises are checked by the scraper on each offer.
- **Prices and figures are the seller's own.** Many offers show "NC" (not disclosed) instead of a price; revenue and staff are bands, not exact figures.
- **Some offers cover a whole region** and have no department.
- **Offers are newest first**; re-published older offers can appear near the top.
- **Text is in French**, as published. Field names are in English.

### This scraper vs. the alternatives

| | This scraper | Copying from Transentreprise by hand | Building your own scraper |
|---|---|---|---|
| 100 offers with full details | About 1 minute | Hours (open and copy each page) | Days to build, then upkeep |
| Output | Excel, CSV, JSON or API; 27 fields per offer | A spreadsheet you type | Whatever you code |
| Price, revenue and staff bands | Numbers (min/max), ready to sort | Retyped by hand | You write the parsing |
| Only new offers each day | Built in (`onlyNew`) | Compare lists yourself | You build it |
| When the site changes | We fix it; Apify test-runs it daily | - | You fix it |
| Seller contact details | Removed | Your responsibility | Your responsibility |
| Cost | $3.00 per 1,000 offers | Your time | Your time plus hosting |

### FAQ

#### How many offers are there?

About 7,000: roughly 6,900 businesses to take over and 370 commercial premises, across all 13 regions of mainland France plus Corsica, Guadeloupe and Martinique.

#### How much does it cost?

$3.00 per 1,000 offers (less on paid Apify plans), so 100 offers cost $0.30 and all of France about $21.

#### Who publishes the offers?

Mostly the CCI (chambers of commerce) and CMA (chambers of trades and crafts) advisers on behalf of owners, plus some owners and partners directly. The `advertiser` field says which.

#### Is it legal to scrape Transentreprise?

This scraper reads public offer pages at a polite speed, follows the site's robots.txt and returns business data with contact details removed. You are responsible for how you use the data; check the site's terms for your use case.

#### Can I get the seller's contact details?

No. Use the offer `url` and the site's own contact form, or a CCI/CMA adviser.

#### How do I get only new offers every day?

Save your search as a task, turn on **Only new offers** and schedule it daily. Each run then skips the offers earlier runs returned, so you get and pay only for ones you haven't had. Tip: set *Maximum offers* above the number of offers your search has, so the first run gets them all and later runs return just the new ones.

### Ready-made examples

Open one, click **Try for free**, and get data in about a minute:

- [Businesses for Sale in France (Transentreprise)](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-france)
- [Businesses for Sale in Île-de-France (Paris region)](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-ile-de-france)
- [Businesses for Sale in Auvergne-Rhône-Alpes](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-auvergne-rhone-alpes)
- [Businesses for Sale in Nouvelle-Aquitaine](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-nouvelle-aquitaine)
- [Businesses for Sale in Grand Est (Alsace, Lorraine)](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-grand-est)
- [Restaurants for Sale in France (Transentreprise)](https://apify.com/pshivam/transentreprise-scraper/examples/te-restaurants-for-sale-france)
- [Bakeries for Sale in France (Boulangerie)](https://apify.com/pshivam/transentreprise-scraper/examples/te-bakeries-for-sale-france)
- [Hair and Beauty Salons for Sale in France](https://apify.com/pshivam/transentreprise-scraper/examples/te-hair-salons-for-sale-france)
- [Businesses for Sale Under €100,000 in France](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-under-100k-france)
- [Businesses for Sale in Paris (75)](https://apify.com/pshivam/transentreprise-scraper/examples/te-businesses-for-sale-paris)

### More business-for-sale scrapers

- [BusinessBroker.net Scraper - Businesses for Sale](https://apify.com/pshivam/businessbroker-net-scraper): US businesses for sale with asking price, revenue, cash flow and location.
- [DUB.de Scraper - Businesses for Sale in Germany](https://apify.com/pshivam/dub-de-scraper): companies for sale in Germany, Austria and Switzerland with year-by-year financials.
- [nexxt-change Scraper - Businesses for Sale & Buyers](https://apify.com/pshivam/nexxt-change-scraper): Germany's official succession marketplace, companies for sale and buyers looking for a company.
- [Daltons Business Scraper - Businesses for Sale UK](https://apify.com/pshivam/daltons-business-scraper): UK businesses for sale with asking price, leasehold or freehold, turnover, net profit and location.
- [Website Closers Scraper - Online Businesses for Sale](https://apify.com/pshivam/website-closers-scraper): online and tech businesses for sale (eCommerce, SaaS, Amazon FBA) with asking price, cash flow and revenue, plus closed deals for valuation comps.
- [BusinessForSale AU Scraper - Australian Businesses](https://apify.com/pshivam/businessforsale-au-scraper): Australian businesses for sale with asking price, revenue and profit bands, location and category, plus sold businesses for valuation comps.
- [BizBen Scraper - California Businesses for Sale](https://apify.com/pshivam/bizben-scraper): California and other US businesses for sale with asking price, revenue, cash flow, down payment and lease details.
- [LINK Business Scraper - Businesses for Sale NZ & AU](https://apify.com/pshivam/link-business-scraper): New Zealand's largest business broker and its Australian offices, with asking price, profit, revenue, industry and location.
- [Bpifrance Transmission Scraper - Businesses for Sale France](https://apify.com/pshivam/bpifrance-transmission-scraper): about 45,000 French businesses and shops for sale from Bpifrance's partner marketplaces, with price, revenue, EBE, staff, sector and region.

### Other scrapers

- [Trade Show Scraper - Worldwide Trade Fair Calendar](https://apify.com/pshivam/trade-show-scraper): trade shows and exhibitions worldwide with dates, venue, city, country, industries and the official website.
- [CeX Scraper - Prices, Trade-In Values & Stock](https://apify.com/pshivam/cex-scraper): CeX (webuy.com) second-hand phones, games and laptops in 11 countries with sell price, cash and voucher trade-in value, stock by store and price history.
- [DealSeek Scraper - Amazon Deals & Promo Codes](https://apify.com/pshivam/dealseek-scraper): Amazon, Walmart and eBay deals in 8 countries with final prices, verified promo codes, coupons and price history.

# Actor input Schema

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

French regions or departments to search, e.g. 'Grand Est', 'Bas-Rhin' or '67'. Empty = all of France.

## `keyword` (type: `string`):

Only keep offers that mention this word, e.g. "boulangerie", "restaurant" or "garage". Checked in the title, sector and description (title only in fast mode). Not case- or accent-sensitive.

## `minPrice` (type: `integer`):

Skip offers with a lower asking price. Offers without a price ('NC') are kept.

## `maxPrice` (type: `integer`):

Skip offers with a higher asking price. Offers without a price ('NC') are kept.

## `includePremises` (type: `boolean`):

Off: businesses to take over only. On: also commercial premises, offices and workshops to rent or buy (about 5% of offers).

## `startUrls` (type: `array`):

Optional: a Transentreprise offer list or single offer URLs, scraped as given.

## `includeDetails` (type: `boolean`):

On: sector, region, advertiser (CCI, CMA, owner), premises surface and the full description. Off: a fast, cheaper run with what the list pages show.

## `onlyNew` (type: `boolean`):

Skip offers that earlier runs of this same search already returned, so you never get or pay for the same offer twice. Turn it on for a scheduled run or a saved task to get only what's new each time. The first run works as usual and remembers what it returned, in your key-value store 'transentreprise-scraper-only-new' (delete it to start over).

## `maxItems` (type: `integer`):

Stop after this many offers. You are charged per offer.

## `maxConcurrency` (type: `integer`):

Pages loaded at the same time. Keep it low to be polite to the website.

## Actor input object example

```json
{
  "includePremises": false,
  "includeDetails": true,
  "onlyNew": false,
  "maxItems": 50,
  "maxConcurrency": 4
}
```

# Actor output Schema

## `listings` (type: `string`):

One row per business (or premises) for sale, shown with the overview view.

## `financials` (type: `string`):

Price, revenue and staff bands as numbers for sorting and filtering.

## `runStats` (type: `string`):

Requests made, time spent and number of offers for this run (RUN_STATS record).

# 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 = {
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("pshivam/transentreprise-scraper").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 = { "maxItems": 50 }

# Run the Actor and wait for it to finish
run = client.actor("pshivam/transentreprise-scraper").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 '{
  "maxItems": 50
}' |
apify call pshivam/transentreprise-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pshivam/transentreprise-scraper"
        }
    }
}
```

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/jfmtDuJUIGcLUPSC6/builds/31BE8CGyAhyyGG74e/openapi.json
