Download only what the manifest lists.
The bulk manifest is the public delivery contract. It lists the filename, media type, columns, source, and URL for each file that is currently available. Do not construct bulk URLs from a source identifier alone.
The source scheduler contains 48 configured source jobs. Configuration does not mean a source is loaded, fresh, or downloadable. The live manifest is the authoritative list of downloads available at request time.
Open the manifest → · Browse the data catalog → · Citation guidance →
CMS Provider of Services — Facility Directory
CCN-keyed directory of Medicare-certified facilities (name, address, facility type, chain). The CCN identity backbone for every Care Compare join. Streamed live as CSV from the current snapshot.
- Source ID
cms-pos-facilities- Filename
cms-pos-facilities.csv.gz- Media type
application/gzip- Delivery
- Current live query; it is not a date-pinned archive.
- Limitation
- Live query of Fonteum's current table; generated at delivery time, not an immutable upstream source-file snapshot or asserted upstream capture date.
- License
US-Government-Works- Upstream source
- CMS Provider of Services (POS) File
Columns are emitted in this order.
The response is gzip-compressed CSV. Its header is checked against this list by the bulk download contract test before release.
ccn,facility_name,provider_type,address,city,state,zip,county,phone,npi,chain_nameRead the manifest, then decompress the file.
# Read the manifest first. It is the complete list of published files.
curl -s https://fonteum.com/api/v1/bulk/manifest.json | jq '.sources[] | {source_id, filename, format, columns, latest_snapshot_url}'
# Download the current CMS Provider of Services facility directory.
curl --fail --location --output cms-pos-facilities.csv.gz https://fonteum.com/api/v1/bulk/cms-pos-facilities/latest.csv.gz
# Inspect the CSV header after decompression.
gzip -cd cms-pos-facilities.csv.gz | head -n 1import csv
import gzip
import io
import urllib.request
url = "https://fonteum.com/api/v1/bulk/cms-pos-facilities/latest.csv.gz"
with urllib.request.urlopen(url) as response:
assert response.headers["Content-Type"].startswith("application/gzip")
raw = response.read()
with gzip.GzipFile(fileobj=io.BytesIO(raw), mode="rb") as archive:
reader = csv.reader(io.TextIOWrapper(archive, encoding="utf-8"))
header = next(reader)
first_row = next(reader, None)
expected = ["ccn","facility_name","provider_type","address","city","state","zip","county","phone","npi","chain_name"]
assert header == expected, (header, expected)
print(f"{len(header)} columns; first data row present: {first_row is not None}")What this endpoint returns today.
Content-Type: application/gzipContent-Disposition: attachment; filename="cms-pos-facilities.csv.gz"X-Fonteum-Source: cms-pos-facilitiesX-Fonteum-Source-Url: https://data.cms.gov/provider-characteristics/hospitals-and-other-facilities/provider-of-services-file-hospital-non-hospital-facilitiesX-Fonteum-Generated-At: ISO-8601 timestampX-Fonteum-Limitation: live-query qualificationX-Fonteum-License: US-Government-WorksX-Fonteum-Delivery: live-queryX-Fonteum-Cite: https://fonteum.com/citations
Because this is a live query, it does not promise a fixed snapshot date, SHA-256 value, or immutable dated-download URL.
Raw captures are not CSV archives.
Some earlier generic /api/v1/bulk/<source>/latest.csv.gz links pointed at raw upstream captures. Those links are intentionally withdrawn and return 410 bulk_format_withdrawn instead of mislabeled content. A source returns to the manifest only after a source-specific delivery path provides the advertised format and schema.