Skip to main content
LOC
Step-by-Step Setup 10-15 minutes

Location CRUD Setup

Location & Config Intermediate
Need more detail? Read the full guide for config deep-dives and best practices.

Location CRUD Setup

Create, read, update, delete, and search sub-account locations in GoHighLevel. Locations are the core organizational unit in GHL, representing individual businesses or clients. This quick-start walks you through the full location lifecycle via the API.

Prerequisites

Before making your first Location CRUD call, confirm you have:

  • A GoHighLevel agency account (location management requires agency-level access)
  • Access to Settings > Integrations > Private Integrations at the agency level
  • A REST client such as Postman, Insomnia, or curl in your terminal
  • Your agency’s companyId (found in Settings > Company)
  • Understanding that creating locations may consume seats on your GHL plan

Location CRUD operations are agency-level. You cannot create or delete locations from within a sub-account. You need an Agency PIT, not a sub-account PIT.

Set Up Authentication

All Location CRUD endpoints require a Private Integration Token (PIT) with the locations scope, created at the agency level.

Navigate to your agency dashboard, then Settings > Integrations > Private Integrations. Click Create New Integration, name it “Location Manager,” and enable the locations scope. Click Save and copy the generated token.

Pass this token in the Authorization header as a Bearer token. Set your base URL to https://services.leadconnectorhq.com. Include Content-Type: application/json and the Version: 2021-07-28 header.

Make Your First Call

Start by creating a new location. Send a POST request to /locations:

POST /locations
Authorization: Bearer {your-agency-pit-token}
Content-Type: application/json

{
  "companyId": "your-company-id",
  "name": "Acme Plumbing",
  "address": "123 Main St",
  "city": "Austin",
  "state": "TX",
  "postalCode": "78701",
  "country": "US",
  "phone": "+15551234567",
  "email": "[email protected]",
  "timezone": "America/Chicago"
}

Key fields: companyId and name are required. Include address, city, state, postalCode, and country for complete business profiles. The timezone field accepts IANA identifiers (use the Timezone Handler endpoint to list valid options).

To read, use GET /locations/{id}. To update, use PUT /locations/{id}. To delete, use DELETE /locations/{id}. To search, use GET /locations/search?companyId={id}&query=acme.

Handle the Response

A successful POST returns a 200 status with the full location object:

{
  "location": {
    "id": "loc-456",
    "companyId": "your-company-id",
    "name": "Acme Plumbing",
    "address": "123 Main St",
    "city": "Austin",
    "state": "TX",
    "timezone": "America/Chicago",
    "dateAdded": "2026-03-07T12:00:00Z"
  }
}

Save the location.id. This is the locationId used across all sub-account level endpoints in every other GHL API module. Common errors: 400 means required fields are missing. 401 means your token is invalid or not agency-level. 403 means your plan has reached its location limit.

Test Your Setup

Run through this checklist to confirm everything works:

  1. Create a test location with POST /locations and save the returned id
  2. Read it with GET /locations/{id} and verify all fields
  3. Update the name with PUT /locations/{id}
  4. Search for it with GET /locations/search?query=test and confirm it appears
  5. Delete the test location with DELETE /locations/{id} when finished

If creation fails with 403, check your GHL plan’s location limit. If search returns empty, verify the companyId matches your agency and allow a moment for indexing.

Next Steps

Read the full Location CRUD Guide for bulk provisioning, snapshot deployment, and multi-location management patterns. From here, explore Location Tags for organizing locations and Location Custom Fields for extending location data models.

Stay sharp. New guides and playbooks as they drop.