# French Company Financials & Ratios by SIREN (`atesen-software/french-company-financials-ratios`) Actor

Revenue, EBITDA, net income and 14 credit ratios for French companies by SIREN, every filed year, from official INPI/BCE open data. Pappers/societe.com financials alternative. Pay only for companies with data.

- **URL**: https://apify.com/atesen-software/french-company-financials-ratios.md
- **Developed by:** [Atesen Software](https://apify.com/atesen-software) (community)
- **Categories:** Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 company with financials

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

## French Company Financials & Ratios by SIREN

Paste a list of **SIREN numbers** and get **revenue, EBITDA (EBE), EBIT, net income and 14 financial & credit ratios** for **every fiscal year** the company filed, straight from the **official “Ratios Financiers (BCE / INPI)” open dataset** published by the French Ministry of Economy (DGE) on data.economie.gouv.fr. No API key, no scraping of Pappers or societe.com, and **you only pay for companies that have financial data**.

Good for: credit risk & supplier screening, M\&A / private-equity sourcing, B2B lead scoring by revenue, KYB files, and enriching a CRM or Google Sheet with French company financials.

### What you get

For each SIREN and each filed year (one row per company × fiscal year × accounts type):

| Field | Meaning |
|---|---|
| `siren`, `companyName`, `nafCode`, `companyCategory`, `headquartersCity` | Identity (name/NAF/city from the official Recherche d'entreprises API) |
| `fiscalYear`, `fiscalYearEnd` | Closing date of the financial year |
| `accountsType` | `C` complete corporate, `S` simplified corporate, `K` consolidated group |
| `revenue`, `grossMargin`, `ebitda`, `ebit`, `netIncome` | Key figures in EUR (chiffre d'affaires, marge brute, EBE, EBIT, résultat net) |
| `ebitdaMarginPct`, `preTaxProfitOnRevenuePct`, `cashFlowOnRevenuePct` | Profitability ratios (%) |
| `debtRatioPct`, `equityRatioPct`, `liquidityRatio`, `interestCoverage`, `repaymentCapacityYears` | Solvency & credit ratios |
| `workingCapitalOnRevenuePct`, `workingCapitalDays`, `inventoryDays`, `customerCreditDays`, `supplierCreditDays`, `assetAgeRatioPct` | Working capital & operating ratios |
| `confidentiality` | `Public`, or `Partiellement confidentiel` when the company opted to keep part of its accounts confidential (some fields are then empty) |
| `status` | `found`, `no_financials`, `invalid_check_digit`, `wrong_length`, `not_a_number`, `api_error` (open-data API down after 5 retries; free, re-run later) |

Companies that never filed accounts (or filed them confidentially) get one `no_financials` row, **free of charge**.

### Input example

```json
{
  "sirens": ["552032534", "500569405", "855200887"],
  "years": ["2023", "2024"],
  "latestYearOnly": false,
  "accountsTypes": ["C", "S", "K"],
  "includeCompanyIdentity": true
}
```

SIRET (14 digits) and French VAT numbers (`FR27552032534`) are accepted too; the SIREN is extracted and validated (Luhn check) automatically. Duplicates are removed.

### Output example

```json
{
  "siren": "552032534",
  "status": "found",
  "companyName": "DANONE",
  "fiscalYear": 2025,
  "fiscalYearEnd": "2025-12-31",
  "accountsType": "K",
  "accountsTypeLabel": "consolidated (group)",
  "confidentiality": "Public",
  "revenue": 27376000000,
  "ebitda": 3660000000,
  "ebit": 3379000000,
  "netIncome": 2100000000,
  "ebitdaMarginPct": 13.369,
  "equityRatioPct": 37.652,
  "interestCoverage": 22.514,
  "nafCode": "70.10Z",
  "companyCategory": "GE",
  "headquartersCity": "PARIS"
}
```

Download the dataset as JSON, CSV, Excel or via API. The **Key figures** view shows a compact table; the **All ratios** view shows every ratio.

### Pricing

Pay per event: **one charge per company that has at least one financial year** returned, no matter how many years you get. Invalid, duplicate and "no financials" SIRENs are free. Example: 1,000 SIRENs where 700 have filed accounts = 700 charged events (at $0.01 per company that is $7). See the Pricing tab for current prices.

### Use with Make, Zapier, n8n, Clay or Google Sheets

- **Make / n8n / Zapier:** use the Apify app/node → *Run an Actor* with this actor and an input like the one above, then *Get dataset items* and map `revenue`, `ebitda`, `netIncome` into your CRM or sheet.
- **API:** `POST https://api.apify.com/v2/acts/atesen-software~french-company-financials-ratios/run-sync-get-dataset-items?token=YOUR_TOKEN` with the JSON input returns the rows directly.
- **Google Sheets:** export the dataset as CSV or use Apify's Google Sheets integration.

Need the company identity first (from names, SIRET or VAT)? Use [French Company Data: SIRENE, SIREN/SIRET & VAT Enrichment](https://apify.com/atesen-software/french-company-enrichment-sirene). Only have websites? Use [French Website to SIREN & Mentions Légales Extractor](https://apify.com/atesen-software/french-website-siren-mentions-legales).

### FAQ

**Where does the data come from?** The *Ratios Financiers (BCE / INPI)* dataset (`ratios_inpi_bce`), computed from the annual accounts filed with the national register (RNCS, open data from INPI) and published by the DGE (French Ministry of Economy) under Licence Ouverte v2.0. It has 6.8 million company-year records. Source: data.economie.gouv.fr.

**Is this a Pappers or societe.com alternative?** For financials, yes: it uses the same public filings, but from the official open dataset, so it is cheap, stable and legal to reuse.

**Why are some years or companies missing?** Small companies may opt for confidentiality of their accounts, and very recent years appear after the filing deadline (usually 7 months after the fiscal year end) plus publication delay.

**Are the values edited?** No. Figures are returned exactly as published in the open dataset. Some rows (often consolidated `K` accounts) report `0` where the source has no value, so treat a `0` net income on a large group with care and cross-check with the corporate (`C`) row.

**Are the numbers in euros?** Key figures are in EUR; fields ending in `Pct` are percentages and fields ending in `Days` are days.

**Why can a company have two rows for one year?** Groups file both corporate (`C`/`S`) and consolidated (`K`) accounts. Filter with *Accounts types*.

Data: INPI (RNCS) / DGE, “Ratios Financiers (BCE / INPI)”, data.economie.gouv.fr, Licence Ouverte v2.0. This Actor is not affiliated with INPI, the DGE, Pappers or societe.com.

# Actor input Schema

## `sirens` (type: `array`):

One per line. 9-digit SIREN, 14-digit SIRET (first 9 digits are used) or French VAT number (FRxx + SIREN). Spaces and dots are ignored. Use 'Bulk edit' to paste a whole column.

## `years` (type: `array`):

Only return accounts whose fiscal year ends in these years, e.g. 2023, 2024. Leave empty for every year available.

## `latestYearOnly` (type: `boolean`):

Return only the most recent filed year per company (one or two rows: corporate and, if any, consolidated accounts).

## `accountsTypes` (type: `array`):

C = complete corporate accounts, S = simplified corporate accounts (small companies), K = consolidated group accounts.

## `includeCompanyIdentity` (type: `boolean`):

Looks up each SIREN in the official Recherche d'entreprises API (free) to add the legal name, NAF code, size category and head-office city.

## `maxCompanies` (type: `integer`):

Stop after this many valid SIRENs. Useful for a quick test.

## Actor input object example

```json
{
  "sirens": [
    "552032534",
    "500569405",
    "855200887"
  ],
  "years": [],
  "latestYearOnly": false,
  "accountsTypes": [
    "C",
    "S",
    "K"
  ],
  "includeCompanyIdentity": true,
  "maxCompanies": 0
}
```

# Actor output Schema

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

Revenue, EBITDA, EBIT, net income and main ratios

## `ratios` (type: `string`):

All 14 ratios per company and year

## `summary` (type: `string`):

No description

# 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 = {
    "sirens": [
        "552032534",
        "500569405",
        "855200887"
    ],
    "years": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("atesen-software/french-company-financials-ratios").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 = {
    "sirens": [
        "552032534",
        "500569405",
        "855200887",
    ],
    "years": [],
}

# Run the Actor and wait for it to finish
run = client.actor("atesen-software/french-company-financials-ratios").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 '{
  "sirens": [
    "552032534",
    "500569405",
    "855200887"
  ],
  "years": []
}' |
apify call atesen-software/french-company-financials-ratios --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,atesen-software/french-company-financials-ratios"
        }
    }
}
```

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/DXoOAIuV4kr3uhH1H/builds/cblnieOSGHN5StPny/openapi.json
