The Kultranz API turns the data engine behind this site into clean JSON. Nine REST endpoints, one remote MCP server, and numbers that trace back to named federal releases: BLS OEWS wages, BEA Regional Price Parities, Census ACS housing and income, IRS 2026 tax rules. No estimates, no scraping, no guesswork - the same engine that powers the calculators on this site, exposed for developers.
Base URL:
https://api.kultranz.com
Try it right now, no key, no signup:
curl "https://api.kultranz.com/paycheck?salary=120000&state=CA&filingStatus=single"
What a call returns
A live response from GET /cost-of-living - two metros, their BEA price parities, and the salary you would need in the second city to hold purchasing power constant:
{
"data": {
"from": { "city": "Austin, TX", "rpp": 98.1 },
"to": { "city": "San Francisco, CA", "rpp": 115.6 },
"equivalent_salary": 117838.94,
"gap_pct": 17.84
},
"meta": {
"source": "BLS OEWS + BEA RPP + U.S. Census ACS + IRS (via kultranz.com)",
"vintage": "2026",
"year": 2026
}
}
Every response carries the same meta envelope naming the source agencies and the data vintage, so a downstream product can display provenance without hard-coding it. Errors return { "error": { "code": "...", "message": "..." } } with the appropriate HTTP status.
Pricing
| Tier | Price | Quota |
|---|---|---|
| Free | $0 | 25 requests/day, no card, no key |
| Lifetime pass | $5 one-time | no daily cap - limited to the first 500 buyers |
| After the first 500 | $5/mo | same access, monthly |
The lifetime pass is direct billing - one payment, yours for the life of the API, no subscription to cancel. When the first 500 are gone, the pass becomes $5/month for everyone after. Questions or bulk/commercial needs: [email protected].
Prefer a marketplace? The same API is also listed on RapidAPI, where keys, metering and billing are handled for you. Direct is cheaper; RapidAPI is there if you already live there.
The MCP server at /mcp is free with no quota. It only exposes what the site’s public calculators already give away.
REST endpoints
| Endpoint | Returns | Example |
|---|---|---|
GET /paycheck | Take-home pay: federal + FICA + state | ?salary=120000&state=CA&filingStatus=single |
GET /cost-of-living | Equivalent salary between two metros (BEA RPP) | ?fromCity=Austin, TX&toCity=San Francisco, CA&salary=100000 |
GET /tax-brackets | 2026 federal + one state’s brackets | ?state=NY&filingStatus=single |
GET /col-index | 50-metro RPP table with rent/home/income | ?city=Albuquerque, NM |
GET /salaries | Real BLS wage percentiles by job x city | ?job=nurse&city=Chicago |
GET /compound-interest | Future value + yearly series | ?principal=10000&monthly=500&rate=7&years=20 |
GET /net-worth | Assets, liabilities, net worth | ?cash=10000&investments=150000 |
GET /debt-payoff | Avalanche / snowball schedule | ?debts=[{"name":"Card","balance":5000,"rate":22,"min":150}]&extra=200 |
GET /budget | 50/30/20 split or full category budget | ?income=5000 |
Parameter details:
/paycheck-salary(required, > 0),state(required, two-letter code, 50 states + DC),filingStatus(single|mfj, defaultsingle),pretax401k(optional, >= 0)./cost-of-living-fromCity,toCity(required, exact metro names as returned by/col-index),salary(default 100000),rich=1adds a per-category monthly cost breakdown for both cities./tax-brackets-state(optional; omit for federal only),filingStatus. Returns the standard deduction and the full bracket ladder./col-index-cityoptional; omit for the full 50-metro table./salaries-joband/orcity(partial match, e.g.nurse,Chicago), optionalstate. Up to 100 records, 16 fields each: percentiles (10th/25th/median/75th/90th), averages, employment, and the metro’s cost-of-living context.
Examples
Take-home pay (curl)
curl "https://api.kultranz.com/paycheck?salary=120000&state=CA&filingStatus=single&pretax401k=10000"
{
"data": {
"gross": 120000,
"pretax": 10000,
"taxable_income": 93900,
"federal_tax": 15370,
"social_security": 7440,
"medicare": 1740,
"state_tax": 6153.42,
"total_tax": 30703.42,
"net": 79296.58,
"effective_rate": 25.59
},
"meta": { "source": "BLS OEWS + BEA RPP + U.S. Census ACS + IRS (via kultranz.com)", "vintage": "2026", "year": 2026 }
}
Cost of living (curl)
curl "https://api.kultranz.com/cost-of-living?fromCity=Austin,%20TX&toCity=San%20Francisco,%20CA&salary=100000"
Salary percentiles (curl)
curl "https://api.kultranz.com/salaries?job=nurse&city=Chicago"
{
"data": {
"count": 1,
"records": [
{
"job_title": "Registered Nurse",
"job_code": "29-1141",
"city": "Chicago",
"state": "IL",
"avg_salary": 90810.0,
"salary_10th": 67560.0,
"salary_25th": 79590.0,
"salary_median": 85160.0,
"salary_75th": 102440.0,
"salary_90th": 107980.0,
"national_avg": 94480.0,
"employment": 102330,
"rpp_all_items": 103.595,
"median_rent": 1380.0,
"median_home_value": 315200.0,
"city_median_income": 75134.0,
"city_population": 2707648
}
]
},
"meta": { "source": "BLS OEWS + BEA RPP + U.S. Census ACS + IRS (via kultranz.com)", "vintage": "2026", "year": 2026 }
}
Python
import requests
BASE = "https://api.kultranz.com"
r = requests.get(f"{BASE}/paycheck", params={
"salary": 120000, "state": "CA", "filingStatus": "single"
})
pay = r.json()
print(pay["data"]["net"], "take-home on", pay["data"]["gross"])
r = requests.get(f"{BASE}/cost-of-living", params={
"fromCity": "Austin, TX", "toCity": "San Francisco, CA", "salary": 100000
})
col = r.json()["data"]
print(f'${col["equivalent_salary"]:,.2f} in {col["to"]["city"]} '
f'= $100,000 in {col["from"]["city"]} ({col["gap_pct"]:+.2f}%)')
MCP server
The same data engine is exposed as a remote MCP server - no install, no local process, no API key.
| Endpoint | https://api.kultranz.com/mcp (POST) |
| Transport | Streamable HTTP (stateless - the spec-permitted no-session mode; GET answers 405) |
| Auth | None required |
| Protocol versions | 2025-06-18 (latest), 2025-03-26, 2024-11-05 |
| Content type | application/json (anything else gets 415) |
| Cost | Free, no quota |
The five tools
| Tool | What it does | Arguments |
|---|---|---|
get_take_home_pay | 2026 net pay: federal + Social Security + Medicare + state, all 50 states + DC | salary, state (2-letter), filingStatus (single|mfj), pretax401k |
compare_cost_of_living | Equivalent salary between two metros from BEA parities, with per-category monthly breakdown | fromCity, toCity, salary (default 100000) |
get_tax_brackets | 2026 IRS brackets + standard deduction, plus one state’s rules (none / flat / progressive) | state, filingStatus |
list_metros | The 50 supported metros with RPP index, median rent, home value, income | city (optional, one metro) |
get_salary_percentiles | BLS OEWS annual wages - 10th/25th/median/75th/90th - by job and metro | job, city, state (at least one) |
* required. City names must match list_metros exactly (e.g. "Austin, TX"); call list_metros first to resolve them. Tool results carry both content (JSON text) and structuredContent with the same data + meta envelope as the REST API.
Why five tools and not nine: the four generic calculators (compound interest, net worth, debt payoff, budget) are arithmetic any model can already do. These five are the ones that need the 50-state tax engine, BEA parities or BLS wage tables - things a model genuinely cannot compute by itself.
curl
# 1. initialize
curl https://api.kultranz.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
# 2. tools/call (after the initialized notification)
curl https://api.kultranz.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_take_home_pay","arguments":{"salary":120000,"state":"TX"}}}'
Python client
import requests
MCP = "https://api.kultranz.com/mcp"
def rpc(id, method, params=None):
body = {"jsonrpc": "2.0", "id": id, "method": method}
if params is not None:
body["params"] = params
return requests.post(MCP, json=body, timeout=30).json()
# handshake: initialize -> initialized notification -> call tools
rpc(1, "initialize", {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {"name": "example", "version": "0"},
})
requests.post(MCP, json={"jsonrpc": "2.0", "method": "notifications/initialized"})
result = rpc(2, "tools/call", {
"name": "compare_cost_of_living",
"arguments": {"fromCity": "Austin, TX", "toCity": "San Francisco, CA", "salary": 100000},
})
data = result["result"]["structuredContent"]["data"]
print(f'${data["equivalent_salary"]:,.2f} needed in {data["to"]["city"]}')
Client setup
Claude Code:
claude mcp add --transport http kultranz https://api.kultranz.com/mcp
Claude Desktop: Settings -> Extensions -> Connectors -> Add custom connector. Name kultranz, URL https://api.kultranz.com/mcp, no key.
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"kultranz": { "url": "https://api.kultranz.com/mcp" }
}
}
Windsurf (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"kultranz": { "serverUrl": "https://api.kultranz.com/mcp" }
}
}
Then just ask: “what does a nurse earn in Chicago, adjusted for cost of living?” or “compare $120k take-home in Texas vs California”.
Data & limits
The honest version, because you should know what you are building on:
- Coverage: 50 US metro areas and 20 occupations (1,000 job x metro rows) in the salary dataset; 51 tax jurisdictions (50 states + DC). This is a curated dataset, not every BLS occupation. The full metro list is one call away:
GET /col-index. - Vintage: the tax engine is 2026 - IRS Rev. Proc. 2025-32 brackets, $16,100/$32,200 standard deduction, $184,500 Social Security wage base, state brackets per Tax Foundation’s 2026 compilation. Cost-of-living uses BEA Regional Price Parities (US average = 100); wages are BLS OEWS as named on the methodology page. Each government release is annual; we ship refreshes within 30 days of publication.
- Nulls are real: a few metros (e.g. Arlington, TX and Cleveland, OH) lack Census ACS housing fields; those come back
nullrather than an interpolated guess. Every response’smetanames the sources and vintage so you can label provenance in your own product. - Tax model scope: estimates, not tax advice. It covers federal income tax, FICA and state income tax for
singleandmfj. It excludes local/city income taxes (NYC, Philadelphia), credits and itemized deductions. Washington and New Hampshire levy no tax on wage income and are modeled as no-tax. A handful of states’ MFJ standard deduction is approximated at 2x single where the exact figure was unavailable - flagged in the methodology. - No fabrication: if a number is not in a source, it is
null, not invented. The calculations (equivalent salary, take-home, affordability ratios) are documented formulas on the methodology page.
Commercial & bulk licensing
Building a product on this data? Beyond the metered API, the full dataset is licensed directly: bulk JSON/CSV exports, commercial-use and white-label rights, annual refresh as BLS/BEA/Census publish, and a data-refresh SLA. The per-record shape is public - 16 fields per job x metro row, each traceable to a named federal release (see the free CC BY dataset for the columns). Email [email protected] with your use case for a quote and an evaluation dataset.
Try it
The calculators on this site call these endpoints under the hood. Run the paycheck calculator, the cost-of-living tool, or browse salaries by job to see the data in action - then hit the API directly when you’re ready to build.