Skip to content
Argos

REST API

The whole European database, as JSON, in your code

The same companies as the interface, the same country and sector filters, returned as stable JSON. One key, one header, no SDK to install. A free key from the Discovery account, then the API tool, included or as an option.

companies
18.7 M
countries
25
sectors
84

Get started

Three steps, under five minutes

01

Create an account

Free, no card. The Discovery plan immediately opens 50 calls per day and 5 companies per call.

Create an account
02

Generate a key

In My account, API keys section. The key starts with as_live_ and is shown only once: copy it into your secret manager. Discovery gives 1 key, Complete up to 20.

My API keys
03

First call

One GET request, one Authorization header, JSON back. Nothing else to install.

curl "https://argos-finance.fr/api/v1/societes?pays=FR&secteur=restauration&limit=5" \
  -H "Authorization: Bearer as_live_XXXXXXXXXXXXXXXXXXXX"

The authentication header

Every route accepts the key as a header. Without a key the API answers in preview mode: 2 companies per call, offset locked at 0. Handy for a quick test or for an agent discovering the database.

Authorization: Bearer as_live_XXXXXXXXXXXXXXXXXXXX

Pricing

A free key, then the API as a tool

A key can be created from the free account and runs at Discovery level. Beyond that, the API is a tool: included in the Market finance and Complete plans, or added as an option at EUR 250 excl. VAT a year on any other plan or custom subscription. Without that tool, a key stays at Discovery level. Searches and taxonomy use no credits; a full record uses 5, as on the site, only once a month for the same company. Same routes, same fields, same format across plans.

API quotas by plan
PlanCalls per dayCompanies per callActive keysAPI toolPlan excl. VAT
No account (preview)020No keyNo sign-up
Discovery5051Free keyFree
Data1,0002003Option, EUR 250 / yearEUR 5,000 / year
Corporate finance5,00050010Option, EUR 250 / yearEUR 17,500 / year
Market finance5,00050010IncludedEUR 17,500 / year
Complete10,00050020IncludedEUR 30,000 / year
Custom1,0002003Option, EUR 250 / yearDepends on modules

In practice: a free account gives 50 calls per day and 5 companies per call, enough to frame a project. The Complete plan gives 10,000 calls per day and 500 companies per call, up to 5,000,000 rows a day, enough to feed a data warehouse. Beyond that, write to contact@argos-finance.fr.

Reference

Endpoints

GET /api/v1/pays

The 25 countries with counts and source. Public, no key.

GET /api/v1/secteurs?pays=FR,IT

The 84 sectors with counts, for all countries or for a scope. Public, no key.

GET /api/v1/societes

Paginated search. Parameters: pays, secteur, q, tri, limit, offset, ca_min, ca_max, effectif_min, effectif_max, site_web=1, avec_ca=1.

curl "https://argos-finance.fr/api/v1/societes?pays=IT&secteur=machinerie&limit=50" \
  -H "Authorization: Bearer as_live_XXXX"
{
  "total": 12456, "limit": 50, "offset": 0, "apercu": false,
  "societes": [{
    "iso2": "IT", "id": "00123456789", "nom": "ESEMPIO S.P.A.",
    "secteur": "Machinerie", "grand_secteur": "Industrie manufacturière & Matériaux",
    "ville": "Bergamo", "effectif": 240, "ca_eur": 58400000, "ca_year": 2024,
    "site_web": "www.esempio.it", "url_registre": "https://..."
  }]
}

GET /api/v1/societes/{iso}/{id}

Full record. Line-by-line financial statements (balance sheet, income statement, up to 5 fiscal years) are returned to identified calls. A full record uses 5 credits, only once a month for the same company.

curl "https://argos-finance.fr/api/v1/societes/FR/552032534" -H "Authorization: Bearer as_live_XXXX"

GET|POST /api/v1/export

xlsx workbook of the scope (same parameters, plus lang=fr|en). Account required, monthly quota: 2 workbooks with Discovery, 200 with Complete.

curl -L "https://argos-finance.fr/api/v1/export?pays=FR,BE&secteur=restauration&limit=500" \
  -H "Authorization: Bearer as_live_XXXX" -o restauration_FR_BE.xlsx

Conventions

  • pays : 2-letter ISO codes separated by commas; UK for the United Kingdom.
  • secteur : slug or exact FR label, multiple values with |.
  • tri : ca_desc (default), ca_asc, nom, effectif_desc, recent, capital_desc, score.
  • Amounts: ca_eur in euros; ca_last × ca_mult in local currency (ca_devise).
  • UTF-8 JSON, open CORS on /api/v1, pagination by limit + offset.

Python

import requests

CLE = "as_live_XXXX"
r = requests.get("https://argos-finance.fr/api/v1/societes",
    params={"pays": "FR,BE", "secteur": "restauration|hotellerie", "limit": 100},
    headers={"Authorization": f"Bearer {CLE}"})
