Access and contract
Use only the three read-only GoodRx price routes listed in
reference/endpoints.md. The optional bundled helper
is the only shell command this skill asks to run; its allowlist rejects every
other route and it accepts GET requests only. When invoked, it reads
CRAWLORA_API_KEY and sends it as an x-api-key header over HTTPS to
api.crawlora.net; it reads TMPDIR only to choose a temporary config
location. The key is not sent to GoodRx. The helper writes a mode-600 curl
config under TMPDIR and removes it when the command exits. It does not
enumerate environment variables or files, install software, or run with
elevated privileges. Run it only for a requested price comparison; successful
requests can consume credits. Check application code as well as HTTP status,
stop on authentication errors, back off on 429, and retry a transient
upstream failure once. Preserve source URLs, identifiers, and collection times.
Compare posted pharmacy prices for the user's specified medication and package. A price comparison does not select a medication, dose, or clinical substitute.
Resolve the exact priced product
- Use the drug directory's initial-letter route only to resolve a slug for the
medication the user named, or use a slug supplied by a verified GoodRx
source. Read
goodrx_drug_optionsbefore using the exact label (brand/generic), form, strength, and package quantity. Valid option values form combinations; do not build an arbitrary cross-product or equate similarly named formulations. - Keep the medication and product choices fixed to the user's request. The
dosageAPI parameter is a GoodRx product-option identifier; it is not a dosing instruction or recommendation. Do not select a medication, dose, formulation, or substitute for the user. - Query prices with those resolved choices and explicit US location. Coordinate queries require latitude and longitude together; retain state/ZIP evidence rather than inventing coordinates from an approximate city. Missing choices can select source defaults, so inspect and report the resolved product before treating two quoted prices as comparable.
- Record quantity, units, brand/generic label, strength, form, location, pharmacy, coupon or other eligibility conditions, source URL, and timestamp.
scripts/crawlora.sh /goodrx/drugs letter=a
# Select the requested drug slug, then discover its exact options:
# scripts/crawlora.sh /goodrx/drug-options slug="$DRUG_SLUG"
# scripts/crawlora.sh /goodrx/drug-prices slug="$DRUG_SLUG" form="$FORM" dosage="$DOSAGE" quantity="$QUANTITY" zip_code="$ZIP"
Compare costs and limitations
Keep cash/list prices, discounted coupon prices, membership prices, and insurance copays separate; do not assume a coupon combines with insurance. Calculate unit cost only for the same unit and formulation, and show the package total alongside it. A snapshot is not guaranteed pharmacy stock, a final checkout price, or an insurer's benefit determination. Missing prices remain unknown; do not substitute zero or assume a drug is unavailable. Return a comparable pharmacy-price table, resolved-option ledger, source/time, and eligibility questions to confirm. Price alone does not establish clinical suitability. Questions about changing medicines, doses, or clinical suitability require a qualified clinician/pharmacist. Do not redeem a coupon, buy medication, or transmit medical or prescription data from this research.