# France Sports Facilities – Pools, Gyms, Fields & Courts (`bstandco/france-sports-facilities`) Actor

All 330,000 sports facilities in France from the official Ministry of Sports census: swimming pools, gyms, fields, tennis courts, climbing walls… with address, GPS, size, activities, owner type and accessibility. Updated daily.

- **URL**: https://apify.com/bstandco/france-sports-facilities.md
- **Developed by:** [BSTAndCo](https://apify.com/bstandco) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 facilities

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

## France Sports Facilities – Pools, Gyms, Fields & Courts

Get **every sports facility in France** from the **official census of the Ministry of Sports**, updated **every day**: about **330,000 facilities**, including swimming pools, sports halls, football and rugby fields, tennis courts, climbing walls, gyms, skateparks and equestrian centres.

Each result has the **address, GPS, activities, size, equipment (lighting, showers, changing rooms, stands), accessibility, owner type and opening year**.

Filter by **facility family**, **activity**, **area** (department, city, postal code or radius around a point), **public or private owner**, **indoor or outdoor**, and **free access**.

### Who is it for?

- **Sports equipment and flooring suppliers, maintenance companies**: list every pool, hall or field in your region, with its size, opening year and last renovation.
- **Clubs, coaches and event organisers**: find halls, fields and courts around a place, sorted by distance.
- **Sports apps and maps**: import official facilities with GPS and activities.
- **Local authorities, consultants and researchers**: measure the facilities available by area.

### What data do you get?

| Field | Example |
|---|---|
| `id`, `name`, `type`, `family` | E005I311490014, Espace détente - bassin ludique, Bassin ludique de natation |
| `activities` | \["Aquagym"] |
| `installationId`, `installationName` | the sports complex the facility belongs to |
| `address`, `postalCode`, `city`, `inseeCode`, `department`, `region` | full location |
| `latitude`, `longitude`, `distanceKm` | GPS, and distance when you search around a point |
| `setting`, `surface`, `areaM2`, `lengthM`, `widthM`, `poolLengthM`, `poolAreaM2` | indoor or outdoor, floor, dimensions |
| `lighting`, `showers`, `changingRooms`, `grandstandSeats` | equipment |
| `freeAccess`, `seasonal`, `wheelchairAccess` | access |
| `openedYear`, `lastWorksYear` | age and last renovation |
| `ownerType`, `ownerName`, `managerType`, `installationSiret` | owner and manager (name and SIRET for public owners only) |
| `website`, `updatedAt` | link and last update in the census |

### How to use

Every swimming pool in the Rhône:

```json
{
  "families": ["swimming_pool"],
  "departments": ["69"],
  "maxResults": 500
}
```

Every facility within 3 km of central Bordeaux, closest first:

```json
{
  "latitude": "44.8378",
  "longitude": "-0.5792",
  "radiusKm": 3,
  "maxResults": 1000
}
```

Free-access skateparks in Gironde:

```json
{
  "families": ["skatepark"],
  "onlyFreeAccess": true,
  "departments": ["33"]
}
```

**Tips**

- Activity words are in French and match every activity that contains them: `tennis` also matches *tennis de table*. Use the `tennis_court` family for tennis courts only.
- Paris, Lyon and Marseille include their arrondissements.

### Pricing

Pay per result: you are charged once per facility returned.

### Privacy

No personal data. The census contact details of the person who declared a facility are never returned. Private owners can be individuals, so the **owner name and SIRET are only given for public owners** (towns, intercommunalities, departments, regions, the State, public bodies).

### Source

**Recensement des équipements sportifs (Data ES)**, Ministry of Sports, via equipements.sports.gouv.fr, under the **Licence Ouverte v2.0 (Etalab)**, which allows commercial reuse. Every result includes its source.

*Not affiliated with the French government.*

# Actor input Schema

## `families` (type: `array`):

Types of facilities. Leave empty for all.

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

Activity words in French, e.g. natation, tennis, escalade, football. A word matches every activity that contains it (tennis also matches tennis de table): use families for exact types.

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

Department numbers, e.g. 15, 69, 2A, 974.

## `postalCodes` (type: `array`):

French postal codes, e.g. 75013.

## `cities` (type: `array`):

City names, e.g. Lyon, Bordeaux. Paris, Lyon and Marseille include their arrondissements.

## `latitude` (type: `string`):

Centre of a radius search, e.g. 45.7640. Results are sorted by distance.

## `longitude` (type: `string`):

Centre of a radius search, e.g. 4.8357.

## `radiusKm` (type: `integer`):

Radius around the latitude and longitude, from 1 to 200 km.

## `owner` (type: `string`):

Public owners (town, intercommunality, department, region, State) or private ones (companies, associations, private schools).

## `setting` (type: `string`):

Indoor, outdoor or natural sites.

## `onlyFreeAccess` (type: `boolean`):

Keep facilities open to everyone without booking (city-stades, skateparks, fitness trails…).

## `nameKeywords` (type: `array`):

Words in the facility or complex name, e.g. gymnase, stade, Jean Bouin.

## `maxResults` (type: `integer`):

Maximum number of facilities returned.

## Actor input object example

```json
{
  "families": [
    "swimming_pool"
  ],
  "departments": [
    "69"
  ],
  "radiusKm": 5,
  "owner": "any",
  "setting": "any",
  "onlyFreeAccess": false,
  "maxResults": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

Sports facilities with type, city, activities and owner.

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

Every field: address, GPS, dimensions, equipment, accessibility, dates (JSON).

# 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 = {
    "families": [
        "swimming_pool"
    ],
    "departments": [
        "69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bstandco/france-sports-facilities").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 = {
    "families": ["swimming_pool"],
    "departments": ["69"],
}

# Run the Actor and wait for it to finish
run = client.actor("bstandco/france-sports-facilities").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 '{
  "families": [
    "swimming_pool"
  ],
  "departments": [
    "69"
  ]
}' |
apify call bstandco/france-sports-facilities --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bstandco/france-sports-facilities"
        }
    }
}
```

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/857yheRV2tJVAXE6P/builds/czZWPhedrKyZfow6C/openapi.json
