Location Custom Field
Create location fields to store geographic coordinates for records
Location custom fields store geographic coordinates (latitude and longitude) for records. They support precise coordinate storage, geospatial queries, and efficient location-based filtering.
Basic Example
Create a simple location field:
mutation CreateLocationField {
createCustomField(input: {
name: "Meeting Location"
type: LOCATION
projectId: "proj_123"
}) {
id
name
type
}
}Advanced Example
Create a location field with description:
mutation CreateDetailedLocationField {
createCustomField(input: {
name: "Office Location"
type: LOCATION
projectId: "proj_123"
description: "Primary office location coordinates"
}) {
id
name
type
description
}
}Input Parameters
CreateCustomFieldInput
| Parameter | Type | Required | Description |
|---|---|---|---|
name | String! | ✅ Yes | Display name of the location field |
type | CustomFieldType! | ✅ Yes | Must be LOCATION |
description | String | No | Help text shown to users |
Setting Location Values
Location fields store latitude and longitude coordinates:
mutation SetLocationValue {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
latitude: 40.7128
longitude: -74.0060
})
}SetTodoCustomFieldInput Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
todoId | String! | ✅ Yes | ID of the record to update |
customFieldId | String! | ✅ Yes | ID of the location custom field |
latitude | Float | No | Latitude coordinate (-90 to 90) |
longitude | Float | No | Longitude coordinate (-180 to 180) |
Note: While both parameters are optional in the schema, both coordinates are required for a valid location. If only one is provided, the location will be invalid.
Coordinate Validation
Valid Ranges
| Coordinate | Range | Description |
|---|---|---|
| Latitude | -90 to 90 | North/South position |
| Longitude | -180 to 180 | East/West position |
Example Coordinates
| Location | Latitude | Longitude |
|---|---|---|
| New York City | 40.7128 | -74.0060 |
| London | 51.5074 | -0.1278 |
| Sydney | -33.8688 | 151.2093 |
| Tokyo | 35.6762 | 139.6503 |
| São Paulo | -23.5505 | -46.6333 |
Creating Records with Location Values
When creating a new record with location data:
mutation CreateRecordWithLocation {
createTodo(input: {
title: "Site Visit"
todoListId: "list_123"
customFields: [{
customFieldId: "location_field_id"
value: "40.7128,-74.0060" # Format: "latitude,longitude"
}]
}) {
id
title
customFields {
id
customField {
name
type
}
latitude
longitude
}
}
}Input Format for Creation
When creating records, location values use comma-separated format:
| Format | Example | Description |
|---|---|---|
"latitude,longitude" | "40.7128,-74.0060" | Standard coordinate format |
"51.5074,-0.1278" | London coordinates | No spaces around comma |
"-33.8688,151.2093" | Sydney coordinates | Negative values allowed |
Response Fields
TodoCustomField Response
| Field | Type | Description |
|---|---|---|
id | String! | Unique identifier for the field value |
customField | CustomField! | The custom field definition |
latitude | Float | Latitude coordinate |
longitude | Float | Longitude coordinate |
todo | Todo! | The record this value belongs to |
createdAt | DateTime! | When the value was created |
updatedAt | DateTime! | When the value was last modified |
Important Limitations
No Built-in Geocoding
Location fields store only coordinates - they do not include:
- Address-to-coordinates conversion
- Reverse geocoding (coordinates-to-address)
- Address validation or search
- Integration with mapping services
- Place name lookup
External Services Required
For address functionality, you’ll need to integrate external services:
- Google Maps API for geocoding
- OpenStreetMap Nominatim for free geocoding
- MapBox for mapping and geocoding
- Here API for location services
Example Integration
// Client-side geocoding example (not part of Blue API)
async function geocodeAddress(address) {
const response = await fetch(
`https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${API_KEY}`
);
const data = await response.json();
if (data.results.length > 0) {
const { lat, lng } = data.results[0].geometry.location;
// Now set the location field in Blue
await setTodoCustomField({
todoId: "todo_123",
customFieldId: "location_field_456",
latitude: lat,
longitude: lng
});
}
}Required Permissions
| Action | Required Role |
|---|---|
| Create location field | OWNER, ADMIN, or MEMBER in the project |
| Update location field | OWNER, ADMIN, or MEMBER in the project |
| Set location value | OWNER, ADMIN, MEMBER, or CLIENT with edit permissions on the record |
| View location value | Any project member with read access to the record |
Error Responses
Invalid Coordinates
{
"errors": [{
"message": "Invalid coordinates: latitude must be between -90 and 90",
"extensions": {
"code": "CUSTOM_FIELD_VALUE_PARSE_ERROR"
}
}]
}Invalid Longitude
{
"errors": [{
"message": "Invalid coordinates: longitude must be between -180 and 180",
"extensions": {
"code": "CUSTOM_FIELD_VALUE_PARSE_ERROR"
}
}]
}Best Practices
Data Collection
- Use GPS coordinates for precise locations
- Validate coordinates before storing
- Consider coordinate precision needs (6 decimal places ≈ 10cm accuracy)
- Store coordinates in decimal degrees (not degrees/minutes/seconds)
User Experience
- Provide map interfaces for coordinate selection
- Show location previews when displaying coordinates
- Validate coordinates client-side before API calls
- Consider timezone implications for location data
Performance
- Use spatial indexes for efficient queries
- Limit coordinate precision to needed accuracy
- Consider caching for frequently accessed locations
- Batch location updates when possible
Common Use Cases
Field Operations
- Equipment locations
- Service call addresses
- Inspection sites
- Delivery locations
Event Management
- Event venues
- Meeting locations
- Conference sites
- Workshop locations
Asset Tracking
- Equipment positions
- Facility locations
- Vehicle tracking
- Inventory locations
Geographic Analysis
- Service coverage areas
- Customer distribution
- Market analysis
- Territory management
Integration Features
With Lookups
- Reference location data from other records
- Find records by geographic proximity
- Aggregate location-based data
- Cross-reference coordinates
With Automations
- Trigger actions based on location changes
- Create geofenced notifications
- Update related records when locations change
- Generate location-based reports
With Formulas
- Calculate distances between locations
- Determine geographic centers
- Analyze location patterns
- Create location-based metrics
Limitations
- No built-in geocoding or address conversion
- No mapping interface provided
- Requires external services for address functionality
- Limited to coordinate storage only
- No automatic location validation beyond range checking
Related Resources
- Custom Fields Overview - General concepts
- Google Maps API - Geocoding services
- OpenStreetMap Nominatim - Free geocoding
- MapBox API - Mapping and geocoding services