API Reference

ENDPOINTS

POSTCreate Buy AnalysisPOSTCreate Arbitrage AnalysisPOSTCreate Owned AnalysisPOSTCreate Cohost Analysis

RESOURCES

Getting StartedAuthenticationError Codes

Airbnb Data API Documentation

Welcome to the BNBCalc API. This documentation helps you integrate short-term rental property analysis into your application.

Use the BNBCalc Airbnb Data API to get property revenue, occupancy, ADR, active Airbnb comparable listings, percentiles, investment metrics, and hosted report URLs for apps, reports, underwriting, and management tools.


Getting Started

To start using the BNBCalc Airbnb Data API, you'll need to:

1. Create a BNBCalc account or sign in to your existing account

2. Navigate to your account settings to generate an API key

3. Include your API key in all API requests using the x-bnbcalc-api-key header

4. Start making requests to access property data and analysis

All API endpoints use HTTPS and return JSON responses. Keep API keys on your server, not in browser or mobile client code. External API routes are currently throttled at 100 requests per second and use standard HTTP response codes to indicate success or failure.


Authentication

All API requests require authentication using an API key. API keys are tied to your BNBCalc account, should be kept server-side, and should never be exposed in frontend code. Include your API key in the request header as shown below:

x-bnbcalc-api-key: YOUR_API_KEY

You can generate API keys self-serve from your account settings page. Include the x-bnbcalc-api-key header in every API request to authenticate.


POST/v1/external/analysis/create/buy

Create Buy Analysis

Create a buy analysis for a short-term rental acquisition. Send location, property details, and purchase price to return projected revenue, occupancy, comps, cash flow, and ROI metrics.

Location Parameters (Conditional)

Either provide both lat AND lng, OR provide fullAddress. At least one method is required.

latnumberconditional

Latitude coordinate (must be provided with lng if fullAddress is not used)(e.g., 27.7676)

lngnumberconditional

Longitude coordinate (must be provided with lat if fullAddress is not used)(e.g., -82.6403)

fullAddressstringconditional

Complete property address (can be used instead of lat/lng coordinates)(e.g., 4935 2nd Avenue North, St. Petersburg, FL 33703)

Required Parameters

purchasePriceUSDnumberrequired

Purchase price in USD(e.g., 350000)

bedroomsnumberrequired

Number of bedrooms(e.g., 3)

bathroomsnumberrequired

Number of bathrooms(e.g., 2)

accomodatesnumberrequired

Number of guests the property can accommodate(e.g., 6)

Optional Parameters

monthlyRentUSDnumberoptional

Expected monthly rent in USD for long-term rental(e.g., 2500)

interestRatePercentagenumberoptional

Interest rate percentage (0-15)(e.g., 5.1)

squareFeetnumberoptional

Property square footage(e.g., 1500)

statestringoptional

State name(e.g., Florida)

citystringoptional

City name(e.g., St. Petersburg)

countystringoptional

County name(e.g., Pinellas County)

postalCodestringoptional

Postal/ZIP code(e.g., 33703)

countrystringoptional

Country name(e.g., United States)

streetstringoptional

Street name(e.g., 2nd Avenue North)

streetNumberstringoptional

Street number(e.g., 4935)

unitstringoptional

Unit/apartment number if applicable

Example Request

curl -X POST \ https://atlas.bnbcalc.com/v1/external/analysis/create/buy \ -H "x-bnbcalc-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lat": 27.7676, "lng": -82.6403, "bedrooms": 3, "bathrooms": 2, "accomodates": 6, "purchasePriceUSD": 400000 }'

Example Response

