The Open Payments data dictionary, in plain English
What each field in the raw federal dataset actually means.
If you want to work with the raw CMS data, these are the fields that matter and what they really contain.
Identity
covered_recipient_profile_id — CMS’s internal key for a person. This, not the name, is the correct join key. DocDollars uses it for every payment query, which is why profiles here load in seconds rather than half a minute.
covered_recipient_npi — the National Provider Identifier. Present for most but not all recipients.
covered_recipient_type — physician, non-physician practitioner, or teaching hospital.
Money
total_amount_of_payment_usdollars — the value of this record, not a running total.
number_of_payments_included_in_total_amount — one record can bundle several identical small payments.
form_of_payment_or_transfer_of_value — cash, in-kind items, stock, dividends.
nature_of_payment_or_transfer_of_value — the 19-way category. Explained here.
Payer
applicable_manufacturer_or_applicable_gpo_making_payment_name — the paying entity. Note that corporate subsidiaries report under their own names, so one parent company can appear several times.
submitting_applicable_manufacturer_or_applicable_gpo_name — who filed it, which is often the parent.
Product
name_of_drug_or_biological_or_device_or_medical_supply_1–5 — up to five products per record.
product_category_or_therapeutic_area_1–5 — the therapeutic area.
related_product_indicator — whether the payment was tied to a specific product at all.
Caveats
dispute_status_for_publication — the physician contests this record.
delay_in_publication_indicator — publication deferred, usually for research on an unapproved product.
contextual_information — free text from the reporting company. Frequently empty, occasionally revealing.
record_id — unique per row per program year. Not stable across years.
Querying it yourself
CMS exposes a public API at openpaymentsdata.cms.gov/api/1/datastore/query with no key and open CORS. Post a JSON body with a resources array and conditions. One warning from experience: filtering the 15-million-row payment tables by name takes roughly 26 seconds and is not cached. Resolve the name against the profile index first, then query by profile ID — that path returns in about two seconds.