Skip to content
Eden Engine

French Business Registry Lookup (SIREN / SIRET / Company Name)

omnial/x402-french-company-data

Given a French SIREN (9 digits), SIRET (14 digits), or company name, returns official business registry details: legal name, registered address, activity code, legal form, employee-count range, incorporation date, VAT number, status, and the company's current directors and legal representatives, sourced from France's official company registry.

activeper callv1
Provider
Web & Business Data Network
Category
company-enrichment
Provider price
$0.081081 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "type": "object",
  "required": [
    "siren"
  ],
  "properties": {
    "siren": {
      "type": "string",
      "description": "SIREN (9 digits), SIRET (14 digits), or company name"
    }
  },
  "additionalProperties": false
}
output_schema.json
{
  "type": "object",
  "properties": {
    "city": {
      "type": [
        "string",
        "null"
      ]
    },
    "siren": {
      "type": "string",
      "description": "The 9-digit SIREN, echoed back or resolved from the input."
    },
    "siret": {
      "type": [
        "string",
        "null"
      ],
      "description": "14-digit SIRET of the company's registered headquarters. Null when not found."
    },
    "status": {
      "type": "string",
      "description": "'active' on a real, matched company; observed as the literal string 'unknown' on a non-matching SIREN. Not a reliable found/not-found signal by itself -- check `company_name` for that."
    },
    "address": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full postal address, single string."
    },
    "directors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Officer names with their role in parentheses, e.g. 'ALEXANDRE BOMPARD (Président du conseil d'administration et directeur général)'. Observed as a single empty string on a non-matching SIREN, not a genuine officer list -- check `company_name` before trusting this field."
    },
    "legal_form": {
      "type": "string",
      "description": "Coded legal form. Not present on a non-matching SIREN."
    },
    "legal_name": {
      "type": "string",
      "description": "The company's registered legal name. Not present on a non-matching SIREN."
    },
    "vat_number": {
      "type": "string",
      "description": "Intra-community VAT number, derived from the SIREN. Observed present even on a non-matching SIREN (siren-not-found.json) as a mechanically-derived, not-meaningful value -- do not treat its presence as confirmation the company exists."
    },
    "postal_code": {
      "type": [
        "string",
        "null"
      ]
    },
    "company_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Observed null when the SIREN does not match any registered company -- treat null here as the not-found signal, regardless of what other fields contain."
    },
    "activity_code": {
      "type": [
        "string",
        "null"
      ],
      "description": "French APE/NAF activity classification code, e.g. '64.20Z'."
    },
    "business_type": {
      "type": [
        "string",
        "null"
      ]
    },
    "creation_date": {
      "type": "string",
      "description": "Company incorporation date, YYYY-MM-DD. Observed present even on a non-matching SIREN with a plausible-looking but not-meaningful value (siren-not-found.json) -- do not treat this field's mere presence as confirmation the company exists; check `company_name` first."
    },
    "employee_range": {
      "type": [
        "string",
        "null"
      ],
      "description": "Coded employee headcount bracket."
    },
    "total_directors": {
      "type": "number",
      "description": "Count backing `directors`/`legal_representatives`. Observed as 1 on a non-matching SIREN (matching the single placeholder empty-string entry), not a real officer count."
    },
    "tier_2_available": {
      "type": "boolean",
      "description": "Whether the extended officer/legal-representative data below was available."
    },
    "ubo_availability": {
      "type": "string",
      "description": "Observed as 'restricted' on both fixtures -- beneficial-owner (UBO) data access is restricted at the source under EU law regardless of whether the company is found."
    },
    "registered_address": {
      "type": "string",
      "description": "The registered-office address. Not present on a non-matching SIREN."
    },
    "directors_truncated": {
      "type": "boolean",
      "description": "True if the full officer list exceeds what this response includes."
    },
    "legal_representatives": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Same content as `directors` on both fixtures observed. Observed as a single empty string on a non-matching SIREN -- check `company_name` before trusting this field."
    },
    "tier_2_available_reason": {
      "type": "string",
      "description": "Human-readable note on where the extended officer data was sourced from."
    },
    "ubo_availability_reason": {
      "type": "string",
      "description": "Human-readable note on why beneficial-owner data is restricted."
    }
  },
  "description": "The company record, as returned at routing.responseResultPath ($.output). A `company_name` of null is the authoritative not-found signal -- see verification.notes and the fields below flagged as unreliable in that case.",
  "additionalProperties": true
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.081081
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 25, 2026