{ "success": true, "data": { "_id": "000000000000000000000000", "url": "https://www.bnbcalc.com/analysis/example-property/000000000000000000000000", "currency": "USD", "ratePerNightUSD": 364.73770491803276, "occupancyRatePercentage": 48, "bedrooms": 4, "bathrooms": 4, "commonSpaces": 1, "accomodates": 12, "fullAddress": "4935 2nd Avenue North, St. Petersburg, FL 33703", "location": { "type": "Point", "coordinates": [ -82.6403, 27.7676 ] }, "revenue": { "p25": 48210, "p50": 58440, "p75": 63944.76398163934, "p90": 74280, "avg": 60310 }, "adr": { "p25": 214, "p50": 288, "p75": 364.73770491803276, "p90": 431, "avg": 318 }, "occupancy": { "p25": 0.38, "p50": 0.44, "p75": 0.48, "p90": 0.56, "avg": 0.46 }, "quartiles": { "25th_percentile": { "average_daily_rate": 214, "occupancy_rate": 38, "revenue": 48210 }, "50th_percentile": { "average_daily_rate": 288, "occupancy_rate": 44, "revenue": 58440 }, "75th_percentile": { "average_daily_rate": 364.73770491803276, "occupancy_rate": 48, "revenue": 63944.76398163934 }, "90th_percentile": { "average_daily_rate": 431, "occupancy_rate": 56, "revenue": 74280 } }, "comparables": [ { "airbnbId": "12345678", "name": "Modern 4BR near downtown", "listingUrl": "https://www.airbnb.com/rooms/12345678", "bedrooms": 4, "bathrooms": 3, "accommodates": 10, "annualRevenueUSD": 68420, "occupancyRatePercentage": 52, "averageDailyRateUSD": 361, "distanceMiles": 0.4 } ], "downPaymentPercentage": 20, "mortgageLength": 30, "yearsRemainingOnMortgage": 30, "interestRatePercentage": 4, "propertyTaxPercentage": 0.75, "monthlyRevenueUSD": 5328.730331803278, "monthlyExpensesUSD": 1474.1603364983607, "monthlyTaxesUSD": 250, "yearOneRevenueUSD": 63944.76398163934, "yearOneOperatingIncomeUSD": 46254.83994365901, "yearOneMorgageAndTaxesUSD": 21324, "yearOneCashFlowUSD": 24930.83994365901, "yearOneCashOnCashPercentage": 24.86817214984141, "yearOneCapRatePercentage": 11.563709985914752, "yearOneReturnOnInvestmentPercentage": 63.78402823049849, "yearOnePrincipalPaydownUSD": 85635.31658640636, "yearOneAppreciationUSD": 12000, "totalCashInvestment": 100252, "ltrPerMonthUSD": 1500, "ltrMonthlyExpensesPercentage": 10 } }

POST/v1/external/analysis/create/arb

Create Arbitrage Analysis

Create a rental arbitrage analysis for a leased property. Send monthly rent, location, and property details to return projected Airbnb revenue, cash flow, and comparable listings.

Location Parameters (Conditional)

Either provide both lat AND lng, OR provide fullAddress. At least one method is required.

latnumberconditional

Latitude coordinate (must be provided with lng if fullAddress is not used)(e.g., 27.7676)

lngnumberconditional

Longitude coordinate (must be provided with lat if fullAddress is not used)(e.g., -82.6403)

fullAddressstringconditional

Complete property address (can be used instead of lat/lng coordinates)(e.g., 4935 2nd Avenue North, St. Petersburg, FL 33703)

Required Parameters

monthlyRentUSDnumberrequired

Expected monthly rent in USD for long-term rental(e.g., 2500)

bedroomsnumberrequired

Number of bedrooms(e.g., 3)

bathroomsnumberrequired

Number of bathrooms(e.g., 2)

accomodatesnumberrequired

Number of guests the property can accommodate(e.g., 6)

Optional Parameters

purchasePriceUSDnumberoptional

Purchase price in USD(e.g., 350000)

squareFeetnumberoptional

Property square footage(e.g., 1500)

statestringoptional

State name(e.g., Florida)

citystringoptional

City name(e.g., St. Petersburg)

countystringoptional

County name(e.g., Pinellas County)

postalCodestringoptional

Postal/ZIP code(e.g., 33703)

countrystringoptional

Country name(e.g., United States)

streetstringoptional

Street name(e.g., 2nd Avenue North)

streetNumberstringoptional

Street number(e.g., 4935)

unitstringoptional

Unit/apartment number if applicable

Example Request

