CVS API endpoint
Returns nearby CVS store locations for a ZIP code, a free-text address/city/state, or a latitude/longitude pair: address, phone, fax, distance, and retail store hours, plus a has_pharmacy existence flag and a list of general service indicators (e.g. photo, ATM, same-day delivery). Covers general store info only -- this does not return pharmacy hours, pharmacy phone, prescription data, or any patient-specific information. zip is a 5-digit US ZIP code; alternatively supply address (a free-text location such as a city, state, or street address) or latitude and longitude together. When more than one is supplied, zip wins, then address, then latitude/longitude. Optionally narrow results to stores carrying one specific service via the service param (the same code vocabulary the response's services field uses); only one service value is accepted per request. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.
/cvs/store-locatorzip is a 5-digit US ZIP code. Alternatively, supply address (a free-text location — a city, state, or street address, e.g. "Beverly Hills, CA" or "14092 Lewiston, New York" — matching the site's own store-locator search box, whose own placeholder reads "Search by ZIP code, city, or state") or latitude/longitude together. At least one of the three search modes is required; when more than one is supplied, zip wins, then address, then latitude/longitude.
HH_HealthHub_Ind, MC_MinuteClinic_Ind, HS_OakStreetHealth_Ind, IM_Immunization_Ind, RX_OTCH_Ind, IM_Covax_Ind, CL_CovidTest_Ind, RX_24Hours_Ind, RX_DriveThru_Ind, RX_Pharmacy_Ind, RX_DrugDisposal_Ind, RS_24Hours_Ind, PH_Photo_Ind, RS_AcceptsWic_Ind, RS_AcceptsSnap_Ind, GN_UPSAccessPoint_Ind, RS_BOPIS_Ind, GN_YMas_Ind, BT_BeautyIRL_Ind, GN_SmileDirectClub_Ind
Notable response behavior:
store_hours is the retail (front-of-store) weekly schedule only.has_pharmacy is a plain existence flag (does this location have a pharmacy counter) — no pharmacy hours, pharmacy phone, or prescription data is returned.services is the raw list of upstream service-indicator codes for the store (e.g. PH_Photo_Ind, atmInd, RS_BOPIS_Ind, RS_SameDayDelivery_Ind), passed through as-is rather than translated to friendly names.503 upstream error rather than an empty or wrong result.zip, address, and latitude/longitude, an invalid ZIP, or a service value outside the allowed list returns a 400 invalid-parameter error before any upstream request is made. An address that doesn't resolve to a real location returns a 404 not-found error rather than a false empty result.| Field | Filled in, of 25 checked | Values in the sample |
|---|---|---|
| store_id | 25 | |
| address_line1 | 25 | |
| city | 25 | LOS ANGELES (17), WEST HOLLYWOOD (2), HOLLYWOOD (2) and 3 more |
| state | 25 | CA in all 25 |
| zip | 25 | |
| phone | 22 | 3,102,099,141 to 8,189,801,502, median 3,234,637,900 |
| fax | 25 | 3,102,736,289 to 8,189,804,904, median 3,232,823,344 |
| latitude | 25 | |
| longitude | 25 | |
| distance_miles | 25 | 1.12 to 5, median 3.52 |
| time_zone | 25 | PDT in all 25 |
| store_hours | 22 | median 7 entries |
| has_pharmacy | 25 | true in 25 of 25 |
| services | 25 | median 14 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| zip | string | No | 5-digit US ZIP code, e.g. \ | 90210 | |
| address | string | No | Free-text location -- a city, state, or street address, e.g. \ | Beverly Hills, CA | |
| latitude | number | No | Latitude, used together with longitude when zip and address are not supplied | 34.0901 | |
| longitude | number | No | Longitude, used together with latitude when zip and address are not supplied | -118.4065 | |
| service | string | No | Narrow results to stores carrying one specific service Allowed values: HH_HealthHub_Ind, MC_MinuteClinic_Ind, HS_OakStreetHealth_Ind, IM_Immunization_Ind, RX_OTCH_Ind, IM_Covax_Ind, CL_CovidTest_Ind, RX_24Hours_Ind, RX_DriveThru_Ind, RX_Pharmacy_Ind, RX_DrugDisposal_Ind, RS_24Hours_Ind, PH_Photo_Ind, RS_AcceptsWic_Ind, RS_AcceptsSnap_Ind, GN_UPSAccessPoint_Ind, RS_BOPIS_Ind, GN_YMas_Ind, BT_BeautyIRL_Ind, GN_SmileDirectClub_Ind. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/cvs/store-locator?service=HH_HealthHub_Ind" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"total_count": 5,
"stores": [
{
"store_id": "9767",
"address_line1": "9045 WILSHIRE BOULEVARD",
"city": "BEVERLY HILLS",
"state": "CA",
"zip": "90211",
"phone": "3102735252",
"fax": "3102736289",
"latitude": 34.06741,
"longitude": -118.38934,
"distance_miles": 1.12,
"time_zone": "PDT",
"store_hours": [
{
"weekday": "MON",
"open_time": "08:00 AM",
"close_time": "11:00 PM"
}
],
"has_pharmacy": true,
"services": [
"RX_Pharmacy_Ind",
"PH_Photo_Ind",
"atmInd",
"RS_BOPIS_Ind"
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/cvs.storesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | cvs.StoresResponse | No | ||||
| data.stores | array | No | ||||
| data.stores[].address_line1 | string | No | 9045 WILSHIRE BOULEVARD | |||
| data.stores[].city | string | No | BEVERLY HILLS | |||
| data.stores[].distance_miles | number | No | 1.12 | |||
| data.stores[].fax | string | No | 3102736289 | |||
| data.stores[].has_pharmacy | boolean | No | HasPharmacy reflects only whether this location has a pharmacy counter -- a fact-of-existence flag, not pharmacy hours, phone, or any prescription-specific data. See the package doc comment. | |||
| data.stores[].latitude | number | No | 34.06741 | |||
| data.stores[].longitude | number | No | -118.38934 | |||
| data.stores[].phone | string | No | 3102735252 | |||
| data.stores[].services | array | No | Services is the raw list of upstream service-indicator codes for this store (e.g. "PH_Photo_Ind", "atmInd", "RS_BOPIS_Ind"), passed through as-is rather than translated to friendly names. | |||
| data.stores[].state | string | No | CA | |||
| data.stores[].store_hours | array | No | StoreHours is the retail (front-of-store) weekly schedule only. | |||
| data.stores[].store_hours[].close_time | string | No | 11:00 PM | |||
| data.stores[].store_hours[].open_time | string | No | 08:00 AM | |||
| data.stores[].store_hours[].weekday | string | No | MON | |||
| data.stores[].store_id | string | No | 9767 | |||
| data.stores[].time_zone | string | No | PDT | |||
| data.stores[].zip | string | No | 90211 | |||
| data.total_count | integer | No | 5 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/cvs/store-locator?service=HH_HealthHub_Ind" \
-H "x-api-key: $CRAWLORA_API_KEY"