PFS Localities API¶
Complete API reference for querying Medicare Physician Fee Schedule (MPFS) Localities and Geographic Practice Cost Indices (GPCI).
Overview¶
The PFS Localities API provides access to geographic adjustment factors used in the Medicare Physician Fee Schedule. Medicare payments are adjusted geographically using three GPCI values to reflect the varying costs of providing services in different areas.
Base Path: /api/v1/pfs-localities
Authentication: Required for all endpoints (Bearer token or API Key)
Key Concepts¶
GPCI Values¶
Payments are adjusted using three Geographic Practice Cost Indices:
- Work GPCI (gpci_work): Adjusts for the relative cost of physician work in an area.
- Practice Expense GPCI (gpci_pe): Adjusts for the cost of maintaining a practice (rent, staff, supplies).
- Malpractice GPCI (gpci_mp): Adjusts for the cost of professional liability insurance.
MACs and Localities¶
- MAC (Medicare Administrative Contractor): Private insurers that process Medicare claims for a specific jurisdiction.
- Locality: A specific geographic area within a MAC's jurisdiction, identified by a unique code.
Endpoints¶
Search Localities¶
Search and filter locality records with pagination.
Endpoint: GET /pfs-localities/search
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
year |
integer | No | Filter by year (e.g., 2025) |
locality |
string | No | Filter by locality code (partial match) |
mac |
string | No | Filter by MAC code |
search |
string | No | Text search in locality or MAC descriptions |
effective_date |
integer | No | Filter records active on date (YYYYMMDD) |
skip |
integer | No | Number of records to skip (default: 0) |
limit |
integer | No | Maximum records to return (default: 50) |
Response:
{
"data": [
{
"id": 101,
"year": 2025,
"locality": "0111205",
"loc_description": "SAN FRANCISCO, CA",
"mac": "01112",
"mac_description": "NORTHERN CALIFORNIA",
"gpci_work": 1.082,
"gpci_pe": 1.254,
"gpci_mp": 0.567,
"start_date": 20250101,
"end_date": 20251231
}
],
"count": 89
}
Example Request:
curl -H "Authorization: YOUR_API_KEY" \
"https://api.example.com/api/v1/pfs-localities/search?year=2025&search=California"
Lookup GPCI by Locality¶
Retrieve GPCI values for a specific locality and year. This is the primary endpoint for pricing calculations.
Endpoint: GET /pfs-localities/lookup/by-locality
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
locality |
string | Yes | Locality code (e.g., "0111205") |
year |
integer | Yes | Year (e.g., 2025) |
effective_date |
integer | No | Specific date for temporal lookup (YYYYMMDD) |
Response:
{
"id": 101,
"year": 2025,
"locality": "0111205",
"loc_description": "SAN FRANCISCO, CA",
"mac": "01112",
"mac_description": "NORTHERN CALIFORNIA",
"gpci_work": 1.082,
"gpci_pe": 1.254,
"gpci_mp": 0.567,
"start_date": 20250101,
"end_date": 20251231
}
Example Request:
curl -H "Authorization: YOUR_API_KEY" \
"https://api.example.com/api/v1/pfs-localities/lookup/by-locality?locality=0111205&year=2025"
Use Case: Calculate the geographically adjusted payment for a procedure: $$ \text{Payment} = [(\text{Work RVU} \times \text{Work GPCI}) + (\text{PE RVU} \times \text{PE GPCI}) + (\text{MP RVU} \times \text{MP GPCI})] \times \text{Conversion Factor} $$
Get Available Years¶
Get a list of all years available in the database.
Endpoint: GET /pfs-localities/lookup/years
Response:
Get Available MACs¶
Get a list of Medicare Administrative Contractors, optionally filtered by year.
Endpoint: GET /pfs-localities/lookup/macs
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
year |
integer | No | Filter by year |
Response:
{
"macs": [
{
"mac": "01112",
"mac_description": "NORTHERN CALIFORNIA"
},
{
"mac": "01182",
"mac_description": "SOUTHERN CALIFORNIA"
}
]
}
Get Available Localities¶
Get a list of locality codes and descriptions, optionally filtered by year and MAC.
Endpoint: GET /pfs-localities/lookup/localities
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
year |
integer | No | Filter by year |
mac |
string | No | Filter by MAC code |
Response:
{
"localities": [
{
"locality": "0111205",
"loc_description": "SAN FRANCISCO, CA",
"mac": "01112"
},
{
"locality": "0111206",
"loc_description": "SAN MATEO, CA",
"mac": "01112"
}
]
}
Get Locality by ID¶
Retrieve a single locality record by its database ID.
Endpoint: GET /pfs-localities/{locality_id}
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
locality_id |
integer | Yes | Unique record ID |
Get Summary Statistics¶
Get aggregate statistics about the localities database.
Endpoint: GET /pfs-localities/stats/summary
Response:
{
"total_records": 890,
"unique_localities": 112,
"unique_macs": 15,
"years": [2025, 2024],
"records_by_year": [
{ "year": 2025, "count": 445 },
{ "year": 2024, "count": 445 }
]
}
Common Patterns¶
Pricing Calculation Example¶
To calculate the allowable amount for a CPT code in a specific location:
- Get RVUs: Retrieve Relative Value Units (Work, PE, MP) for the CPT code from the Fee Schedule API.
- Get GPCIs: Retrieve GPCI values (Work, PE, MP) for the location using
lookup/by-locality. - Get Conversion Factor: Use the annual Conversion Factor (CF).
- Calculate: Apply the formula:
def calculate_price(rvus, gpcis, conversion_factor):
adjusted_work = rvus['work'] * gpcis['gpci_work']
adjusted_pe = rvus['pe'] * gpcis['gpci_pe']
adjusted_mp = rvus['mp'] * gpcis['gpci_mp']
total_rvu = adjusted_work + adjusted_pe + adjusted_mp
return total_rvu * conversion_factor
Finding the Correct Locality¶
If you only have a ZIP code, you first need to map the ZIP code to a locality code. (See the ZIP9 Data API for ZIP-to-Locality mapping).
Error Handling¶
| Status Code | Description |
|---|---|
| 200 | Success |
| 404 | Locality not found |
| 401 | Unauthorized |
| 500 | Server error |