r.raise_for_status()
for s in r.json()["societes"]:
    print(s["nom"], s["ville"], s["ca_eur"])

JavaScript

const r = await fetch("https://argos-finance.fr/api/v1/societes?pays=IT&secteur=machinerie&limit=50",
  { headers: { Authorization: "Bearer as_live_XXXX" } });
const { total, societes } = await r.json();

Pagination: limit and offset

limit never exceeds your plan cap (5 companies on Discovery, 200 on Data, 500 on Complete): a higher value is clamped to the cap, without an error. total gives the real number of companies in the scope: walk it by incrementing offset.

# page 1 : sociétés 1 à 500
curl "https://argos-finance.fr/api/v1/societes?pays=DE&secteur=machinerie&limit=500&offset=0" \
  -H "Authorization: Bearer as_live_XXXX"
# page 2 : sociétés 501 à 1000
curl "https://argos-finance.fr/api/v1/societes?pays=DE&secteur=machinerie&limit=500&offset=500" \
  -H "Authorization: Bearer as_live_XXXX"
import requests

CLE, PAGE = "as_live_XXXX", 500
params = {"pays": "DE", "secteur": "machinerie", "limit": PAGE, "offset": 0}
tout = []
while True:
    r = requests.get("https://argos-finance.fr/api/v1/societes", params=params,
                     headers={"Authorization": f"Bearer {CLE}"})
    r.raise_for_status()
    j = r.json()
    tout += j["societes"]
    params["offset"] += PAGE
    if params["offset"] >= j["total"] or not j["societes"]:
        break
print(len(tout), "sociétés")

Handling 429 (quota reached)

Every identified response carries X-Quota-Used and X-Quota-Limit: watch them to stop before the wall. The quota is daily and resets at midnight UTC: retrying straight away is pointless, better resume the loop the next day from the last offset.

r = requests.get(url, params=params, headers=entetes)

if r.status_code == 429:
    utilise = r.headers.get("X-Quota-Used")
    limite = r.headers.get("X-Quota-Limit")
    # { "erreur": { "code": "quota_api", "message": "...", "quota": {...} } }
    raise SystemExit(
        f"Quota journalier atteint : {utilise}/{limite}. "
        f"Reprendre demain a l'offset {params['offset']}."
    )

r.raise_for_status()
const r = await fetch(url, { headers });
if (r.status === 429) {
  const utilise = r.headers.get("X-Quota-Used");
  const limite = r.headers.get("X-Quota-Limit");
  console.warn(`Quota atteint : ${utilise}/${limite}, reprise demain (UTC).`);
  return null;
}

Robustness

Error codes

All errors come out in the same shape, with a machine code and a readable message. An unknown parameter is never silently ignored: it raises an error naming the offending value, so a script never works on a scope different from the one it thinks it queried.

HTTPcodeWhen, and what to do
400pays_inconnu, secteur_inconnuA country or sector sent does not exist in the reference data. The parameter is never silently ignored: the response names the faulty value and points to /api/v1/pays or /api/v1/secteurs.
401compte_requisThe call asks for an account-only resource (Excel export, detailed financial statements) without a valid key. Create an account, generate a key, pass it in the Authorization header.
402credits_epuisesThe month's credits and packs are used up. The preview is still served; debits resume next month or after buying a pack from My account.
403module_non_inclusThe resource needs a module your plan does not include. The response names the plan that opens it.
403essai_epuiseYour plan opens this module as a trial (Data: a few corporate and market finance analyses a month) and this month's trial is used up. The response gives the number of analyses, the plan that opens it without limit and the reset date.
429quota_api, quota_export, trop_de_requetesCap reached. The X-Quota-Used and X-Quota-Limit headers give the consumption and the plan limit. The API counter resets at midnight UTC, the export counter on the first day of the calendar month.
503indisponible, configService temporarily unavailable (database refreshing, payment not configured). Retry, the call has no side effect.
{
  "erreur": {
    "code": "secteur_inconnu",
    "message": "Secteur inconnu : machinerei. Liste des 84 secteurs sur /api/v1/secteurs.",
    "secteurs_inconnus": ["machinerei"]
  }
}

AI assistants and agents

A database an agent can query on its own

The shortest path is the MCP server: one line of configuration in Claude or in your agent, and it gets named tools to search, read a company record and read the filed accounts. Otherwise give it the OpenAPI specification URL: it discovers the routes and fields with no extra documentation. The llms.txt file summarises the site and its rules in natural language, for context.

  • Public MCP server, 21 read-only tools, stateless.
  • OpenAPI 3.1, stable JSON responses, open CORS on /api/v1.
  • Key-free preview mode (2 companies) for a first try, then a key for volume.
  • One key per agent: revoke it without touching the others.

Give this to your assistant

https://argos-finance.fr/api/mcp
https://argos-finance.fr/openapi.json
https://argos-finance.fr/llms.txt