How we rank prices

The rules behind every answer. We check each one automatically every time we update EveryCard Rx.

Last update November 8, 2026: every rule passed.

  1. We rank by what you pay

    Every option is ordered by its total cost to you: the price, plus shipping and any membership you'd have to buy. The same question always gets the same order.

    Checked on every update: passing

    The checks behind this rule (technical)
    • effectiveCost adds shipping
    • effectiveCost folds in a membership the user lacks, over the quote's days supply
    • rankQuotes orders by effective cost and drops stale and ineligible quotes
    • rankQuotes is deterministic regardless of input order (property)
    • priceDrug merges providers and ranks across them
  2. Nobody pays to move up

    We may earn a fee when our savings card is used. That fee never changes the order, not even on a tie: options that cost the same are listed nearest pharmacy first.

    Checked on every update: passing

    The checks behind this rule (technical)
    • rankQuotes never lets paysUs win an exact tie: the nearer pharmacy goes first
    • rankQuotes breaks a tie with no distance by provider, never by paysUs
    • rankQuotes never lets paysUs change the order at all, ties included (property)
  3. We never make up a price

    If a source doesn't answer, we name it as unavailable and show the rest. A medicine a source doesn't carry gets no price from it, not a guess.

    Checked on every update: passing

    The checks behind this rule (technical)
    • optimizeList reports drugs with no options as missing instead of guessing
    • priceDrug names a failing provider and shows the rest, without inventing a price
    • priceDrug drops a provider that's slower than the timeout and aborts it
    • Cost Plus matching (real recorded API responses) returns nothing for a drug Cost Plus doesn't carry
    • Cost Plus matching (real recorded API responses) falls back to the dated snapshot when the API fails
    • demo networks has no price for a product without NADAC data
  4. Old prices drop out

    Each price carries when it was checked. Expired prices and ended offers are removed before ranking.

    Checked on every update: passing

    The checks behind this rule (technical)
    • widget design tokens drops the old widget-only palette, so nothing styles from a stale hex
    • isFresh is fresh one second before expiry and stale exactly at expiry
    • isFresh treats an unparseable timestamp as stale, never as live
    • rankQuotes orders by effective cost and drops stale and ineligible quotes
    • rankQuotes drops a manufacturer offer after its end date
    • catalog integrity has no curated record older than the review window
    • catalog integrity flags manufacturer offers whose end date has passed
  5. We ask instead of guessing your medicine

    If a strength or form is unclear, we ask. Immediate-release and extended-release versions are never swapped.

    Checked on every update: passing

    The checks behind this rule (technical)
    • /v1/price returns 409 with the candidates instead of guessing a strength
    • the plan check from words asks which strength before pricing anything, instead of guessing
    • find_best_price asks which strength for a brand sold in several (Januvia 25, 50 and 100 mg)
    • find_best_price asks which strength instead of guessing
    • resolveDrug asks for the strength instead of guessing
    • resolveDrug offers the real strengths when a typed strength doesn't exist
    • resolveDrug never turns plain metformin into the extended-release version, or the reverse
    • Cost Plus matching (real recorded API responses) keeps immediate-release and extended-release metformin apart
    • Cost Plus matching (real recorded API responses) keeps IR and ER apart without an RxNorm ID, whatever order the API returns
  6. Only options your coverage allows

    Drug-maker copay cards are shown only to people with job or marketplace insurance, because federal rules bar them with Medicare, Medicaid and VA coverage. Programs that exclude your state or coverage are left out.

    Checked on every update: passing

    The checks behind this rule (technical)
    • transparency publishes every curated offer with its sources, and copay cards as commercial only
    • find_copay_card tells Medicare plainly that copay cards can't be used
    • state exclusions reach the price engine drops a copay card in a state its terms exclude, and keeps it elsewhere
    • foundation screening keeps Medicare-access funds for Medicare, and Medicare out of funds that exclude it
    • find_best_price never shows Medicare users a copay card or the Eliquis direct offer (Part D excluded)
    • assistance screening: coverage and exclusions excludes coverage the program excludes, and allows 'only if' for a drug the plan doesn't cover
    • isEligible shows manufacturer copay cards to commercial coverage only
    • isEligible hides membership plans (RxPass) from Medicaid
    • isEligible applies data-driven exclusions on top of the kind rule
  7. Savings are stated honestly

    A saving is the usual price minus what you'd pay. There's no saving claim when your insurance or a copay card is the best route, no yearly figure for a short course, and an introductory price only counts until it ends.

    Checked on every update: passing

    The checks behind this rule (technical)
    • check_savings_programs names the drug maker's program lists Lilly Cares for Trulicity with the group 1 limit, in place of the generic line
    • check_savings_programs names the drug maker's program says unlikely one dollar over the limit
    • check_savings_programs names the drug maker's program puts Extra Help first for Medicare under 150% of the poverty level
    • check_savings_programs names the drug maker's program never logs the drug or the income
    • state programs lists the state's HIV program in the savings screen when an HIV medicine is named
    • Extra Help screen uses the couple's limits when married, and checks savings
    • pages promise a savings card only once one is real How it works: no counter card until a card exists, and it says card prices aren't in yet
    • pages promise a savings card only once one is real Help: the card-trouble answer appears only with a real card
    • yearly savings counts a refill of 14 days or more over a year
    • yearly savings gives a one-off course (13 days or less) no yearly figure, but still the saving on this fill
    • yearly savings gives no yearly figure when the days' supply is only a default count
    • MCP server: tool text matches what the tools do offers no savings card and never mentions one when no real card exists
    • MCP server: tool text matches what the tools do offers the card tool and names savings cards when estimates are on (demo build)
    • MCP server: every answer carries the disclosure check_savings_programs ends with the not-medical-advice line
    • find_best_price computes savings as regular minus what you pay, and yearly as 12 fills for 30 days
    • find_best_price makes no savings claim when the best option is a copay card (insured people don't pay cash list)
    • find_best_price only annualizes an intro price for the fills left before it ends
    • compare_med_list measures savings from the same usual prices whichever option wins, so Prime can't move the baseline
    • check_savings_programs flags Extra Help and Medicare Savings Programs for a low-income Medicare user
    • check_savings_programs gives the assistant the limits it screened against, so it never has to recall them
    • check_savings_programs asks for income when it isn't given
    • get_savings_card returns the tenant's cards, with the ACO's own groups for the ACO tenant
    • widget design tokens sets the savings figure in the display face with tabular numbers, not the mono
    • buildPartnerReport totals members, fills and savings for the tenant's groups in the period only
    • buildPartnerReport never counts negative savings when a card price beat nothing
    • buildPartnerReport buckets savings by month in order, including empty months
    • buildPartnerReport projects a yearly figure from the period's daily savings rate
  8. When your plan is cheaper, we tell you

    If your copay or your Medicare plan's estimated cost beats every cash price, we say keep using your plan, and we warn that cash fills don't count toward Medicare's yearly cap.

    Checked on every update: passing

    The checks behind this rule (technical)
    • find_best_price with a Medicare plan ranks the plan's cost beside cash prices and warns that cash doesn't count toward the cap
    • find_best_price puts the user's insurance first when their copay is the cheapest
    • adviseOn says keep using insurance when the copay equals the best cash price (boundary)
    • adviseOn says cash wins when the copay is one cent more than the best cash price
    • coverageCaveats warns Medicare users that cash skips the Part D cap
  9. Medicare estimates follow your plan's own files

    Plan prices come from Medicare's own plan files and its 2026 and 2027 rules: the deductible, your plan's tier and copay or coinsurance, the $35 insulin limit and the yearly cap.

    Checked on every update: passing

    The checks behind this rule (technical)
    • finding a plan reads the plan ID on a member card in its usual forms
    • finding a plan finds by ID or by name words within a state
    • finding a plan logs nothing about the plan asked for
    • a fill under the plan is the plan's full price inside the deductible ($10 a tablet x 60 = $600, under $615)
    • a fill under the plan straddles the deductible with $100 already paid: $515 then 25% of the other $85
    • a fill under the plan is 25% once the deductible is met, and $0 once the cap is reached
    • a fill under the plan says when the medicine isn't on the formulary
    • a fill under the plan caps a generic's copay at its own cost ($0 preferred, $3 at others because 60 tablets cost $3)
    • a fill under the plan says it assumed nothing spent yet when it wasn't told
    • Part D parameters pins the 2026 and 2027 deductible and cap from the CMS rate announcements
    • cost-sharing never charges a copay above the drug's own cost
    • cost-sharing clamps coinsurance to its minimum and maximum
    • one fill, phase by phase pays the full plan price inside the deductible, exactly up to what's left
    • one fill, phase by phase splits a fill that straddles the deductible: the rest of the deductible plus the plan's share of the remainder
    • one fill, phase by phase skips the deductible for tiers it doesn't apply to
    • one fill, phase by phase stops at the yearly cap: one cent left means one cent paid, none left means $0
    • one fill, phase by phase flags the fill that reaches the cap, and not the one before it
    • one fill, phase by phase uses the 2027 cap in 2027
    • one fill, phase by phase charges insulin no deductible and at most $35 a month, $105 for 90 days
    • one fill, phase by phase uses Extra Help copays, never more than the drug costs
    • one fill, phase by phase says plainly when the plan doesn't cover the drug
  10. Help programs are screened by their own rules

    Income limits come from each program's current form, checked against the tables printed on it. Income exactly at a limit counts as within it; a dollar over does not. We say "may qualify", never "you qualify": the program decides.

    Checked on every update: passing

    The checks behind this rule (technical)
    • check_savings_programs names the drug maker's program says unlikely one dollar over the limit
    • check_savings_programs names the drug maker's program puts Extra Help first for Medicare under 150% of the poverty level
    • foundation screening counts income at the limit as within it and one dollar over as over
    • assistance screening: income counts income exactly at the limit as within it, and one dollar over as over
    • Extra Help first puts Extra Help first for Medicare at 150% of the poverty level, not one dollar above
    • Extra Help first says the program requires the Extra Help decision when its rules do
    • povertyLine adds the per-person step for each extra person
    • screenPrograms counts income exactly at the limit as within it
    • screenPrograms says unlikely one cent over the limit
    • screenPrograms computes percent-of-poverty limits from the guideline
    • assistance programs against their own printed tables reproduces the 2026 limits on the Lilly Cares application (CMAT-02998 12/2025)
    • assistance programs against their own printed tables puts Trulicity in group 1 (300%), insulins in group 2 (400%) and Verzenio in group 4 (500%)
    • assistance programs against their own printed tables reproduces Merck's published $63,840 for one person
    • assistance programs against their own printed tables gives every program a source, a review date and an official phone number
  11. Your signature stays yours

    When we help fill a drug maker's application, your answers stay in your browser. We never fill a signature, a signature date, a Social Security number or a consent box.

    Checked on every update: passing

    The checks behind this rule (technical)
    • every form definition fits its PDF lilly-cares: never fills a signature, signature date, SSN or consent
    • every form definition fits its PDF sanofi-patient-connection: never fills a signature, signature date, SSN or consent
    • every form definition fits its PDF merck-pap: never fills a signature, signature date, SSN or consent
    • answers travel in the fragment only reads known keys from a fragment and drops anything else
    • answers travel in the fragment only reads dates written either way and refuses nonsense
    • answers travel in the fragment only has a form definition for every program that names one
    • prepare_assistance_application never lists a Social Security number among the questions, though Sanofi's form has the box
    • /apply page prints the income table, the fax number and leaves no personal data in the HTML
  12. We don't record your health details

    Our logs never hold the medicine you asked about, your full ZIP code, your income or a diagnosis.

    Checked on every update: passing

    The checks behind this rule (technical)
    • /v1/price never logs the drug name or the full ZIP
    • /v1/foundations never logs the diagnosis
    • check_savings_programs names the drug maker's program never logs the drug or the income
    • find_foundation_help never logs the diagnosis
    • finding a plan logs nothing about the plan asked for
    • the plan check from words finds their plan from the card's ID and never logs the medicine, ZIP or plan
    • privacy never logs the drug name, full ZIP or income
    • privacy drops fields that aren't allow-listed and strings that look like free text
  13. Every price shows where it came from

    Each price names its source and when it was checked, with a link. Simulated demo prices are labeled and switched off in production.

    Checked on every update: passing

    The checks behind this rule (technical)
    • /v1/price answers a key with ranked options, each with its source, and none of the widget's fields
    • transparency says plainly when card prices are demo, and when Cost Plus is a snapshot
    • /v1/foundations matches a diagnosis, says when each status was read, and lists the state's programs
    • copay database every program has a source, an enrollment link and a known kind
    • trust on every price names each price's source and check time, gives the best a switch plan, and says where corrections go
    • find_best_price uses no demo data in production mode
    • priceDrug refuses demo quotes unless demo data is allowed
    • assistance programs against their own printed tables gives every program a source, a review date and an official phone number
    • demo networks labels every quote as demo and never prices above the regular price
    • end to end through the core drops every demo quote in production mode
  14. Health-network reports can't single anyone out

    Reports for partners count savings by group and hide any group smaller than 11 people.

    Checked on every update: passing

    The checks behind this rule (technical)
    • buildPartnerReport suppresses any drug class with fewer than 11 members (boundary)
    • buildPartnerReport refuses to report at all below the minimum audience

402 of 402 automated checks passed on version 46a082a. See a rule we break? Tell us, and we'll add a check for it.