GoodRx Scraper for Drug Prices, Coupons and Pharmacy Data

A GoodRx price is never just a drug. It is one strength, one pack size and one pharmacy chain at one point on the map, and we pull that grid the way the site itself resolves it.

GoodRx Scraper
Solutions

Scoping a GoodRx scraping project: choose the cells, then the depth

A GoodRx scraping project starts with two answers. Which cells do you want - a watchlist of drug ids at fixed strengths and pack sizes, a therapeutic class, a condition roster, or the whole A to Z directory - and against which points, since one ZIP code describes one metro area and a national panel is a grid of points you nominate and we hold fixed. Depth is the second choice: the cheapest row per chain, every option per chain with its coupon and mail-order variants, or the reference layer on top.

goodrx.com is closed to automated clients at the edge and unavailable outside the United States, so anti-bot handling, proxy rotation and CAPTCHA solving are part of the service rather than a surcharge. We extract GoodRx prices only from pages an ordinary visitor is shown, at polite rates. Delivery is CSV, JSON, XLSX, a database drop or a GoodRx API of your own, with the drug id, quantity, chain and location on every row.

What one GoodRx price row actually contains

A GoodRx price feed is built from one repeating object: an offer to fill one prescription at one seller. Each offer carries an id that stops being opaque once decoded, because it unpacks into a version marker, the numeric drug id, the pharmacy chain id, the quantity and the coordinates the search ran against. That single string is why GoodRx data can be joined and diffed at all: two runs on the same strength, pack size and point produce the same key.

Seller and money. The seller is either a pharmacy chain with its own numeric id, display name and logo file, or a mail-order pharmacy carried as a separate object with a prose description and a free-shipping flag. Every amount arrives twice, as a minor-unit integer with a currency and a precision and as the formatted string the page prints. Beside the offer price sit the retail price that chain would charge without a code, the lowest price across the options, and a default option and a cheapest option that need not be the same row.

Coupon, membership and promotion. Options are typed: a coupon option, a home delivery option and an upsell option pointing at a subscription. A coupon carries the four values a pharmacist keys to adjudicate it - a BIN, a PCN, a group code and a member id - plus help text and separate phone lines for customer and pharmacist. Coupon money can be banded by days supply: one price for a short fill, another above the threshold. Promotions ride on the option as a campaign name, a campaign type, a discount amount, the base coupon price and the percent off that base. Rewards appear as an activity definition with a point total and its cash value. Price rows are labelled in the site's own words: with membership, no coupon necessary, special offers, pay online, buy online, free shipping.

Drug identity. Above the offers sits the prescription: a label with a name, a slug and a generic or brand type; a form with singular and plural names; a dosage; and a quantity. Every strength is its own drug instance with its own id and product image, so two strengths of one molecule are two keys. The selector publishes the legal combinations - which forms exist for the label, which strengths for the form, which pack sizes for the strength - with a default at each level and a custom quantity box that takes whole numbers only.

What one GoodRx price row actually contains
Gold, pharmacy store pages and the drug reference layer on goodrx.com

Gold, pharmacy store pages and the drug reference layer on goodrx.com

Gold is the subscription tier, and it changes the grid rather than the catalog. It is billed monthly or yearly, as an individual plan or a family plan that adds up to five more members including pets, and it opens with a free trial. It is honored at a smaller network than the free coupon: the site's own count in September 2026 puts the free network at about 70,000 pharmacy locations and the Gold network at about 38,000. On a public price page Gold appears as an upsell row carrying the pharmacy it applies to, the member price and the saving in dollars and percent.

The pharmacy tree is a dataset in its own right. A chain hub lists the states and cities that chain trades in; a store page is addressed by chain, state, city, street and the ten-digit national provider identifier, and prints the address, phone and fax lines, weekday and weekend counter hours, service notes such as compounding, nearby pharmacies with their distance in miles, and a table of popular prescriptions with retail price, lowest price and saving.

The reference layer is where GoodRx data stops being money and turns into pharmacology. A drug page carries a facts block - common brands, drug class, controlled substance classification, generic status, availability - then side effects split into common, less common and serious with reported incidence percentages, warnings with their risk factors, contraindications, interactions ranked by severity, adult and pediatric dosing, a dosage table priced per unit, and pill images described by color, shape and imprint code.

