Calculateur de marge bénéficiaire
Saisissez un coût et un prix de vente pour obtenir bénéfice, marge et taux de marque : un coût de 80 vendu 100 donne une marge de 20 % mais un taux de marque de 25 %. Une vente à perte affiche une marge négative. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Coût
- 80
- Prix
- 100
- Bénéfice
- 20
- Marge bénéficiaire (%)
- 20
- Taux de marque (%)
- 25
Calcule le bénéfice, le pourcentage de marge brute et le pourcentage de marque à partir d'un coût unitaire et d'un prix de vente, en distinguant les deux ratios que l'on confond souvent.
Marge et taux de marque ne disent pas la même chose
Les deux chiffres partent du même bénéfice, le prix moins le coût, mais le rapportent à des bases différentes. La marge divise ce bénéfice par le prix de vente et indique la part de chaque vente que vous conservez. Le taux de marque le divise par le coût et indique de combien le prix dépasse ce que vous avez payé. Ils ne coïncident donc jamais : avec un coût de 80 et un prix de 100, le bénéfice est de 20, la marge de 20 % et le taux de marque de 25 %. Le calculateur affiche les trois ensemble, vous n'avez donc pas à retenir quelle formule va avec quel nom.
Les erreurs courantes quand on fixe un prix
L'erreur classique consiste à présenter un taux de marque comme une marge : ajouter 25 % au coût ne vous laisse que 20 % de chaque vente. Si vous vendez sous le coût, le bénéfice et la marge deviennent négatifs, ce qui est le bon signal d'une vente à perte et permet de mesurer ce que coûte une promotion. Un coût nul donne une marge de 100 % et laisse le taux de marque non calculé. Le prix, lui, ne peut pas être nul, car il sert de base à la marge. Les résultats sont arrondis à deux décimales par défaut, et vous pouvez en choisir entre 0 et 8.
Cas d’usage
Fixer correctement le prix d'un produit
Saisissez votre coût de revient et votre prix cible pour voir la véritable marge, et évitez l'erreur classique consistant à annoncer la marque comme s'il s'agissait de la marge.
Modéliser remises et pertes
Testez un prix inférieur au coût pour voir le bénéfice et la marge négatifs, en quantifiant exactement l'ampleur d'une remise promotionnelle.
Questions fréquentes
Quelle est la différence entre marge et marque ?
La marge est le bénéfice en pourcentage du prix ; la marque est le même bénéfice en pourcentage du coût. Un coût de 80 à un prix de 100 est une marge de 20 % mais une marque de 25 %.
Pourquoi le prix ne peut-il pas être nul ?
Le prix est le dénominateur du pourcentage de marge, un prix nul diviserait donc par zéro.
Puis-je modéliser une perte ?
Oui. Un prix inférieur au coût est autorisé et renvoie un bénéfice négatif et une marge négative, et non une erreur.
Quelle peut être la précision de la sortie ?
Le champ decimals accepte de 0 à 8 (2 par défaut), arrondi half-up.
Que se passe-t-il lorsque le coût est nul ?
La marge vaut 100 %, puisque tout le prix est du bénéfice. Le taux de marque ne peut pas être calculé, car il faudrait diviser par zéro : il reste vide au lieu d'afficher un chiffre trompeur.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/profit-margin \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"cost":80,"price":100}'const res = await fetch("https://api.kit.forhosting.com/dev/profit-margin", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"cost": 80,
"price": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/profit-margin",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"cost": 80,
"price": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/profit-margin", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"cost":80,"price":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"cost":80,"price":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/profit-margin", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"cost": 80,
"price": 100
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.profit_margin",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Bénéfice, marge et marque, et en quoi ils diffèrent
À partir d'un coût et d'un prix, cet outil renvoie trois nombres. Le bénéfice est simplement price - cost. Le pourcentage de marge est (price - cost) / price * 100, exprimant le bénéfice comme une part du prix de vente. Le pourcentage de marque est (price - cost) / cost * 100, exprimant le même bénéfice comme une part du coût. Ces deux ratios sont couramment confondus : un coût de 80 vendu à 100 donne une marge de 20 % mais une marque de 25 %, et l'outil renvoie les deux pour que vous ne les mélangiez jamais. Lorsque cost vaut 0, la marque est mathématiquement indéfinie (division par zéro), donc markup_percent est renvoyé comme null tandis que margin_percent reste valide à 100. La sortie reprend les cost et price que vous avez fournis, de sorte qu'un résultat enregistré se décrit de lui-même sans avoir besoin de la requête d'origine.
Champs, validation et cas limites
Un prix inférieur au coût est autorisé et produit simplement un bénéfice négatif et une marge négative, ce qui est le signal correct d'une vente à perte plutôt qu'une erreur. Le champ facultatif decimals est un entier de 0 à 8 et vaut 2 par défaut, laissant aux flux financiers la marge nécessaire pour une économie unitaire de haute précision. Deux champs sont requis : cost, un nombre fini supérieur ou égal à 0, et price, un nombre fini supérieur ou égal à 0. Il y a une exception stricte : price ne peut pas valoir 0, car il est le dénominateur de la marge, de sorte qu'un prix nul renvoie l'erreur typée "price no puede ser 0". Chaque entrée est vérifiée pour son type, sa finitude et sa plage avant toute arithmétique, et une violation renvoie invalid_input en nommant le champ, par exemple un coût négatif ou un prix non numérique.
Arrondi, déterminisme et livraison
L'arrondi applique une règle half-up explicite sur le résultat IEEE exact, appliquée indépendamment à profit, margin_percent et markup_percent, de sorte qu'une valeur de 12.345 devient 12.35 plutôt que de dériver via un formateur dépendant de la locale. Les tâches API échouées ne sont jamais facturées ; le solde prépayé n'est dépensé que sur le travail réussi à $0.002.
Cas d'intégration
Auditer un catalogue en volume
Envoyez le coût et le prix de chaque SKU via l'API pour signaler les articles dont le margin_percent tombe sous votre seuil.
Questions techniques
Que se passe-t-il si le coût est nul ?
Le bénéfice et la marge restent valides, mais la marque est indéfinie (division par le coût), donc markup_percent est renvoyé comme null.