> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Employment cost calculator

> Calculate total employment costs including salary, benefits, and fees

The Employment Cost Calculator API helps you estimate the total cost of hiring employees globally. Get accurate cost breakdowns including salary, employer taxes, benefits, and Deel's service fees before creating contracts.

## Overview

Use this API to:

* **Estimate total employment costs** by country and salary
* **Compare costs** across different countries for budget planning
* **Include benefits** in cost calculations (health insurance, pension, etc.)
* **Show candidates** transparent total compensation packages

## Basic cost calculation

Calculate employment costs for a specific country and salary.

**API endpoint**: `POST /eor/employment_cost`

**`Python`**

```python Python
import requests
import os

url = "https://api.letsdeel.com/rest/eor/employment_cost"
headers = {
    "Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}",
    "Content-Type": "application/json"
}
payload = {
    "data": {
        "country": "Netherlands",
        "salary": 5000,
        "currency": "EUR"
    }
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const url = 'https://api.letsdeel.com/rest/eor/employment_cost';
const payload = {
  data: {
    country: 'Netherlands',
    salary: 5000,
    currency: 'EUR'
  }
};

const response = await axios.post(url, payload, {
  headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` }
});
console.log(response.data);
```

**`cURL`**

```bash cURL
curl --request POST \
  --url 'https://api.letsdeel.com/rest/eor/employment_cost' \
  --header 'Authorization: Bearer $DEEL_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": {
      "country": "Netherlands",
      "salary": 5000,
      "currency": "EUR"
    }
  }'
```

**`Response`**

```json Response
{
  "data": {
    "salary": "5000.00",
    "currency": "EUR",
    "country": "Netherlands",
    "country_code": "NL",
    "frequency": "Monthly",
    "deel_fee": "549.91",
    "severance_accrual": "0.00",
    "employer_costs": "914.00",
    "total_costs": "7262.68",
    "costs": [
      {
        "name": "Social Security",
        "amount": "450.00",
        "type": "employer_tax"
      },
      {
        "name": "Pension Contribution",
        "amount": "464.00",
        "type": "employer_tax"
      }
    ],
    "benefits_data": [],
    "additional_data": {
      "additional_notes": [
        "Costs are estimates and may vary based on specific circumstances"
      ]
    }
  }
}
```

**Request parameters:**

| Parameter  | Type   | Required | Description                                         |
| ---------- | ------ | -------- | --------------------------------------------------- |
| `country`  | string | Yes      | Country name (e.g., "Netherlands", "United States") |
| `salary`   | number | Yes      | Monthly or annual salary amount                     |
| `currency` | string | Yes      | ISO currency code (e.g., "EUR", "USD")              |
| `benefits` | array  | No       | Array of benefit provider IDs to include            |

**Response fields:**

* `salary` - Input salary amount
* `currency` - Input currency
* `country` / `country_code` - Country name and ISO code
* `frequency` - Payment frequency (Monthly/Annual)
* `deel_fee` - Deel's service fee
* `employer_costs` - Employer taxes and contributions
* `total_costs` - **Total monthly cost** (salary + employer costs + Deel fee)
* `costs` - Breakdown of individual employer costs
* `benefits_data` - Details of included benefits (if any)
* `severance_accrual` - Accrued severance costs (if applicable)

## Including benefits in calculations

To get accurate cost estimates with benefits like health insurance or pension, follow these steps.

### Step 1: Check available benefits

First, check which benefits are available for the target country.

**API endpoint**: `GET /eor/validations/{country_code}`

**`Python`**

```python Python
import requests
import os

url = "https://api.letsdeel.com/rest/eor/validations/NL"
headers = {"Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}"}

