Skip to content
Argos Sourcing

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. The API is included in every plan and never billed separately.

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, Integration up to 10.

My API keys
03

First call

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

curl "https://sourcing.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

The API is included in every plan

No call is billed per unit, no surcharge per returned row. You pick a plan, it sets a daily call cap and a number of companies per call. Everything else is identical across plans: same routes, same fields, same format.

API quotas by plan
PlanCalls per dayCompanies per callActive keysPrice excl. VAT
No account (preview)020No sign-up
Discovery5051Free
Starter200501EUR 39 / month
Business1,0002003EUR 119 / month
Integration5,00050010EUR 349 / month

In practice: a free account gives 50 calls per day and 5 companies per call, enough to frame a project. The Integration plan gives 5,000 calls per day and 500 companies per call, up to 2,500,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://sourcing.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.

curl "https://sourcing.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, 100 with Integration.

curl -L "https://sourcing.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://sourcing.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://sourcing.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 Business, 500 on Integration): 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://sourcing.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://sourcing.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", 200
params = {"pays": "DE", "secteur": "machinerie", "limit": PAGE, "offset": 0}
tout = []
while True:
    r = requests.get("https://sourcing.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.
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, eight 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://sourcing.argos-finance.fr/api/mcp
https://sourcing.argos-finance.fr/openapi.json
https://sourcing.argos-finance.fr/llms.txt