Inside goodrx.com: drug slugs, prescription parameters and the pharmacy grid

GoodRx is a United States prescription price comparison site. It publishes what a named medication costs at named pharmacy chains near a given point and issues a discount code the pharmacy keys at the counter. It is not insurance and not a pharmacy: the numbers are cash prices, not co-pays, and cannot be combined with insurance, Medicare or Medicaid. The storefront serves the United States and its territories only and runs as a single English edition - one canonical address per drug, no language alternates - so a GoodRx scraper never has to reconcile regional catalogs.

Addressing is short and stable. A price page is the drug slug at the root: /atorvastatin, /ozempic, /wegovy. The prescription lives in query parameters rather than the path - a label for the brand or generic name, a form, a dosage, a quantity and a numeric drug id - so one address renders a different grid for every combination. Reference pages hang off the same slug: /what-is, /dosage, a side effects page, a Medicare coverage page. Browse trees sit beside them: /drugs with a page per letter, /classes, /conditions, /compare for head-to-head pages written as one drug vs another, and /pharmacy-near-me for the store network.

The sitemap index keeps the layers apart: separate files for drug prices, drug information, pet drug information, Medicare pages, conditions, condition-to-drug pairings, drug classes, drug comparisons, the A to Z directory, answers and subscriptions, plus two files for the pharmacy tree alone. robots.txt closes what is personal or transactional - the coupon endpoint, the discount card flow, price alerts, the saved prescription list, internal search, widget and mobile endpoints - and closes query strings carrying an insurance flag, a sponsorship flag or a pharmacy id.

Get a Quote
dev_w
25

Developers

customers
500+

Customers worldwide

pages
1 500 000 000+

Pages extracted

stime
15000+

Hours saved for our clients

Plans

Airplane

€199 / one-time

setup fee - included

Data limits100,000
Frequencyone-time
Run timeup to 5 days
Data storing7 days

Helicopter

€169 / mo

setup fee €499

Data limits250,000
Frequencymonthly
Run timeup to 5 days
Data storing14 days

Glasses

€229 / mo

setup fee €499

Data limits1,000,000
Frequencyweekly
Run timeup to 5 days
Data storing30 days

DNA

€549 / mo

setup fee €799

Data limits3,000,000
Frequency3 times daily
Run timesame day
Data storing90 days

Why a GoodRx price is a triple: drug, pack size and pharmacy

One habit separates a usable GoodRx price feed from a decorative one: never quote a drug, quote a cell. The number is a function of three axes at once - which molecule at which strength and form, how many units in the fill, and which pharmacy chain at which point on the map - and moving any one of them moves the money. Ninety tablets of a lower strength can cost less than thirty of a higher one, and the same fill can differ by a factor of two between two chains on the same street.

Location is not a filter here, it is part of the key. The page resolves a point, prints it back as a city and state, and draws its offer set from the chains inside a sixty-mile radius of that point. Change the point and the roster changes with it: the national chains stay, the grocery and regional banners rotate out, and the ranking rewrites itself. Scrape GoodRx against one default location and you have described one metro area and misstated every other.

Money moves on its own clock too. Cash prices are assembled from published price lists, purchase and claims records and data supplied by pharmacies, while coupon prices come out of contracts between a pharmacy or purchasing group and a pharmacy benefit manager - and the site states outright that those prices move daily, weekly or monthly. Each price block prints the date its coupon prices were last refreshed. GoodRx price monitoring is therefore a time series or it is nothing, and every row has to carry the drug id, the quantity, the chain and the point it was resolved against.

Our Blog

Reads Our Latest News & Blog

Learn how to use web scraping to solve data problems for your organization

How Artificial Intelligence Is Used In Web Scraping

How Artificial Intelligence Is Used In Web Scraping

Leveraging advances in technology, the AI-powered web scraper has skyrocketed in demand and is helping to expand capabilities by automating tedious daily tasks and speeding up data collection from thousands of websites several times over.

What is Web Scraping and What is it Used For?

What is Web Scraping and What is it Used For?

Web scraping is a method of obtaining web data by extracting it from pages of web resources with the help of a program, that is, in automatic mode. It is used to syntactically convert web pages into more usable forms.

Web Scraping for Machine Learning

Web Scraping for Machine Learning