response = requests.get(url, headers=headers)
print(response.json())
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const response = await axios.get(
  'https://api.letsdeel.com/rest/eor/validations/NL',
  { headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` } }
);
console.log(response.data);
```

**`cURL`**

```bash cURL
curl --request GET \
  --url 'https://api.letsdeel.com/rest/eor/validations/NL' \
  --header 'Authorization: Bearer $DEEL_API_TOKEN'
```

**`Response`**

```json Response
{
  "data": {
    "currency": "EUR",
    "health_insurance": {
      "status": "DISABLED",
      "providers": []
    },
    "pension": {
      "status": "ENABLED",
      "providers": [
        {
          "id": "01c60f26-fe0e-48f3-82d5-b899848eee7b",
          "name": "Nationale Nederlanden",
          "home_page_url": "https://www.nn.nl/"
        },
        {
          "id": "02d71g37-gf1f-59g4-93e6-c900959fff8c",
          "name": "Achmea Pension",
          "home_page_url": "https://www.achmea.nl/"
        }
      ]
    },
    "mandatory_fields": [
      "first_name",
      "last_name",
      "email",
      "date_of_birth"
    ]
  }
}
```

Look for benefit types with `"status": "ENABLED"` and note the provider `id` values — use these in the cost calculation.

### Step 2: Calculate costs with benefits

Include the `benefits` array with provider IDs in your cost calculation request.

**`Python`**

```python Python
import requests
import os

url = "https://api.letsdeel.com/rest/eor/employment_cost"
headers = {
    "Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}",
    "Content-Type": "application/json"
}
payload = {
    "data": {
        "country": "Netherlands",
        "salary": 5000,
        "currency": "EUR",
        "benefits": [
            {"provider_id": "01c60f26-fe0e-48f3-82d5-b899848eee7b"}
        ]
    }
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const response = await axios.post(
  'https://api.letsdeel.com/rest/eor/employment_cost',
  {
    data: {
      country: 'Netherlands',
      salary: 5000,
      currency: 'EUR',
      benefits: [{ provider_id: '01c60f26-fe0e-48f3-82d5-b899848eee7b' }]
    }
  },
  { headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` } }
);
console.log(response.data);
```

**`cURL`**

```bash cURL
curl --request POST \
  --url 'https://api.letsdeel.com/rest/eor/employment_cost' \
  --header 'Authorization: Bearer $DEEL_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": {
      "country": "Netherlands",
      "salary": 5000,
      "currency": "EUR",
      "benefits": [
        {
          "provider_id": "01c60f26-fe0e-48f3-82d5-b899848eee7b"
        }
      ]
    }
  }'
```

**`Response`**

```json Response
{
  "data": {
    "salary": "5000.00",
    "currency": "EUR",
    "country": "Netherlands",
    "country_code": "NL",
    "frequency": "Monthly",
    "deel_fee": "549.91",
    "employer_costs": "914.00",
    "total_costs": "7712.68",
    "costs": [
      {
        "name": "Social Security",
        "amount": "450.00",
        "type": "employer_tax"
      },
      {
        "name": "Pension Contribution",
        "amount": "464.00",
        "type": "employer_tax"
      }
    ],
    "benefits_data": [
      {
        "name": "Nationale Nederlanden Pension",
        "provider_id": "01c60f26-fe0e-48f3-82d5-b899848eee7b",
        "monthly_cost": "450.00",
        "type": "pension"
      }
    ],
    "additional_data": {
      "additional_notes": []
    }
  }
}
```

> **Note**
>
> `total_costs` increases to include benefit costs. The `benefits_data` array contains the applied benefit details. Benefit costs are added on top of employer taxes.

## Use cases

#### Budget planning for global expansion

Compare employment costs across multiple countries to determine where to hire next. Calculate total costs for the same role in different countries to optimise your hiring budget.

**`Python`**

```python Python
import requests
import os

headers = {
    "Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}",
    "Content-Type": "application/json"
}
countries = [
    {"name": "Netherlands", "salary": 5000, "currency": "EUR"},
    {"name": "United Kingdom", "salary": 4500, "currency": "GBP"},
    {"name": "Spain", "salary": 4000, "currency": "EUR"},
]

for country in countries:
    response = requests.post(
        "https://api.letsdeel.com/rest/eor/employment_cost",
        json={"data": country},
        headers=headers
    )
    data = response.json()["data"]
    print(f"{country['name']}: {data['total_costs']} {data['currency']}/month")
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const countries = [
  { name: 'Netherlands', salary: 5000, currency: 'EUR' },
  { name: 'United Kingdom', salary: 4500, currency: 'GBP' },
  { name: 'Spain', salary: 4000, currency: 'EUR' }
];

