# Methodology

Filtered the registered chain-location asset to `Vetcor` (416 rows).

**Source class:** careers/office listing: <https://careers.vetcor.com/api/jobs?page=1&limit=100&internal=false>. This careers/office listing lists practices with recent postings; coverage of practices without postings is unknown. The class comes from the URL the rows were read from (`locator_url_resolved`, else `source_url`).

**Whole crawl:** 23 chains from public location finders (including 1 from a host retailer's store locator) and 4 chains from careers/office listings (1,857 of 7,894 rows).

**Groupings:** state, city, contact, host and overlap values are deterministic groupings of the rows. A website counts as a chain website only when it differs from the row's source and locator URL and is not a job or careers URL; otherwise the page shows it as the job listing.

**Overlap:** City key: Unicode-fold to ASCII and lower-case; read '&' as 'and'; treat a word 'st', 'st.' or 'saint' as 'saint', 'ft'/'ft.' as 'fort' and 'mt'/'mt.' as 'mount'; then drop every character that is not a letter or digit. Two rows share a city when their city keys and two-letter states are equal; rows without a city are left out.

**Registry ratios:** exact matches only (normalized name plus city, or normalized street plus five-digit ZIP), so match counts are a lower bound. Ratio: `chain rows / registry rows * 100`.

**Cleaning:** Doubled apostrophes carried over from SQL-style escaping ('') become one apostrophe. A city value that begins with a street fragment ending in Rd, Road, Ave, Avenue, Blvd, Dr, Drive, Hwy, Pkwy or Ln moves that fragment to the street field. A street value that ends with ', <city>, <state> <ZIP>' (the row's own city, state and ZIP) drops that repeated suffix. Cells changed for this chain: 0 (listed in provenance.json).

**Excluded rows:** A row that repeats an earlier row of the same chain with the same normalized name, street and five-digit ZIP is a duplicate; empty city or phone values of the kept row are filled from the repeat. In a careers/office listing, a row named only with a state code (optionally ' - region'), a row whose name contains 'Corporate', and a row whose name ends in 'Remote' are offices or remote-role listings, not practices. A row whose location name ends with the chain's own 'CLOSED' label is a closed location. Excluded rows are left out of every count, share, directory and download, and are listed in excluded-rows.csv and each chain's provenance.json. Rows excluded for this chain: 1 (Of the 417 rows in the careers/office listing, 1 row ("Vetcor Corporate - Norwell" (MA)) is a corporate office, not a practice. It is left out of the counts and the directory and listed in the hub's excluded-rows file.).

**City-and-state counts** use the city key above.

**Shares:** chain listed locations ÷ 7,894 listed chain locations × 100 (the crawl has 7,965 rows; 71 are excluded (5 duplicate GoodVets rows, 10 office or remote-role rows in careers feeds, 56 rows labelled closed by the chain), leaving 7,894 listed chain locations; the veterinary chain locations report counts 7,961, removing 4 GoodVets repeats only).

**Change log:** Not comparable: careers-feed footprint. The crawl of 2 Oct 2026 reads open job postings, whose additions and removals are not openings or closures, so no change since 28 Sep 2026 is reported.

**Owner and review:** Owner: Rome (Vettica). Review trigger: the next quarterly recrawl (due by 2026-12-28) or a correction report; figures are re-derived from the new crawl.

National HTML shows at most 10 directory rows; state pages and files contain all rows.

## Technology scan

This page lists no chain website host, so no location website was scanned.