curl -X POST \ https://atlas.bnbcalc.com/v1/external/analysis/create/arb \ -H "x-bnbcalc-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lat": 27.7676, "lng": -82.6403, "bedrooms": 3, "bathrooms": 2, "accomodates": 6, "monthlyRentUSD": 2000 }'

Example Response

{ "success": true, "data": { "_id": "000000000000000000000000", "url": "https://www.bnbcalc.com/analysis/example-property/000000000000000000000000", "currency": "USD", "ratePerNightUSD": 364.73770491803276, "occupancyRatePercentage": 48, "bedrooms": 4, "bathrooms": 4, "commonSpaces": 1, "accomodates": 12, "fullAddress": "4935 2nd Avenue North, St. Petersburg, FL 33703", "location": { "type": "Point", "coordinates": [ -82.6403, 27.7676 ] }, "revenue": { "p25": 48210, "p50": 58440, "p75": 63944.76398163934, "p90": 74280, "avg": 60310 }, "adr": { "p25": 214, "p50": 288, "p75": 364.73770491803276, "p90": 431, "avg": 318 }, "occupancy": { "p25": 0.38, "p50": 0.44, "p75": 0.48, "p90": 0.56, "avg": 0.46 }, "quartiles": { "25th_percentile": { "average_daily_rate": 214, "occupancy_rate": 38, "revenue": 48210 }, "50th_percentile": { "average_daily_rate": 288, "occupancy_rate": 44, "revenue": 58440 }, "75th_percentile": { "average_daily_rate": 364.73770491803276, "occupancy_rate": 48, "revenue": 63944.76398163934 }, "90th_percentile": { "average_daily_rate": 431, "occupancy_rate": 56, "revenue": 74280 } }, "comparables": [ { "airbnbId": "12345678", "name": "Modern 4BR near downtown", "listingUrl": "https://www.airbnb.com/rooms/12345678", "bedrooms": 4, "bathrooms": 3, "accommodates": 10, "annualRevenueUSD": 68420, "occupancyRatePercentage": 52, "averageDailyRateUSD": 361, "distanceMiles": 0.4 } ], "monthlyRentUSD": 2000, "yearOneRentUSD": 24000, "monthlyRevenueUSD": 13432.825977452352, "monthlyExpensesUSD": 2263.6108575197586, "yearOneRevenueUSD": 161193.91172942822, "yearOneOperatingIncomeUSD": 134030.58143919113, "yearOneCashFlowUSD": 110030.58143919116, "yearOneCashOnCashPercentage": 1317.415965507557, "totalCashInvestment": 8352 } }

POST/v1/external/analysis/create/owned

Create Owned Analysis

Create an owned-property analysis for a property already in your portfolio. Include mortgage terms to return STR revenue, cash flow, principal paydown, appreciation, and ROI metrics.

Location Parameters (Conditional)

Either provide both lat AND lng, OR provide fullAddress. At least one method is required.

latnumberconditional

Latitude coordinate (must be provided with lng if fullAddress is not used)(e.g., 27.7676)

lngnumberconditional

Longitude coordinate (must be provided with lat if fullAddress is not used)(e.g., -82.6403)

fullAddressstringconditional

Complete property address (can be used instead of lat/lng coordinates)(e.g., 4935 2nd Avenue North, St. Petersburg, FL 33703)

Required Parameters

purchasePriceUSDnumberrequired

Purchase price in USD(e.g., 350000)

downPaymentPercentagenumberrequired

Down payment percentage (0-40)(e.g., 20)

interestRatePercentagenumberrequired

Interest rate percentage (0-15)(e.g., 5.1)

mortgageLengthnumberrequired

Mortgage length in years (0-30)(e.g., 30)

yearsRemainingOnMortgagenumberrequired