for (const country of countries) {
  const { data } = await axios.post(
    'https://api.letsdeel.com/rest/eor/employment_cost',
    { data: country },
    { headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` } }
  );
  console.log(`${country.name}: ${data.data.total_costs} ${data.data.currency}/month`);
}
```

#### Real-time cost estimates in hiring tools

Integrate the cost calculator into your internal hiring platform or ATS to show real-time cost estimates as recruiters build job offers.

**`Python`**

```python Python
import requests
import os

def get_employment_costs(country, salary, currency):
    response = requests.post(
        "https://api.letsdeel.com/rest/eor/employment_cost",
        json={"data": {"country": country, "salary": salary, "currency": currency}},
        headers={"Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}"}
    )
    data = response.json()["data"]
    return {
        "monthly_cost": data["total_costs"],
        "annual_cost": float(data["total_costs"]) * 12,
        "breakdown": data["costs"]
    }
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const getEmploymentCosts = async (country, salary, currency) => {
  const { data } = await axios.post(
    'https://api.letsdeel.com/rest/eor/employment_cost',
    { data: { country, salary, currency } },
    { headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` } }
  );
  return {
    monthlyCost: data.data.total_costs,
    annualCost: data.data.total_costs * 12,
    breakdown: data.data.costs
  };
};
```

#### Benefits comparison tool

Help hiring managers compare different benefit packages and their impact on total costs.

**`Python`**

```python Python
import requests
import os

def calculate_cost(country, salary, currency, benefits=None):
    payload = {"data": {"country": country, "salary": salary, "currency": currency}}
    if benefits:
        payload["data"]["benefits"] = [{"provider_id": b} for b in benefits]
    response = requests.post(
        "https://api.letsdeel.com/rest/eor/employment_cost",
        json=payload,
        headers={"Authorization": f"Bearer {os.getenv('DEEL_API_TOKEN')}"}
    )
    return response.json()["data"]

without_benefits = calculate_cost("United States", 8000, "USD")
with_health = calculate_cost("United States", 8000, "USD", [health_provider_id])
with_all = calculate_cost("United States", 8000, "USD", [health_provider_id, pension_provider_id])

print(f"No benefits: ${without_benefits['total_costs']}/month")
print(f"Health only: ${with_health['total_costs']}/month")
print(f"Full package: ${with_all['total_costs']}/month")
```

**`Node.js`**

```javascript Node.js
const axios = require('axios');

const calculateCost = async (country, salary, currency, benefits = []) => {
  const { data } = await axios.post(
    'https://api.letsdeel.com/rest/eor/employment_cost',
    { data: { country, salary, currency, benefits: benefits.map(id => ({ provider_id: id })) } },
    { headers: { Authorization: `Bearer ${process.env.DEEL_API_TOKEN}` } }
  );
  return data.data;
};

const withoutBenefits = await calculateCost('United States', 8000, 'USD');
const withHealth = await calculateCost('United States', 8000, 'USD', [healthProviderId]);
const withAll = await calculateCost('United States', 8000, 'USD', [healthProviderId, pensionProviderId]);

console.log(`No benefits: $${withoutBenefits.total_costs}/month`);
console.log(`Health only: $${withHealth.total_costs}/month`);
console.log(`Full package: $${withAll.total_costs}/month`);
```

## Best practices

#### Handle currency conversions

If comparing costs across countries, convert to a common currency for accurate comparison. The API returns costs in the requested currency; apply exchange rates in your own code before comparing totals.

#### Show cost breakdowns

Display itemised costs (salary, taxes, benefits, fees) rather than only the total. Use the `costs` array in the response to render a clear breakdown for hiring managers or candidates.

#### Calculate annual costs

Multiply monthly `total_costs` by 12 for annual budget planning. For fixed-term contracts shorter than 12 months, multiply by the actual contract duration in months.

#### Recalculate before contract creation

Tax rates and benefit costs change regularly. Recalculate costs immediately before contract creation rather than relying on cached estimates from earlier in the hiring flow.

#### Include severance accrual

Some countries require severance accrual. The `severance_accrual` field in the response shows the monthly accrual amount — include this in long-term cost planning even when it is not part of the upfront total.

## Next steps

#### [EOR introduction](/api/employer-of-record/introduction)

Learn about the full EOR API capabilities and available endpoints.

#### [Hiring](/api/employer-of-record/hiring)

Create EOR contracts after estimating costs.

#### [Authentication](/api/authentication)

Set up API authentication before making requests.

#### [Webhooks](/api/webhooks/introduction)

Subscribe to contract lifecycle events.