If you specialize in machine learning, you need to feed large amounts of data to the algorithms. Web scraping is the easiest and the most efficient method of collecting the data from all over the Internet.

scrapeit logo

Who builds and runs your GoodRx drug price feed

ScrapeIt takes the whole job as a managed service. We design the crawler, run it to your schedule, watch it, and repair it when the site changes shape. Your side receives files or an endpoint and keeps no scraping engineers of its own.

We are not affiliated with GoodRx. We read robots.txt before planning a crawl and stay out of the paths it closes, and nothing behind a login is touched. We collect public prices and published drug reference material only: no patients, no prescriptions, no insurance records, no personal or medical data of any kind.

FAQ

Does GoodRx have a public API for drug prices?

There is an API, but it is gated rather than open. GoodRx documents a small developer catalog - a fair price service, a low price service, a three-way price comparison, a drug info service that lists the forms and dosages a drug has, and a name lookup that maps what a user typed to the spelling GoodRx uses - plus embeddable widgets. Access is by application and subject to branding rules, and the endpoints return nothing without an approved key. None of them exposes the full pharmacy-by-pharmacy grid, the coupon adjudication values or Gold member pricing. We build a GoodRx API on what the site publishes to any visitor and hand it over as a documented endpoint with a stable schema.

Can you pull GoodRx prices for specific ZIP codes and pharmacy chains?

Yes, and that is the normal way we run it. You nominate the points - a single ZIP code, a metro panel or a national spread - and every row carries the location it was resolved against beside the chain, the coupon price, the retail price and the saving. Chains can be filtered afterwards, but they cannot be requested in advance: the roster is whatever the site returns for that point, so a national comparison needs enough points to reach the regional and grocery banners. We hold your panel fixed so a series stays comparable week over week.

Which GoodRx fields do you extract, and how do I join them to my own data?

The identifiers first - drug id, drug slug, label name with its generic or brand flag, form, dosage, quantity and the pharmacy chain id - then the coupon price, the retail price, the saving in dollars and percent, the option type, promotion fields, days-supply bands, mail-order and free-shipping flags, the Gold upsell price where the page shows one, and the reference block. Join on drug id plus quantity for a clean time series, on chain id for retailer comparison, and on the drug slug when you need a key that survives a title rewrite.

How often do GoodRx prices change, and in what formats can we receive them?

The site says its prices fluctuate daily, weekly or monthly and that pharmacy prices are tracked every day, and each price block prints when its coupon prices were last refreshed. Cadence follows the question: daily or intraday for a watchlist under active negotiation, weekly for a category or class sweep, monthly for full directory and reference audits, quarterly for the pharmacy network, which moves slowly. Delivery is CSV, JSON, XLSX, a database drop or an endpoint we host, with a fixed schema and a run timestamp so two runs can be diffed without guesswork.

Is scraping GoodRx legal, and do you collect patient or health data?

We collect only pages an ordinary visitor is shown, at polite request rates, and we read robots.txt first and stay out of the paths it closes. Nothing behind a login is touched, so account history and saved prescription lists are out of scope. No patient records, prescriptions, insurance details or any other health information about a person is ever collected. The GoodRx terms of use prohibit automated access and commercial reuse of the site, so we make no blanket legal claim: we scope each project with the client and their counsel, and we say no when the answer is no.

How does it Work?

Step 1 - Make a Request

You share your needs, expectations, and desired timeframe. We’ll suggest the best solution based on your request and budget.

Step 2 - Configuring Custom Web Crawlers

Our specialists configure the crawlers and extract a sample dataset for your review before proceeding with the full-scale extraction.

Step 3 - Collect and Deliver

Once you approve the sample, we launch the project and start full data collection. We gather, filter, and structure the data for easy use, delivering it on time in your preferred format.

Step 4 - Maintain and Support

Our team manages ongoing processes, monitors website changes, and supports all data extraction cycles. We can also help integrate data into your systems or create dashboards to simplify analysis.

Request a Quote

Tell us more about you and your project information.
Which sites, which fields, how often. A couple of lines is enough.

We reply within 1 business day. No obligation.

scrapiet

Scrapeit Sp. z o.o.
10/208 Legionowa str., 15-099, Bialystok, Poland
NIP: 5423457175
REGON: 523384582