Years remaining on mortgage (Can't be higher than mortgage length)

bedroomsnumberrequired

Number of bedrooms(e.g., 3)

bathroomsnumberrequired

Number of bathrooms(e.g., 2)

accomodatesnumberrequired

Number of guests the property can accommodate(e.g., 6)

Optional Parameters

monthlyRentUSDnumberoptional

Expected monthly rent in USD for long-term rental(e.g., 2500)

squareFeetnumberoptional

Property square footage(e.g., 1500)

statestringoptional

State name(e.g., Florida)

citystringoptional

City name(e.g., St. Petersburg)

countystringoptional

County name(e.g., Pinellas County)

postalCodestringoptional

Postal/ZIP code(e.g., 33703)

countrystringoptional

Country name(e.g., United States)

streetstringoptional

Street name(e.g., 2nd Avenue North)

streetNumberstringoptional

Street number(e.g., 4935)

unitstringoptional

Unit/apartment number if applicable

Example Request

curl -X POST \ https://atlas.bnbcalc.com/v1/external/analysis/create/owned \ -H "x-bnbcalc-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lat": 27.7676, "lng": -82.6403, "bedrooms": 3, "bathrooms": 2, "accomodates": 6, "purchasePriceUSD": 350000, "downPaymentPercentage": 20, "interestRatePercentage": 5.1, "mortgageLength": 30, "yearsRemainingOnMortgage": 30 }'

Example Response

{ "success": true, "data": { "_id": "000000000000000000000000", "url": "https://www.bnbcalc.com/analysis/example-property/000000000000000000000000", "currency": "USD", "ratePerNightUSD": 364.73770491803276, "occupancyRatePercentage": 48, "bedrooms": 4, "bathrooms": 4, "commonSpaces": 1, "accomodates": 12, "fullAddress": "4935 2nd Avenue North, St. Petersburg, FL 33703", "location": { "type": "Point", "coordinates": [ -82.6403, 27.7676 ] }, "revenue": { "p25": 48210, "p50": 58440, "p75": 63944.76398163934, "p90": 74280, "avg": 60310 }, "adr": { "p25": 214, "p50": 288, "p75": 364.73770491803276, "p90": 431, "avg": 318 }, "occupancy": { "p25": 0.38, "p50": 0.44, "p75": 0.48, "p90": 0.56, "avg": 0.46 }, "quartiles": { "25th_percentile": { "average_daily_rate": 214, "occupancy_rate": 38, "revenue": 48210 }, "50th_percentile": { "average_daily_rate": 288, "occupancy_rate": 44, "revenue": 58440 }, "75th_percentile": { "average_daily_rate": 364.73770491803276, "occupancy_rate": 48, "revenue": 63944.76398163934 }, "90th_percentile": { "average_daily_rate": 431, "occupancy_rate": 56, "revenue": 74280 } }, "comparables": [ { "airbnbId": "12345678", "name": "Modern 4BR near downtown", "listingUrl": "https://www.airbnb.com/rooms/12345678", "bedrooms": 4, "bathrooms": 3, "accommodates": 10, "annualRevenueUSD": 68420, "occupancyRatePercentage": 52, "averageDailyRateUSD": 361, "distanceMiles": 0.4 } ], "downPaymentPercentage": 20, "mortgageLength": 30, "yearsRemainingOnMortgage": 30, "interestRatePercentage": 5.1, "propertyTaxPercentage": 0.75, "monthlyRevenueUSD": 5328.730331803278, "monthlyExpensesUSD": 1474.1603364983607, "monthlyTaxesUSD": 250, "yearOneRevenueUSD": 63944.76398163934, "yearOneOperatingIncomeUSD": 46254.83994365901, "yearOneMorgageAndTaxesUSD": 21324, "yearOneCashFlowUSD": 24930.83994365901, "yearOneCashOnCashPercentage": 24.86817214984141, "yearOneCapRatePercentage": 11.563709985914752, "yearOneReturnOnInvestmentPercentage": 63.78402823049849, "yearOnePrincipalPaydownUSD": 85635.31658640636, "yearOneAppreciationUSD": 12000, "totalCashInvestment": 100252, "ltrPerMonthUSD": 1500, "ltrMonthlyExpensesPercentage": 10 } }

POST/v1/external/analysis/create/cohost

Create Cohost Analysis

Create a co-hosting analysis for an owner lead or operator workflow. Return projected STR revenue, co-host commission, host return, and comparable listings.

Location Parameters (Conditional)

Either provide both lat AND lng, OR provide fullAddress. At least one method is required.

latnumberconditional

Latitude coordinate (must be provided with lng if fullAddress is not used)(e.g., 27.7676)

lngnumberconditional

Longitude coordinate (must be provided with lat if fullAddress is not used)(e.g., -82.6403)

fullAddressstringconditional

Complete property address (can be used instead of lat/lng coordinates)(e.g., 4935 2nd Avenue North, St. Petersburg, FL 33703)

Required Parameters

bedroomsnumberrequired

Number of bedrooms(e.g., 3)

bathroomsnumberrequired

Number of bathrooms(e.g., 2)

accomodatesnumberrequired

Number of guests the property can accommodate(e.g., 6)

Optional Parameters

cohostCommissionPercentagenumberoptional

Cohost commission percentage(e.g., 10)

squareFeetnumberoptional

Property square footage(e.g., 1500)

statestringoptional

State name(e.g., Florida)

citystringoptional

City name(e.g., St. Petersburg)

countystringoptional

County name(e.g., Pinellas County)

postalCodestringoptional

Postal/ZIP code(e.g., 33703)

countrystringoptional

Country name(e.g., United States)

streetstringoptional

Street name(e.g., 2nd Avenue North)

streetNumberstringoptional

Street number(e.g., 4935)

unitstringoptional

Unit/apartment number if applicable

Example Request

curl -X POST \ https://atlas.bnbcalc.com/v1/external/analysis/create/cohost \ -H "x-bnbcalc-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lat": 27.7676, "lng": -82.6403, "bedrooms": 3, "bathrooms": 2, "accomodates": 6 }'

Example Response

{ "success": true, "data": { "_id": "000000000000000000000000", "url": "https://www.bnbcalc.com/analysis/example-property/000000000000000000000000", "currency": "USD", "ratePerNightUSD": 364.73770491803276, "occupancyRatePercentage": 48, "bedrooms": 4, "bathrooms": 4, "commonSpaces": 1, "accomodates": 12, "fullAddress": "4935 2nd Avenue North, St. Petersburg, FL 33703", "location": { "type": "Point", "coordinates": [ -82.6403, 27.7676 ] }, "revenue": { "p25": 48210, "p50": 58440, "p75": 63944.76398163934, "p90": 74280, "avg": 60310 }, "adr": { "p25": 214, "p50": 288, "p75": 364.73770491803276, "p90": 431, "avg": 318 }, "occupancy": { "p25": 0.38, "p50": 0.44, "p75": 0.48, "p90": 0.56, "avg": 0.46 }, "quartiles": { "25th_percentile": { "average_daily_rate": 214, "occupancy_rate": 38, "revenue": 48210 }, "50th_percentile": { "average_daily_rate": 288, "occupancy_rate": 44, "revenue": 58440 }, "75th_percentile": { "average_daily_rate": 364.73770491803276, "occupancy_rate": 48, "revenue": 63944.76398163934 }, "90th_percentile": { "average_daily_rate": 431, "occupancy_rate": 56, "revenue": 74280 } }, "comparables": [ { "airbnbId": "12345678", "name": "Modern 4BR near downtown", "listingUrl": "https://www.airbnb.com/rooms/12345678", "bedrooms": 4, "bathrooms": 3, "accommodates": 10, "annualRevenueUSD": 68420, "occupancyRatePercentage": 52, "averageDailyRateUSD": 361, "distanceMiles": 0.4 } ], "yearOneRevenueUSD": 161193.91172942825, "yearOneCohostReturnUSD": 116059.61644518835, "yearOneCohostCommissionUSD": 32238.78234588565 } }

Error Codes

The BNBCalc API uses standard HTTP response status codes to indicate the success or failure of API requests. Successfully created reports return 2xx codes, while errors return 4xx or 5xx codes with additional error information in the response body. You will only be charged for successfully created reports.

200

Success


400

Bad Request - Invalid parameters


401

Unauthorized - Invalid API key


429

Too Many Requests - External API route limit exceeded


500

Internal Server Error