Location Scores
For use cases, coverage and pricing, see the Location Scores product overview.
Description
Our Location Scores assess the quality of transportation, amenities, character, education, nature, and wellness characteristics of locations, broken up into 18 scores on a scale of 0 to 5, which are doubled to display scores out of 10 in our SDK products.
Our Location Scores can be queried for specific locations, listing, and addresses, using latitude and longitude, or for specific
Local Logic geographies using unique geog_ids. Location Scores are available for neighborhoods (levels 10, 20), cities (level 30), zip and postal codes (level 32), US county divisions (level 35), US/Canadian counties and county equivalents (level 37), regions (level 38), and metropolitan statistical areas (level 40). The Location Scores at the level of geographies & neighborhoods represent the best estimates for the median household value for each score.
Score Types
Local Logic provides the following Location Scores, which can be accessed via the /v3/scores
endpoint documented below.
This PDF describes what the values of 0-10 mean for their respective scores.
Not all Location Scores are available in all locations.
When scores are missing from the response, it means that Local Logic has insufficient information about the location to be able to provide those scores.
Transportation
| Location Score | ScoreName | Description |
|---|---|---|
| Pedestrian friendly | pedestrian_friendly | Represents how many stores and institutions are nearby and how pleasant it is to walk to them. |
| Cycling friendly | cycling_friendly | Represents how suitable the area is for cycling in terms of nearby bicycle infrastructure and calm streets, as well as the number of destinations that can be reached by bicycle. |
| Transit friendly | transit_friendly | Represents the frequency and level of service of public transit. |
| Car friendly | car_friendly | Represents how well traffic flows, and how easy it is to park. |
Amenities
| Location Score | ScoreName | Description |
|---|---|---|
| Groceries | groceries | Distance to closest grocery store and quantity of grocery stores nearby. |
| Shopping | shopping | Quantity and diversity of shops nearby. |
| Cafés | cafes | Quantity and diversity of cafés nearby. |
| Restaurants | restaurants | Quantity and diversity of restaurants nearby. |
| Nightlife | nightlife | Quantity and diversity of bars nearby. |
Education
| Location Score | ScoreName | Description |
|---|---|---|
| High Schools | high_schools | Distance to closest high school. |
| Primary Schools | primary_schools | Distance to closest elementary school. |
| Daycares | daycares | Distance to closest daycare school. |
Character
| Location Score | ScoreName | Description |
|---|---|---|
| Quiet | quiet | Level of noise nearby. |
| Historic | historic | Presence of heritage buildings and building age in the area. Note: Historic coverage is currently available in two American cities and a Canadian city. |
| Vibrant | vibrant | Level of street activity nearby. |
Nature
| Location Score | ScoreName | Description |
|---|---|---|
| Parks | parks | Quantity and area of parks nearby. |
| Greenery | greenery | Quantity of nearby green spaces and tree canopy coverage. Note: Greenery coverage is currently available in 8 American cities and two Canadian cities. |
Wellness
| Location Score | ScoreName | Description |
|---|---|---|
| Wellness | wellness | Represents the quantity of amenities within walking distance that cater to physical activity and healthy eating. |
GET /v3/scores
Location Scores for a specific coordinate point location and neighbourhood, macro neighbourhood, and municipality which contains it, can be retrieved using a latitude/longitude request.
Scores for the latitude/longitude point location are returned as a score out of 5, with a precision
to the nearest .5. Scores for the neighbourhood, macro neighbourhood, and municipality geography
scores are also returned as a score out of 5, but with a precision to the nearest .1.
GET /v3/scores
Header
This API uses JWT token based authentication. This JWT Bearer token is what is used to populate the
Authorization header below.
Instructions on how to retrieve this token can be found at Getting Started.
| Header | Status | Description |
|---|---|---|
| Authorization | required | Your bearer token retrieved from our authorization API, ex. Bearer eyJhbGci... |
| Accept | required | The datatype to request, this API will return application/json. |
QueryString
The endpoint is queried by specifying a lat/lng coordinate for obtaining scores at an exact location.
| Parameter | Status | Description |
|---|---|---|
| lat | optional | A decimal number between -90 and 90, representing the latitude. |
| lng | optional | A decimal number between -180 and 180, representing the longitude. |
| geography_ids | optional* | A comma separated list of geography ids, ex. g30_dpz89rm7 or g30_dpz89rm7,g10_dpz89rm7. If this parameter is provided, the lat and lng parameters are optional. A maximum of 100 values are allowed. |
| geography_levels | optional | A list of geography levels to include, ex. 10,30. If no geography levels are provided, no geography scores will be returned. Available: Neighbourhood: 10Macro-Neighbourhood or Borough: 20Municipality: 30Zip Code: 32US County Subdivision: 35US County / Canadian County Equivalent (Census Division): 37Region: 38US Metro Area: 40 |
| include | optional | A list ScoreNames to return, ex. car_friendly,pedestrian_friendly. If no names are provided, all scores included in your agreement will be returned. |
| language | optional | String value representing the two letter ISO 639-1 language code to return the scores in, ex. fr Available: en and fr |
| location_scores_rounding | optional | The type of rounding to apply to the scores returned under data.location. Either .5 (default) to round at the nearest 0.5, or none, to disable rounding. |
Usage examples
- NodeJS
- Python
require('node-fetch')('https://api.locallogic.co/v3/scores?' + new URLSearchParams({
lat: 41.847206,
lng: -87.668825,
geography_ids: 'g30_f25dv0me',
geography_levels: '10,20,30',
include: 'transit_friendly,quiet',
language: 'en',
}), {
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: 'Bearer eyJhbGciOiJ...'
}
})
.then(response => response.json())
.then(body => {
console.log(body)
})
.catch(error => {
console.log(error)
})
import requests
response = requests.get(
"https://api.locallogic.co/v3/scores",
headers={
"Accept": "application/json",
"Authorization": "Bearer eyJhbGciOiJ..."},
params={
"lat": 43.593611,
"lng": -79.536194,
"geography_ids": "g30_f25dv0me",
"geography_levels": "10,20,30",
"include": "transit_friendly,quiet",
"language": "en",
}
)
print(response.json())
Response example
{
"data": {
"type": "scores",
"location": {
"transit_friendly": {
"value": "4.5",
"text": "Within walking distance of a subway and frequent bus lines"
},
"quiet": { "value": "1.0", "text": "Many sources of noise nearby" }
},
"geographies": [
{
"geog_id": "g30_f25dv0me",
"name": "Westmount",
"geog_level_type": "municipality",
"scores": {
"transit_friendly": {
"value": "4.5",
"text": "Within walking distance of a subway and frequent bus lines"
},
"quiet": {
"value": "2.7",
"text": "Multiple sources of noise nearby"
}
}
},
// Plus other geography score objects
]
},
"meta": {
"message": "Successfully called v3/scores API.",
"type": "LocalLogic.API.Success",
"statusCode": 200
}
}
GET /v3/scores/{geog_id}
Location Scores for a specific geography (a neighbourhood, macro neighbourhood, municipality, postal code, county, etc.) can be retrieved with this endpoint. The scores represent the Location Score of the median household inhabiting the area: half of households will have a lower score and half of housesholds will have a higher score.
Scores for the geography are returned as precise as possible and are not rounded.
GET /v3/scores/{geog_id}
Header
This API uses JWT token based authentication. This JWT Bearer token is what is used to populate the
Authorization header below.
Instructions on how to retrieve this token can be found at Getting Started.
| Header | Status | Description |
|---|---|---|
| Authorization | required | Your bearer token retrieved from our authorization API, ex. Bearer eyJhbGci... |
| Accept | required | The datatype to request, this API will return application/json. |
QueryString
| Parameter | Status | Description |
|---|---|---|
| include | optional | A list ScoreNames to return, ex. car_friendly,pedestrian_friendly. If no names are provided, all scores included in your agreement will be returned. |
| language | optional | String value representing the two letter ISO 639-1 language code to return the scores in, ex. fr Available: en and fr |
Usage examples
- NodeJS
- Python
require('node-fetch')('https://api.locallogic.co/v3/scores/g37_9zh9deu6',
{
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: 'Bearer eyJhbGciOiJ...'
}
})
.then(response => response.json())
.then(body => {
console.log(body)
})
.catch(error => {
console.log(error)
})
import requests
response = requests.get(
"https://api.locallogic.co/v3/scores/g37_9zh9deu6",
headers={
"Accept": "application/json",
"Authorization": "Bearer eyJhbGciOiJ..."},
params={
"categories": 'hospitals'
}
)
print(response.json())
Response example
{
"data": {
"type": "scores",
"scores": {
"pedestrian_friendly": {
"value": "3.389361",
"text": "Most day-to-day needs are within walking distance"
},
"vibrant": {
"value": "2.271424",
"text": "Vibrant atmosphere at various times of the day"
},
"nightlife": {
"value": "2.51681",
"text": "Variety of bars within a short drive"
},
"high_schools": {
"value": "2.95529",
"text": "At least one high school within a 20-minute walk"
},
"daycares": {
"value": "2.955288",
"text": "At least one daycare within a short drive"
},
"cycling_friendly": {
"value": "2.525079",
"text": "Somewhat suitable for bicycle commuting and/or recreational cycling"
},
"transit_friendly": {
"value": "2.600652",
"text": "Transit is available for most trips"
},
"parks": {
"value": "3.613697",
"text": "Large amount of park space nearby"
},
"primary_schools": {
"value": "3.75381",
"text": "At least one elementary school within a 15-minute walk"
},
"car_friendly": {
"value": "4.144336",
"text": "Excellent access to freeways and/or major arteries, with a very low chance of parking problems"
},
"cafes": {
"value": "1.23387",
"text": "Some cafés within a short drive"
},
"wellness": {
"value": "2.769637",
"text": "Some amenities promoting health and activity within walking distance"
},
"restaurants": {
"value": "2.332912",
"text": "Variety of restaurants within a short drive"
},
"quiet": {
"value": "2.245218",
"text": "Some sources of noise nearby"
},
"groceries": {
"value": "2.226187",
"text": "Variety of groceries within a short drive"
},
"shopping": {
"value": "2.359544",
"text": "Variety of shops within a short drive"
}
}
},
"meta": {
"message": "Successfully called v3/scores/{geog_id} API.",
"type": "LocalLogic.API.Success",
"statusCode": 200
}
}
How this is calculated
What they measure — and what they don't. Location Scores rate the area around a specific point — how close and frequent transit is, the quantity and variety of nearby groceries, and so on. In principle, nearer and more frequent amenities count for more. They don't measure property-specific attributes (price, size, condition), and a school score reflects access to schools rather than school quality, which is a separate ratings layer.
Coverage. Address-level and geography-level across the US and Canada. A small number of scores have narrower coverage and are actively expanding.
Updated. Monthly; POI-based scores are updated as we update points of interest, in addition to periodic updates based on infrastructure data (street networks, transit lines, etc).
Frequently asked questions
What are Local Logic Location Scores?
Location Scores are 18 human-readable ratings that describe what it's like to live at a specific location — from how walkable and transit-friendly it is, to nearby groceries, cafés and schools, to how quiet, historic, or vibrant the area feels. Each is presented on a 0–10 scale and comes with a plain-language description, so scores can be shown directly to end users without further interpretation.
How are the 18 Location Scores organized?
The 18 scores are grouped into six categories:
- Transportation - pedestrian friendly, cycling friendly, transit friendly, car friendly
- Amenities - groceries, shopping, cafés, restaurants, nightlife
- Education - high schools, primary schools, daycares
- Character - quiet, historic, vibrant
- Nature - parks, greenery
- Wellness - wellness
How are Location Scores calculated?
Each score is computed at the address level from the features around that location. In principle, nearer and more frequent amenities count for more — a grocery store around the corner contributes more to the Groceries score than one across town.
Why are scores 0–5 in the API but shown out of 10?
The API returns each Location Score on a 0–5 scale. Local Logic's SDK and Neighborhood Reports double this to a 0–10 scale for display, because a 0–10 range is easier for end users to read and rank at a glance. Both represent the same underlying score — 0–5 is the raw API value, 0–10 is the presentation.
At which geography levels are scores available?
Location Scores can be retrieved for an exact latitude/longitude point or for a Local Logic geography by ID. Supported geography levels are neighborhood (10), macro-neighborhood/borough (20), municipality (30), zip or postal code (32), US county subdivision (35), US/Canadian county or equivalent (37), region (38), and US metro area (40). At the geography level, a score represents the experience of the median household in that area.
What happens when there's no score for a location?
When Local Logic has insufficient information for a location, the missing scores are simply omitted from the response, and a request for a location with no data returns a 204 No Content (recognized location, nothing to score) or 404 Not Found. A 204/404 therefore means "no data here," not an error in your request.
How do school scores work?
Local Logic's school-related Location Scores — primary schools, high schools, and daycares — are based on access and proximity: how close the nearest school of that type is. School quality ratings (letter grades) are a separate layer, available via Schools API — currently in the United States, and in Ontario and British Columbia in Canada.
Are score descriptions available in French?
A Location Score itself is a number, so it isn't language-specific. The language parameter sets the language of the plain-language description text that accompanies each score, available in English (en) and French (fr).
SDK Implementations
Scores is used by multiple SDKs:
| SDK | Description |
|---|---|
| Local Content SDK | Retrieves the scores for a given location for use in the grouped POI categories within the SDK. |
| NeighborhoodHighlights SDK | Retrieves the scores for the neighborhood in order to calculate the highlights (top scores) of the neighborhood. |
| NeighborhoodCharacteristics SDK | Retrieves all of the relevant scores available for the given neighborhood. |
Response codes
When calling Local Logic’s API, you may receive an HTTP response code indicating an error or no data. These errors are explained below.
In general, error codes starting with “4” are due to an invalid API call and can be fixed on your end, whereas error codes starting with “5” are due to server errors (that is, problems on our end). If you receive something not described here, please contact us at support@locallogic.co.
204 - No Content
This "error code" is not an error, and it happens when we don't have the requested data for a specific location. For example, if you send a lat/lng pair to fetch scores in uninhabited parts of northern Canada, we may return an empty 204 response as we recognize the location, but don't calculate scores that remotely so there is nothing to be returned.
400 - BadRequest
This error code happens when the request inputs are incorrect. Use the detail field of the response for clarification. Example:
{
"code": "LocalLogic.API.BadRequest",
"detail": "ValidationErrors: AroundEndpoint is invalid:\n\tinclude is invalid: \"bad_input\" is not an acceptable value: \"groceries\", \"restaurants\", \"nightlife\", \"cafes\", \"shopping\", \"daycares\", \"primary_schools\", \"high_schools\""
}
401 - Unauthorized
This error code happens when your API key cannot access specific resources or locations. For example, some API keys can only access certain countries / states / provinces. Feel free to contact us for more information.
{
"code": "LocalLogic.API.Unauthorized",
"detail": "Your API KEY doesn't support this region"
}
403 - Forbidden
This error code happens when you forgot to include security credentials with your request or you are requesting a parameter that you do not have access to.
{
"message": "Forbidden"
}
404 - NotFound
This error code happens when we don’t have data for the requested location. For example, if you send a lat/lng pair for a location in Antarctica, we will return this error as we don’t have data for Antarctica (yet!).
{
"code": "LocalLogic.API.NotFound",
"detail": "No Location Scores found for this location."
}
422 - Unprocessable Entity
This error code is returned when the correct parameters have been sent however, the data they contain is not valid. For example, if you send a lat/lng pair and the latitude is invalid (ie. not in the range [-90, 90]) and/or the longitude is invalid (ie. not in the range [-180, 180]). The message returned will explain the specific issue with your parameters that makes them invalid.
{
"message": "Latitude must be within [-90, 90], Longitude must be within [-180, 180], Requires at least lat/lng pair, or geography_ids. None supplied.",
"code": "LocalLogic.API.BadRequest",
"statusCode": 422
}
429 - Too Many Requests
This error code can be returned when you need to throttle your requests. Internally, we set limits that exceed all contractual limitations that could cause this error code to be returned. If you have questions or see this error, please contact us at support@locallogic.co.
500 - ServerError
This error code means that an error occurred on our end. Feel free to retry the same request to see if the problem persists. If you received a lot of these errors, please contact us at support@locallogic.co.
{
"message": "Unexpected internal server error.",
"type": "LocalLogic.API.ServerError",
"statusCode": 500
}
502 - BadGateway
This error code means that an error came from our cloud provider. Feel free to retry the same request to see if the problem persists.
{
"message": "Internal server error"
}